In my opinion one of the biggest misunderstanding in the field of software development is the distinction between the technology and the architecture of the software considered. It sounds like a miniscule distinction between the two and to experts in the field the distinction is rather obvious. But to many people in the domain of software engineering it is topic they never really thought about and the results of that neglect of thinking about it clouds their vision and understanding of both.
Have you ever talked to a collegue or friend of yours that is working as a developer asking him to describe the design of the software he is working on? Have you ever been puzzled trying to understand the workings of the software as he talks in words like “XML, Java, Grooy, XSLT, Load Runner, jQuery, JSF, Android, NoSql, AST , DOM, Scala and maybe even Visual Basic”?
Well I have. And the reason is because the person almost always talked a lot about technologies (well that all gets us exited doesn`t it 😉 ) while thinking he perfectly described you the architecture of the software.
Let me describe the values, architecture and technologies of a shelf I built a few years ago.
The reasoning/values behind the architecture:
- grace and an elegant size
- order without dullness
- a thick frame closes the shelf to its surroundings
- joints between parts are invisible
- easily assembled and disassembled
- natural wood makes it long lasting and high value
- friendly and natural look
Lets talk about the architecture:
- 4x thick wood boards builds a frame
- 4 horizontal boards are connected by 16 vertical boards of equals size
- The inner thinner boards are joined to the outer frame by corner screws
- The inner thinner boards are joined to other inner boards by the flat dowels
- the parts are not glued together so it is versatile and easily changable
The technologies I used:
- planed spruce wood painted with birch veneer (gehobeltes Fichtenholz mit Birkenfurnier)
- flat dowles (Flachdübel oder Lamellos)
- steel corner screws (Eckverbinder Schrauben bekannt von IKEA Möbeln)
- steel braces to prevent tilting
I wish we could all describe the technologies and architecture of software as well as the reasoning to use them as easily and precise as I did describing the shelf I built.
Unfortunately software is a lot more complicated. We struggle every time to describe software design, code and the technologies employed.
Technologies influence the design up to a certain point. They are the building materials of software. Java, Groovy, XML, Webservices,…. you name it.
Design is something else. Design reveals how developers understood the technology employed, the problem domain and how much experience knowledge we have in both things.
So what is to take away from all of this?
Agile Developers need to be precise in talking about software. We need to make good distinctions between values, architecture and technology. Most non software engineering sciences are professional about this. We should be too.