Architecture vs Design
Often people look at these two topics – architecture and design and think the two look similar and so they can be done by the same individual. As a result the role of technical lead and architect gets merged.
Many software architects start of their lives as technical leads due to this misconception.
The architect is a project manager in its most basic form. I cover the role in more detail here. The architect looks at “what must be done” to fulfill a feature or project, working a few weeks or months “ahead of the R & D team”.
The technical lead is concerned about “now”, “close up details”, “how this must be done” and “guiding the developers” in his team on the day on the technical “implementation” of the feature. This is Design.
It is very difficult for one individual to focus on both the big picture and the detail of an application.
What is software architecture?
Software architecture is concerned about bigger concerns or rather aspects of the project being planned. The architect focuses on “what must be done”. Depending on the size of the project there may be multilple architects that look at the diffrent concerns:
The architect does not develop features but simply guides a feature by doing planning and thinking about topics must people dont have the time for.
Some Items of concern for the architect are:
(Click this link to see a more detailed list of architecture concerns)
- Use case concerns
- Scalability, Concurrent load, Volume, Interaction types (Real-time response, Delay response)
- Cross cutting concerns.
- Security, Diagnostics, Caching, Error handling, Validation, Transactions
- Technical considerations
- Technology
- Hardware, Software
- Logical processes
- Process boundaries
- Identities
- Transactions
- Deployment & Infrastructure (On prem, IAAS & PAAS)
- Technology
- Risks & Limitations
Each of these items are architecture concerns that must be planned for as it will not be easy to change afterwards.
The architect will produce documentation (artifacts) that can be provided to the technical lead of teams to assist with design.
At this stage of planning, implementation (coding) should not come up. We don’t care how its done, simply that it must be done.
What is software ‘design’?
Software design is concerned with the actual implementation of a feature, the intricate details of making it, the planning for manufacturing, the act of manufacturing , how it will be done, how the code should be structured and which design pattern to use and what coding standard.
When a technical lead starts his design he should have been told “what” he has to do and “where” he should do it and “what type of technology” he should use. The team lead through his design can stipulate “when” it will be done, “how” it will be done and at “what quality”.
At this level of design, the technical lead is mostly concerned about:
- Design (How to do it)
- Sequence diagrams (Logical steps)
- Class diagrams (Maintenance and Structure)
- Design patterns (Solutions to common problems)
- Entity relation diagrams (Database design)
- Wire diagrams (Visual display)
- Planning (How long to deliver)
- Investigations (Investigations into code changes require)
- Frameworks
- Task identification and break down
- Time Estimations
- Investigations (Investigations into code changes require)
Other tasks of a technical lead are:
- Implementation (How)
- Coding standards
- Maintainability
- Testability
- Team guidance (Education)
- Code reviews
- Technical guidance
- Technical education
- Delivery
- Dead lines