I started keeping a daily log of my coding activity as part of my #100DaysOfCode challenge. It has fundamentally changed the way I work.
I’m more focused at the beginning of my coding sessions, more consistent about committing to git, more thoughtful about why I do things a certain way, and more cognizant of inefficiencies that are slowing me down.
In this brief (<5 mins) article, I’ll explain why I think a daily journal/log is a must-have for every developer. I’ll also share some excerpts from my own journal over the past few months.
Setting clear goals and sticking to them
October 30, 2018:
Making serious progress, though I can see how feature creep happens in software. There are so many times when I think “It’d be nice if…” I gotta be careful, though, or I’m never going to get this project finished and move on to the next one.
With any application you build, there are likely to be endless opportunities to optimize and extend your solution. Maybe new functionality would make your app even more useful, or perhaps a reorganization could make the user experience more intuitive.
This slippery slope is the dreaded “feature creep” that haunts nearly all software projects.
When you’re building software for someone else, it can be tempting to try to please the client by agreeing to add a few more “small” features. When building tools for yourself (professionally or for fun) it’s perhaps even more enticing to make additions and optimizations.
The real problem with feature creep, though is it delays the delivery of your software. The longer development takes, the longer it takes for real users to test it and give you feedback. And the longer it takes before you can move on to something else.
One of my favorite quotes comes from The Pragmatic Programmer:
Delivering good software today is often better than perfect software tomorrow.
That quote is a descendant of the similar and more famous quote from Voltaire:
Perfect is the enemy of good.
Both quotes point to the same truth — if you’re doing something risky, hard, or interesting, at some point you’ll need to ship some product. Shipping product is hard and scary, but, as Seth Godin has famously pointed out, shipping is the only way you get to learn from real users.
So, ship early and ship often. Make refinements over time. Accept that your first shot won’t be perfect.
Keeping a daily journal will help you to identify when you’re stuck in the trap of over-building and over-optimizing. When you can look back and see you’ve spent the past several days adding features that nobody has tried yet, it’s time to ship and take a step back from your project for a while.
What makes you happy about coding?
This is a non-trivial question you need to answer for yourself. Keeping a journal can help.
November 2, 2018:
Today was a lot of problem solving of obscure dependencies/environments on the command line. … I have to say I weirdly liked the frustrating problem-solving nature of the whole thing. Twice today I got the most amazing happy feeling when my Heroku app finally worked online correctly, and when I finally got pgadmin to launch successfully.
A daily log can illuminate the parts of software development that you really like. It can also show you what you hate.
November 4, 2018:
… Front end work isn’t very appealing to me. However, crunching the numbers and solving complicated problems behind the scenes is fun and rewarding.
That’s a great thing I found out about myself! It tells me where to focus my energies and what to look for next in my career.
Don’t be surprised if you learn something similar about what you really like on a day-to-day level from keeping a journal. Going back through and reading your journal can be a great source of self-knowledge.
According to the Harvard Business Review, self-awareness is one of the most important traits influencing success. It’s also one of the hardest to cultivate.
Keeping a daily log is a good start.
Thinking about thinking about code
December 4, 2018:
This new structure will make the application much more modular, and it allows me to run variations of the program on the fly. It will also make testing parts of my code easier. This is a best practice that I’ve used before, but I want to make it more second nature when I’m creating from scratch.
One of the most important skills you can cultivate as a developer is the ability to think about how you think about code. This meta-analysis separates the good developers from the great.
What I mean by that is good developers are happy with a solution that works and makes sense. Great developers, on the other hand, are thinking about WHY the solution works, the amount of effort they had to put into getting the solution working, and HOW to reduce the time to a working solution the next time they have to build something similar.
Great developers are constantly working on tools that simplify their workflows. They look for ways to make things easier for themselves and for their teams.
A great developer’s bashrc, for instance, is always getting new aliases and functions to speed up command line work.
When they code something new, they’re thinking about the other projects they worked on, how they solved the problem then, and likely already have tools or code snippets they used in the past ready to help them with the new project.
I’m by no means lumping myself into the “great developer” camp. There are a million things I don’t know or haven’t seen yet.
Still, I aspire to be a great developer one day, and daily reflection is an important habit that I believe helps me on that path. By keeping a journal, I’m being thoughtful about my code, why I wrote it that way, and how I could do it better next time.
This constant improvement is like compound interest. It doesn’t look like much on a short time scale, but over years it adds up to something really big.
So many other lessons and benefits
I can hardly list all the benefits I’ve seen from keeping a daily journal. Some more that come to mind off the bat:
- Remembering where you left off yesterday so you can get started quickly
- Having a record of how far you’ve come over a timespan
- Keeping a written memory of everything you worked on for your resume/portfolio/salary negotiation/etc
- Flagging things you didn’t understand for later review
- Saving links to solutions that solved a problem so you can look them up later if you have the same problem
- VENTING FRUSTRATION!
A daily log/journal is a great resource for any developer. I know most devs are averse to writing, but just a few sentences per day can make a big difference. Try it out!
Do you keep a journal? What benefits do you see? Anything I missed? Let me know in the comments below!
Like what you’ve read here? I have an email list you can subscribe to. Infrequent emails, only valuable content, no time wasters. I’d love to have you there.