Our first newsletter of 2020 starts off with a reflection from Craftsperson Jorge on the study and implementation of software development practices and techniques. As you may be aware, the resources linked within each newsletter issue are hand-selected by members of the Codurance team. This month, our 'bookshelf' includes some colleague reviews of our recent favourite reads.
We also cover consultancy skills that aren't taught in business school and a talk on machine learning - enjoy!
Until next time The Codurance team
A reflection on development techniques
by Jorge Gueorguiev Garcia
I recently contemplated that Software Development has so far been notoriously difficult to study in terms of producing better software. Upon further reflection, I realised that you have the same issues across a variety of other fields. The issues arise because one needs to both isolate the different elements that you want to study and replicate exactly the same initial conditions, which is difficult. You have to rely on statistical approaches.
The book Accelerate is a great example of using this methodology but doesn’t cover the whole gamut of techniques and processes. How do you assert the effectiveness of TDD, pair programming and code reviews? We currently have some minor examples here and there and the 'feelings' of the people that have been using them but for communicating/convincing, we know how well that goes!
I often witness discussions on Twitter about what is effective and what is not, using the different techniques, rightly and wrongly. All techniques and processes require practice. You don't get to learn TDD, pair programming, scrum or whatever else in a single day, week, or in two months. It takes time and deliberate practice.
You will take the wrong route, make mistakes and confuse these mistakes with faults on the techniques and processes, even when you know that some other people have used them satisfactorily. That doesn't mean all techniques and processes are useful in all situations. Learn the techniques and processes as additional tools in your toolbox and then learn when to use them.
“Extreme Ownership was the best book I read in 2019. It had a profound impact on me, particularly on my leadership style. The main advice in the book is to to take Extreme Ownership of everything. I’m the only one to blame, there is no one else. There are no bad teams, only bad leaders. The book also talks about decision making and the importance of creating a plan, prioritise and execute. Communication should flow up and down the chain. One of my favourite chapters was Chapter 8: Decentralised Command. It describes the importance of having small, autonomous and empowered teams, with designated leaders and the need for understanding not only what, but why. Orders (or goals) must be clear and concise.
The most important aspect of the book is that everyone should have a sense of extreme ownership, regardless of their position or experience. It’s everyone’s responsibility to make their “mission” a success. We should not blame anyone else. If things are not working as we expect, we should do something about it. This book should be read by everyone. The advice contained in this book is not only good for our work environment, but also for life in general.”
“Scott Wlaschin is a gifted communicator, he makes the difficult easy to understand. In Domain Modelling Made Functional he uses his explanatory powers to their full extent to show how good and natural the combination of DDD is with functional languages - the resulting book is an astonishing piece that you should read.”
Nathalie Kleinschmit’s article covers the 9 skills she believes that are “not taught in business school, that separate the effective from the awesome”. An insightful read for those seeking to be authentic and substantial in their approach.
Frances Buontempo's talk covers the similarities in approach between AI/machine learning and software craftsmanship; in particular, testing, iteration and feedback. This video also covers a history of AI, modelling and what craftspeople can learn from the AI community.
CoRecursive is a series featuring technical interviews with software developers. In this episode, MIT PhD student Jimmy Koppel provides his insights on advanced software design, including the identification of assumptions in a codebase.