This talk was hosted during the Developer Week 2019 conference. I attended this talk to have better understanding on how to approach enterprise software architecture.
Dr. Rebecca Parsons is ThoughtWorks’ Chief Technology Officer. Her technical experience includes leading the creation of large-scale distributed object applications and the integration of disparate systems. She also was awarded the 2018 Technical Leadership Abie Award from AnitaB.org, as part of the Grace Hopper Celebration, for her ongoing and impactful commitment to increasing the representation of women in technology.
Before coming to ThoughtWorks, Dr. Parsons worked as an assistant professor of computer science at the University of Central Florida where she taught courses in compilers, program optimization, distributed computation, programming languages, theory of computation, machine learning and computational biology.
The best approach to develop software and run a business is to follow this virtuous cycle and repeat:
As an industry we have gotten better at handling requirement changes, but we have not been able to handle architecture changes. We should plan for the quick infrastructure and ecosystem changes. This is where Evolutionary architecture comes in.
Evolutionary architecture is guided incremental change across multiple dimensions. Architecture focus changes and the best architecture changes over time. That is why a business should design it to be evolutionary.
Evolvability is becoming a first-class citizen in today's world. Especially how quickly software is evolving and changing.
To build an evolutionary architecture we must:
Fitness functions are designed to have objective, quantifiable results. By using the fitness functions, it creates a consistent enforcement mechanism. Finally, by having a list of fitness functions allows developers to easily design and deploy.
The fitness functions can be one of or a combination of:
When designing an architecture there is always a tradeoff that needs to be made. For example, if we prioritize security AND performance the tradeoff is, we cannot maximize either of them. When it comes to software architecture, we have many many possibilities and trade-offs to make.
Monitoring is critical so you can ensure things don't get worse and the investment put in will not have to happen again.