I was reminded of that old saying when I was struggling to use one of the internal software tools we’re required to use at my current client. In this case, it was one of several time-tracking systems.
It led me to think about the difference in quality between the software the client creates to support customers, and the software they create for internal use. It seems to be a consistent pattern at many companies. They pay a great deal of attention to quality for customer-facing information systems, but when it comes to systems for internal use, they just throw something together quickly, and often carelessly.
The old saying, “In the blacksmith’s house, a wooden knife,” applies to our line of work. The question then becomes, Why?
Software is software. Software engineering is software engineering. Users are users – internal users are no less human than external users.
If we can build clean, robust, and functional solutions for our customers, why do we not apply the same professional discipline to building the tools we use internally?
There may be more than one reason.
First, and probably most obvious, is the fact we don’t prioritize, plan, fund, and execute work to build internal applications in the same way as we do work to build applications for external customers. A lot of the work on internal applications happens in an ad hoc way as time permits.
Second (at least in “agile” organizations or those striving to become “agile”), there is a non-stop mantra to the effect that the only worthwhile activity is that which directly supports quantifiable value for external customers. This may lead to people feeling as if other work, even if indirectly beneficial to customers, is just trash work that has no real value.
I’d like to suggest a couple of reasons to apply the same engineering rigor to building internal systems as we do to building customer-facing ones.
First, there’s the common wisdom that comes from all sorts of hands-on disciplines ranging from martial arts to music to sports – what you do during practice is what you will do “in the moment.” If you are lackadaisical about practice, it will be far more difficult for you to apply your best skills “when it counts.”
Any time you throw a punch, play a note, or kick a ball, it has to be done with the same focus as every other time. Otherwise, the skill will abandon you when the pressure is on.
Every line of code you write and every test you carry out has to be done with the same level of professional discipline, whether you’re working on an internal application or a “real” one. Otherwise, the same sloppiness you allow when building an internal application will creep into your “real” applications.
Second, while there is definitely a difference between something that directly supports customer satisfaction and something that happens under the covers that customers don’t see, the quality of those under-the-covers applications still affects the value the company delivers to customers.
When a customer calls a support line and the call center system is hard to use, the quality of that system affects the customer’s experience. The customer has to answer questions they already answered with the voice response script before the representative came on the line. The representative has difficulty navigating the system, and their frustration shines through on the call.
When an internal time-reporting system is cumbersome and staff must spend an inordinate amount of time dealing with it, that time is lost to value-add work on customer-facing solutions. That can lead to rushing or cutting corners in order to meet deadlines. There is a domino effect on customer value and customer satisfaction.
So my suggestion is this: Make every punch you throw, every note you play, every ball you kick as good as you can make it. When you’re in a situation that “counts,” that habit will carry you through.