The linchpin of large-scale software development? Communication.
“I fear the day that technology will surpass our human interaction.” — Anon
Twelve months ago, I walked into Tasktop as a software rookie. I knew what software was, of course, and I knew of its importance in a digital world. But that was pretty much the extent of my knowledge. Much like the internet, free healthcare and air travel, I was aware that software greatly enhanced my life, but I had never really thought about the ‘how’.
Those days are now long gone. Well, at least in terms of my ignorance to software development. I still assume that the internet is a natural gas, doctors and nurses work purely out of the goodness of their heart, and I still don’t want to put too much thought into how planes — i.e. GIANT PIECES OF METAL — stay in the air. It’s not good for the ol’ ticker, especially as I fly over to England from Canada to see my mum from time to time.
That said, everything that you think software development entails is probably true. Super smart and creative people, lines and lines and lines of code, lots of gadgets and programs, intricate processes and alien languages…it’s all there. Oh, and acronyms. Lots. I often feel like I’m trying to decipher a game of drunken scrabble.
In short, a lot of complex stuff goes on behind your bank account, favorite game, app and website. And that stuff is perpetually changing — as constant as the movement of time — a restless beast that’s always seeking to improve and evolve. But none of this was really a surprise — I’ve seen Tron.
No, the biggest realization was that while enterprise-level software development is super advanced technical science in terms of tooling and programming, it’s somewhat backwards in terms of communication. And this aspect is what often holds back an organization’s capability to continuously produce high-value software. Or to be more specific, restrains the key people involved in driving and optimizing the process.
If you asked industry ‘outsiders’, or even some ‘insiders’, what the fulcrum of software development was, they’re likely to say ‘technology’. Makes sense. Software is created by technology. It’s maintained by technology. It’s enhanced by technology. Hell, it is technology. But the one thing technology cannot do is develop software without the human touch.
By the same token, humans can’t develop software — good software, anyway — without nifty technology; they need effective ways to plan, build and continuously deliver software. But the relationship between practitioners and technology goes even deeper than that. They need each other. They’re beholden, symbiotic, practically one and the same, bound together by the same goal. Except for one significant distinction: technology is not a sentient being (sorry Siri, Watson et al.)
While technology undoubtedly makes our working and personal lives better in so many ways, we all know it’s a double-edged sword. We’ve all considered defenestration, imagined the relief of sitting back and watching our crash-prone laptop burst through the office window and plummeting to the street below. Our computerized buddies, on the other hand, have only ever wanted to help us.
And this ill-feeling, this frustration, is much worse in software development because it’s silent. It’s a quiet, lingering pain, like a nascent cavity in a tooth. And finding, identifying and addressing that invisible discomfort is critical if you’re to make a success of large-scale software delivery. Because the best-of-breed tools can only take us so far — we are the brains. And we must communicate with other humans brains if we’re to harness technology to its full potential.
I am reminded of the below quote (author unknown; it’s been attributed to Albert Einstein and Leo Cherne, among others):
“The computer is incredibly fast, accurate, and stupid. Man is incredibly slow, inaccurate, and brilliant. The marriage of the two is a force beyond calculation.
There’s loads of great tools for all stages in the software delivery process; project management tools have all the functionality to manage projects; Agile Development tools have all the tricks for planning and executing development; testing tools are damn fine at running code through its paces etc. But they all need to work together to maximize their value, communicating and sharing information so their users (and their brilliant brains) can work as efficiently and effectively as possible on the same projects in real-time.
But they don’t. These tools are built for purpose, and not necessarily designed to integrate with each other. Meaning the flow of information is stymied. Key artifacts such as defects are not automatically flowed between tools, forcing practitioners into time-consuming, frustrating, mind-numbingly boring means of manual communications. Endless email threads, status meetings, spreadsheets and duplicate entry — like astronauts trying to talk to each other using cups and string.
We all hate admin, and it’s enough to make anyone jump ship and seek pastures new. Lands where automation reigns supreme and AI is a treasured sidekick. We loathe monotonous repetitive tasks that distract from the job at hand. Those chores that don’t add any value.
In the case of practitioners across the software value stream, all they want to do is use their expertise and skills to deliver value for the customer and their business, pushing their abilities to the max and looking damn good in the process. But they’re not going to do that if they’re trapped in administrivia hell and spending time away from their real job.
To wrap up, while there’s hundreds of awesome pieces of technology in this industry, we can’t forget their sole purpose, and that’s to help people. If tools are regularly inducing both pain and joy, then key practitioners are going to become disillusioned. Because we often feel pain more acutely, and for longer, than joy.
So make sure you focus on human interaction across your tooling landscape to turn transform your double-edged sword into a single blade to create a ‘force beyond calculation’.