How To Build Quality Software Fast • Dave Farley • GOTO 2022

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] if you write software you want to do a good job and you want to do it quickly people may tell you that you can't do both but i'm here to tell you that you can continuous delivery works it's the best way that we've found so far to create great high quality software efficiently this isn't my opinion this is what the data says and empirically the fact that this is the approach that many maybe most of the best software companies in the world choose to take at its heart is an important surprising maybe even fundamental lesson there's no trade-off between working quickly and working with high quality you can have your cake and eat it you can have speed without compromising quality this is somewhat surprising counter-intuitive perhaps but it's borne out by the data you get better software by moving more quickly [Music] hi i'm dave farley of continuous delivery welcome to my channel if you haven't been here before please do hit subscribe and if you enjoy the content hit like if you'd like to learn more about continuous delivery what it really is and how to practice it check out my training course better software faster again link in the description below most organizations begin software development with what seems like a very sensible assumption and then make some bad mistakes it seems obvious self-evidence that doing a good job takes time high quality work comes at the cost of taking a lot of time then most commercial organizations make their big mistake we don't have a lot of time everyone talks about first mover advantage so let's do low quality work to save time now when i say organization i don't just mean the man somewhere else we develop as a part of the organization too we often do this to ourselves as well as having pressure put on us by others to cook corners there's often a kind of social pressure within an organization an assumption that everybody shares that you can save time by cutting corners the trouble is that it really depends on the corners that you cut if you've ever skipped testing to save time you've made this bad trade if you've ever done a quick and dirty fix you've cut corners on quality i think of continuous delivery as a lean approach by that i mean that we aim to work as efficiently as we can identifying and eliminating waste so cutting some kinds of corners my mental model of lean thinking is very simple we want to maximize our output while minimizing the work that we do to achieve it a fundamental tenet of lean thinking is to build quality in this matters not only because we value quality in software but that quality matters if we want to move fast and let's be clear about this not every organization does value quality even when they say they do quality is at the heart of our ability to move fast in a sustainable long term way the effectiveness of software development is measured over long time periods not weeks unless you are writing something simple and throwaway that is the data is pretty clear the state of devops reports repeatedly find that there is no trade-off between speed and quality that is teams who score well on speed consistently score well on quality teams that score poorly on quality consistently score poorly on speed too it's not just that you can create better software faster it's that if you want to create better software you need to move faster and if you want to move faster you need to create better software these are linked why is this it does sound counter-intuitive if you want to do work with high quality we'll need to spend more time thinking coming up with better simpler solutions to the problems that face us we'll need to spend more time testing things too to confirm that our quality is good clearly this must slow us down well sure this is missing something important though the cost of rework all that time we spend trying to figure out why we went why it went wrong it's time spent in bug triage meetings time spent trying to figure out how to reproduce the problems that we found time spent supporting customers who are trying to work with broken software this stuff comes at an enormous cost quoting the state of devops reports again teams with high scores in stability and throughput those are metrics that measure the quality of our work and the efficiency or speed with which we deliver it they spend 44 percent more time on new features that's not 44 more time if you ignore the time taken to do a good job that's including all of the extra time it takes to do a good job quality software allows us to make progress more quickly not less so yes it takes more time to do a good job but this time spent is more like an investment than a cost cutting corners on quality during the development process is rather like deciding to save time by not brushing your teeth you can certainly save a few minutes every day by not brushing your teeth but ultimately your teeth fall out when the hp laserjet team decided to switch their development approach to continuous delivery they did an analysis of how they spent their time before they made the change and after here's the before and after after they spent a lot of time on testing continuous integration test automation and so on techniques focused on improving the quality of their work but despite this they ended up spending eight times more time on new features so good quality code improves our speed what about the other way around what's the impact of speed on quality well one of the things that i mean when talking about speed is speed of feedback i describe great software development has been focused on two things optimizing to be great at learning and working to manage the complexity of the systems that we build i think that managing complexity is closely related to the technical quality of the systems that we build i'll talk about what i think quality means another day in the meantime let me know in the comments what you think of as the hallmarks of quality in your code optimizing for learning though is just as important at the beginning of software development we don't yet properly understand the problem domain we may not be wholly familiar with the tech that we have chosen to use or the team that we are working with or what our users really want of the system we certainly don't know what our design should be or if it will work out as we hope all of these things are things that we must learn in nearly every software development so i think that we should focus on being excellent experts at learning to do that we need to adopt the tools of excellence in learning the ideas at the roots of science assume you're wrong rather than write work iteratively control the variables make progress in small steps gather feedback make progress as a series of experiments building incrementally on what you've already learned crucial central to all of these ideas is the idea of making progress in small steps small units of work are simpler to understand have fewer places for mistakes to hide are more easily tested and they're easier to step back from if we make a mistake and they're lower risk if we make progress in small steps we have more opportunities to learn one of the reasons that organizations don't work in small steps is because there's a kind of overhead associated with making change in software if your release process depends on manual testing for example before you are comfortable with releasing changing to production then it's slow expensive not very repeatable and rather risky but also the cast is a fixed overhead let's imagine that it takes a week to do manual testing for your system before it's ready for release it takes you a r week to do the release then it would be ridiculous to imagine releasing every hour or every day so instead you're going to do enough work to justify the overhead of the release process a few weeks maybe let's say three so we do three weeks development followed by one week of testing and releasing and so release we're releasing changes roughly once per month each month we release about three weeks worth of work if i as a developer introduce a change that causes a problem in week one and if i'm relying on testing to find it best case is that i don't find out for another three weeks the person doing the testing will need to record the bug they'll need to try and describe it in a way that makes sense to the development team ideally with enough detail so that the developers can reproduce it so when the bug report comes into the dev development team we'll have to figure out whether it makes sense or not whether it matters or not whether we can afford the time to fix it or not who's best place to work on it and whether we can reproduce it if not then maybe we're going to get into some kind of defect tennis batting the bug backwards and forth between the developers and the testers in the three weeks that have passed i the original developer have moved on now i'm working on something new and i probably don't remember all of the details of what i broke so it's going to take me a little while to get back up to speed to figure out what's wrong with this bug as well as that by this time all of the other developers and i have added loads more changes some of them may be built on top of the change that's now causing this problem so this is going to be tricky to unpick i'm also probably now under a fair bit of time pressure we found the bug late in the process and we're either in the middle of the testing week or just after and presumably the release date is either looming or being delayed awaiting my fix and re-test there's a lot of pressure on me to do a quick and dirty fix now so let's now imagine that we are only going to concentrate on improving our speed nothing else let's start by deciding that we'll release change once a week or once per month or once every three months a time scale that's shorter than we can sensibly achieve now one of the big problems will be the manual testing it's expensive in terms of time so if our aim is to force ourselves to speed up then we must address that so we replace the manual testing with automated tests initially we do the same tests as before but automated they're going to run more quickly because they're automated that gives us an immediate speed up let's say they run in one day instead of a week not very ambitious goal i admit you can probably do better than that but it will do for the purposes of our example if we can run our tests in a day we can probably run them every day perhaps overnight so now i'm a developer and once again i commit a change that breaks something the following day i'm notified of the failure this time not by some second-hand description of the failure created by a tester but by the presence of a failing test i'm probably going to be more easily able to figure out that i caused the problem because it was definitely caused by a commit during the previous working day or the day before tests would have already failed so i have fewer potential causes to look at there's no translation step in trying to describe the failure with a failing test there's no question of reproducing the problem either we can simply run the test again and watch it fail i'm not under any direct time pressure now so i'm working with a simpler problem because there's been less time to complicate it with more changes with less time pressure because even if it means that i can't fix it today i can probably fix it tomorrow and i have a completely reproducible failure that i can work on which of these two processes do we think will produce higher quality work working with higher quality improves the speed with which we can make progress working to speed up forces us to eliminate waste in our processes optimize our approach improve the quality and speed of our feedback and moves the identification of problems from the end of a cycle to closer to the point at which the problem was introduced so making it easier to fix there's no trade-off between speed and quality in fact it's quite the reverse working with quality improves speed working with speed improves quality it's a virtuous circle thank you very much for watching [Music] [Music] you
Info
Channel: GOTO Conferences
Views: 9,465
Rating: undefined out of 5
Keywords: GOTO, GOTOcon, GOTO Conference, GOTO (Software Conference), Videos for Developers, Computer Science, Programming, Software Engineering, GOTOpia, GOTO x Dave Farley, Dave Farley, Quality, QA, Speed, Continuous Delivery, CICD, DevOps
Id: NgFVrvwth-Q
Channel Id: undefined
Length: 15min 17sec (917 seconds)
Published: Fri Mar 04 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.