Iris Classon
Iris Classon - In Love with Code

‘Stupid’ Question 10: What does a Software Architect do?

[To celebrate my first year of programming I will ask a ‘stupid’ questions daily on my blog for a year, to make sure I learn at least 365 new things during my second year as a developer]

I met this person at the Scandinavian Developer conference. I was doing my whole we-are-now-BFF’s (Best Friends Forever, MTV Paris Hilton really shit ‘reality show’)-since-we-are-talking-for-more-than-five-minutes, and was having a blast. I asked him what he was currently programming on, and he looked at me for e few seconds, then tilted his head and chuckled ‘ sweatheart, I’m an architect- I don’t program anymore’. Well, maybe he was alright to have a pitiful chuckle, according to CNN money Software architect was the best job to have in 2010, if you wanted a great pay and growth prospects.

according to CNN money Software architect was the best job to have in 2010, if you wanted a great pay and growth prospects.

My job didn’t even place top ten. Depressing,- and unexpected. But then AHA! I check 2011, and guess what’s on the first place for best jobs in fast-growth fields?

Best jobs in fast-growth fields 2011, software developer places as number 1

Software developer! But I realized the other day that I don’t know what this person does. What does a software architect do? I know a few of them, and I kind of know what they do – but then I don’t. So I asked Wikipedia. As usual I got a bloated answer, some person has used right-click synonym – ‘must find a longer word instead of this one!’. So I’m attempting a one-liner here

A software architect will make the overall design (the structure) and plan (technical and operational) for a system that is to be built making sure that every aspect is covered such as security, performance, manageability and so on with the goal to build a solid system as they have significant insight into the requirements and constraints for this system from the business, users and investors.

It’s a long one-liner, I know. And with so many verbs I could do some seriously method chaining, but I wont ;)

I know a few architects and they are great people that I respect, and they make good mentors – most of them. And by the job description above, I am very thankful to have them around!

