A programmer’s job dimensions
I'm not the one who philosophizes often in public, but indulge me this thought on the types of work we do as programmers and feel free to add your own dimensions.
I've thought about how sometimes I like to work on user-facing products and sometimes on developer-facing ones. Real products that my mom can see vs libraries and tools to empower other programmers. Spend too much time on a general user-facing website and (if you're lucky that it does well) inevitably the stakes get higher, the product starts moving slower, you spend more time in meetings, more product-manager type of folk show up and less you have a say in the direction. The romance starts to disappear and I decide - let me build something of my own where I can move fast and make decisions quickly. Then, if I spend too much time building libraries and tools, the more it feels like programming for the sake of programming, not for solving real-world problems. As Vonnegut puts it when talking about writers who have only studied literature "Literature should not disappear up its own asshole, so to speak." s/literature/programming/
And so the pendulum swings in the other direction.
I was thinking about this recently and it occurred to me that, when talking about the type of work that makes me happy, general-public vs developer-public is not the only dimension where the pendulum swings and balance can be sought. I came up with a few more.
And another overall trend of risk-taking vs comfort zone can be spotted in the dimensions. Of course, all of this is approximate and I'm sure you can think of your own dimensions. But indulge me.
Another dimension I find myself swinging back and forth is productizing the code you're hacking on. Is it a prototype that you can iterate quickly? Or something in production that needs to be performant and stable and scalable and bug-free and analytics-ladden. Prototyping is fun. But spending all the time prototyping and never seeing anything bear fruit can become boring soon. Productizing can be a "death march" but can also be a challenge worthy of the quest.
And how about using the skills you already have mastered vs learning new things. Being comfortable and fast and productive and on top of your game is exciting. But venturing into unknown territory is rewarding too. A version of this dimension is also being a specialist in a certain part of a stack or technology (say JavaScript) vs being a more general jack-of-all-trades, full-stack kind of person.
Then speaking of career and development do you want to focus more on your company's particular tech, processes and ways of doing things and grow there? After all, at a certain level you need to be deep in your company's machinery to grow, promotion-wise. Or would you rather be involved with the larger industry out there, do something open-source, get involved in web standards, blog, etc and grow your career jumping from between companies a little quicker?
So what?
Is there a perfect balance of dimensions that make you happy? (Maybe.) Should you be chasing this balance? (Hmm...) Is it a static balance? (Unlikely.)
Anyway, I'll stop here, just wanted to share something to think about next time you need to think about moves worthy of thinking about
Oh, and what other dimensions do you see for yourself?