What is software architecture?
"Architecture" is a very misunderstood term within the software industry, so we start out by defining what it means to us, talking about how it differs to design and introducing the context for the rest of the course. We cover architecture at different levels; from application architecture through to enterprise architecture.
What is "architecture"?
What is "software architecture"?
How does architecture differ from design?
Why do we need software architecture?
What is the role of a software architect?
With a definition of architecture under our belts, we move on to clarify the role of an architect by looking at roles and responsibilities in software teams, which leads us to the conclusion that the architect role is different from that of a lead developer. We explore everything from the technical skills and knowledge needed by a hands-on software architect through to leadership and soft skills.
What is the role of a software architect?
How do you avoid becoming an "ivory tower architect"?
What sort of technical and soft skills do you need as a software architect?
How do you define software architecture?
Software architecture doesn't exist in a vacuum and is driven by the functional requirements, the non-functional requirements, constraints and principles. We take a look at all of them to understand the impact that they have and the trade-offs that need to be made when defining architectures. Architecture definition is a large part of the course and is reinforced by a case study.
What impact do functional requirements, non-functional requirements, constraints and principles have on software architecture?
How do you take a system vision through to a software architecture?
How do you design for non-functional requirements?
How do you share software architecture?
Architectures don't live in isolation and we focus on this to explore how software architecture involves more than a single view of the system, with those views being important to different stakeholders. We take a look at the various views that you might include in a software architecture document along with some other ways to collaborate on and share software architectures.
Who are the stakeholders that are interested in your software architecture?
How do you document your software architecture?
What other options are there for sharing your software architecture?
How do you deliver software architecture?
We look at the processes used by and involvement that an architect might have during a typical software development lifecycle, all of which is applicable regardless of whether you're using a traditional, iterative or agile methodology. We also look at how you can successfully evaluate, test and deliver a software architecture with complex non-functional requirements such as performance and scalability.
How does software architecture fit into the software development process?
How do you start delivering and evaluating your software architecture?
What about technology?
Although the course is technology agnostic, there is lots of technical content and we relate this back to Java and Microsoft .NET in order to provide some real world context and guidance. After all, this course is about architecture within the context of software development!