One of the things you learn doing software development is that the time it takes to engineer something is often totally not in a correct relation to the value it provides or how complex it seems. Rote tasks that seems secondary (but still essential) to an application often take a lot more time to develop than the systems that make up your core value proposition.
User interfaces are consistently a supreme example of this phenomenon, and the perception around user interface value and implementation effort is something I’ve dubbed the inverted iceberg effect.
You’ve got three stages in conceptualization of computer programs in this model:
- First: the absolute newbie user (e.g. your grandma) who thinks that the user interface is the program. Every programmer has learned firsthand that people tend to think the program is done when you’ve slapped some buttons on a form.
- Second: the somewhat experienced computer power user (but whos is not a programmer) who thinks he’s smart because he’s learned that the real meat of the program is hidden behind the user interface. This is the iceberg in the metaphor, obviously.
- Third: the professional programmer who has learned that despite the second stage being trivially true, in terms of design time and engineering effort, making user interfaces is disproportionately and absurdly costly, compared to its perceived role in software design. This is the iceberg upside down!
Sorry for the rant, I will stop now 😁