Scaling Agility: The Technical Angle

37
Scaling Agility: The Technical Angle Flavius Stef Mozaic Works 1.0

description

Presentation at I T.A.K.E. Unconference 2014. It covers several technical tips on how to scale agility to larger teams.

Transcript of Scaling Agility: The Technical Angle

Page 1: Scaling Agility: The Technical Angle

Scaling Agility: The Technical AngleFlavius Stef

Mozaic Works

1.0

Page 2: Scaling Agility: The Technical Angle

About me

Flavius Stef

In I.T. since 2002

Agile Coach and Trainer

Was:

– Web Developer

– Project Manager

– Scrum Master

– Product Owner

– Co-founder

[email protected]

(Twitter) @FlaviusStef

Page 3: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTUREARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENTALIGNMENTFEEDBACK

Page 4: Scaling Agility: The Technical Angle

A word of warning

#AgileTip: To some folks Scaling Agile is like Scaling Fish: They keep scraping off stuff until it looks like something they can swallow.

@WoodyZuill

Page 5: Scaling Agility: The Technical Angle

PRINCIPLES

● Don't do it

● Short term versus long term

● Bigger teams need bigger processes

● Identify and fight bottlenecks

● Build quality in

Page 6: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Page 7: Scaling Agility: The Technical Angle

Feature teams(Agile)

Component teams(Waterfall)

Favor this

Page 8: Scaling Agility: The Technical Angle

Hybrid model

Feature team

Feature team

Feature team

Component team

Component team

Page 9: Scaling Agility: The Technical Angle

Have code stewards

Scalability

Javascript UI Components

Database performance

REST API

Page 10: Scaling Agility: The Technical Angle

Oversee system architecture

Page 11: Scaling Agility: The Technical Angle

Oversee system architecture

Page 12: Scaling Agility: The Technical Angle

Experts should have slack

90%John

85%Mike

115%Molly

45%Susan

Page 13: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Page 14: Scaling Agility: The Technical Angle

Increase modularity

Page 15: Scaling Agility: The Technical Angle

Increase modularitypackage hudson;

import hudson.PluginWrapper.Dependency;import hudson.init.InitMilestone;import hudson.init.InitStrategy;import hudson.init.InitializerFinder;import hudson.model.AbstractModelObject;import hudson.model.AdministrativeMonitor;import hudson.model.Api;import hudson.model.Descriptor;import hudson.model.Failure;import hudson.model.UpdateCenter;import hudson.model.UpdateSite;import hudson.util.CyclicGraphDetector;import hudson.util.CyclicGraphDetector.CycleDetectedException;import hudson.util.IOException2;import hudson.util.PersistedList;import hudson.util.Service;import jenkins.ClassLoaderReflectionToolkit;import jenkins.InitReactorRunner;import jenkins.RestartRequiredException;import jenkins.YesNoMaybe;import jenkins.model.Jenkins;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.io.FileUtils;

… and 15 more!

Page 16: Scaling Agility: The Technical Angle

Simplify designs

HTML/CSS/Javascript/Ajax

Servlet

REST Services

UI “Middleware”

...

...

...

Custom RPC Engine

...

...

...

Linux Kernel

Page 17: Scaling Agility: The Technical Angle

Simplify designs

HTML/CSS/Javascript/Ajax

Servlet

REST Services

UI “Middleware”

...

...

...

Custom RPC Engine

...

...

...

Linux Kernel

HTML/CSS/Javascript/Ajax

Servlet

REST Services

UI “Middleware”

...

...

...

...

Linux KernelWhat's the simplest thing that could possibly work?

Page 18: Scaling Agility: The Technical Angle

Be careful with published interfaces

Service FacadeCompatible ChangeBasic Integration RefinementAdapterStrategy

Page 19: Scaling Agility: The Technical Angle

Program defensively

int low_quality_programming(char *input){  char str[1000+1];     // one more for the null character  // ...  strcpy(str, input);   // copy input  // ...}

int high_quality_programming(char *input){  char str[1000];  // initialize the string NUL characters  memset(str, 0, sizeof(str));        // …    // copy input, always leaving room for a NUL character  strncpy(str, input, sizeof(str) ­ 1);   // ...}

Page 20: Scaling Agility: The Technical Angle

Program defensively

int low_quality_programming(char *input){  char str[1000+1];     // one more for the null character  // ...  strcpy(str, input);   // copy input  // ...}

int high_quality_programming(char *input){  char str[1000];  // initialize the string NUL characters  memset(str, 0, sizeof(str));        // …    // copy input, always leaving room for a NUL character  strncpy(str, input, sizeof(str) ­ 1);   // ...}

More?

Check and sanitize inputsUse assertionsStandardize exception handling

Page 21: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Page 22: Scaling Agility: The Technical Angle

Reduce build creation time

How long would it take your organization to deploy a change that involves just one single line of code? Do you do this on a repeatable, reliable basis?

Mary Poppendieck, Implementing Lean Software Development

Page 23: Scaling Agility: The Technical Angle

Separate release cycles

JS UI Components

Releases

ProductRelease

Page 24: Scaling Agility: The Technical Angle

Use feature toggle

<toggle name="petSurvey">  <p>Take our new <a href = 'petSurvey'>pet survey</a></p></toggle>

Example from: http://martinfowler.com/bliki/FeatureToggle.html

Page 25: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Page 26: Scaling Agility: The Technical Angle

Document architecture

Page 27: Scaling Agility: The Technical Angle

Document architecture

Page 28: Scaling Agility: The Technical Angle

Document architecture

Page 29: Scaling Agility: The Technical Angle

Create communities

Communities of practice

Internal Q&A site

Hackathon

Page 30: Scaling Agility: The Technical Angle

Document libraries

Page 31: Scaling Agility: The Technical Angle

Run architecture workshops

At start of release, or at start of sprint

Page 32: Scaling Agility: The Technical Angle

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Page 33: Scaling Agility: The Technical Angle

Invert the testing pyramid

Page 34: Scaling Agility: The Technical Angle

Run system tests continuously

time time

qualityquality

Waterfall Agile

SP 1 SP 2 SP 3 SP 4 SP 5 SP 6

SYSTEM TESTS

Page 35: Scaling Agility: The Technical Angle

Build a deployment pipeline

CommitAutomatedacceptance

UX testing

Useracceptance

Scalabilitytesting

git push automated

manual

Build (war, gems, minified js/css)Run unit testsStatic analysisRun component testsDeploy artifacts

CI Server

monitors

launches

git push

Manual testenvironments

Automated testenvironment

Page 36: Scaling Agility: The Technical Angle

THANK YOU!QUESTIONS?

[email protected]'m on Twitter, LinkedIn, FB

Page 37: Scaling Agility: The Technical Angle

Image credits

● https://flic.kr/p/8zLKRb

● List designed by TukTuk Designz from the Noun Project

● http://en.wikipedia.org/wiki/File:Deployment_Diagram.PNG

● http://en.wikipedia.org/wiki/File:CheckEmail.svg

● http://blog.adrianbolboaca.ro/2013/01/architectural-kata/img_0507/

● http://3.bp.blogspot.com/-gU9fWdBfB1Y/Ul3861lVk1I/AAAAAAAALpA/J2YRGrQHWdQ/s1600/2014+Calendar_May+June.png