Lean software development

Laten we beginnen. Het is Gratis
of registreren met je e-mailadres
Lean software development Door Mind Map: Lean software development

1. Reduce waste

1.1. Anything that doesn't currently give the customer value

1.1.1. Only analysis and code add value Royce - Management of large software systems

1.1.2. E.G. Partially done work May not be included Risk of bugs Extra process Don't document until implementation. Earlier stuff may be out of date. Consider what paperwork is needed and what the best format is Management doesn't add value but impacts the amount of waste Complex tracking systems are waste Extra features May not be used More code to test, debug and maintain Task switching Time to switch between tasks delays delivery Waiting No progress while waiting for external things Motion Getting data from others Document hand off Artifact transfer Defects

1.2. Value stream mapping

1.2.1. Waste / value against time diagram

1.2.2. Traditional process have a lot of waste at the start. When waiting for requirements to be finalised.

2. Amplify learning

2.1. Transfer principals, adapt practices

2.2. Right first time

2.2.1. IFF implementing a known solution to an understood problem

2.3. Iterative

2.3.1. Learn more each time Problems visible earlier Planning based on latest knowledge

2.3.2. Fix gaps in knowledge Thought Collaboration Testing

2.3.3. Iterations short enough for regular feedback but avoid thrashing Only take requests between iterations Start with essential features Add more as time and budget allow Track progress to see if on schedule Burndown chart Tests passed / tests written

2.4. Royce suggested "doing the project twice"

2.4.1. Sub team to investigate areas of uncertainty

2.5. Waterfall is deterministic

2.5.1. Details know at the start People likely to suggest everything that may be useful

2.5.2. Clear contract Managment enjoys the illusion of control & predictability PM focus on scope, cost and schedule over suitability

2.6. Milestones Points where code can be merged

2.6.1. Allows concurrent development

2.7. Synchronisation

2.7.1. FDD Modules have owners Feature collaboration by relevant owners

2.7.2. Span the application ASAP Add depth later

2.7.3. Start with interfaces Allows mocking Allows synchronisation Modules can communicate

2.8. Set based development

2.8.1. Consider range of options

2.8.2. Prototype to get the best value (or combination of values)

2.8.3. Use constraints Solution should appear

3. Decide as late as possible

3.1. Breadth first approach

3.1.1. Overview of everything

3.1.2. More time to discover issues that can't be spotted from the depths

3.2. Code that's costly to change is waste

3.2.1. Make changeable areas into modules

3.3. High cost decisions (reduce)

3.3.1. Language

3.3.2. Architecture

3.3.3. Inter system interactions

3.4. Easy to respond to likely changes

3.4.1. Areas changed in development likely to be adapted later

3.4.2. Need adaptability without excessive complexity

3.4.3. Modifications will have cost

3.5. Avoid planning based on guesses

3.6. Absorb changes

3.6.1. Modules Single purpose

3.6.2. Interfaces

3.6.3. Parameters for magic numbers

3.6.4. Abstractions

3.7. Simple rules / checklists

3.7.1. Don't need to wait for management

4. Deliver fast

4.1. Using more recent data for better decisions

4.2. Pull systems

4.2.1. Devs can get their next task

4.3. Queuing theory

4.3.1. Cycle time Average process duration Want to reduce this

4.3.2. Regularly add small amounts of work Leads to consistent rate of progress

4.3.3. Greater utilisation causes longer cycles

4.3.4. Want to reduce bottlenecks

4.4. Cost of delay

4.4.1. If considering a purchase Hours saved against cost not enough Include loss of income & market share

4.4.2. If options have financial cost use that in decision making

5. Empower team

6. Build integrity in

6.1. Conceptual integrity

6.1.1. Ideas work together

6.1.2. System combines Flexibility Maintainability Efficiency Responsiveness

6.1.3. Requires collaboration Info shared ASAP Small chunks Bidirectional Face to face

6.1.4. Use existing components when possible Architectural layer patterns Presentation (UI) [Services (transaction control)] Business logic [Translation] Data source Notes:

6.1.5. This helps with percieved integrity

6.2. Percieved integrity

6.2.1. In traditional sdlc requirements go via analysts and designers Multiple degrees of separation from what customers wanted at some point

6.2.2. Better approaches: Customers use sub system protoypes Lead dev knowledgeable about the tech and customers situation Customer and devs use a common model

6.2.3. MDD Conceptual Domain Model Overview Glossary Ubiquitous language Use customer (domain terms) not tech ones Use case model User stories Qualifiers Considerations for the production environment

6.2.4. Start with abstractions Add details during implementation Communicate at highest viable level

6.2.5. Customer uses model to approve concepts

6.2.6. Unit and regression tests check code

6.2.7. Unt tests and abstract overview should be enough to summarise the system

6.3. Refactoring

6.3.1. New features added If related change architecture to support it Avoids losing conceptual integrity

6.3.2. Must maintain: Simplicity Clarity Follow conventions Meaningful names No duplicates Fit for purpose Lack of bloat (unrequested features)

6.4. Testing

6.4.1. Describes how a thing should work Is docs Customer tests function as requirements Pass Dev tests Are the internals working as expected

6.4.2. Checks that it does

6.4.3. Allows changes to be made

6.4.4. Testing vital so repurpose it for documentation

7. See the whole

7.1. System thinking

7.1.1. Considers Parts and their links

7.1.2. Modeling the system shows the impacts of policies Including Side effects Impacts on other areas

7.1.3. Policies can exacerbate the problem Possibly leading to more rigorous enforcement of the poison policy

7.1.4. A process may help initially but not cure Limits to growth Side effects that reduce the gains Shifting the burden Problem difficult to fix Mask symptoms instead suboptimisation Devs working with a part of the system They optimise their bit

7.2. Measurements

7.2.1. Can be dangerous Wrong metrics Incomplete set These number look good, so encourage a bad direction