Title: Empirical Software Design: When & Why
Date: April 17, 2025
Duration: 1 HR
SPEAKER
Kent Beck
Software Engineer
Registration Link
Secure Programmer: Software Design Techniques (free Percipio course for ACM Members with Skills Bundle)
Software Engineering Design: Theory and Practice (free Percipio book for ACM Members with Skills Bundle)
Software Design Concepts (free Percipio video for ACM Members with Skills Bundle)
Domain-Driven Design (free Pluralsight path for ACM Members with Skills Bundle)
Domain-Driven Design: Tackling Complexity in the Heart of Software (free O’Reilly book for ACM Members with Skills Bundle)
Tidy First (free O’Reilly book for ACM Members with Skills Bundle)
Software Architecture Hour with Neal Ford: Software Design (Tidy First) with Kent Beck (free O’Reilly video for ACM Members with Skills Bundle)
Test Driven Development: By Example (free O’Reilly book for ACM Members with Skills Bundle)
Extreme Programming Explained: Embrace Change, Second Edition (free O’Reilly book for ACM Members with Skills Bundle)
Software Design and Development: Methodologies (free Percipio course for ACM Members with Skills Bundle)
1 Like
Let the system be defined as a set of N number of elements, E.
So,
E={e_1,e_2,…,e_n} … (i)
Let a newly discovered issue, to resolve which it requires to change ith element which is tightly coupled only with jth element.
and,
coupling(e_i,e_j,∆_i )∷work(∆_1 e_1,∆_2 e_2,…,e_i,…,∆_i e_j,…,∆_n e_n) … (ii)
To reduce technical debt and side effects, l new elements are introduced through Dependency Injection and other technology that makes the already existing ith and newly introduced l number of elements independent.
So,
cohesion(E,∆)∷E{e_1,e_2,…,e_n,e_(n+1),…,e_(n+l)} … (iii)
N.B. New technology with higher efficiency reduces human effort.
Kent Beck answered the below questions following the question and answer session after the talk:
- How is AI changing software design, and should we shift from traditional object-oriented approaches to AI-driven systems? It’s not either-or. OO is a way to partition complexity. Models can (and to a greater degree than present should) do more to partition complexity.
- What is the right balance between moving quickly for market advantage versus investing in good structure, and how can we measure the ROI of refactoring efforts?** The balance changes over time. First you need to assure survival or nothing else matters. At first survival is having a project that anyone else cares about (Explore). Then it’s being able to handle increasing demand (Expand). After that you can think about good structure. That said you shouldn’t deliberately have bad structure. If you know a good way to do a thing and a bad way & they take the same time, do it the good way. How to measure ROI of structure investments is tricky because they create options & per definition you don’t know which option will be exercised. I don’t get too wrapped up in trying to boil everything down to one number. You have experience. Trust yourself but seek to learn.
- How do we properly identify, measure, and manage coupling and cohesion in our codebases?The simplest way is to notice when two elements change at the same time–two functions, two files, two directories (could be more than two, much more). Similarly for cohesion–when do only 1, 2, 3 sub-elements change out of much larger n?
- Is the traditional “design-first” approach outdated, and should we embrace that “software is grown, not assembled”? Outdated"–skilled practitioners can get profitable results designing more up front than I would like. But I think there is a better (more profitable, more fun, more learning-enhancing) way.
- How can we create and maintain shared understanding of design within teams, especially as forces like AI potentially change collaboration dynamics?** Whether augmented coding damages collaboration is a choice. We can choose to use exactly the same models to bring together people with common interests. Other than that, talk! It’s not magic.