+ All Categories
Home > Software > How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The...

How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The...

Date post: 15-Jan-2017
Category:
Upload: skelton-thatcher-consulting-ltd
View: 1,473 times
Download: 2 times
Share this document with a friend
157
How to address operational aspects effectively with Agile practices Agile in the City – 20 th November 2015 #agileinthecity Matthew Skelton Skelton Thatcher Consulting @matthewpskelton
Transcript
Page 1: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

How to address operational aspects effectively with Agile practices

Agile in the City – 20th November 2015#agileinthecity

Matthew SkeltonSkelton Thatcher Consulting@matthewpskelton

Page 2: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“Operational Features”

how to develop and test

prioritisation techniques

collaboration approaches

Page 3: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

availability is the best feature

Page 4: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

transforming technology and teams

Cloud, Agile, DevOps

high impact expertise

Page 5: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

transaction reporting

credit reference

FOREX

online payments

Page 6: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Operational Features

Page 7: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“the properties of a system which make it work well in

Production”

Page 8: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Not PIMP MY RIDE

MORE

Greasy Mechanic

Page 9: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Not PIMP MY RIDE

MORE

Greasy Mechanic

Page 10: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Terminology

Page 11: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

what happened to NFRs?(non-functional requirements)

Page 12: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Non-Functional Functional

Page 13: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

language impact

Page 14: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

non-starternon compos mentis

non-compete

Page 15: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

nonsense !

Page 16: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 17: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

holistic product view

Page 18: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

How did we get to this?

Page 19: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

admission: IT folk have been guilty of making operational

features quite scary & mysterious

Page 20: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 21: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

long lists of requirementscrazy test plans

Page 22: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

poor explanation of needsfailure to engage stakeholders

gold-plating

Page 23: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 24: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

de-mystify operational features

Page 25: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

better approach

pragmatic and effective

rapid, safe, valuable

Page 26: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“the properties of a system which make it work well in

Production”

Page 27: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Why value Operational Features?

Page 28: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 29: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

downtime:

$$$reputation

($$)

Page 30: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 31: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

non-linear increase in complexity and problems

Page 32: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Internet of Things

Page 33: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

we can no longer deal manually with the scale/volume

of potential problems

Page 34: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 35: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

agility and response to incidents

Page 36: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 37: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

remote car hacking:

security as an operational feature

Page 38: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“We have ‘cloud’ now”

(HA + DR + Backup + Metrics + Diagnostics + …)

Page 39: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

think:"when it fails, how will we recover?“

it will fail

Page 40: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

How do we develop and test Operational Features?

Page 41: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

defined features

testable and measurable

Page 42: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

ahead lie the ‘ilities’...

Page 43: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 44: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

1. What2. How to test

Page 45: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Operational Hooks

Page 46: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 47: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Deployment Pipeline

Page 48: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 49: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Configurability

Page 50: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 51: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

re-read config (SIGHUP)

text files in version control

inject settings – no ‘black boxes’

Page 52: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 53: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

toggle features via config

“Postcode lookup unavailable”

better UX

Page 54: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Deployability

Page 55: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 56: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

immutable artefacts

concurrent releases (SxS)

symlinks

Page 57: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

rapid

scriptable

simple failure modes

Page 58: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Maintainability

Page 59: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 60: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

holding page as MVP!

Page 61: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

live system component diagrams

Page 62: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

modularity

ability to upgrade

version numbering (SemVer?)

Page 63: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

BasketItemAdded

grep BasketItem

Page 64: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

logging for insights

Page 65: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 66: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Testability

Page 67: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 68: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

every component has a /health endpoint

Page 69: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

stubbed/mocked/faked endpoints

test things individually

Page 70: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Recoverability

Page 71: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

asynchronous service start

expect services to be erroring

logs are not wiped (rotated: okay)

avoid flooding logs

Page 72: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 73: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

no nasty zombies after failures

MTTR more important than MTBF** for most kinds of F

