When I was a computer science student, I had a dream to become a software architect. Along with all of its glamorous coverage in software development community, this is probably one of the most desirable roles in software development.
Fortunately I didn’t have to wait for a long to become a Software Architect. Few small and medium success on software development given my employers a confidence to push me towards a harder role, which with the glamorous title “Software Architect”, but eventually the lead software engineer.
The role description of software architect, which I found is over-described, over-talked – so that I become confused over time – what does a software architect do? More importantly – should they code?
With all 10 years of software development experience, I tried to recap what I did in my mind, then connected those with existing “Software Architect” definitions and finally tried to come up with the possible simplest description of software architect role (and yes! finally I convinced myself that I’m a Software Architect).
What’s the Primary Goal of an Architect?
A Software Architect balances between Productivity & Extensibility aligned with Customer Goal (Product or Project). Providing extensibility to adapt new changes is a expensive process, which of course requires productivity overhead.
What Does a Software Architect Deliver?
Provides technical structure and standards in given context to find the optimal solution.
In simple and short: Software Architects deliverables can be categorized into two
(1) Providing technical structure that meets customer and business goal, budget accordingly
(2) Providing a set of standards (best practices, conventions, cheat sheet etc) to be followed by its implementers.
Design Architects VS Implementation Architects
Software Architects can be considered in two levels:
(1) Design Architects: who designs and provide standards from top level view.
(2) Implementation Architects: does the same thing, but in addition bridges between the top level design and implementation, where he focuses taking the right decisions from deeper technical perspective (i.e. implementation of a certain algorithm with appropriate libraries etc).
For small and medium projects a single person may play both roles, whereas for complex projects or products, multiple persons may get involved.
What are the Activities involved in an Architects Role?
- Technology selection
- Defining non-functional requirements
- Providing technical structure (logical layering, physical tiering)
- Adaptability on changes
- Defining standards (best practices, coding standards, patterns etc)
Should a Software Architect Code?
Yes, of course!
I think the reason lots of people ask this question, because they try to relate a “Software Architect”s role with Building Architect’s role. However no matter what Building Architects don’t get involved doing actual “construction” work. Software Development, on the other hand, as a knowledge based industry is completely different from this point, as it requires the architects to evolve his design with real value from implementation perspective (provided that the software implementation and building construction work is far different from intellectual engagement point of view).
No matter a person is Design or Implementation Architect; he is required to come from a strong implementation background and should have a significant involvement in coding (from 30% to 70% of his time depending on project or product size and available resources).