In preparation for a recent team offsite, I spent some time thinking about what I hold dear as a software developer. One idea I kept coming back to is the notion of balance. I see balance manifesting itself several ways in the work of a successful developer, some of which follow.

Speed Versus Quality

The most obvious example is the balance of development speed and quality. When building software, it’s never a good idea to write code as fast as possible without any attention toward maintainability, just as it’s never a good idea to spend such an inordinate amount of time designing and tweaking your software that it never ships to customers. The balanced developer focuses on delivering value both immediately and through the life of the software.

Shiny Versus Proven

When it comes to selecting tools and technologies, again, balance is key. An unbalanced developer selects technologies simply because they’re new and exciting, or rejects them simply because they’re unknown and unproven. A balanced developer evaluates new technologies on their own merits, weighing gains in functionality against the inherent risks.

Doing Versus Sharing

If you’ve ever looked at someone’s code after hearing them speak at a conference, you know that there’s not necessarily a correlation between someone’s ability to speak about technology and their ability to create it. At the opposite end of the spectrum, there’s the quiet fellow who sits in your company’s basement, writing fast, elegant code that no one ever notices. The balanced developer understands that doing work and sharing work are most effective in combination.

That Said…

To hijack an old saying, you should strive for balance in all things, including balance itself. Falling perfectly in the middle of every pair of tradeoffs would be, frankly, unbalanced. Everyone has their strong opinions, and that’s a good thing, provided it’s balanced out with a healthy dose of pragmatism.