Rolling

Lean software development

Principles

  1. Eliminate waste
  2. Amplify learning
  3. Decide as late as possible
  4. Deliver as fast as possible
  5. Empower the team
  6. Build integrity in
  7. Optimize the whole

⬇️

Eliminate waste

  1. Partially done work
  2. Extra features
  3. Relearning
  4. Task switching
  5. Waiting
  6. Handoffs
  7. Defects
  8. Management activities

  1. Building the wrong feature or product
  2. Mismanaging the backlog
  3. Rework
  4. Unnecessarily complex solutions
  5. Extraneous cognitive load
  6. Psychological distress
  7. Waiting/multitasking
  8. Knowledge loss
  9. Ineffective communication.

Amplify learning

  • Learning by coding
  • Testing before documentation
  • Short iterations

Decide as late as possible

Uncertainty → Delaying

Deliver as fast as possible

  • Just In Time

Empower the team

People != resources

Build integrity in

How to build

Optimize the Whole

the whole is always more than the sum of its parts

Customers > Company > Team > Self

Automation

Why

Time

Manual tasks: ~ linear time

Automated tasks: invest + profit

Quality

Manual tasks: variable

Automated tasks: uniform

On-boarding

Manual tasks: human process

Automated tasks: Industry standard

What

  • Provisioning
  • Commissioning
  • Configuration
  • Deployment

How

Infrastructure-as-Code

Join Infrastructure as code, we have tests

“cloud”

  • virtualization

Orchestration

Ansible, Salt, Terraform, Cloudformation

Configuration management

Maintaining a state based on data

Ansible, Bcfg2, CFEngine, Chef, Otter, Puppet, Salt, Terraform…

CI

Why

  • Test smallest increment possible
  • increase bus factor

What

  • release
  • test
  • build

How

Environment spwaning

Examples

  • Jenkins
  • Gitlab CI
  • CircleCI
  • Travis

Impact on my application

Github flow

Branch → Pull Request → Validation → Merge

12 factors

  1. Codebase One codebase tracked in revision control, many deploys
  2. Dependencies Explicitly declare and isolate dependencies
  3. Config Store config in the environment
  4. Backing services Treat backing services as attached resources
  1. Build, release, run Strictly separate build and run stages
  2. Processes Execute the app as one or more stateless processes
  3. Port binding Export services via port binding
  4. Concurrency Scale out via the process model
  1. Disposability Maximize robustness with fast startup and graceful shutdown
  2. Dev/prod parity Keep development, staging, and production as similar as possible
  3. Logs Treat logs as event streams
  4. Admin processes Run admin/management tasks as one-off processes

End

return