I found this saves immense time and keeps me on task pretty well.
This is from: - GOOS book https://www.amazon.com/Growing-Object-Oriented-Software-Guid... - https://www.youtube.com/watch?v=nIonZ6-4nuU
https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93prin...
Also, I've found setting up deploy to production as early as possible keeps you focused, prioritized, and eliminates a good bit of anxiety helping you produce better work.
tmux - per project, persistent terminal
shell aliases - stop typing frequently used commands
GTD - some form of productivity process like Getting Things Done, including a prioritized TODO list
hot reload - don't accept slow development cycles
timeboxing - avoid rat holing a day or two away on a low value task
programmer notebook or wiki - document steps or arcane knowledge for the next time
hard coded - unblock yourself for missing data or dependencies
user testing on paper prototypes - save months of throw away code
Any examples of dedicated notebook software?
If you're searching for something plain and simple, keeping a repo of Markdown files on GitHub has worked well for me.
I make one file for each book / article / lecture. The material I cover is mostly about tech or entrepreneurship.
https://github.com/tedmiston/notes
Here are a couple of the most complete pages in it:
- Show Your Work! by Austin Kleon - https://github.com/tedmiston/notes/blob/master/books/Show%20...
- Zero to One by Peter Thiel - https://github.com/tedmiston/notes/blob/master/books/Zero%20...
- Startup School Radio #35: Paul Graham - https://github.com/tedmiston/notes/blob/master/podcasts/Star...
Been writing Markdown files in a git repo, then syncing on Gitlab so I'd have them accessible anywhere, but there's more manual effort involved with writing Markdown (I forget some of the fancier list/bullet formatting) and also defining metadata for future lookups (first few lines of each text file).
If someone made an Electron-based app, this would be great for all the programmers out there.
TODO list / GTD: For the last few years, I've been using altNV, but any notational velocity clone will do. Killer feature is simplicity through full text search as the filename.
Unfortunately, it works only on Mac.
[0]: https://itunes.apple.com/us/app/quiver-programmers-notebook/...
When you are under a lot of pressure to finish something same day, it helps to know all the basics are working by automatically running your tests.
Since I get the distractions out of the way in the morning, I will know what I'm working on throughout the day and not have to change gears unless something urgent comes up.
the trick is to remember, you're commenting for you, because you're the one that's going to forget all this stuff in a few months and have to figure it out at the worst possible time.
sounds a little weird but i always liked commenting my code. it felt like i was bragging to myself about how clever i was.
Comments in a codebase often lie. Someone makes a statement then code changes, making it a lie. A comment that is a lie adds negative value.
I think more than 1 comment per 100 lines of code means you should think more and refactor more and comment less.
2) Carve out the time and space to make 3-5 variations of a unit of work before considering it minimally complete for iterating and building upon.
3) Pay really close attention to feelings of pain and/or drudgery when implementing something. Very often those are signals your design and separation of concerns are wrong, because you're fighting uphill against your problem space.
I've had multiple instances of talking to a coworker about a topic, and halfway through the topic I realize what I was going for and cut it off, saying, "I got it! Thanks for being my rubber duck."
(I once read about problem-solving therapy that is used in cognitive-behavioral approach and this is almost the same pattern. It sounds obvious, but few people really follow the steps in practice. It's also similar to brainstorming.)
In many cases I come up with more variants that I initially had in mind and quite often I end up choosing the variant that didn't appear promising on the first look.
Over the years I've developed a pretty good sense for when I've gone too far down a dead end. Some people try and dig their way out, I prefer to just turn around. It helps when you delay the design stage as much as possible. Makes it easier to let bad ideas go.
Test lists - plan out a feature/system by listing out its tests. I do this in the form of behaviours and required inputs.
"Start small or not at all" - begin coding by doing the simplest super basic pieces first. You can then start the harder pieces last with a more informed complete understanding of the problem.
Edit: formatting
- an ability to restore clipboard history (alfred on mac or hain on windows)
- snippets
- keyboard shortcuts
- toast notifications for lifecycle events (test and linter failures, CI build events)
- having enough monitors (I tend to arrange mine in an way so that the leftmost shows designs, the middle is for my IDE and the right one shows live output)
- most of the things already mentioned