An agile introduction to DevOps â Working software
The agile manifesto says we value working software. What is working software anyway?
We can talk about software working in different contexts. First are the non-tangible parts (more working than software):
- Idea â The ideas for the product weâre going to build need to make sense and solve the our customer problem
- Design â We need to have a proper solution to the problem
- Components â Up to some level of design, the components need to work. We can prove that through unit and integration tests.
Then comes the whole software part:
- Tested â Both for function and the non-functional bits
- Fit for design â Does what we want it to do. This is the insight we get from testing.
- Fit for purpose â Does what the users actually want to achieve, not just what we think they need.
And then thereâs an additional part. Since software doesnât âendâ, even on release, there are going to future versions of it. It could be next year, or it could be next sprint, or 50 times a day. âWorkingâ continuously means:
- Donât break anything that has worked before
- Add value of new features with every release
Working software is a lot of work
And some of it is DevOps work.
But weâre not just going to spell out every skill out there. Instead, weâll use our agile spectacles to see how DevOps practices help us get to âworking softwareâ each step of the way.
Before we do that, letâs check our spectacles. Agile is a lot of things, but all the methodologies try to focus on common principles. Weâll focus on teh following principles:
- Minimize risk â Every agile methodology helps us navigate the seas of uncertainty. We do this by minimizing the risk of taking on full-on projects and implementations. We do it by restricting work in time.
- Minimize waste â The focus on valuable work and continuous improvement in order to reduce waste are also part of any agile methodology. Retrospectives are the key tools there, but visualization and learning from experiments help us as well.
- Early feedback â Without feedback we canât minimize risk nor waste. And weâd like to get that feedback as early as possible, obviously for the minimization part.
These three principles guide us toward better practices. Letâs see how they help us get to working software, in different stages of the product life-cycle, in DevOps context.
While the ideation and design are essential, until thereâs actual development, DevOps practices donât enter the picture. When they do, we associate them with developer practices, but they are really part of the big bucket of DevOps practices.
- Minimizing risk â Source control, branching methodology
- Minimizing waste â Continuous integration
- Early feedback â Unit and integration testing
Source control is pre-requisite for development, that IT was (and sometimes still is) responsible for. It is worth mentioning, not just because having a repository minimizes risks. As with many things, the tool is not the important part, itâs how you use it.
Enter branching. Deciding on how and when we branch is a DevOps skill. Mostly the decision is not done as part of analysis, more like ad-hoc, spare of the moment thing. However it has interesting side effects.
For example, we can decide everyone will be working on a trunk (instead than on personal branches, for example). This decision has the effect of when and how much code to merge. If hundreds of people work on the trunk, we increase the risk, and to mitigate this risk weâll do additional work (like setup preliminary testing prior to merge). Or split the code-base so we wonât be stepping on anyoneâs code, and not get involved in multiple merges per day.
Whatâs that? Whereâs XPâs âcollective code ownershipâ rule you ask?  Iâm not saying all development shouldnât be done by everyone on every code. My point is, that how we do branching, has an impact on development, IT, operations, etc..
Which leads me to continuous integration. The mind set, not the tool. How we continuously integrated derives from the earlier (yet evolving) branching decisions. When we are set on doing CI, weâll build the needed feedback cycles to do it. CI automation lowers the risk of errors, but also reduces the waste of integration. Combine it with different tests, and weâve got an awesome set of practices to develop working software properly.
I know what youâre thinking. This is not ârealâ DevOps practices, itâs just development.
It sure fits the definition of developers collaborating with IT we saw earlier. Iâm sure youâll agree itâs a skill we need on the team, and it doesnât matter who holds it.
Next time, weâll continue looking at DevOps principles and practices, as we move on to the testing phase.
| Reference: | An agile introduction to DevOps â Working software from our JCG partner Gil Zilberfeld at the Geek Out of Water blog. |

