Dave Farley Profile picture
Jun 19 14 tweets 4 min read Twitter logo Read on Twitter
Dealing with "Coupling" is one of the things that makes SW a genuinely difficult activity. But I think Coupling is at least as big a deal for SW dev teams as it is for the software itself.

Here's a #Thread

1/14
Coupling is an interesting idea, and there are many dimensions to it. I particularly like the @mtnygard model of coupling described in this video, and have been quoting it for years.

2/14

At its roots the management of coupling is, I think, one of the deep fundamentals of design. Skill in this is what differentiates great SW design, from average or poor design to a large degree.
3/14
I argue in my latest book that the ability to change our SW is the defining characteristic of its quality. Sure you need more, but if you can't change the code, the only alternative is that you have to get the 'more' by being perfectly right first time. Good luck with that!!
4/14
In SW though, there are ways that help us to deal with coupling that we are more familiar with. For example, #ContinuousIntegration allows teams to work on more coupled SW, by validating that our small changes don't break things.
5/14
Types in languages allow us to know where change needs to happen between more coupled bits of code.
All this is complex enough, but for people, teams and org structures, this is an even more complicated problem.
6/14
The classic response to "scaling dev" is to divide work into specialisms: Biz, architecture, UI, BackEnd, Testing, Ops and so on.
This builds a series of silos that EVERY FEATURE must pass though, this is a lot of people who's work is dependent, coupled, to everyone else's.
7/14
Progress is difficult, I can't write the code, until I have a UX design, I can't test the code until the devs tell me it is "dev-complete" and so on.
Worse, I can't improve the design, because the plan is based on the current assumed design.
8/14
One way of thinking about what agile development, based on small, autonomous, teams is really about, is that it is about distributing decision-making - decoupling for teams & orgs.
9/14
Great dev is very significantly about reducing the scale of change. Small teams matter because they are more independent (more decoupled). Small changes matter because each change is less entangled with others (more decoupled).
10/14
If your work relies on the work of other people outside your team, before you can make progress, your dev system would almost certainly work better if it was more loosely coupled.
11/14
Managing coupling is the foundation to scaling SW well, and to scaling software development too. Autonomous teams, who are responsible for the software that they create work best to scale, *because* they are decoupled.
12/14
One aspect of many aspects of this is covered in my current video, which describes one way to decouple a common over-coupled get keeping approach to dev, through non-blocking code reviews.
Thanks to @tdpauw for pointing them out to me.
13/14

You can read more about the role of coupling as one of the 5 techniques for managing complexity in my book "Modern Software Engineering"
14/14
amzn.to/3hKezti

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Dave Farley

Dave Farley Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @davefarley77

Jun 5
Agile isn't dead, but it is widely misunderstood and more unusual than most people think.
a #Thread

1/12
I have spent the vast majority of my career working in what today we'd call 'agile' teams and organisations, but I hadn't heard the term until 20 odd years ago.

2/12
'Agile', with a capital 'A', has become the commonest form of SW dev, but it isn't 'agile' in the sense of the agile manifesto, it does not, as @pragdave says promote 'agility'

agilemanifesto.org

3/12
Read 12 tweets
Apr 25
Microservices are maybe not what you think they are, so here's a #Thread to describe them...

1/14
Microservices are distinct from Services, although they are commonly confused.
Services, as an approach to software design, have been around for many decades. Service Oriented design was popular in the 1990s and early 2000s.

2/14
The big difference is not the size, despite the name, it is the independence of the service from other services.

Most definitions of Microservices include:
Independently Deployable
Loosely coupled
Organised around business capabilities
Owned by a small team

3/14 Image
Read 14 tweets
Mar 27
What is the most important thing that I have learned in my career as a software developer?

Here's a #Thread

1/18
We could consider languages, how computers work, OS commands, understanding of design techniques and tools like editors and IDEs.
We could think of the need to collaborate, reducing dependencies & coupling, and focus on outcomes, but there's something more important.
2/18
I think that if I am to pick one thing, one pice of advice, it is this:

***Work in Small Steps***

3/18
Read 18 tweets
Feb 27
I confess that I am not a big fan of "The Test Pyramid" so here's a #Thread on what I think is a better focus for your automated testing strategy...

1/14
The Test Pyramid is usually described as something like this, though there are lots of different versions.
I don't think this helps much.

2/14
Part of the problem is that it is nearly right, we'd like to invest in our test strategy so that there are lots of the tests that are easy to write and give us the fastest feedback at the lowest cost and fewer of the more complex, more costly, slower tests.

3/14
Read 14 tweets
Jan 16
In this tweet @christofebert says "optimising for velocity is dangerous" in software development. The article that he references is behind a paywall, so I haven't read it, but here are some thoughts, and some evidence that counters this view.

(A thread)
1/17
As ever it depends on what you measure, what does "optimising for velocity" mean?
Velocity is speed + direction. In software terms, I assume that we mean that speed is the rate at which we can deliver software.

2/17
The DORA metrics call this: "Throughput", which is a measure of the efficiency with which we can deliver software.

3/17
Read 17 tweets
Jan 2
My recipe for Continuous Delivery (a thread)...

1/14
Start by measuring your Cycle Time, from "idea" to "working software in the hands of users"

2/14
Now optimise whatever it takes to reduce your Cycle Time in a series of steps. Each reduction will highlight the next steps that stop you going faster. Work to eliminate those barriers!

3/14
Read 14 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(