back
179 comments
A software architect that can't code or refuses to has no business architecting the system. A software architect who doesn't show up to stand ups really shouldn't be dictating a solution to the team who have to build it. Ideally the software architect should be as hands on as possible with the team leads as the system is built up to the point that the architecture is proven or at least to see if the assumptions around the architecture actually hold up. Really strictly on teams leads to accurately communicate the architecture before it has been proven to hold up is risky.
I get this issue and I share the frustration but is this really a comment on the article posted?

In this case we seem to be talking about huge military projects like GPS or Drones and that there is a divide between the hardware parts and the software parts that might have made sense in the past when the interfaces between the hardware were simpler and software was mostly internal. But now when software is such a big part you need to involve software people earlier looking at the bigger picture from the beginning. It will also drive how hardware will be developed, i.e. what you can do with software will drive how you should develop your autonomous military drone fleet.

A similar problem I've seen a few times are the consultants that participate only in the first few months of a multi-year software project as architects, so never get to experience the long-term implications of their design and the mess they prescribe. Not only is this bad for the project, but also breaks the feedback loop for their own learning.
In the world of web development, and devops etc. this is probably very true.

However there are a lots of non-web orientated systems out there; banks, emergency services as an example. I fall into the latter, and have also worked in the former. In those kind of environments we often have an architect (who is indeed quite a talented and hands on coder), but the hairy implementation details of the architect's design tend to be worked out either by dedicated designers, or some other form of implementer (systems administrators/programmers).

It's unfortunate that this off-topic, general comment has derailed what could have been an interesting discussion about specific types of architecture (large HW/SW systems). And I have a feeling that like several other commenters you have some specific architecture work in mind and are incorrectly generalizing based on it.

Taking part in stand-ups for instance would be a complete waste of time for anything except application architecture and it's only relevant in projects which are using Scrum. Even then, it's possible to do the job by being available (at the risk of missing some unofficial or ephemeral info) and taking part in the sprint review. I prefer involving the team in design decisions and giving them freedom to implement things as they see fit, as long as the architectural requirements are being met.

The usefulness of coding skills decreases the higher one climbs the abstraction ladder. Writing production code for a project is from my POV an anti-pattern unless we're talking application architecture and the architect is only part of that one project, which sounds like title inflation for anything except bigger applications. In my experience there were two kinds of situations where it was worth it to write code: tackling less glamorous, but useful tasks that the team didn't have time for and solving trickier problems that the team couldn't yet work out. Otherwise I expect and prefer mature dev teams which can implement on their own, while I am available for guidance if needed and to ensure that the business reqs are correctly translated and their piece of software integrates properly in the platform.

Personally, I found domain knowledge, connections and social skills invaluable for architecture roles. Technical skills are also valuable, but they're table stakes to be honest.

Totally agree. If you don't know to code and but are an architect you pretty much live in permanent la-la land. I bet on paper I could architect a whole company within a few hours. It would look good on paper but in practice it wouldn't work because there are a ton of implementation details that make my design impossible or hard to achieve. Much better to empower the devs to be involved in architecture from the start so they can give real-world input quickly. I have seen it so many times where managers and architects decided on an unsuitable stack because all they do is listen to sales reps and read whitepapers.
Software security architect here. Senior management strongly discourages writing code on my team. But this is because we work at-scale with hundreds of products comprised of thousands of microservices.

I don’t attend product teams’ standups , but our engagements run on the order of weeks to months.

We don’t micromanage development or design choices made by product teams. Yes, we review code and make (strong) suggestions, but we leave service teams free to make choices as long as the risk is low and commensurate with the threat model. It’s our job to guide major decisions and, occasionally, advise on the “least-bad” short-term solution, pointing out where, when, and why a re-architecture will be required in the future. Generally speaking, teams want our feedback on design proposals and concepts. It’s a healthy relationship.

Occasionally we have to force teams to reimplement, or block release, but that’s a very rare occurrence.

Unlike many comments on this thread, service teams leave us with pretty positive feedback. It’s very rare that teams leave negative feedback on our design engagements.

