Issue n. 2
Main Thread is a curated newsletter by https://alediaferia.com. You will find interesting articles, tweets and even podcast episodes about software engineering with a focus on startup engineering and practices.
This week I had the opportunity to reflect about software quality. Embedding quality into the software you ship is not a discrete action or set of steps. The amount of quality or, better, the lack of defects, is influenced by many factors in the complex system of software products development. Deadlines are one of those constraints that dramatically (and negatively) impact quality. Unfortunately, deadlines will hardly go away. What we end up doing, often, when met with deadlines, is try to fight them, often by working harder. But working harder is not usually leading to any positive or improved result. We end up increasing the frequency of our work, people end up working late and at weekends and we start making huge compromises because we hardly realise the impact they are going to have on our medium-term agility. All of this is done to meet the promises at the beginning of the endeavour: delivering a finite set of features whose scope, at the time, wasn’t a sharp picture in anyone’s mind. And you never imagined the amount of compromises you would have been forced to make to deliver that functionality. But can we still call that functionality? Even with that amount of bugs you know you are shipping it with? Working harder is not the solution. We have so many examples around us of how poor, inaccurate and brittle deadline-driven development is. Unfortunately, deadlines are not going away any time soon. What we should be doing, instead, is continuously reviewing how we’re doing with respect to the deadlines. Scope creeps in all the time: rushed work will not make up for it. The solution is being transparent about it: involve the stakeholders, present them the new facts you have, be clear about the compromises, agree on a plan, rinse and repeat until you are able to ship something. This is much better than just panicking in a silo until the deadline comes and the sad surprise is revealed.
The pandemic has maximised the asynchronous aspects of our work. Code reviews are one of those aspects. It is pretty well established that the bigger the change request the lower the attention of the reviewer will be, leading to a greater amount of defects to escape. On the other end of the spectrum, though, small change requests, while maximising the attention of the reviewer during the review, they also maximise the opportunity for context change: this, in turns, negatively impacts throughput. In this insightful work, Dragan Stepanović shares his findings and suggests how practices like Mob Programming and Pair Programming are possibly the solution to avoid having to compromise on either throughput or quality.
Distributed systems are ubiquitous. There are certain characteristics that pertain specifically to distributed systems that we should all be familiar with. This great post by Gergely Orosz is an incredibly useful and rich recap of the pillars of distributed systems. Starting from his specific experience at rebuilding the payment system at Uber, Gergely goes through some of the important traits of distributed systems explaining their trade-offs and why they mattered for the system they were building. If you’re interested in deepening your knowledge of distributed systems this is definitely the place to start (rich of links to related resources).
This is probably not your typical Sunday evening read but I highly recommend to carve time for this. The Theory of Constraints, together with Lean Manufacturing, is foundational to many of the agile practices in Software Engineering. This article is very detailed and comprehensive. The main idea is that the most effective way to maximise throughput is to identify the one and only limiting factor that stands in the way. Dr. Eliyahu Goldratt conceived this theory and wrote a novel about it, called The Goal (that inspired books like The Phoenix Project).
Interesting Podcast Episodes
N26 with Maximilian Tayenthal – Startup Grind
Really interesting episode about the leading online bank in Europe N26. This episode goes through the challenges of entering such a regulated market using an innovative technology-first approach. I didn’t know about the initial pivot of N26 from a kids-targeted prepaid card to a real autonomous bank. I learnt a lot from this one, highly recommended!
There is a lot of research out there confirming how a fast CI/CD pipeline is a key factor at enabling high performing organizations (for example, Accelerate). As developers, a fast CI/CD pipeline heavily influences our day-to-day joy of working.
Thank you for making it this far!