Page 74: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Performance

Page 75: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 76: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

run key 'hotspot' areas early

use a deployment pipeline

‘critical path’

Page 77: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 78: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

early pipeline tests act as a barometer for later

performance problems

Page 79: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 80: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

derive transit time metrics

Page 81: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Monitorability

Page 82: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 83: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

stream of metrics

transaction tracing

Page 84: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Resilience

Page 85: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 86: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

assume missing or failing

Chaos Monkey

don’t crash on HTTP 503

Page 87: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Saboteur+

deployment pipeline

Page 88: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Scalability

Page 89: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 90: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

concurrent workers

queues and bottlenecks

throttling is your friend

Page 91: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 92: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Security and ‘securability’

Page 93: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 94: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

securability by practice

SSL certs & HEARTBLEED

Page 95: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Gauntlt+

deployment pipeline

Page 96: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Availability

Page 97: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 98: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“available but unusable"

synthetic transactions

Page 99: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

special HTTP header: trigger additional metrics/reporting

Page 100: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

How the organisation affects Operational Features

Page 101: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Budgets

Page 102: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

bonuses:

story points delivered

tickets closed

Page 103: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Capex vs Opextax breaks

Page 104: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

avoiding the Capex/Opex evil

Page 105: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Developers seen as more valuable than Ops people

3x hiring bonus for Devs (!)

Page 106: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

improved awareness in product teams

Page 107: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 108: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

share ownership and decision making

Page 109: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

features

end-user

operationalend-user

Page 110: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

single product backlog

Page 111: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 112: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Product Owner on call for incidents

Page 113: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

tricky!

high degree of maturity

honesty about the product

Page 114: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Product Owner and Tech Lead are both on the hook for

outages

Page 115: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 116: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

15-30% ‘tax’ on product budget for operational aspects

Page 117: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

AVOID

‘user features’ always taking precedence over

‘operational features’

Page 118: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

How to evaluate Operational Features vs User Features

Page 119: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

treat Ops team folk as another user persona

Page 120: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 121: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

alternatives to User Stories?

Page 122: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

NOT:

"as a logging subsystem, I want..."

Page 123: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Metrics

Page 124: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Live: downtime, A/B for operational aspects (speed)

Pre-live: time spent re-deploying

Page 125: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Metrics for better conversations

Page 126: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

metric-ify your delivery and test infrastructure

99.99% uptime, but 20 redeployments every time

Page 127: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 128: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Heuristics for operational features

30% of total product budget

30% of dev team time

Page 129: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Improving operational awareness

Page 130: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Run Book Collaboration

Page 131: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Run Book•Detailed description of how the system operates•Maintenance•Repair•Error recovery

Page 132: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Run Book / Ops Manual• 1 Table of Contents

• 2 System Overv iew • 2.1 Serv ice Overv iew• 2.2 Contr ibu t ing Appl ica t ions, Daemons, and Windows Serv ices• 2.3 Hours of Opera t ion• 2.4 Execut ion Des ign• 2.5 In f ras t ructure and Network Des ign• 2.6 Res i l i ence, Fau l t To le rance and High -Ava i lab i l i ty• 2.7 Throt t l i ng and Par t ia l Shutdown• 2.8 Requ i red Resources• 2.9 Expected Tra f f ic and Load

• 2.9 .1 Hot or Peak Per iods• 2.9 .2 Warm Per iods• 2.9 .3 Cool or Qu ie t Per iods

• 2.10 Env i ronmenta l D i f fe rences• 2.11 Too ls

• 3 Secur i ty and Access Contro l

• 4 System Conf igurat ion • 4.1 Conf igura t ion Management

• 5 System Backup and Restore • 5.1 Backup Requ i rements

• 5.1 .1 Spec ia l F i l es

• 5.2 Backup Procedures• 5.3 Restore Procedures

• 6 Moni tor ing and Aler t ing • 6.1 Er ror Messages

