16 November 2014

This week you're going to write a huge amount of code. You're going to get a lot done. You're going to ship something big. If something goes wrong, you'll be there to fix it. You'll root-cause any issue. You'll deploy at midnight to save the day. The only thing holding you back is the problem you're trying to solve.

Such an approach to building and launching works for quite a long time. When you're first starting as a programmer you're tasked with implementations that seem like "a simple matter of typing" in hindsight. Once you hit your stride, it feels like nothing can stand in your way. As time goes on, the complexity of the problems you confront grows exponentially. The balance between time spent thinking vs. implementing shifts towards design. The difficulty of shipping becomes more social than technical.

My advice for senior developers: Spend your time wisely. Imagine you can only write 1,000 lines of code this week. Is what you're doing today the most important thing? Are you the only person who could write the code you're writing? If not, why isn't someone else doing the work? You need to make your 1,000 lines count as much as possible. Your work must have leverage. Your 1,000 lines should be the essential core that enables a team of programmers to write another 10,000 lines effortlessly.

Eventually the same idea applies to everything else. You can only have 4 meetings this week. You can only send 20 emails. Make them count. Maximize the time/impact tradeoff. Let go of the things you know you can do that someone else could do just as well. Choose to do only the things that nobody else can do.

The exception to this is solidarity. Just because your time is valuable doesn't mean you're above it all. You need to carry your own weight just like anyone else. If you don't know the nitty gritty of your team first-hand you're useless.