Slide 1

Slide 1 text

@AdamTornhill

Slide 2

Slide 2 text

“Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development” Questioning Technical Debt https://martinfowler.com/bliki/TechnicalDebt.html @AdamTornhill

Slide 3

Slide 3 text

Interest Rate Is A Function Of Time http://i.imgur.com/a8Xo4Hp.png @AdamTornhill

Slide 4

Slide 4 text

All Technical Debt Isn’t Equal @AdamTornhill

Slide 5

Slide 5 text

@AdamTornhill Most Technical Debt Isn’t Technical

Slide 6

Slide 6 text

There’s A Strong Link Between Technical Debt And The Organisation @AdamTornhill

Slide 7

Slide 7 text

Wish List: Information to Prioritize Technical Debt @AdamTornhill Where’s the Highest Interest Rate? Does the Architecture Support the way our System Evolves? Any Productivity Bottlenecks for Inter-Team Coordination?

Slide 8

Slide 8 text

Collective Intelligence @AdamTornhill Uncover Evolutionary Patterns In A System Commit: b557ca5 Date: 2016-02-12 Author: Kevin Flynn Fix behavior of StartsWithPrefix 8 27 src/Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs 1 10 src/Mvc.Core/ControllerBase.cs 1 1 src/Mvc.Core/Internal/ElementalValueProvider.cs 1 39 src/Mvc.Core/Internal/PrefixContainer.cs Commit: fd6d28d Date 2016-02-10 Author: Professor Falken Make AddController not overwrite existing IControllerTypeProvider 8 1 src/Core/Internal/ControllersAsServices.cs 48 0 test/Core.Test/Internal/ControllerAsServicesTest.cs 13 0 test/Mvc.FunctionalTests/ControllerFromServicesTests.cs Commit: 910f013 Date :2016-02-05 Author Lisbeth Salander Fixes #4050: Throw an exception when media types are empty. 20 1 src/Mvc.Core/Formatters/InputFormatter.cs Social Information A Time Dimension

Slide 9

Slide 9 text

Hotspots Where’s The Highest Interest Rate?

Slide 10

Slide 10 text

Hotspots - A Tool To Prioritize @AdamTornhill

Slide 11

Slide 11 text

Code Complexity Code Change Frequency Hotspot @AdamTornhill

Slide 12

Slide 12 text

Hotspots - A Tool To Prioritize Hotspots Hotspots

Slide 13

Slide 13 text

All Code is Equal …but some Code is more equal than others* * Sorry, George Orwell

Slide 14

Slide 14 text

Why Hotspots Work 1 Year in Roslyn (C#, VB) 6 Years of Erlang 12 Years of Ruby on Rails Each file in the system Change Frequency Reference: Your Code as a Crime Scene, ISBN:1680500384 Prioritize improvements here! Ignore the long tail

Slide 15

Slide 15 text

Hotspots

Slide 16

Slide 16 text

Case Study: @AdamTornhill

Slide 17

Slide 17 text

gc.cpp @AdamTornhill

Slide 18

Slide 18 text

File Level Hotspots Function Level Hotspots X Ray Recommended functions to improve. Hotspots X-Ray

Slide 19

Slide 19 text

Read More: Function-Level @AdamTornhill

Slide 20

Slide 20 text

Normalization of Deviance @AdamTornhill

Slide 21

Slide 21 text

Supervise your Complexity Trends @AdamTornhill Warning Sign! Refactoring Increases again

Slide 22

Slide 22 text

Hotspots Summary Hotspots find the code with the highest interest rate. Hotspots work because all code isn’t equal. Supervise the Complexity Trend of your Hotspots.

Slide 23

Slide 23 text

Evaluate Your Architectural Patterns Does the Architecture Support the way our System Evolves?

Slide 24

Slide 24 text

Code is Auto-Destructive Art @AdamTornhill

Slide 25

Slide 25 text

DRM Shared DRM/AMD … Specify Your Logical Components @AdamTornhill

Slide 26

Slide 26 text

Identify Hotspots on a (Micro)Service Level @AdamTornhill

Slide 27

Slide 27 text

FuelInjector Temporal Coupling Diagnostics Combustion Commit #1 Commit #2 Commit #3 Time Read More: http://www.empear.com/blog/software-revolution-part3/ @AdamTornhill

Slide 28

Slide 28 text

Model Controller View Services ORM Repository SQL Layers: A Separation of Concerns General Observation: 30-70 % of all commits touch multiple layers @AdamTornhill Change Coupling

Slide 29

Slide 29 text

Supervise The Change Coupling Between Services @AdamTornhill Temporal Coupling (potentially across repository boundaries)

Slide 30

Slide 30 text

The Microservices Shotgun Surgery Pattern @AdamTornhill

Slide 31

Slide 31 text

Tools Evolution Radar http://reveal.inf.usi.ch/web/dambros/tools/evoradar.php CodeScene: https://codescene.io/ Moose Platform: open source platform http://www.moosetechnology.org/ Code Maat: open source, text-only (GPL) https://github.com/adamtornhill/code-maat

Slide 32

Slide 32 text

Architecture Summary Identify your Architectural Hotspots. Know your System’s Tipping Point. Use Temporal Coupling to Evaluate your Architecture.

Slide 33

Slide 33 text

Meet The Social Side of Your Code Any Productivity Bottlenecks for inter-team coordination?

Slide 34

Slide 34 text

Process Loss Process Loss The Potential Productivity Individual Contributions Real Productivity Team Work @AdamTornhill

Slide 35

Slide 35 text

Diffusion of Responsibility

Slide 36

Slide 36 text

Fractal Value: M. D’Ambros, M. Lanza, and H Gall. Fractal Figures: Visualizing Development Effort for CVS Entities. Inter-Team Overlap Fractal Value 0 ~1.0 Views Integration Tasks Backup Tests Measure Team Coordination Excess Parallel Work The Diffusion of Responsibility

Slide 37

Slide 37 text

Measuring Conway’s Law Architectural Pattern: Package by Feature Views Features @AdamTornhill Front-End Team Export Team Recommendations Team Ads Team Calculations Team Backup Team

Slide 38

Slide 38 text

Team Team Team Team Team Team Team Team Team Team Team Team The Perils of Feature Teams @AdamTornhill

Slide 39

Slide 39 text

Align Your Architecture and your Organisation @AdamTornhill

Slide 40

Slide 40 text

Make Decisions Influenced By Data @AdamTornhill

Slide 41

Slide 41 text

@AdamTornhill Blog on Behavioral Code Analysis http://www.empear.com/blog/ Read The Books: Your Code As A Crime Scene https://pragprog.com/book/atcrime/your-code-as-a-crime-scene Software Design X-Rays (October 2017) https://pragprog.com/book/atevol/software-design-x-rays Run the Analyses in CodeScene: https://codescene.io/ [email protected]