Scaling Agility: The Technical Angle

Post on 10-May-2015

250 views 0 download

Tags:

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

Scaling Agility: The Technical AngleFlavius Stef

Mozaic Works

1.0

About me

Flavius Stef

In I.T. since 2002

Agile Coach and Trainer

Was:

– Web Developer

– Project Manager

– Scrum Master

– Product Owner

– Co-founder

flavius.stef@mozaicworks.com

(Twitter) @FlaviusStef

PRINCIPLESTEAMS STRUCTUREARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENTALIGNMENTFEEDBACK

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

PRINCIPLES

● Don't do it

● Short term versus long term

● Bigger teams need bigger processes

● Identify and fight bottlenecks

● Build quality in

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Feature teams(Agile)

Component teams(Waterfall)

Favor this

Hybrid model

Feature team

Feature team

Feature team

Component team

Component team

Have code stewards

Scalability

Javascript UI Components

Database performance

REST API

Oversee system architecture

Oversee system architecture

Experts should have slack

90%John

85%Mike

115%Molly

45%Susan

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Increase modularity

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!

Simplify designs

HTML/CSS/Javascript/Ajax

Servlet

REST Services

UI “Middleware”

...

...

...

Custom RPC Engine

...

...

...

Linux Kernel

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?

Be careful with published interfaces

Service FacadeCompatible ChangeBasic Integration RefinementAdapterStrategy

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);   // ...}

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

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

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

Separate release cycles

JS UI Components

Releases

ProductRelease

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

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Document architecture

Document architecture

Document architecture

Create communities

Communities of practice

Internal Q&A site

Hackathon

Document libraries

Run architecture workshops

At start of release, or at start of sprint

PRINCIPLESTEAMS STRUCTURE

ARCHITECTURE AND DESIGNCONFIGURATION MANAGEMENT

ALIGNMENTFEEDBACK

Invert the testing pyramid

Run system tests continuously

time time

qualityquality

Waterfall Agile

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

SYSTEM TESTS

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

THANK YOU!QUESTIONS?

flavius.stef@mozaicworks.comI'm on Twitter, LinkedIn, FB

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