Oddly enough, I'm an architect for a company that makes scientific equipment. Mostly hardware rather than software. The software team is its own independent entity.

I'm usually present at every stand-up. Realistically, the engineers tend to be fairly specialized, not multidisciplinary, and are not up to speed on quantitative engineering, so my role in defending and adapting the architecture is continuous throughout the project.

They should also accept most of the blame for any problems, because anything higher level than "my code won't compile because the syntax is wrong" is an architecture problem.

You want to be the architect and me just a lowly coder? Ok, I'll fix my own compile errors, all other problems are on you.

> A software architect that can't code or refuses to has no business architecting the system

Well, in construction, you have both architects and civil engineers that never, ever place out rebars or pour the concrete. The architects know how to design the building, while the engineers materialize those designs according to the laws of physics and economy.

So I guess one could ask, why should it be any different in software?

In fact, it's like that in pretty much every other industry. I'm an electrical engineer by trade, and even though I know how to practically do the work myself (since I worked as a electrician apprentice before college), it is something that I never touch - nor have to touch. That's what electricians are for.

I agree, but as an architect who does all that, it is also a constant struggle to deal with developers that don't think more than one step ahead and need to be spoon fed concept to prevent them from e.g. writing custom code instead of preparing for reuse.

When you have developers who understand how to generalise and abstract, then the interactions can often be very simple, and deferring to team leads etc. can work just fine.

Architect is a bs title.
The relationship between the architect of a building and its general contractor is no different than it is in software: acrimony, with each thinking the other is wrong on most fronts. General contractors believe their experience gives them superior insight into how something should be built, and that architects make impossible-to-implement plans. Architects take great care to make precise decisions on hundreds of dimensions, ranging from cost engineering to air quality, aesthetics in the context of then, now, and the life of the built environment, and scoff when plans aren't followed. Somehow, usually, through a lot of bickering and change orders, things turn out alright.

The architect absorbs vast information and designs a solution, the builder makes it into reality, often making meaningful and lasting decisions during implementation. Both are competent and valuable. Sure there are design-build people and teams, sometimes they work very well. Architects will always have more context in the realm of ideas, that is the space they occupy. Builders have the most context in implementation, and may detect issues that make the whole plan invalid. Collaboration helps. Mistrust doesn't.

Architects don't have to swing a hammer to know where the planks should go, but boy it sure does help if they have.

As a software architect myself, I agree.

It helps to do building. I recently took over the ownership of a small component in our system myself. That was the first time I wrote a unit test in our project. Finally I know how our testing and coverage infrastructure is configured.

> The greatest architectures are the product of a single mind or, at least, of a very small, carefully structured team.

In a big project, I would rather relief the one or two architects from their coding duties than to have four or more architects. While it helps to do the building, there are more important things for an architect to do. For example, I'm the one who has the overview of cross cutting concerns like logging and safety.

Disclaimer: I believe there is a big difference what "software architect" means in IT/cloud/web in contrast to embedded/safety-critical/real-time. Most of the complains I hear are about the IT ones (often called solution architects). The article and also my work is in the later category. The methods are nearly the same, but regulations in the later category force the architects to focus on much more details. Maybe that helps to stay more grounded. We do have a similar acrimony with our "system architects" though.

No the analogy is bad. The relationship between software architect and software engineer is akin to the relationship between a building engineer and a architect of a building, not the contractor.

The architect has some grand high level artistic design or dream. Engineers and contractors turn dreams into reality.

Architects have ideas. Engineers and contractors are incapable of high level thinking or having ideas of their own. It's pretty impossible it's like architects are born with it. Sort of like how a CEO is able to have a vision. Engineers don't know how to dream or have visions. It's the job of the architect and CEO to direct us.

Software Architecture is vitally important to the long term success of a software system.

Software Architects are not the only way to get software architecture. They may even be the worst way.

"Software Architects who Code" often do not suffer from this issue, depending on how much they actually get involved in production software and operations. However I would struggle to define a meaninful difference between a "Software Architect who Codes" and a sufficiently "Senior Software Developer".

