Quality Comes From Space
A Ridiculously Giant Question
I'd like to pose a ridiculously giant question to you: how do you take a team of programmers and client reps and designers and clients and a contract and deadlines and build a quality product? Or more simply, how do you build a quality app?
We, as an industry, have a lot of answers to this question: Agile, Lean, TDD, Continuous Integration, Continuous Deployment, Domain Driven Design, Acceptance Testing, SOA, Micro Services -- have I forgotten a buzz word?
These are good and helpful things, but even if executed perfectly, and let's face it none of these are defined so specifically for the concept of perfect to apply, they are not enough to guarantee quality. I don't believe that "doing Agile" can guarantee a quality product, it can help, but it can't guarantee it! And not because of disagreements we might have about what "Agile" is. Well maybe because of that, but for the sake of argument lets go ahead and pretend we all agree and we all "do Agile" perfectly. Even in that case, I think there are a lot of nebulous factors that affect the day to day practice of these things. And this nebulous stuff has an outsize impact on quality.
Lately, one of the key nebulous details I've been thinking a lot about is space. Or time. Or Space-time?
To build a quality app everyone on the team has to take the time to think deeply and carefully about the work. ALL the work: design, UI, UX, code, testing, documentation, communication with clients, operations, every single part. We need to have the space to stretch out and explore. First, we need space to even have a thought. Then the space to explore the thought. Turn it over, look at it from different angles. Does it fit? Does it look good? Is it nicer in some ways than a different idea, worse in other ways? Should we change what was planned and do something different? What would that cost? Would it be worth it? We need the space to talk these ideas over with our co-workers and see where they take us. And we need the space to look at the whole product too, to see how what we are focused on now does or does not fit in.
When you look at work done without this kind of space, it looks sloppy. It's tempting to accuse the people involved of being lazy, or of just not caring, or even of being stupid. But that is not the reality. People were not being lazy, if anything quite the opposite, they were busting their asses to get things done. And they certainly cared, that's why they hit their deadlines. And if you could time travel back and look at each decision in its context you'd see that not only were the decisions decidedly not stupid, many were downright clever.
But despite all of that, when people don't have space, the resulting work looks sloppy, inconsistent, hacky, buggy, ugly, whatever. It's an interesting phenomenon that a group of dedicated, caring, and smart people, when put under the gun, can produce something lacking in quality. Maybe that's more depressing than interesting actually... but whatever it is I think it is true.
Why Does This Happen?
What robs a team of this kind of space? Unrealistic deadlines, certainly. When the future of the project and company rides on hitting a certain date, quality is what gets sacrificed. But not intentionally. Nobody ever says, "well, we'll hit that date, but to do it, we're going to write sloppy code and make the UI inconsistent and buggy." It's just that the deadline forces everyone to be in a hurry. And that's actually a very responsible reaction, isn't it? But when you're in a hurry, you don't have the space to be creative and attentive, and without that, you get slop.
Cultural problems can rob a team of space too. If seeming fast is the most important trait on a team, then people will act like they're under a deadline even if they aren't. Basically creating self-imposed deadlines. And since it's so easy for quality issues to go unnoticed for a long time, and when noticed so difficult to see they resulted from being in a hurry, this is hard to correct. It's a destructive feedback loop.
Trust problems can rob a team of space too. If your opinion isn't strongly counted and valued it won't take long before you get the message and stop wasting your time thinking about stuff.
Over-simplification can cause this as well. If wishful thinking has led you to believe something should be simple, but it turns out for whatever reason that it isn't simple, it can be easy to get trapped just trying to quick quick get it done.
Can You Prove It?
Of course not! But this is all very reminiscent of The Candle Problem, which I first learned about in Dan Pink's well known Ted talk, where the takeaway is that incentives hurt our creativity instead of helping it because they narrow our focus and prevent us from having lateral insights. And yeah, that seems right to me, I think a lack of space leads to a lack of lateral insights and creativity.
So, quality comes from space. And that means its important that if you want quality your team has to have the space to think. Its OK to be in a hurry once in a while, but it can't be the default mode. The default mode has to be one where people have the space to be creative, and think, and talk. And then you have to do all the other stuff right too.