- The developer journey
- visualize devs' emotions during their workflow
- make sure to provide a good experience for your devs as well (not only for customers and users)
- Pairing vs Review
- Good / bad User Stories
- Feature branches vs. trunk based development
- embed trunk-based dev in your SW workflow
- Semantic Versioning
- Automating the versioning process?
- Traceability
- Running stuff on dev workstations vs running stuff in CI/CD vs running stuff in Production
- Docker to the rescue
- spin up all the things locally
- provide containerized dev envs
- Automate all the things
- Use the same scripts in dev and in CI/CD
- Provide a inspiring developer experience
- e.g.
- build locally (in a container)
- run locally (in a container)
- run tests
- start dependencies (database...)
- run your pipeline logic during development, too
What makes a good pipeline -> link to Mario's talk
- the pipeline is code
- it's declarative
- it's versioned with your code
- the pipeline is visual
- it scales
- with project size
- with number of builds
- with number of repositories
- it is not some snowflake configuration in a clicking-only UI
- locally executable
- see
do
script
- see
- it should not be the super-complicated unicorn script that no developer ever wants to touch
- Good READMEs
- same structure
- kept up-to-date
- have similar pipelines for similar projects
- makes it easier for onboarding
- devs are less scary to touch / repair things, because they know it
- spend your time on the business value, not on fixing your tools
- a CI/CD toolchain itself brings no business value
- easily speed up things by adding more powerful build agents (Cloud...)
- takes care of the ugly stuff
- build agents for different architectures
- cleaning up
- resource management
- credentials management
- inject at runtime (e.g. Vault)
- security scans
- Docker images
- libraries and dependencies
- securing the delivery process itself
- again: Docker to the rescuee: signing images, trusted registries...
- Find a good balance between reducing redundancy and keeping teams autonomous
- Strive for small components with less blast radius but faster release cycles
- avoid blocking of releases due to waiting on other people's code
- Idempotence (re-running stuff should do no harm)
- Avoid any manual intervention
- think about this right from the design phase
- Design for blue / green deployments
- provide health endpoint
- Antip-Pattern: "the one person taking care about the pipeline in the team"
- involve everybody, make the pipeline a "shared responsibility"
- bring it into tech huddles, make sure everyone in the team understands how things work
- involve client / PO, make sure they understand the importance of time spent on CI/CD and how this improves the team performance
- logging of passwords
- accessing credentials / vaults
- about
exit 0
set -... pipefail