The role, skills, and duties of a software architect

Iren Korkishko on October 24, 2017

Almost every project needs an expert to make high-level design choices and define software coding standards, tools, and platforms. I talk about sof... [Read Full]
markdown guide
 

Thanks for this article! I liked it. My career path has been one towards software architecture.

I highly recommend this video on Deliberate Architecture. He makes so many good points along the way. But the crux of it is that a software architect is responsible primarily for designing qualities into a system of software that match the business needs. Some example qualities (with a range of grades): reliability, operation cost, performance, maintainability, scaleability, security, usability, etc.

There is a lot of experience / education that goes behind knowing how to achieve different combinations of qualities. And it does require soft skills to draw out the required qualities from the customer. Because if you ask the customer, all of the qualities are supremely important. :) But in practice, they really only care about a few of them enough to spend extra money in those areas.

Anyway, just thought I would add that.

 

Thank you! I'm glad it resonated for you. Moreover, I appreciate the information you've shared. It's really useful.

 

Thank you for the article!

I believe that every software engineer makes architectural decisions daily. Small or big. Often without realizing that.

I share more about this in my presentation: slideshare.net/IvanBabak/think-com...

Every software engineer makes architectural decisions daily. Slide 4 from Think components. March 2017

 

Thank you for the comment and for your presentation! It will benefit my article and will definitely help those who're considering about becoming a software architect!

 

Thanks for the article!

This should be obvious since one cannot become a software architect with a musical background.

This comment just struck me as I know many software architects and amazing engineers with off-topic degrees and backgrounds.

For example Chad Fowler is someone I think would fall squarely into the 'Architect' role but has a degree in music! :)

 

Haha! Thanks! :) Sometimes things we try to show in examples might be inappropriate for some (really great) exceptions. Talking about the background I show the situation when the people from the other fields trying work in IT with no IT background. I could say medicine or art background instead of music, so this example has no purpose to offend musicians. And I'm pretty sure that a person you're talking about has also a degree in engineering (apart from music).

 

Nice article, but I'd actually define an architect's responsibilities much more narrowly. Gathering requirements isn't part of the architect's job - that would typically be a business analyst. Similarly, I would expect a technical lead to run code reviews, not an architect. Granted, the same person could wear all of those hats (and in many cases they do), but I view them as separate roles requiring very different skill sets. As an example, I would expect an architect to design a system built in Ruby, even if they've never written a line of Ruby code.

Maybe it's a difference in our definitions of "Software Architecture." Personally, I like this one:

"All architecture is design but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change." - Grady Booch

The other thing I'd add is that the system design should account for all requirements - business requirements, user requirements, functional requirements, and non-functional requirements. That last one is critical from an architectural point of view as you're talking about things like scalability, reliability, maintainability, etc.

 

Great comment, Jesse! I liked a lot of what you wrote. And agree upon all the points!
Sadly, in many companies, they put a lot of decisions that should be made by a technical lead or a business analyst on the architect's shoulders. That is why I put this scope of not-very-architecture-related issues to be known by a software architect.

 

First of all, thanks for this nice write up! Learned a great deal of stuffs.

Here's a query that I have in my mind. What should be the approach when starting a completely new product/service. If it's an established company, then it should already have software architects. What about startups? Would you suggest recruiting an architect from the very beginning or rather build a team of junior engineers, build up the product and then recruit an architect to refactor the existing system?

 

Thank you for your comment!
When we talk about startups, they do often produce not very complicated software (commonly). So for startups, it's not very necessary to grow or to hire an own software architect. Besides, the size of startup teams often small, and they need to think about developers at first. If the need in a software architect appears, they tend to outsource such kind of a specialist.
On the other hand, if this startup works with something really challenging on a daily basis, they, probably, have to have their own software architect. But this is possible only if the software development team is complete and has all the needed engineers. Do you agree that if you don't have a backend specialist in your company, you unlikely will hire a software architect? So start with junior engineers and then complete your team with a software architect. But that is my opinion.
I've heard about situations when the team started with the software architect who helped to complete the team according to the project needs. So it really depends.

