Facets is the label I want to put on a metaphor for designing domain-centric architectures and systems. It has emerged from a growing dissatisfaction with how software engineers have been thinking about the way systems should be designed, and how these systems are supposed to be delivering value to their users.
It refers to the facets of gemstones, each facet reflecting the something of the outside world and adding or augmenting to it from the gem itself. These facets represent the different angles from which we should approach components in the complex systems we build (or maybe: want to build but horribly fail to).
Many articles on this site talk about domain design, and some talk a little about user interface design and other aspects (usually designated under the label “technical components”) but I have not yet attempted to clearly describe the overall vision behind these articles, which is both much broader and much deeper than you can read in these articles.
Thoughts often need time to ripen, to learn from experience and grow, and maybe this was what was needed; but the last few weeks these thoughts have been brooding in me and I decided that, ripe enough or not, I should at least make the attempt to externalise them. Do not hesitate to join me in developing these ideas by using the comment system.
Software systems often have user interfaces, but I am starting to suspect that our approach of designing these user interfaces is totally wrong. They are meant to open the world of functionality implemented in the software components “behind” it, but what they actually do is mold everything in concrete:
- the way users perform their tasks
- the way developers extend existing functionality or add new
- the way the software is deployed and made available to the end users