What is excellence? The Oxford Dictionary defines it as “the quality of being outstanding or extremely good”. Ok, but how do we demonstrate this in a field as complex as software development that is rife with tradeoffs?
Great is the enemy of extremely good
Perfection meets the definition of excellence, but excellence is not perfection. The pursuit of perfection is a road that leads to high costs and delays. Software is both an art and a science, so we are constantly tempted to tweak our code until it’s “perfect”. Complicating matters is that there are a multitude of concerns when it comes to software. Here are just a few questions that you can ask for any reasonably sized chunk of code:
- Is it easy to read and maintain?
- Is it secure?
- Is it going to perform well enough?
- Does it contain an appropriate level of error handling and logging?
- Is it cohesive?
The time/cost gap between “extremely good” and perfect can be enormous. Furthermore, optimizing towards perfection without context could be completely useless. If we spend 8 hours creating a 10x performance improvement that doesn’t really provide value, it’s waste. Finally, there’s an ever-present temptation to write code that will handle future possibilities. It turns out that predicting the future is hard and this often leads to code that is never executed while increasing maintenance costs and complexity: another form of waste.
Continuous Improvement
At the macro level, a mindset of continuous improvement is what helps us work towards excellent outcomes for our customers. Being intentional about evaluating the process by which we develop, allows us to perform small adjustments that increase yield without sacrificing quality. An example of this is identifying waste so that we can work to eliminate it.
We also must regularly evaluate the code to ensure that it’s appropriately maintainable, performant and secure. Most systems accumulate entropy, which manifests as increasing disorder, over time. Get a little rushed and don’t put tools back where they go in your garage? A few weeks of that and doing even a simple job can take much longer than expected as you hunt around for what you need. Similarly, software can accumulate disorder that needs to be actively maintained. An example is a feature that is no longer used: the code is still there taking up space and possibly creating confusion for the newest member of the team.
Outcomes are where it’s at
Keeping our eye on the prize is what helps us manage just how good is good enough. Computers are constrained by three primary resources: memory, storage and compute power. However, computers are lucky as these three resources can (mostly) be increased independently for advantage. The creation of software is constrained by time, money and scope. The old adage is that you get to pick only two of these as they form a triangle and constrain one another.
What’s the prize? Valuable outcomes. Lose sight of what you’re after and you can create the most beautiful code in the world that will impress all your friends while missing the mark and delivering zero value.
We want to be excellent to our customers by delivering excellent value backed by code that contains just the right amount of extremely good parts.
Integrity. Excellence. People. Read other stories that shine a light on our core values.