I'm a Software Architect who made a progressive move to that role after being a Sr. Software Engineer for almost a decade. I see the distinction as pretty simple. We do the same things, but, we specialize in terms of time spent and breadth of awareness and contact in the business.

As far as skills go I expect to maintain my coding skills and as far as what I know more about than other SE's is not about skill as much as it is about practicality of time spent. We need the devs to be writing code/implementing every day and the architects spend more time on the, well, architecture as well as business interfacing and planning side.

So that's basically it, the difference is where we spend our time and focus. It's more about roles and needs of the group than about the skill set. At least, that's what I'd hope. Anyone thinking they are a Senior level engineer who can't understand the concepts of software architecture needs to rethink their position and maybe broaden their skill set a bit, imho.

I feel managers, directors, etc. who cannot code should not be managing, either.

You have two classes: management and individual contributors, when there shouldn’t be. Management ought to be able to solve any problem people they serve (i.e., their underlings) are facing, given certain amount of time to familiarize.

Could not agree more about coding. These days I am doing more architecting and code reviews with coding as time permits and the less coding I do the less I’m able to stay ahead of pathologies developing in the codebase as the codebase scales. Right now I’m trying to get the engineers I lead to be more self sufficient on code reviews among themselves and self directed in terms of what to do next so I can spend enough time coding. It’s hard to do if the team is growing and the number of inbounds demanding your attention grows.
Some places call this a "Principal Developer." Believe it is largely the same thing, i.e. software/system designer.
"They may even be the worst way."

I'm interested in whether you think this could be the case even when compared with say a development team designing the architecture as they go.

Throughout my rather limited career (~7 years, 4 different companies) I am yet to encounter an actually beneficial (to the project) architect. All they do is talk too much and draw some useless diagrams and do a random task that other team members cannot be bothered with. All meaningful decisions and choices are made by the developers themselves, with little to no account for architect's mumblings.

As yet another data point, the website cannot handle Saturday HN front page traffic. How can "Principal Systems Engineer" meaningfully talk about such complex matters of system design and architecture, when they fail at much easier task of handling web page availability with a slightly non-trivial load?

EDIT: A few people mentioned that it would be incorrect to use `HN hug of death` as an example of author incompetence, since it was just some random university or institute. I was about to agree, but then I checked the website, which proudly stated: "The SEI: The Leader in Software Engineering and Cybersecurity". From my perspective, if you claim a thing like this, you definitely should be able to handle a minor spike in traffic.

Now, it also might be that author has nothing to do with the organization and hence not responsible for the website performance. However, this is also not true: "<AUTHOR> is a senior member of the technical staff and Principal Systems Engineer at the SEI...", as stated on their bio page. To me this either shows little ownership or little understanding of underlying resources the author relies on, which serves as another proxy of their actual architecture skills.

7 years and 4 different companies is why your perspective is skewed. You’ve never seen a system mature at that job change rate. Therefore you have never really had to deal with decisions that impact long term which is where architecture matters.
> How can "Principal Systems Engineer" meaningfully talk about such complex matters of system design and architecture, when they fail at much easier task of handling web page availability with a slightly non-trivial load?

1. Are you sure that the person writing the blog post is the person in charge of webhosting?

2. I have pet projects running on some small virtual private servers. I have no idea if they could handle the load from HN. Does it make me a worse software engineer that I can't justify paying more for a beefier dedicated server right now?

PS: does someone have an estimate of how much traffic (hits per minute/hour) the HN front page can bring?

I’m surprised HN is so hostile toward IT architecture. I work in the public sector in Denmark, and enterprise architecture is vital for us. We’re 98 municipalities that each operate around 300 different IT systems. These need to interact with each other, as well as major IT systems on the regional and state level (citizen base data, healthcare, taxes and so on). They’re build/maintained by 50 major vendors and a few thousand small ones. Sometimes a system changes hands through public procurement. The longest running systems are from the 70ies, and have several layers of modern APIs build on top of each other.

