Architecture in an Agile World
XP2019, Montreal, Canada
May 21, 2019
Main webpage for the workshop:
http://manclswx.com/workshops/xp2019
Short talk on architecture and agile:
http://manclswx.com/talks/arch_agile.pdf
Also, there are some links to previous workshops and useful
books, articles, and videos on agile and architecture:
http://manclswx.com/projects/agilearch.html
Questions discussed during the workshop
- How to onboard new architects
- How do I teach and learn architecture?
- Good criteria for agile architecture
- How do you test an architecture?
- Validation of architecture
- Should everyone be an architect?
- Should all architects code?
Question 1: How to onboard new architects
Notes about "learning the domain":
- New architects need to learn the domain
- The important stuff is what you learn on the job (and it is continuous learning)
- Note that this is both technical knowledge and domain knowledge
Notes about formal learning versus hands-on experience:
- How much can education (in universities and technical schools) be tied
directly to industry needs?
- Experiential learning is always very effective - learning programs that include industry experience
- Students can also get experience by joining an open source project (learning to read code of other people, conform to the project's coding standards, dig into the design details)
Building up architecture experience in 3 stages:
- a junior architect first performs design and coding work to expand
the test structure of an existing system
- then works to augment some of the existing components
- then works on replacing one or more components with open source code
(possibly with some adaptation or wrappers)
Architects need to understand the software process:
- This is important so the architects deliver the information that
developers will need to do their jobs
- There has to be a good description of the responsibilities of
each new architect - scope of control, activities, what do they need
to communicate to others
Absorb knowledge about the "current" architecture:
- It takes a long time for architects to understand all of the connections
across applications
- New people don't like working on old system
One interesting story: There was a system with a lot of ugly interfaces
and duplication, and there were too many interdependencies for the developers
to make progress on fixing the problems without risking the stability of
the system. The senior architect decided to single-handedly perform a
"big-bang" modification of the system over a holiday weekend. It was
successful, and the architect spent several months writing documentation
about the changes and improvements. Many of these notes turned into a
book:
- Greg Utas, Robust Communication Software: Extreme Availability,
Reliability, and Scalability for Carrier-Grade Systems, Wiley, 2005.
Question 2: How do I teach and learn architecture?
There are a number of good sources of education:
- Books and articles
- Conferences
- Patterns (in particular: "Patterns of Software Architecture" by Frank Buschmann (1986))
- Webinars and YouTube videos (lots of good stuff out there)
- On the job learning (code reading, job shadowing with different teams)
- Tools (static code analyzers, code browsers)
- Mentoring activities -- including informal discussions such as "lunch groups", "meetups", spending a couple of hours doing a throwaway prototype using "ad hoc mash-up" methods (creating prototypes using scripting, screen scraping, etc.)
A good question: What do you do when you don't have time or budget for learning? (It may need to be self-directed reading and study, informal learning, lunchtime sharing sessions.)
Where do you start? (In the areas where the architecture needs to evolve.)
Another important question: In an environment where all of the applications
are being moved to a cloud framework (such as Amazon Web Services), do we
really need architects anymore? We aren't operating a big data center
anymore.
- Yes, you still need architects to raise the questions about
structure, data integrity, performance, security, and so on.
- Someone needs to know the issues and implications of the designs.
- The architect (especially in an agile environment) makes sure that customer needs are being served.
Question 3: Good criteria for agile architecture
A good agile architecture must satisfy some key properties:
- The architecture addresses the principal risks in the system
- Also considers the costs
- Helps keep the cost of change low (both in time and money)
- Communicates important information, but allows the design
details to be flexible (developers get some choices -- not a set of handcuffs)
- Good encapsulation
There was a discussion about the problems of a potentially long
approval process for new or changed software. We try to make choices
in an agile architecture to "streamline" the approval process -- keeping
things from required complex and multi-layered reviews because of the
complexity of the system structure.
It is a good idea to choose frameworks that avoid the creation of
learning and maintenance problems.
Architects are really doing some significant design activities -- when they choose a framework and do the "customization" work to make the framework fit the problem. It is a hands-on job... not just writing documents.
Question 4: How do you test an architecture?
A "load test" is very useful
(In AT&T and Lucent, architects would always document the performance
requirements in terms of the "busy hour" -- the expected operations
at the busiest time of the day. This kind of analysis is still important
in systems like Netflix.)
Some systems are designed to handle an overload situation by doing
"load shedding" -- not responsing to some requests, silently ignoring
some of the work. Netflix sometimes accepts requests without validating
the at the busiest times (release day for a new popular series).
Another important "test" of an architecture is to see "how long it takes
developers to find things in the architecture description".
We want the architecture to be flexible -- and it is especially important
to be able to incorporate future technology advances.
Consistency is another item to evaluate -- one way to do this is
to use an Architecture Description Language (plus tools to check for
gaps or conflicts in the description).
"Validation" of an architecture is checking whether the architecture
meets the needs of our customers.
- do we handle the essential issues
- is the architecture understandable and can they navigate through the description
- does it fit customer requirements
Question 5: Should everyone be an architect?
Everyone needs to have a basic understanding of the architecture
(at least, the corner they are working with)
- Most developers work at a more "local" context
- But it is good for them to learn more -- learning is a continuous process, but it is often informal learning
Question 6: Should all architects write code?
Certainly architects should be able to read code.
In today's development world (with more work being done using
scripting and automated generation of low-level code for significant
parts of the system) -- it is great to have the architecture "automated".
This means that architects help build the automated pipeline
that generates the code.
Complete list of questions raised at the beginning of the workshop
- Separation of roles
- Legacy systems - deal with coupling
- Metrics
- How much architecture is enough
- How do I learn or teach architecture (could be emergent or systematic)
- Good criteria for agile architecture
- Validation of architecture
- How to deal with developing a system with agile that requires certification
- Define architecture
- Batch size (how much work in each iteration, how much of the product is built in each iteration)
- Architecture as code (using scripts to spell out the architecture, automated transformation into code)
- Should everyone be an architect?
- Should every architect write code?
- Refactoring
- Personal skills (influence, teamwork)
- Longer term vision
- How much can architects delegate work to others
- How do you test an architecture? (and retest after making changes)
- Relationship between architects, process, and organization (Conway's Law - a system reflects the structure of the organization that built it)
- How do you get developers who are doing waterfall to let go? (an obstacle for DevOps) - some discussion of http://waterfall2006.com (a cool spoof website for a fake conference on "sequential development")
Other books mentioned in the discussion
- Fearless Change by Mary Lynn Manns and Linda Rising
- The book describes a number of "change process patterns" -- which
include some good approaches for information sharing and
informal learning.
- These authors also have a new book ("More Fearless Change") with more
change patterns.
- Object-oriented Reengineering Patterns by
Serge Demeyer, Stephane Ducasse, and Oscar Nierstrasz
- it is now an "open source book" (download the PDF version of the book free from
http://scg.unibe.ch/download/oorp/OORP.pdf)
- The most interesting part of this book is the section of "First
Contact Patterns" -- a set of practices that are useful for
code reading and "understanding the architecture" of an existing
system.
Last modified: May 22, 2019