One of the under appreciated aspects of software development is the number of different domains many of us work in over our careers, especially those working in consultancy. Software, generally, is straightforward, especially for the majority writing text boxes over databases. Not necessarily easy, but if you’re able to understand logical thought, and decomposition, picking up new languages and technologies is simply a matter of time.
The challenge is when things aren’t logical. When you have to use languages designed for humans, rather than machines, and when you have to understand processes that aren’t necessarily logical, or decomposed, and turn them into something a machine can understand.
Understanding the domain
The followers of domain driven design, and anyone who values use cases or user stories, will tell you that the first thing you have to understand is the user. What are they trying to do, and what nouns and verbs do they use to describe it?
These are the words you need to use. Whatever the system does, it should use those words to describe its state and to reflect that state back to the user.
Understanding the process
Software always models processes. Without understanding the processes, the software will model the wrong workflow, leading to a frustrating user experience. The real skill in learning these processes is understanding which are immutable and which are open to modification.
Once you start digging in, you’ll start to hear phrases like “we’ve always done it this way” or “we know that’s a bit clunky” or “here’s the workaround” which are big hints that there’s something to be improved.
Understanding the motivation
Key to understanding a new domain is understanding why. Why are people doing what they are doing – what is their goal? Why does the current software or process work the way it does? Why are you being asked to change it – what can you do to make things better?
It’s the most important question you can ask, and also the one most likely to be forgotten. Finding the right motivation for the software to exist is the key difference between successful and unsuccessful projects. One of the core tenets of agile is to keep checking that the software is meeting the needs of the users, gathering feedback and responding to it.
The logic of the illogical
For those of you that have never tried to turn the chaos of human language and rules into a logical digital narrative, I’d recommend listening to this explanation of timezones, and asking yourself how you’d go about learning all the rules and exceptions you’d need to be able to write this yourself.