Imagine doing all that by letting thousands of random developers run completely free. I mean, I don’t have to imagine because we didn’t actually involve architects early enough, and it’s cost us billions to correct that mistake.

I think a lot of posts here completely missed the point of the article, which is NOT about the role of architects in pure software products such as websites.

The author is talking about large defense systems like satellite arrays and airplanes. The status quo that the author is responding to is that engineers of the physical systems (missiles, satellites, etc.) make all the decisions with software bolted on after the fact. This is definitely true at places like Boeing.

You could replace architect with "senior software engineer" or whatever.

Point is, software should have some seat at the table during the design process.

The fundamental thesis of the piece is: "If, instead, system acquirers ensure that systems engineers address software concerns at the same time as the physical solution is conceptualized, acquirers can opt for a slightly different physical system, whose software architecture is tuned to optimize the provided capabilities."

Which, to me, sounds entirely reasonable. If some system needs an MLOC or so and the software will be doing a complex thing like piloting the aircraft, you better be thinking about the software from the beginning of the project...

This strongly reminds me about this over on Stack Exchange: https://workplace.stackexchange.com/questions/141278/complai...
I think this depends entirely on the organization and size of the product.

If you have one "squad" that owns the product top-to-bottom ("squad" being defined here as a team with daily discussion and syncing of progress) then I think the architect aspect is decentralized across everyone.

But once there's more than one "squad" that each own a separate chunk of the overall product and the work of these squads overlap even a little bit, then there must be one individual who is enforcing a confluence of design in that overlapped region.

This reminds me of Conway's Law https://en.wikipedia.org/wiki/Conway's_law

> organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.

Does software need to be architected? Yes. Does this require a dedicated role called "Architect"? No.

Usually the key implementor architects software. Even in a large complex system, you really want key implementors working together to design.

> “Software is never 'finished' but must be constantly updated to maintain capability, address ongoing security issues and potentially add or increase performance.”

Something that people really need to understand when they are asking if something is done. “Done enough for now” is the best, simple phrase I’ve learned to convey the sense of what was quoted above. It can easily segway into that conversation, if handled delicately, and teachable moments for management.

How do you convey doneness in your projects?

I think the word architect is a failed metaphor for software.

What is the role of architect in the real world? In some high profile cases they are designers - even to the point of doing something like project management/business development (the only reason we funded this project is because of the awesome ideas we got from the architect, we worked with the architect to make sure the building would meet our dreams for this project ...). But more commonly — I understand their role more in construction to me more in the realm of being a maintainer of documentation — maybe they have some role in proposing the original design but the majority of their time is probably spent ensuring that these plans satisfy all required regulations — and updating the plans in response to what actually happens during building so that the building itself will pass all regulations ...

This is nothing at all like the nebulous responsibilities generally associated with software architects. Some projects could benefit from this level of book keeping requirement — but a lot of projects which contain “software architects” probably would reject paying someone to maintain specifications to a similar level of accuracy as is required of real world architects — especially if that was basically all that was being asked of them to do ...

Seems to be getting the HN hug of death. Here is an archive: http://archive.is/IT34b
That's a step in the right direction for all major components to be designed together but it's not adequate because normally you have to make structural changes to components over the course of the development and maintenance of the project.

So all components need to be designed and maintained with a high degree of visibility and ideally direct cooperation.

My impression is that the core structures of these contracts are always flawed. For example, they seem based on detailed pre-estimation and fixed fees. To me it would be more realistic to give ranges and focus on core goals and milestones with the expectation that detailed requirements will evolve.

But stepping back even further, the paradigm that drives all of this which is labelled as "defense" is quite an outdated paradigm. So expecting operational aspects to make sense might be asking too much. The paradigm goes back to for example https://en.m.wikipedia.org/wiki/Roman%E2%80%93Persian_Wars

I don't believe in architecture being done fully via a separate role, it's counterproductive.

What you need instead is developers on the team who also understand software architecture, and implement it especially in it's initial phases.

This takes more senior developers, then later on less experienced developers can jump in once the structure is in place.

But a completely separate person external to the development team, which is going to define the architecture using text and diagrams only?

That doesn't exist, it's a myth. What ends up happening in practice is that some senior developer on the team ends up implementing the actual architecture, and those documents are used just as broad guidelines at most.

I've recently taken time to start reading The mythical man-month book by Fred Brooks.

As far as I remember (first read through this week and big parts of the book is stuffed with quotable material) he says that

- that the architect should be able to provide an example implementation

- but that it is also important that the architect steps back and stays away from the actual implementation

I've more or less already decided to re-read that book.

Highly recommend and available in searchable selectable PDF form from archive.org

In agile world software architect does not fit in. This is where the conflict comes in. people thinking in old traditional software architect system meets agile teams. It does not work however we have been successfully working in a team as lean architectures which is a perfect balance for architect role combining with scrum teams.
> Software architects should be involved in earliest system engineering activities.

Rather, the people doing these activities should have a solid background in software.

If you don't have software kung-fu, you shouldn't be designing something that will be heavily programmed in order to fulfill its function.

The fact that someone needs to say that for it to be apparent is somewhat unsettling.
What is the role of an architect nowadays?
This conversation has gone in a completely different direction from the article. We're now all complaining about architects instead of the point it's trying to make.

But you can't fix that, so I'll chime in.

In my opinion, an Architect is just a role that gives advancement opportunities to individual contributors that doesn't go down a management path. You're still a part of the dev team, and you still do work.

When I've been in that role, that's how I treat it, and it's worked out pretty well. Generally speaking, when the position gets treated that way, I'd get involved in new products or major changes. For major changes, there's a specific thing we're targeting that needs something different. An extra complexity or just a different approach. That's all I focus on while writing the design document in response to the requirements document. Everything else is fine, but we need to do this one specific thing differently to make it work better. And this will have trickle-down effects on the rest of the system that's going to have to accommodate it. If I've done my job well, those are reasonably doable without that much explanation. I'll write the prototype that gets at the core of what needs to change, do code review with the team I'm eventually going to hand it off to, and explain my decisions in person. Once everyone is on the same page and gets what we're trying to do, I can hand it off and move on to something else.

For new products it's a little different. We want to make sure that we learn from our past wherever we can. Companies often have themes to their products and even a completely greenfield project isn't totally different from other stuff you've done. There's lots of stuff floating around that isn't great, but it's not so bad that you're ready to invest in a "major change." But if you had to do it all over again, you would do it differently.

That's what you want to make sure you capture when you start a new project. So again, there's requirements. And again, I write a tech document that represents my interpretation of the specs as it applies to the systems in play. The vast majority of these don't really matter, and any competent developers on the team can handle them. So my input is to focus on the things that are non-obvious and caused problems for us in the past. But the end result is the same: I write the prototype, workshop it with the team that's going to be taking it over, and hand it off and move on when everyone is confident that we all know what needs to be done.

Sometimes, it's not either of those things. Sometimes there's just a really annoying bug that needs tracking down and is really hard. It might not even be caused by the system your team is working on. You might need some cross-team investigation to figure it out. Sometimes you need a wider knowledge than a specialized team has. And sometimes it's just because some shit is broken that you wrote 6 years ago, and no one noticed until now because no one used it quite this way back then, but now everyone uses it that way, and it's awful, and half the reason you got promoted to architect is because that solution was mindblowing and novel, but now it sucks because no one knows how it works. Not even you. So it's your problem, genius, so go fix it. And you go crawl in a hole of shame.

Architect as anything other than really super double senior engineer doesn't make sense to me. Architect as an outside hire doesn't make a ton of sense to me. Architect as a layer of management that's not engaged in building software doesn't make any sense to me at all.

Architect makes sense as a retention strategy. It makes sense as an upward path for ICs. Architects should mentor. Architect shouldn't be a special title. It should be a normal result of doing solid work over time by a person who wants to keep doing solid work instead of switching to management track just to justify a raise/promotion.

Just my thoughts.

I never been able to get clear answer. What exactly is the role of a manager, why are they so highly paid. What does a software manager do on typical day.