Tuesday, March 1, 2011

Good Software Architects

Do you have to be a good software developer to be a good software architect?

This is an interesting question that came up in a random conversation with a friend. He was of the opinion that a person can be great at high level design, but be bad at actually programming. He claimed that the two activities are far enough apart that someone could be good at one and poor at the other. I'm not sure that I agree.

Part of high level design is thinking about how the implementation will actually work. A lot of the time, something looks great on paper, but it's a major pain to implement. Sometimes it's not even worth the effort to implement. A good architect should be able to balance these factors, and being a good programmer helps identify these potentially troublesome design choices.

Further, to be a good software designer, you need to a lot of experience working with growing applications. You need to know how each design decision effects the project as a whole, as well as the developers working on the project. I think the best way to get this experience is from working as a developer. That way, you get to see the good (and bad) ramifications of design decisions first hand.

Being a good developer also gives the architect a better view of any software project. They know how every detail might work, regardless of whether it's a high level design choice, or a how that design choice might be implemented. This gives the architect a more complete view of the project, and allows them to make a more informed decision.

I am very curious about what you guys think. Comment to let me know what "camp" you're in and why. I'd love to hear everyone's take on this.


  1. Pro-tip: Most real architects suck at civil engineering.

  2. I think you have to have a certain understanding of development to be a good architect (you can think of architecture, in a way, as coding in a higher-level language), but I don't think it holds that a better coder is NECESSARILY a better architect.

    Some people are pros at low-level programming, but they don't do so well in architecture. I think it takes a person who likes thinking about things in the abstract (you usually want to keep architectures abstract and extensible).

    It's probably more of a one-way relationship, though. While being a good coder should help with architecture, being a good architect probably won't make you a better coder.

  3. Good point, Ernest. The one-way relationship is especially clear with some really low-level programmers. A lot of their focuses seem somewhat orthogonal to overall program architecture

    On the other hand, I think a lot of good higher-level developers have strong architecture skills. I think there's a lot more in common with those two disciplines, than there is between low-level programming, and super high level architecture and planning.