Design should be a developer’s bread and butter. Changing how we talk about software under development is the start of building better software systems. We must stop calling everything architecture, make design more accessible, and resist the urge of focusing on technology.
Design is how, who and when…
Design is how we use the system. This can be users or even systems via APIs. We can call this who. Think of this as the behaviour of the system. It can also be when - in terms of order of a process, or schedules.
Typically, though when is part of a design, it can be constrained by the architecture or engineering. For example due to data rate limits or costs.
Engineering is what and how...
Engineering is the what and how (inside the system) - things like technology, algorithms, and design patterns. Also, generic resources such as databases, proxies, and compute platforms. These are implementation details. Deep dive topics which ARE useful for developers or operations in the right context, but can easily be separated from your architecture.
Agile isn't about stripping the development process down to coding in small chunks, lean of everything but code. It is about feedback loops - and those small loops go all the way back to stakeholder conversations. We are once again seeing the weight engineering has acquired over design and architecture, where the majority of the feedback loops end up accumulating in operations.
, which has a blind spot in the "over" statements regarding the importance of design. There are lots of clues there - "Individuals and interactions", "Customer collaboration" - but it isn't explicit. There is also a problematic statement:
Working software over comprehensive documentation
Teams regularly misinterpret this as meaning design and documentation are not part of the process, we should only code - working software INSTEAD OF comprehensive documentation. It was further exacerbated by "Clean Code" evangelism, which explicitly demonised commenting code - it is clear how this reinforces the INSTEAD OF misinterpretation above.
A further problem is cloud certifications. We have already touched on the common misunderstanding that infrastructure is architecture. There are now many people who think a solutions architect is somebody who helps you integrate with a large cloud provider's platform, rather than integrate an application or system into your broader enterprise.
Add to that Most Valuable Player and Community Builder awards/hats and this brings further focus to engineering-focused patterns and practices. If a software engineer wants to learn for free, they will likely be attending a product-focused community, which may well have developer relations or developer advocate speakers delivering the content.
We have barely touched the surface, in that all of the above context leads to further knock-on factors within organisations, the jobs market, and even social media and conferences.
Fixing the trend
We need to get to the point where people are happy to design software, and that means to collaboratively design software, having rich conversations with stakeholders about how the software should work. The term user story does not describe a work item, or even an "as a" statement. The idea originates from the user telling you what excites them, and you exploring the design together. Collaborative design.
The only way to make a seismic change in our industry would be something of the same magnitude as the original agile manifesto, but there is a reluctance to redefine what is already there. Many people have already tried, and are just seen as trying to self-promote. This may well be the case!
The closest thing we have to a solution is domain-driven design, which emphasises the importance of stakeholder conversations, and how that feeds through into design, code and architecture.
But domain-driven design is a prickly pear, with difficult terminology, and practices that have evolved significantly over the last 21 years beyond their origins. These points came up in conversation on the fringes of
©️ Read the Architecture Ltd.
SOCIAL SHARE CARD GENERATOR