Software Craftsmanship Principle: Balance

Balance is important in the creation of high quality software, in many different ways.

Staying on Two Wheels

An analogy may help to clarify this: think about riding a motorcycle, or if you’re not a motor-cyclist, driving a car.

When riding or driving, you frequently need to look up well ahead in order to judge upcoming road conditions and to be aware of those conditions in order to make corrections early enough to be effective. For example, if there is a turn coming, you need to know about it well in advance so that you can adjust your speed and anticipate the turn.

At the same time, you must also be aware of what is immediately in front of you. Potholes and other problems with the road surface, or a closer obstruction some might suddenly materialize in front of you and also need your attention.

All the while, while frequently looking ahead at the same time being aware of what’s immediately in front of you, you must operate throttle and brakes, and possibly gears and clutches, depending on the vehicle in question.

To do all of this smoothly and safely, requires at least a certain amount of training, and, to do it well, years of experience.

This is, in many ways exactly like writing software.

When developing a system, you frequently need to look well ahead to see what industry trend might affect long-term viability of your project. Is there a better way to do what you’re doing?

Has a new version of the tool you’re using come along that makes your job easier? Do you need to make a turn? Slow down? Speed up? Stop, or maybe even back up a bit?

These are the twists and turns of the software development road. At the same time, you must of course deal with the day-to-day challenges. Problems with tools problems with environments, these are the immediate potholes and things right in front of you, and you must deal with them effectively while at the same time not losing sight of the road ahead.

While you’re doing all of this, you must of course also be considering the problem at hand. The design, structure, deployment issues, performance, and other aspects that go into building a full working system.

Just like driving, this requires some training, and years of experience to do smoothly.

Just like driving, the goal is to arrive at your destination in good time any one piece. It helps if you have also haven’t burned up the team (that is, crashed the car), and that you’re in a position to embark on another drive in the near future.

This is balance.

Many other senses of the word apply to the craftsman as well, though.

Personal Balance

Most craftsmen I’ve had the pleasure to work with have also had a substantial sense of personal balance – that is, they know how to find a sustainable point between their work (and they’re passion – which in the case of the craftsmen are usually the same) and the rest of their lives. This is another form of balance, more difficult in many ways than the one we discussed above, but no less essential.

Constant improvement is a principle of craftsmanship, but not only in the profession. Craftsmen strive to become better developers, better creators of software, but also better humans. This they can’t do without balance.

Simplicity and Elegance

Another key area of balance that is more technical in nature is the balance the craftsman achieves between simplicity and elegance.

While the craftsman is frequently driven to do the simplest thing that works from an efficiency and pragmatic point of view, this is often not the correct solution, at least not entirely.

A more elegant solution is often considered not simply because it seems like a better idea than the simple solution, but because of its ability to be adapted more easily in the future — frequently the “og smash” solution might be simple, but compromises on the cleanest fit to the domain, or makes it more difficult to extend the solution in the future.

A craftsman’s experience allows him to quickly make the right call on the continuum between elegance and simplicity, and to find the appropriate mix.

  • Is your current pace sustainable? Are you taking any corners too fast?
  • Consider where you might lack balance: professional and personal.

Principles and Practices

Tired of the Software Development Grind? Know it can be done better? Check out my book: Principles and Practices of Software Craftsmanship or sign up for my Craftsmanship Dispatches newsletter.

Published: October 25 2013

  • tags: