Slide 1

Slide 1 text

Lean Software Development …in pratica! Matteo Vaccari

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Two things that work: 1. Extreme Programming 2. Lean Thinking

Slide 4

Slide 4 text

Who is this? software developer agile coach extreme programmer TDDer Thoughtworks Italia

Slide 5

Slide 5 text

What is lean?

Slide 6

Slide 6 text

CUSTOMERS

Slide 7

Slide 7 text

Continuous Design Continuous Delivery MVP MVP MVP Ideas CUSTOMERS

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

1. Waiting.

Slide 10

Slide 10 text

Nella manifattura, si ottimizzano le operazioni cicliche E nel software?

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

From Growing Object-Oriented Software by Nat Pryce and Steve Freeman

Slide 15

Slide 15 text

Tempi di startup di una web application (Java) • Tomcat: ~30s • Dropwizard: ~3s • Embedded Jetty: <1s

Slide 16

Slide 16 text

2. Technology.

Slide 17

Slide 17 text

Principle #8 – “Use only reliable, thoroughly tested technology that serves your people and process.”

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

X is awesome! X is crap!

Slide 20

Slide 20 text

AngularJS is 10 times more expensive than server-side generated html

Slide 21

Slide 21 text

Do you really think that you will deliver faster with Scala?

Slide 22

Slide 22 text

0 10 20 30 40 Potential improvement by using new technologies Potential improvement by
 improving sw design skills

Slide 23

Slide 23 text

Anybody can learn Scala or AngularJS Very few can deliver quality software on time

Slide 24

Slide 24 text

public class XServlet extends HttpServlet { // ... @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { WebRequest webRequest = new RealWebRequest(request); RealWebResponse webResponse = new RealWebResponse(response); SqlInterpreter sqlInterpreter = null; try { sqlInterpreter = new SqlInterpreterFactory(environment, webRequest).build(); Request ourRequest = new Request(sqlInterpreter, webRequest, environment); Controller controller = router.getControllerFor(ourRequest); controller.execute(webResponse); sqlInterpreter.commit(); } catch (Exception exception) { rollback(sqlInterpreter); logger.error(this, request, exception); throw new RuntimeException(exception); } finally { close(sqlInterpreter); LocalizedString.preventTomcatComplaining(); } } // ... }

Slide 25

Slide 25 text

3. Single-piece flow

Slide 26

Slide 26 text

Single-piece flow Each operation only builds what the next operation needs

Slide 27

Slide 27 text

Single-piece flow WIP = 1

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

James Shore

Slide 30

Slide 30 text

WIP=1. Come?

Slide 31

Slide 31 text

Conway’s Law Software structure tends to reflect the structure of the organization

Slide 32

Slide 32 text

Software designs that enable single-piece flow

Slide 33

Slide 33 text

So…. what works?

Slide 34

Slide 34 text

Lean • Start from the customer’s needs • Optimize the flow from end to end • Grow your people • Improve always

Slide 35

Slide 35 text

Software design • Protect your development loop time • Improve your programming/design skills! • Exploit software design to hack Conway’s Law

Slide 36

Slide 36 text

matteo.vaccari.name/blog twitter.com/xpmatteo thoughtworks.com THANK YOU