Enablers of Developer Flow
Stop outsourcing the keys to greater engineering productivity
I often struggle with procrastination. Things are better now, but there are plenty of times when I still find myself absentmindedly doing things other than the work I am supposed to be doing. It reminds me of the classic Joel on Software post “Fire and Motion” and bouts of unproductivity.
In my younger days, I was notorious for waiting till the last minute to get something done. One memorable example was the time in ninth grade when we had a semester-long character study where the final project was an original short story. I came up with the character, filled in the backstory, and wrote the 12-page story from 2 AM till 8 AM when our literature class started.
This was my operating model for everything from tests to papers to my electrical engineering senior year project. I did this because I could get away with it, up until I started working in the real world. In my first real project, the initial demo of the software app I wrote for the sales team was an unmitigated disaster. The head of sales mercifully cut the demo short, but my boss was livid and nearly fired me that afternoon.
What I learned about myself is that while some of the things I procrastinated on were mundane or boring, the reason I had issues getting started was because I could never get into a flow. In college, it was usually roommates, dorm distractions, or parties. In my role as a developer, the issue was I simply didn’t know anything and had to learn on the fly.
I was fortunate enough to work at a pretty small company. In the absence of Stack Overflow or GitHub, I had ended up reading lots of docs and figuring things out from scratch. However, I could usually find someone to help with some code snippets, debug an issue, or answer my noob questions.
When I worked at bigger companies, the blockers for getting into my flow were different. I had more experience, but now the issues had to do more with the working environment. My days were filled with meetings. We would be stymied by dependencies on other teams. Important information would be hidden or lost. All of this cascaded into massive delays on deliverables.