by Leon Rosenshein

ISQ vs ESQ

There's a couple of TLAs for you. But what do they mean, and what do you do with them? Let's start with some definitions. ISQ is Internal Software Quality and ESQ is External Software Quality.

External software quality is what your customers see. How easy/hard is it for them to do the things you promised them they could do with your software. Is it easy to use? Consistent? Reliable? Full of features? Provides useful benefits? Software with high ESQ surprises and delights your users.

Internal software quality is harder to measure and talked about much less often. A good way to think about ISQ is how easy or hard it is to change the software. When you need to add a feature or fix a bug, do you know where to start? How much confidence do you have that when you've finished making the change the change does what you expect, and has no other, unexpected impact? Software with high ISQ may delight developers, but it will never surprise them. 

But which is more important? We often talk about the software triangle, trading off features, quality, and time. And there's more than a little truth to that. But the important thing to remember is that that triangle is, in general, describing ESQ. And, you can reduce ESQ overall to get even more time.

ISQ is a little different. Because increasing ISQ makes it easier to improve ESQ. From clear domains and separation of concerns to reduce cognitive load to unit tests and validation to help you be sure something hasn't broken, high ISQ code lets you get more done. Lets you add more value. Lets you be more agile as goals change.

So how do you get high ISQ? That's a question for another day.