• 6.2 Events• 6.3 Hea l th Checks• 6.4 Other Messages

• 7 Operat ional Tasks • 7.1 Deployment• 7.2 Batch Process ing• 7.3 Power Procedures• 7.4 Rout ine Checks

• 7.4 .1 Sys tem Rebu i l ds

• 7.5 Troubleshoot ing

• 8 Maintenance Tasks • 8.1 Ma in tenance Procedures

• 8.1 .1 Patch ing • 8.1 .1 .1 No rma l C y c l e

• 8.1 .1 .2 Ze ro -D ay Vu l ne r ab i l i t i e s

• 8.1 .2 GMT/BST t ime changes• 8.1 .3 Cleardown Act i v i t i es

• 8.1 .3 .1 Log R o t a t i on

• 8.2 Test ing • 8.2 .1 Techn ica l Tes t ing• 8.2 .2 Pos t -Dep loymen t

• 9 Fai lure and Recovery Procedures • 9.1 Fa i lover• 9.2 Recovery• 9.3 Troubleshoot ing Fa i lover and Recovery

• 10 Contact Detai ls

Page 133: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Run Book / Ops Manual2.1 Service Overview2.2 Contributing Applications, Daemons, and Windows Services

2.3 Hours of Operation

2.4 Execution Design2.5 Infrastructure and Network Design

2.6 Resilience, Fault Tolerance and High-Availability

2.7 Throttling and Partial Shutdown

2.8 Required Resources

2.9 Expected Traffic and Load

Page 134: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Run Book collaborationDev team is responsible for the first draft

“But I know nothing about Production!”

Encourages collaboration with Ops team

Page 135: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Will Gray

Page 136: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

not documentation

build trust and understanding

automate more over time

http://runbookcollab.info/

Page 137: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

choose tools that encourage collaboration

Page 138: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 139: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 140: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

http://rashidkpc.github.io/Kibana/images/screenshots/searchss.png

Page 141: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

“How does [the use of] this tool help people to collaborate*?”

* Work together, at the same keyboard/screen

Page 142: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015
Page 143: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

‘How to choose tools for DevOps and Continuous Delivery’

http://bit.ly/ChooseDevOpsTools

Page 144: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

test early and often for operational readiness

Page 145: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

operational readinessnetwork testingsecurity testing

performance testingauxiliary infrastructure testing:

monitoringlog aggregation

Page 146: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

small set of rapid ‘weathervane’ tests for early warning

Page 147: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Network testingiTrinegy network emulators•Scripted setup and automated test runs•http://www.itrinegy.com/

Saboteur: •Network fault injection tool•https://github.com/tomakehurst/saboteur

Page 148: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Security testingGauntlt: http://gauntlt.org/

SSL certsHTTPSQL injection…

# nmap-simple.attack

Feature: simple nmap attack to check for open ports

Background:

Given "nmap" is installed

And the following profile:

| name | value |

| hostname | example.com |

Scenario: Check standard web ports

When I launch an "nmap" attack with:

"""

nmap -F <hostname>

"""

Then the output should match /80.tcp\s+open/

Then the output should not match:

"""

25\/tcp\s+open

"""

Page 149: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

When I launch an "nmap" attack with:

"""

nmap -F <hostname>

"""

Then the output should match

/80.tcp\s+open/

Page 150: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

Deployment pipelineMake operational testing visible

Page 151: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

holistic product view

Page 152: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

MVP: ‘service unavailable’ page

Page 153: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

test early for operational features

using a deployment pipeline

Page 154: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

single product backlog:

(user) features +

(operational) features

Page 155: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

availability is the best feature

Page 156: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

further reading

operabilitybook.comoperationalfeatures.com

Page 157: How to address operational aspects effectively with Agile practices - Matthew Skelton - Agile In The City 2015

thank you

http://skeltonthatcher.com/[email protected]

@SkeltonThatcher

+44 (0)20 8242 4103


Recommended