I'd say, that before considering to have your own software architect you need to understand how often you will use him (or her). If this need will cover only one your project - you'd better outsource. If you're planning to deal with different complicated projects that need high-level design and new approaches - you can think of having your own specialist.

 

I think I've never seen someone with such technical and human skills unite. I don't doubt great professionals like that really exist. But my point is: if that software architect does not know how to share it's knowledge and delegate all of his/her responsibilities to your team in a properly way, it would probably end up in a team with only one "super hero". Is the team in a comfort zone environment when the important decisions are only made by one person ? Will the team be more prone to collaborate with each other or give visibility to that software architect that is doing a great job ? What if the software architect goes to another company, probably the team won't know how to take high level decisions without their Gandalf.
Having a professional like that in a team is very good. But if that professional does not know how to stimulate a Software Architect journey in the team members, this person is not doing a great job.

 

Great comment! Thank you!
In my article, I paid more attention to skills that are a must, but I did not cover the field of knowledge collaboration fully (which is, of course, an utmost important, and I've mentioned it). Another point, that the teaching and collaboration is mostly the tech lead field. I completely agree with John Van Wagenen who wrote dev.to/jtvanwage/a-common-technica... - that is about sharing and collaboration. But the duties of a software architect (in a perfect world, of course) includes all those things I wrote, so he or she is not obliged (and even don't have time) to teach let's say a Ruby programmer, how to choose a software development methodology. If the software architect will spend the time on this, the project will unlikely be completed successfully. This is the matter of the obligations and productivity. So, definitely, a software architect should be a mentor, but the most important for this specialist is to be a real professional who can architect, carry and successfully complete the project with minimum time and maximum profit.

 

Nice, but where can I find such a creature? Sounds like a god among mere mortals :))

 

Well, honestly, due to the misunderstanding roles and obligations, a lot of companies delegate the duties of software architect to a senior developer. That is a good idea in case of a startup, small business with few developers or just a business where the development task is not original and do not demand the high-level design and new architecture.
But if the need of a software architect really appears, then most of the businesses look for outsourcing. Outsource software development companies do have these specialists to provide architecture. As far as they specialize in this field they have time and resources to grow their own professional software architects.

 

Whaaaaat?! IMHO my system's structure (all applications that are part of the value chain of my business and how they interact) is the most valuable asset of my business! What company would outsource the role of its creator, a.k.a. the software architect?

You also wrote that a software architect "interact with clients" and I fully agree. But that's just one more reason to NOT outsource this role.

Thank you for your point! That is also true for some companies. But if you're asking 'what company would outsource the software architect role', I will reply - many of them.
As I mentioned in my article, there are many startups that just being started and they can't afford hiring the software architect full-time. But to get off the ground they need the architecture to be considered. That is why such companies outsource the specialist from trusted companies or partners they work with. And this is a good practice.
If we talk about the established enterprises this also takes place in case they do not need the software architect on a daily basis. These businesses usually develop some additional software to the existing product and for this reason, they outsource a software architect.
Nothing strange. This is a common practice too.

 

I know but the article is describing a perfect world, and a perfect human.

I just hope that the software architects can learn from the Constructions Architect-Engineering physics world relationship and do not make the same mistakes (applying text books and imagination on real world code and apps to a degree that is not feasible or reasonable).

If you want to review code and tell the Devs ops what to do I hope he knows what he is doing and been went trough a lot of projects.

 

Thank you for this. It's what I just need at this moment.

I would like you to help me clarify something, though. You wrote: "In some cases, an architect may work in an established enterprise company and hand down instructions on technology stacks to the developers. At the other extreme Agile development, a team may work without the involvement of an architect."

