What do you think?
Rate this book


232 pages, Kindle Edition
Published April 15, 2016
This book is ambitious in scope, setting itself the aim of teaching you everything you need to do in order to transform a neglected legacy codebase into a maintainable, well-functioning piece of software that can provide value to your organization.
p. xvi
First we need to decide what to measure. This depends largely on the particular software, but the simple answer is measure everything you can.
p. 22
If, for example, you can't refactor a piece of code without having to fix or rewrite dozens of tests, that may be a sign that your unit tests are becoming more trouble than they're worth.
p. 203
When parts of a legacy application are implemented in DB triggers, stored procedures, shell scripts running as cron tasks on production servers, or anywhere else that can't be found just by looking through the source code, it can be very confusing for developers who come along to maintain the application later.The third part of the book(Beyond refactoring – improving project workflow and infrastructure) includes topics such as automatizing setting up local machines for efficient software development, multiple environments (typically at least a development, a testing and a production environment), using a version control system effectively and deploying software to production quickly and reliably. Birchall provides quick and brief introductions to tools such as Vagrant, Ansible, Gradle and Fabric. I did not find most of the chapters in this third part as nice as the previous ones perhaps because they (necessarily?) focus on the details of tool installation and use, scripts; this part should probably be read while applying the material to a case study.
If implementing a new database, plan and be be very careful with the migration process -and the parallel operation of new software and old software, synchronizing (in real time? Via batch?) new updates to both dbs.
Plan for cutovers to old system to be prepared for when things go wrong.
Avoid splitting incoming traffic and sending some traffic to both applications at the same time. This implies that they're both writing to their respective Dbs (or even to the same DB) simultaneously, and these writes re being synchronized both ways in real time, which leads to all kinds of difficulties.