Some days back when I was discussing something with my friend over a coffee we had this question. His idea goes like this – “All developers when they become seniors, they do design the system. If any developer with good designing experience of some years, can become Architect.” I agree the fact, that you need a designing experience to become an Architect, however all designers may not be good fit for an Architect.
I would try to give my own definition of these two roles, let’s try to be on same page, then we can move on with the discussion point Architect Vs Designer.
Architect : He/ She is the one who defines the high level abstraction of the system/ software. The system/software may contain many different components inside. If it has many components then Architect’s job is to define the integration points, choose right technologies to different components, choose right tools & methodologies for these defined components. In some cases Architect even can influence the development process like introducing new step/ stage for code review and test with code static analysis tool before checking the code in to repository. He/ She is responsible for non-functional requirements like Scalable, Maintainable, Flexible, Available system.
Software Designer is not a very regular designation in software companies. So I would consider a Sr Developer / Technical Lead who is designing software for some years.
Designer : He / She define the low-level of the abstraction,each component should be designed by Designer to meet the functional requirements of that component by not compromising on Performance and Scalability of the system. Designing detailed interfaces and implementation of them.
I would like to map the things in a tabular format, for easier understanding.
|Vision||Strategic (Long term – Alignment to Business)||Tactical (Short term – Integration between modules /components)|
|Abstraction||High Level||Low level|
|Defines||Skeleton of the System||Fill the Skeleton with Designing the details|
|High level components||Design each Component|
|Involved When ?||“What” Phase of the system||“How” Phase of the system|
|Focus Area ?||Non Functional requirements (Scalability,Availability,Flexibility etc)||Focus – Functional requirements|
|Suggest||Frameworks, Methodologies, Integrations, Tools, Technologies, Patterns etc||Best Practices, Applying Design Patterns, Design Considerations|
|Create||Component Diagram, Interaction overview, Deployment, Use case, Class, Package(optional)||Class, Package, Object, Activity, Sequence|
|Document||Architecture Overview, Integrations, Design Decisions||Design Decisions, Best Practices, How to ..s ?, CODE|
Finally a pictorial view
I hope this is useful for the people who are trying to understand these roles. Thanks
Useful references :