Embrace The Past How Software Evolution Lets You Understand Large Codebases @AdamTornhill adam.tornhill@empear.com http://www.empear.com/
Motivation
Is it a Failure to Improve? Most complex component @AdamTornhill
Technical Debt - How Much Is Enough?
Is a Man-Month Still Mythical? Responsible for the merge https://pragprog.com/book/atcrime/your-code-as-a-crime-scene
Why Do We Keep Repeating The Same Misstakes? What’s absent? Time and Social Information! @AdamTornhill
Embrace The Past Time Social information @AdamTornhill
All Code is Equal …but some Code is more equal than others* * Sorry, George Orwell
Change Distribution of Files 12 Years of Ruby on Rails 1 Year in Roslyn (C#, VB) 6 Years of Erlang Change Frequency Each file in the system
Hotspots - A Tool To Prioritize @AdamTornhill
Hotspot Code Complexity Code Change Frequency @AdamTornhill
Hotspots - A Tool To Prioritize Hotspots Hotspots
Code is Auto-Destructive Art
Focus on the Code that Matters 2.6% of the code, 15.5% effort 2.5% of the code, 11.0% effort 2.4% of the code, 13.3% effort ASP.NET MVC 200 kLoC Mono 6.7 MLoC Docker 500 kLoC @AdamTornhill
Prioritize with Hotspots Complex Code Important Hotspots: ~3-6% of the total Code @AdamTornhill
Normalization of Deviance @AdamTornhill
Supervise your Complexity Trends Refactoring Complexity Increasing complexity Increases again Lines of Code @AdamTornhill
Software Half-Life “ Reducing this half-life means any code you are looking at is likely to be either very recent or old. We discover that reasoning about code becomes harder when there is lots of code in the grey area between these two. ” Dan North https://leanpub.com/software-faster
Evolutionary Stable Code Young Code Old Code @AdamTornhill
Case Study: Commodities in Clojure @AdamTornhill
Case Study: Commodities in Clojure Package: “asm” - ClassReader.java - MethodWriter.java - … @AdamTornhill
Case Study: Commodities in Clojure @AdamTornhill
Case Study: CPython cjkcodecs - … Different Rates of Change multibytecodec.c => 1 month since last change mappings => 10 years (!) since last change @AdamTornhill
Code Age : a much underused driver of software design . What if… …we organize our code by age? …we turn stable packages into libraries? …we move and refactor code that fails to stabilize? @AdamTornhill
Organizational problems are mistaken as technical issues @AdamTornhill
A Social View of Clojure
A Social View of Clojure Rich Hickey Stuart Halloway … … …
Teams Underperform
Process Loss Individual Contributions Team Work Real Productivity The Potential Productivity Process Loss @AdamTornhill
Study Team Coordination
Measuring Conway’s Law Features Architectural Pattern: Package by Feature Views @AdamTornhill
Team The Perils of Feature Teams Team Team Team Team Team Team Team Team Team Team Team @AdamTornhill
The Gatekeeper/Architect Pattern https://en.wikipedia.org/wiki/Amdahl%27s_law @AdamTornhill
Alternative: The Team as Gatekeeper @AdamTornhill
Diffusion of Responsibility
Why Hotspots stay where they are Immutable Design
Align Your Architecture and your Organisation @AdamTornhill
Make Decisions Influenced By Data @AdamTornhill
Read More www.adamtornhill.com/articles/aspnetclones/killtheclones.html www.adamtornhill.com/articles/socialside/socialsideofcode.htm The Tools as a Service (work in progress) https://codescene.io/ @AdamTornhill adam.tornhill@empear.com http://www.empear.com/
Recommend
More recommend