Complexity of organizational design and its effect scaling agility
Scaling Agility: The Technical Angle
-
Upload
flavius-stef -
Category
Software
-
view
248 -
download
0
description
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
(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?
[email protected]'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