Adam Tornhill is a programmer who combines degrees in engineering and psychology. He's the founder of Empear where he designs tools for software analysis. He's also the author of Software Design X-Rays, Your Code as a Crime Scene, Lisp for the Web, and Patterns in C. Adam's other interests include modern history, music, and martial arts.
In this workshop you learn novel analysis techniques that support both technical and organizational decisions around your codebase. The techniques use data from the most underused informational source that we have in our industry: our version-control system. Combined with metaphors from forensic psychology you learn to analyze version-control data to:
* Identify the code that’s most expensive to maintain amongst millions lines of code
* Detect architectural decay and learn to control it
* Analyse different architectures such as layers and microservices
* Measure how multiple developers influence code quality and what you can do about it
* Uncover the social side of your codebase and learn to use the data to guide on- and off-boarding
During the workshop you get access to CodeScene – a project analysis tool that automates the analyses – which we use for the practical exercises, and we also discuss open source alternatives where suitable. Participants are encouraged to take this opportunity to analyse their own codebase and get specific take-away information around their system.
Workshop style: Hands-on, bring your own laptop. The practical exercises use Git and CodeScene. Make sure you have a Git client and a Java run-time, version 8, installed on your laptop if you want to analyze your organizations private repositories.
Many codebases contain code that is overly complicated, hard to understand, and hence expensive to change. The pressure of new features and user needs makes it hard to stop and backtrack, and the longer we wait, the worse it's going to be. Mix in the people side with frequent organizational change and the siren song of a system rewrite becomes more and more attractive.
It doesn't have to be that way, and in this presentation you'll see how easily obtained version-control data let us uncover the behavior and patterns of the development organization to prioritize and guide refactorings. We cover refactoring techniques that reduce excess complexity, address hidden implicit dependencies, and discuss architectural restructuring that reduce inter-team coordination needs. Since behavioral code analysis also lets us consider the social side of code, such as refactoring modules that are under development by our peers, we explore novel patterns that help us limit risks and code conflicts. The specific examples are from real-world codebases like Android, the Linux Kernel, ASP.NET Core MVC, and more.