One thing at a time, incrementally

Only Solve One New Problem At A Time, Ben Nadel:

The example he gives in the episode is "learning Golang". Understanding how to use Golang was a new problem for the company. As such, in order to start integrating Golang into their work, they applied it in the context of an already-solved problem: sending emails. This way, Golang was the "one thing" they were solving—the email-sending logic already existed in Ruby; and, they just had to port it over to a new application server.

Good advice for any developer at any experience level1!

The ability to focus on one concern at a time is possibly the mark of a senior developer. It takes experience to ignore other factors as noise. It takes time to learn how to avoid tripping on distractions/side-quests. Distinguishing useful, new information from distraction and noise is the mark of a focused senior developer.

The trick for juniors, is they’re always learning more than one thing at a time, often on accident. They want to build a feature, but it requires a new library, and it requires learning the library. They went to start up my development server, but then something weird happens with Unix. It's the essential challenge of being a junior – they’re just getting started, so they’re always learning a couple of things at a time2.

If I could be so bold as to add a corollary to the rule of "one new problem at a time", I'd suggest that if it can't be done incrementally, don't do it. Over the last 6-years, feature flags have revolutionized the way that I work. And, a majority-stake in that change is the fact that everything I do is now built and integrated incrementally. Until you've worked this way, it's hard to even articulate why this is so powerful. But, I literally can't imagine building anything of any significance without an incremental path forward.

Working incrementally: absolutely, more people should do this. Even seniors. Especially myself!

Now, the tables can turn. I’ve observed juniors who are more adept at working incrementally than seniors. Because they’re tripping over other tasks all the time, the junior has to work in smaller increments to make progress.

Perversely, a senior who can see the whole feature/change in their head is sometimes tempted to push the whole thing through in one (large) change. Developers who have learned3 to avoid pitfalls and gotchas sometimes have to relearn how to work incrementally.

I speak from experience! Working incrementally is something I consciously have to work towards. Conjuring a masterpiece into existence in a fury of git pushes and one pristine pull request feels good. On net, a big bang of development is a detriment to my team. An early pull request, small tactical commits, and a write-up to describe why and how I got there are more useful to align the team and spread ideas.

Previously: one priority is like wind in the sails.

  1. I’m looking a this sentence again, double checking it, and yes this is a global pronouncement about programming and developers and yes I think it carries its weight
  2. Or even worse, accidentally learning things that aren’t relevant to what they’re trying to tackle. Sometime, ask me how excited I was about Tcl/Tk in 1998, arguably several years past the apex of that language/toolkit.
  3. Often through the luck/privilege of having lots of time to practice/tinker at programming outside the job!
Adam Keys @therealadam