My question: is the Agile development process, and "processes" in established companies mutually exclusive? Put differently, is the Agile development process exclusive of an Architect role?

 

Just going to offer an alternative POV here.

I have been in an official "Software Architecture" role in a larger company, had to work with software architects in an large enterprise where I worked at one point, and am now a Senior Developer at a small startup. I have been through very rigid waterfall methodologies, and am now involved in very agile DevOps style delivery at my current job.

Through this gamut of experiences, I feel what the most important thing is not necessarily who does software architecture, but that it is thought about and agreed upon before too much development is done. Sure in an enterprise situation, where they can hire someone to "pass on" instructions, the formal role of a software architect can definitely work. In my current position of fast moving, rapidly iterating and evolving code, we have a lot of conversations about software architecture and figure it out collaboratively, which also works.

If software architecture is not considered, or is not agreed to, then a whole slew of problems can arise, that can be worse than if you simply make a wrong choice in the architecture. The most severe I have seen are things like: no scalabilty (as opposed to limited scalability from a wrong decision), unmaintainable code (resulting in massive rewrites), and various culture problems.

So I guess, depending upon why you are asking the question, maybe the answer is "make sure software architecture is considered, and pick a method of making sure that happens that works for your and your team".

 

Thank you for your comment and your question!
The situation you asked about cannot be considered as the confrontation of the method to the need of a software architect. I'd say, that it is rather an experience that while using an Agile method you don't use a software architect. These two options are not mutually exclusive. You can read about the agile method in my article dev.to/iriskatastic/top-6-software...
You can use a software architect, but it more depends on a complexity of the project. If there's nothing new to implement and you don't need to solve new problems or face something outstanding to develop - you can avoid asking the help of a software architect. In other words, you need a software architect for high-design choices. If there's nothing difficult or you repeat the project you've done before you can use the waterfall or the agile method with no software architect.

 
 

Thanks for writing. I agree with what you say. I felt that one quality is missing:

A good architect knows how divide a project in a modular fashion. This helps making for smaller units of development that are easier to manage.

 

First of all, thanks for the great content.

Second, I just want to point out that despite the therm Architect remind us of buildings, software is more like a garden, since is never completely finished, it is always growing, evolving and changing in different ways.

 

Thank you for the comment!
It's all true about the term Architect!

 

This article is amazing. I'm interested in pitching a software architect role to my company and your knowledge will help me define the responsibilities of the role. Great job!

 

Thank you for the comment, John! I hope you'll find a great specialist using some information I provided in my article! It's very nice to hear the material will have a practical use. Just remember that the scope of duties and skills may vary because every single person tends to have a different mindset. So it's always up to you. Even if the person that applies to your open position doesn't have mentioned experience or skills, be kind and give the person a try. Because all the skills can be learned in the process.

 
 

Great article!.
Is good to know that I'm in the rigth path to become a Software Architect. :D

 
 
 

Thank you for the comment! Nice to hear that the article is useful.

 

Hello im doing a project in school about being a software architect. I was wondering if anybody knew any important skills that a person should have to be a succesful software architect.

 

Hi! That is just great! I hope you will share this project as soon as it'll be ready!
Well, in my article I tried to collect and describe some of the most important skills for a good software architect. But, to be honest, this list must be much longer. And what is a pity, this 'ideal' software architect who has all the mentioned skills is a rare person to meet.

 

A software architect must also be a continuous learner.

"What is good enough and even high-performing today, is no longer good enough even in the next year." - #accelerate

 

This is way too similar to the article on Medium by Nikolay Ashanin, published 23 days before this.

 

Hi, Sope! Thanks for the comment! Yes, Nikolay, as long as Valentina Donchenko (dou.ua/lenta/articles/software-arc...), Simon Brown (infoq.com/articles/brown-are-you-a...), Mike Rosen (cutter.com/article/10-key-skills-e...) and others inspired me to make this material.

code of conduct - report abuse