About the Book
The agile and software craftsmanship movements are helping to push up the quality of the software systems that we build, which is excellent. Together they are helping us to write better software that better meets the needs of the business while carefully managing time and budgetary constraints. But there's still more we can do because even a small amount of software architecture can help prevent many of the problems that projects face. Successful software projects aren't just about good code and sometimes you need to step away from the IDE for a few moments to see the bigger picture.
This book is about that bigger picture and its role in delivering better software. It's a collection of essays that together form a practical and pragmatic guide to software architecture, with the overall goal being to demystify what it means to be a software architect and provide guidance on how to do software architecture effectively.
The book is aimed at software developers that want to learn more about software architecture as well as those that are new to the role. It fills the gap between software development and high-level architecture that probably seems a little "enterprisey" for most developers.
You'll find this book useful if any of the following scenarios sound familiar!
- I'm not sure what software architecture is about and how it's any different from design.
- I don't understand why we need "software architecture".
- My manager has told me that I'm the software architect on our new project, but I'm not sure what that actually means.
- I want to get involved in designing software but I'm not sure what I should learn.
- I've been given some requirements and asked to design some software, but I'm not sure where to start.
- I need to make some major enhancements to my system, but I'm not sure where to start.
- I've been asked to write a software architecture document but I'm not sure what to include in it.
- I'm not sure who to talk to in my organisation about how best to integrate what we're building.
- I understand what software architecture is all about, but I'm not sure how to tackle it on my project.
- My project seems like a chaotic mess; everybody is doing their own thing and there's no shared vision. Help!
Don't forget, this is a work in progress but if you buy now all future updates are free.
Table of Contents
- Preface
- About the author
- Speaking
- Writing
- Want to get in touch?
- Training
- Part 0: The prelude
- The frustrated architect
- Software architecture has a bad reputation
- Agile aspirations
- So you think you’re an architect?
- From frustration and beyond
- Part 1: What is software architecture?
- What is architecture?
- As a noun
- As a verb
- Types of architecture
- What do they all have in common?
- What is software architecture?
- Application architecture
- System architecture
- Software architecture
- Architecture vs design
- Making a distinction
- Understanding significance
- What is the big picture?
- Strategy rather than code
- Application architecture
- System architecture
- Software architecture
- Enterprise architecture
- Is enterprise architecture the next step for my career?
- Is software architecture important?
- A lack of software architecture causes problems
- The benefits of software architecture
- Does every software project need software architecture?
- Questions
- Part 2: The software architecture role
- The software architecture role
- 1. Architectural drivers
- 2. Technology selection
- 3. Architecting
- 4. Architecture evaluation
- 5. Coding
- 6. Architecture evolution
- 7. Quality assurance
- 8. Coaching and mentoring
- Collaborate or #fail
- Technical leadership is a role, not a rank
- Crossing the mythical line or bridging the gaping chasm?
- Experience is a good gauge but you need to look deeper
- The line is blurred
- Crossing the line is our responsibility
- Software development is not a relay sport
- “Solution Architects”
- Somebody needs to own the big picture
- Software architecture introduces control?
- Provide guidance, strive for consistency
- How much control do you need?
- Control varies with culture
- A lever, not a button
- Mind the gap
- Developers focus on the low-level detail
- Architects dictate from their ivory towers
- Reducing the gap
- A collaborative approach to software architecture
- Where are the software architects of tomorrow?
- We’re losing our technical mentors
- Software teams need downtime
- Everybody is an architect, except when they’re not
- Everybody is an architect
- Except when they’re not
- Does agile need architecture?
- Questions
- Part 3: Designing software
- You don’t need a UML tool
- There are many types of UML tool
- The simplest thing that could possibly work
- There is no silver bullet
- Start with the big picture
- Wide angle view (the big picture)
- Standard view (containers)
- Telephoto view (major components/services and their interactions)
- Macro view (classes and implementation details)
- Analysis paralysis vs refactor distractor
- Tell a consistent story
- Questions
- Part 4: Communicating software
- Architectural constructs
- C4: context, containers, components and classes
- Summarising the static view of your software
- The code doesn’t tell the whole story
- The code doesn’t portray the intent of the design
- Supplementary information
- Software architecture is a platform for conversation
- Software isn’t just about delivering features
- Questions
- Part 5: Software architecture in the development lifecycle
- Collaborative design
- Experience influences software design
- Just enough up front design
- It comes back to methodology
- You need to do “just enough”
- Architecture represents the significant decisions
- How much is just enough?
- Contextualising just enough up front design
- Too little vs too much
- How much is “just enough”?
- Practice the architecture process
- Quantifying risk
- Probability vs impact
- Prioritising risk
- Risk-storming
- 1. Draw some architecture diagrams
- 2. Identify the risks individually
- 3. Converge the risks on the diagrams
- 4. Prioritise the risks
- Mitigation strategies
- When to use risk-storming
- It’s easier to ask forgiveness than it is to get permission
- How do you introduce software architecture?
- Questions
- Part 6: The retrospective
- Appendix A
- Financial Risk System
- Background
- Functional Requirements
- Non-functional Requirements
- Version history