5

Kent Beck: Software Design is an Exercise in Human Relationships

 1 year ago
source link: https://www.infoq.com/news/2022/10/beck-design-human-relationships/?utm_campaign=infoq_content&utm_term=global
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Kent Beck: Software Design is an Exercise in Human Relationships

Oct 31, 2022 4 min read

Kent Beck, original (and first alphabetically) signatory of the Manifesto for Agile Software Development, gave the closing keynote address at QCon San Francisco this week. The title of his talk was Tidy First? - which is also the name of his upcoming book.

He started by presenting his personal mission to help geeks feel safe in the world, which he explains in this Facebook post.

He spoke about recently re-reading the Structured Design book by Ed Yourdon and Larry Constantine. He describes it as containing Newton’s laws for software development, the concepts and ideas are as relevant for programming today as they were when the book was first published. The book introduced the concepts of coupling and cohesion which remain as much of a challenge for software engineering today as they were when the book was published in 1975.

He says he’s spent the last 17 years learning how to explain cohesion in software design, which has brought him to the point of writing a series of three books which will explore the software design. The books can be accessed as the content is released on Substack.

He says that

Software design is an exercise in human relationships

And it is by exploring those relationships software systems come into being in the world.

The first relationship is between the idea being explored and the behaviour that will bring that idea into being. The relationship is bidirectional and evolving - the idea defines the behaviour and the existence of the behaviour can generate more ideas (now that I see this, what about that…). Underneath the idea and behaviour is the structure of the system. This is the architecture and it has a profound effect on the visible behaviour.

The structure of the system has a profound effect on the behaviour, and on the ideas that get generated because the behaviour can change. Structure influences behaviour, which results in new ideas requesting changes to behaviour which can have an impact on structure, in a continuous loop. The Tidy First? workflow causes us to pause and ask if the structure needs to be changed or should we just implement the behaviour change. If the change needs to impact the structure then Tidy the structure First - refactor the underlying architecture as needed. Do NOT try to make structure and behaviour changes at the same time, as that is where systems devolve in technical debt.

He says that there are two viewpoints involved when systems are being built, and particularly when they must be changed. The two perspectives are waiters and changers. Waiters have the idea and want to make the behaviour do the new thing as quickly as possible, changers have to maintain the code and want to tidy the structure first so the behaviour change can be made safely.

Complexity increases even further when there are multiple changers who look after different areas of the same product. The likelihood is high that the incentives of the waiters and the competing incentives of the different changers are in tension.

Software design skills are about keeping good relationships between the disparate makers and between the changers and the waiters.

The question a changer is faced with when getting a request for a change in a product often results in this code is messy - should I tidy it first before I make changes. The answer to that question is often a dogmatic of course and of course not - we want the change made as quickly as possible AND we want to keep the code base free of technical debt. Sadly you can’t have both and a decision needs to be made and the correct answer must be it depends.

He drew this image to illustrate the different relationships in the waiter-changer ecosystem.

Image of the waiter-creator ecosystem by Kent Beck

He then explained why big up front design was a bad idea in the 1990’s and is still a bad idea today. He said that waterfall is back and some organisations are again trying to define success for software development in terms of time, cost and scope defined up front and how iterative and incremental development always the been most economically sound approach to building software systems, and is even more so today.

He discussed how Constantine’s Equivalence shows that the effective cost of a software system is the cost of changing the system. Over the lifetime of the system the cost of maintaining it will make the initial development cost a trivial portion of the overall investment. He then showed how the cost of maintaining a product is directly related to the cost of the coupling in the system. Where a change made to one element of the system causes a cascading change in another element, which causes change in another element and so on …

The overall cost of the system can be seen as the cost of that coupling plus the cost of decoupling the elements in the system. (He used elements to indicate the actual nature of the code is irrelevant in this context - it could be functions, remote procedures, Microservices or any other component that has dependencies)

The underlying structure (architecture, design) of the system is the single most important factor in the coupling/decoupling equation.

When considering the changes to a system, most will probably be made in areas that do not have many cascading couplings, however there are likely to be a few changes over the life of the product which are jackpot changes - ones where the coupling cascade is so large that the cost of making the change is astronomical. These jackpot changes are likely to constitute the vast majority of the cost of maintaining the system over its useful life.

2Beck%20Coupling-1666988519378.JPG

He finished by encouraging the audience to make changes in small increments, to keep the structure of their systems clean and as decoupled as possible and to take a Tidy First approach to software maintenance.

About the Author

Shane Hastie

Shane leads the Culture and Methods editorial team for InfoQ.com where he hosts the weekly InfoQ Culture Podcast.

Over the last 30+ years Shane has been a practitioner and leader of developers, testers, trainers, project managers and business analysts, helping teams to deliver results that align with overall business objectives.

He has worked with large and small organisations, from individual teams to large transformations all around the world. He draws on over 3 decades of practical experience across all levels of Information Technology and software intensive product development. Shane was a director of the Agile Alliance from 2011 to 2016 and was the founding Chair of Agile Alliance New Zealand.

Shane is an ICF registered Professional Coach.

“I firmly believe that humanistic way of working and the agile mindset are desperately needed in organisations all around the globe today. Taking agile values and principles beyond software is important and making sure they are properly embedded is absolutely crucial for success – we’re in an industry that touches every aspect of people’s lives and massively influences society as a whole and I want to be a part of making sure that industry is both ethical and sustainable.”

Show more

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK