I am surprised how software architecture discipline is suffering from the lack of self-identity, so I’m going to rant about it in this post.. just for the record, there will be no yet another definition of what software architecture is below.
Why do I think there is a problem with the software architecture discipline? Let’s consider a few simple questions:
– What do figure skaters do?
– What do software developers do?
– What do horse riders do?
Got simple answers? Now, then, consider the following question:
– What do software architects do?
Got any answer at all?
Probably the easiest way to find out what they are expected to do is to look up the description of software architecture opportunities on the internet. Here is what a Software Architect is supposed to be doing according to one such opportunity posting:
PRINCIPAL DUTIES AND RESPONSIBILITIES:
• Participate in full life-cycle development from requirements through implementation.
• Translate the business needs to the technical team and assign programming and development tasks to the technical staff.
• Develop and provide mentoring to less experienced technical staff (other architects, technical leads and developers).
• Design coding and software best practices, develop reference and proof of concept implementations.
• Design and development of reusable components and services.
• Create unit and component integration test strategies with a focus on validation of proper function and appropriate data.
• Must be comfortable with multiple areas of responsibility including but not limited to presentation, business logic, persistence, performance, scalability, and integrations.
• Expected to help specify the features of physical design, estimate time and effort to complete each feature, build or supervise implementation of features, prepare product for deployment, and provide technology subject-matter expertise to the team.
So.. An architect is supposed to be a developer.. a manager.. a business analyst.. a techinical lead.. a mentor.. be able to multitask..
Does this description mention the ability to actually “architect software” somewhere? Not even once. If you think that’s an exception, try googling similar opportunities and see for yourself.
On the other hand, here is how Wikipedia defines software architecture:
Software architecture refers to the high level structures of a software system, the discipline of creating such structures, and the documentation of these structures. These structures are needed to reason about the software system.
BTW, this definition is almost copy-pasted from the “Software Architecture in Practice” by Len Bass, which, as I understand it, is a classic textbook on the subject.
Does it mention anything about the coding skills? Does it mention anything about the integration and test strategies? Building the features?
That, I think, is where the problem is. Most if not all of the companies are not looking for Software Architects to do what, in theory, those folks are supposed to be doing: designing and documenting the system. Instead, they are looking for some sort of super-heroes who are well-versed in the software development, project delivery, mentoring, sales, and business analysis.
To me that looks like a good indication that the discipline of software architecture is not quite “practical”. It’s been in existence for over 40 years so far, and it’s still not recognized at the practical level as a dedicated and well-defined discipline. Because, otherwise, that opportunity description above would be much more concerned about what the candidates know about the software they can use to document the architecture, about the methodologies they can use for documenting, about the best practices, and about all the other particular deliverables that only a Software Architect would be expected to provide.