Baby steps

I have two kids and nowadays they cannot stop running, jumping, and spreading energy all around. A few years ago the running and jumping skills weren't part of their toolbox, they crawled and step by step they learned to walk. Do you have kids? Do you have nephews or kids in your neighborhood? Have you stopped for a second and think thought carefully about how what the process of learning to walk is?

Let’s imagine for a second your baby is crawling. Don’t be scared if you are not a parent, just bear with me and imagine you are sitting on your couch in the living room, your baby stops crawling just in front of you. She looks at you, sits down and from there tries to stand up and poooom, she is pushed back by her own body and gets to sit down again. She tries without success multiple times but never gives up until fatigue overcomes her.

The next day she doesn’t feel defeated at all, she is fully energized to try again to stand up on her feet. After 5 minutes you see yourself holding her and helping her stand up, after 3 days she is capable of doing it on her own and you are crouching down and spreading your hands without touching her because it gives you security. She is able to stand up and, in parallel, you are still protecting her from an unexpected scenario; you aren’t contracting your hands until you are convinced she is fully acquiring the new skill.

After some weeks, she is fully capable of walking by herself. The process was similar: Starting by expanding your hands and holding her while she moved one step forward in slow motion and without really understanding what she was doing. She liked that first step, the brain started to acknowledge the new move and progressively increased the number of steps done day by day, meanwhile, you are still spreading and holding her hands and, of course, feeling the pain in your back and wondering why you didn’t work out enough to be ready for these moments. Suddenly, one day she rejects your help because she is ready to walk alone, you still spread your hands without holding her without confidence, she walks and she keeps walking alone. You find yourself recovering your normal standing position, contracting your hands, and trusting (not really ) that everything will be just fine, at least for your back.

In software design, we are often in the situation of adding breaking changes to one piece of the architecture puzzle. For example, when breaking the compatibility of one API, exploring multiple technologies to replace a legacy component, or completely changing a paradigm on how you are processing your big data pipeline. When you are in this situation remember how that little baby learns to walk, remember to take baby steps, and with safety for everyone involved ( the baby and the parent ). One of the techniques used in these scenarios is the expand-contract ( AKA parallel-change ) pattern where the parent expands the contract by holding the kid to walk with her and later contracting the help because she was totally able to walk alone. Taking these back to the scenario of an API:

  1.  We can expand the contract of your API by having a second version with the breaking changes by keeping the former version up and running
  2.  Migrate all consumers to use the new version of the API.
  3.  Contract: Remove the former version of the API.


Any new process requires courage and determination. We see this in a baby taking their first steps, in the determination with which they return again and again. Software development is no different: we also need the same determination to see change flourish.

Some resources on the topic:

 

Comments

Popular posts from this blog

Some books I have read in 2020

DataEngOps de 0 a 0.1 | DevOpsDays Cáceres 2020

Europython 2018 - Part I