21. • There's no space for clever code in most
companies out there: maintainability
• It's something other developers care about, they'll
eventually have to look at it too: reusability
• If you think about testing early enough it will be
easier to write tests against it: testability
CHRIS
Not going to give a self-promoting introduction. We are quality coaches, if you want to know what that is, then speak to us after.
We both have Computer Science degrees and have spent our careers in technical software testing
JOSE
Explain a bit about Redgate and what it does:
20 years old
Predominantly Microsoft SQL Server tool vendor in the past
Moving towards other databases at the moment
Offices around the world
300+ people (not all in the picture)
Introduce the ingeniously simple tagline
CHRIS
We are going to share with you our thoughts and experiences of creating good quality software products
CHRIS
Before we do anything else, lets work out what we mean by quality.
Take a minute to think about what “quality” means to you, think of 1 or 2 words that you feel best defines quality.
…
Who would like to share? <pick a few at random>
JOSE
Quality is subjective
Quality is value to some person, that matters.
JOSE
A more general (less software based) definition by Drucker which again focuses on the end user.
CHRIS
In the software world especially, Quality has been synonymous with Testing.
Familiar with Testing? We could do a whole other session on testing…
Testing doesn’t have to just be testing the code/product… test the documentation, test the designs, test the ideas
Just as Testing is just about the product, Quality isn’t just about testing
CHRIS
Several issues here.
The Testing phase of a waterfall project typically happens once most, if not all, of the product has been created.
The Testing phase is seen as the “Quality Gateway”
The Customer has input into the requirements but then doesn’t see anything until it’s released (often many months/years later)
Everything is happening too late.
JOSE
Our understanding is that you’re a little bit familiar, or at least heard of, with Agile development?
That’s all good and well, but is Agile the solution to all software problems?
JOSE
Read out the manifesto, bearing in mind they have heard about it already (or will be covered as part of the module)
JOSE
Mention things like change, delivering working stuff, customer at the forefront of what we do, simplicity, reflection/retrospective.
CHRIS
The iterative nature of Agile development encourages short feedback loops.
- internal feedback (stakeholders, team) – code reviews, product reviews
- external feedback (early-access users, existing customers)
Being collaborative with those stakeholders
** be prepared to have your ‘baby’ criticized or challenged.
** by all means defend your reasoning, but listen to the feedback - YOU might be wrong!
CHRIS
** get in the mindset of doing whatever needs to be done to PROVIDE VALUE!
You can have the best engineered, best designed product IN THE WORLD!
… But if it isn’t what the user wants
… if it doesn’t provide value to the user, then it’s worthless.
JOSE
We’re going to show how the approach to quality has evolved over the years and how this related to our Agile journey
JOSE ( How are we doing for time? If 20 minutes or less, then spend more time here
If over 25 minutes then cut it fairly short )
2008 – Introduced Agile “Scrum”… in reality this was a series of mini waterfalls. Developers coded, Testers tested,
2011 – still doing fairly laborious release testing, ~6 monthly releases
2013-2014 – some teams have managed to get to weekly releases – but quality was suffering
2016 – big restructure say a focus on pushing the responsibility for quality to the developers - show & tell
Today – code quality has increased significantly; most teams are developing new products or features collaboratively with willing customers; many teams are choosing to release weekly, but are able to release much faster.
- mixture of Scrum, XP, Lean. Each team has evolved differently - the very essence of an Agile team.
JOSE
Relate this to some of the principles we've touched on like team autonomy
Motivated individuals
Quality: continuous delivery (future), feature flags, focus on outcomes (objectives and key results driven from the team)
Different stages of product also affect quality (remember it's about value to someone)
CHRIS
(Ask the attendees) Who has heard of the term DevOps? Anyone would like to share what they think it is?
DevOps is a set of practices that combines software development (Dev) and information-technology operations (Ops) which aims to shorten the systems development life cycle and provide continuous delivery with high software quality
CHRIS
There's no separation of development and operations anymore. It's about shared ownership of the whole lifecycle.
Where do you think testing happens?
CHRIS
Quality doesn’t stop at how easy a product is to use, or how well it works,
… it also extends to the quality of the code you write.
It makes sense that the better quality your code, the better quality the product.
What constitutes good quality code?
CHRIS
Some of the best developers I’ve worked with have written the simplest code to achieve a goal.
I’ve written code that I’ve looked at a week/month later, and wondered what the hell I was on, or taken ages working out what it does.
Imagine someone else reading it!
SOLID Principles
Loads of resources online for writing “Clean Code” and “Testable Code”
JOSE (although I think input from both of us here is probably good)
Important to realise that nothing is perfect – no product is perfect.
Product development is a series of trade-offs –
iPhone; how it started, not perfect but value to someone (not the best camera but most of you have one, didn’t even have copy and paste in the very first iPhone)
Feedback is important; companies like amazon and eBay “go live” hundreds of times a day
Chances are they will get something wrong, but they can react quickly, and errors are contained
Early access preview option in most products/companies
But above all, will it provide value to its users
JOSE
JOSE
Quality is subjective
CHRIS
Here are several resources we find useful for our new (and experienced) engineers.
Be wary of most “Agile” content on the web. Many companies claim to ‘do Agile’ but very few actually embrace the Agile principles.