An architect? According to Wikipedia, an architect is a person who plans, designs, and oversees the construction of buildings. So, we obviously have derived the role from civil engineering. In parallel, we derived software architecture which refers to high-level structure of a software system. As you might guess, I don’t think we need a formal architect role but an architecture. Before starting another dispute, let’s watch Matrix Architect Scene.
Cool stuff? That’s well deserved for anybody who built a piece of software. Yup, you got it. I think any working software has some kind of architecture. Whoa, then everybody is an architect? Well, yes and no. Yes, an architecture needs architect/s. No, I don’t think we need to define a formal role and call everybody architects.
Going back to civil engineering. An architect designs a building more concerned about aesthetics, artistry and overall shape of construction. A civil engineer concentrates on the structural elements of the design. A builder makes the structure. That’s it. No more definitions. As you can see, these are well-defined roles and they are somewhat hierarchical. Do you think we have or should have such hierarchy while developing software systems? Well, no. Of course, an experienced engineer would have a different perspective than a recent graduate. However, these two engineers would both influence the software system they are building and should contribute to the architecture of the system. If you want to name one of them architect and not the other, do you think that it’s fair? Nope! So, a formal architect role isn’t really fit to software development.
If you think we only need “software architect” title to emphasise seniority level, then I disagree. Most of the big companies have a good development path. They more or less look like software engineer 1 -> software engineer 2 -> senior software engineer -> principle software engineer. Let me note it down, they don’t have formal architect role.
Bunch of random questions and answers:
Let’s take principle engineers as architects and ask. Do we really wait for principle/senior engineers to evaluate each piece of software we build? The short answer is no because they are working on their own projects.
Do we really need a proxy between customer and team? Why can’t we sit all together with the customer and make a decision? I think it should be the team effort to understand fussy requirements and make concrete tasks out of them. Certainly, there will be people who will have more experience and can lead others from time to time but yet we don’t have to call them architects. They are seasoned engineers.
In a team without an architect, do people struggle to write clean and quality code or is system design phase abandoned? I think a good team should do design reviews first; then code reviews to share knowledge, increase code quality and hear all voices. With good communication and good distribution of engineers according to seniority level, the quality software can be delivered without a formal role of an architect.
Do we really need a formal architect for leadership and strategy? Well, aren’t managers supposed to be the leader of the team and decide the strategy? I guess these two aspects are one of the reasons why we have managers. What about technical leadership? Since software development is like craftsmanship, craftsman(senior engineers) should share how to develop well-crafted software. So, we still don’t need a formal architect role.
In consequence, I don’t think we need the separate role for just designing the architecture of a system. In my opinion, every member of the team should take part in architecture discussions and a team should come up with a design. Moreover, the architect role doesn’t really need to indicate one’s seniority level. All in all, goodbye architects, let’s talk architecture.
Edit: I think I owe many thanks to anybody took time in discussing this topic. I love all the answers. They have great points.