Now I have two questions for you, if you are a software architect, or if you know one very well.

  1. What do you think of my one-liner – and can you refactor it (but please keep the readability)?
  2. What would a ‘typical’ workweek or workday look like for you?

    Comments

    Leave a comment below, or by email.
    Gregor Suttie
    7/28/2012 3:44:07 PM
    I sat next to a Software Architect for over a year when working at Barclays StockBrokers and the level of knowledge the guy had was amazing, was a real inspiration to me and left me wanting to one day do the job he was doing - it made my will to learn even more, stronger.
    
    A software architect will help with the planning/design for a system that is to be built making sure that every aspect is covered ranging from technical documentation through to the release to production with the goal to build a performant/reliable system the architect(s) should have significant insight into the requirements and constraints for this system from the business, end users and investors. 
    Stefan Didak
    7/28/2012 4:14:07 PM
    What a software architect is supposed to do vs. what many of them actually do could be quite a fun conversational topic, one that might require a 5000 page trilogy to be written on the subject.
    
    Unfortunately, a lot of software architects get stuck in their role and end up no longer being in touch with the actual development practices, frameworks, etc. which are essential to understand if one is to be, and remain, a competent software architect. It's all too easy for software architects to be similar to the non-programming programmer (similar to the non-managing manager or unmanaged manager) or be very instrumental in other development methodologies such as ADD, CDD, CYAE, DBD, GMPM, and OOCDD. :-)
    
    1. Refactoring the one liner... hard to do because not every software architect does the same task, often may not do all of the tasks, may be more specialized in certain areas than others, and the tasks architects do (i.e. "architecting") are legion. My short version when someone asked me what I did as an architect was "everything except writing the actual code".
    
    2. Keeping in mind my "everything except writing the actual code", more often than not I would involve myself in code reviews because I wanted to make sure that things were built in a way that I had actually intended it. Communicating these things to developers is a science all in itself and often it depends on the individuals in a team to know which parts you can trust to leave fully in the hands of developers/programmers and which you really want to inspect and examine in detail to test whether the actual implementations are as they were originally intended. As a result, as an architect I often ended up doing a lot of the code myself or otherwise changing that which was created. However, if you're an architect doing hands-on development and also being self-employed on top of everything, you really don't have a typical work-day, work-week, or work-month, even.
    
    I always liked doing the architecture because I like big pictures and seeing the full scope of a project. But I also always liked the details, performance optimization, etc. from the bottom up. Doing hands-on code while also doing (parts of) the architecting role is something I would always recommend other architects engage in. Because once you loose touch with how technology shapes up for developers and forget to code proficiently yourself, you are not going to be a very reliable architect for any lengthy period of time. 
    Derek
    7/28/2012 10:23:42 PM
    A software architect has an understanding of all the systems an organisation may have, plus an understanding of current trends in software development and of the type of application environments the organisation currently uses and will use in the future. Given all this knowledge the architect will give very a very broad definition of the way a specific application should be implemented.
    
    They may say that currently the organisation is using web sites, with ASP, but there could be a strategic move for the company to use web services and mobile phone applications. The current trends for doing mobile development might be using some particular framework, so the architect will recommend that the new application is designed to fit all these criteria.
    
    It's like a house architect, he says that the house will be made of wood, of a particular size and have so many rooms. He'll be aware of building regulations so won't design a house that will fall down. However he won't decide the paint colour or the kitchen layout, nor will he actually build the house. Those are jobs performed by the interior designer and the builder. In software development the designer is generally a senior programmer and the builder is a programmer.
    
    Not a stupid question at all really and hopefully my answer helps some 
    Tasos
    7/29/2012 8:43:00 AM
    I think that a software architect is the person who makes all the decisions on the software deisgn process. If they write code it is irrelevant. 
    
    I think that in small companies the software architect does a fair amount of programming, while in bigger companies it is more likely to see software architects that don't have to code. 
    Chad Carter
    7/29/2012 8:43:29 PM
    Job titles are an interesting thing in this world of software development.
    
    I'm currently the Chief Technology Officer of two companies.  Before being CTO, I was a "programmer", then a "systems integrator", then a "software engineer" and finally a "sr. software engineer" before becoming a CTO.
    
    I've never had the software architect title, but I've architected many different systems over the years.  In larger companies (think tens of thousands of employees), there are software architects which simply design systems.  I say simply, but it is actually a pretty complex task to make sure that the system in question is being designed in such a way that it will actually get the job done (meet the business need), perform well, be as secure as possible, and have appropriate integration points to connect to other systems.
    
    In smaller companies and startups, the architect is usually the lead (or only) developer writing the software as well.  Sometimes this shows when the application can't scale well or has a gaping security hole.  Sometimes these can be corrected easily...
    
    Other times it is like painting yourself in a corner.  You can get out of the corner, but it is going to be messy!
    
    In general, titles don't matter too much.  Even though my title says that I'm a C level executive, it doesn't really effect my day to day job.  I write code.  I write a lot of code and I design systems.  (I also play video games, but that isn't part of my job - although I tried to make it be by writing a couple of books on XNA.)
    
    My time is split between being a project manager / client facing, being a software architect, a systems integrator and a "sr." software engineer.
    
    I find it interesting with the word "Sr." in front of the title Software Developer or Software Engineer.  It seems it is just about number of years at the job versus true skill set.  Many folks I know have the title of Sr. Software Developer but are simply a Software Developer with 1 year experience 20 years over vs. 20 different years of experience.  It's all about context I guess.  I'm unsure if the titles were the same, but my guess is there were plenty COBOL "Sr" Software Developers.
    
    I know that while I've been doing this for a while, there are quite a few years in between where there wasn't a lot of new information being learned.  Trying to meet needs of clients and hit deadlines and pushes out the time for "new" stuff.  On the flip side, I always make sure I catch up if I get behind.  Fortunately, in the last 8 year or so it has been increasingly more easy to be keep up to date with a lot of the new offerings in the Microsoft camp.  I still haven't done much digging into the other ecosystems like Java.
    
    Well, I went on quite the rabbit trail there.  So I'll stop and just say a Software Architect is anyone that designs software.  They may actually write the code as well, or they may pass it off.  They are seeing the big picture of how it needs to be accomplished.  The good architects also have a good idea of the way it should be implemented but some don't.  This leads to interesting problems when developers are handed specs and the system can't really be created the way the architect has laid out.
    
    Oh and for question 1, I think the one liner you have works very well.
    
    Keep the 'stupid' questions coming.  What a great idea! 
    Javier Lozano
    7/30/2012 7:12:25 AM
    Here's an oldie but but a goodie - http://www.codinghorror.com/blog/2004/12/it-came-from-planet-architecture.html
    
    This is coming from a guy that's gone from dev, to architect, to manager but still finds time to code :) 
    Dave Swersky
    8/2/2012 9:17:30 AM
    That's a good one-liner.  There's also Solution Architect (my job) that deals with entire domains of applications (I support and design on ten to twenty at any one time.)  Then there's Enterprise Architect, who is responsible for the Architecture of an entire company.  The one unfortunate thing they all have in common, just as your new BFF suggested, is a sad lack of actual programming.  I do it on the side to stay sharp :) 
    Mahasen Bandara
    7/28/2013 10:16:07 AM
    Need very short answer?
    
    "Identify responsibilities and define boundaries for them" 
    Fugitive
    8/1/2014 10:01:11 AM
    As an architect myself and living with other architects, let's sum it up :
    Task 1 : have background culture, be able to anticipate when the software will become inevitably unmaintainable
    Task 2 : draw directions to avoid that (architects ARE pedantic persons)
    Task 3 : recommend technologies, coding style ... like a parent would do on a child : once you Know your teams will spread bugs, avoid them or at least avoid non-refactorable, non-removable code
    Task 4 : do what everybody will thank you about without caring (client side congestion, security, volume, export f
    unctions for the next Big Refactoring period..) 
    
    Long Story short : ensure software survival because as an old one you already know at start the predictable failures
    
    Hope I kept it short
    "A software architect is a super developer that has already been there and know how to jugulate the multiple pathes of failure" - where others commit, stop thinking and go home. 
    Sophia
    6/18/2015 8:29:33 AM
    I think software architect should able to see the bigger picture of the overall system, at the same time should be a hands on coder too. 
    
    This is important to be able to see the problems of developers and solve them for productivity in everyday.
    
    Architect should be able to split to system into multiple smaller units to divide and address them.
    http://www.fromdev.com/2013/07/architect-interview-questions-and-answers.html 

Last modified on 2012-07-28

comments powered by Disqus