This is a contributed piece for the Computer Weekly Developer Network written by Andy Piper, VP of Engineering at Diffblue — a company known for its technology which automatically generates tests for Java code to enable development teams to deliver higher quality software, faster.
Piper contends that software development today should all be about the user — a core truism that many developers may forget from time to time.
The truth is developers have to balance building the right product and building the product right and Piper says that very often, this is a bigger challenge than they may have initially thought.
Piper writes as follows…
Those who have been involved in the software industry for any significant period are fond of noting how the fundamental problems of our craft are largely unchanged. However, the driving purpose behind software development — who the product is being created for and why it has been designed in a certain way — has improved drastically.
Where software development was once about building a product the right way, modern software development is characterised just as much by a laser-sharp focus on building the right product. This includes incorporating design thinking, ideation and other lean approaches in the software development process, all of which essentially come down to three words: understanding the user.
Continuous value delivery
Continuously delivering value to the user depends on knowing exactly what they want and ensuring that you get it to them on time. For much of software development history, market researchers, senior management and other stakeholders set the requirements for a product all at once at the beginning of a project and software engineers built it according to these specs (and our own opinions about how the finished product should look and work) over weeks or months.
This approach resulted in products that were almost always late to the market and sometimes the wrong product entirely — the software equivalent of the ‘Spruce Goose‘, if you will.
Engineering teams today have made great steps to move away from the wasteful development processes of the late 20th century. Instead, every decision must be justified by the value it delivers. As a result, the ‘lean’ principles that got their start in car manufacturing at Toyota have found their way into daily life for engineering teams. Many of these practices focus on reducing risk by regularly verifying — with interviews, proofs of concept, user personas and stories — that the product being created is one users actually want.
Design thinking, which is a way of learning more about problems in order to ideate better solutions, used to be relatively niche—mainly the purview of think-tanks and consultancies. If it occurred in companies, it was likely practiced by small teams of product designers. Now, it’s engineering’s responsibility as well. At IBM, over 10,000 employees have been trained in applying their design thinking software development framework, which the company has since used to develop more than 100 products.
Finding the feature-quality balance
But it’s still not enough to just build the ‘right’ product. Building it to a high standard of quality is also vital, because it’s just as important to identify what the user doesn’t want: and one thing that hasn’t changed is an intolerance of bugs and poor user experience.
If you create a tool that someone explicitly asked for, but it barely functions, they might put up with some of the faults if they still see value from it. But your users will leave as soon as a better option comes along.
Though the constant battle between time, cost and quality rages on, DevOps practices have made it easier to find a balance.
Agility & DevOps: lean in conception & execution
The modern development process must be lean in both conception and execution if value is to be continuously delivered as efficiently as possible. The underlying infrastructure and processes of software development have evolved to facilitate this.
Agile software development methods are now commonplace and DevOps goals like continuous integration and continuous delivery are possible due to increased collaboration, better software development tools and goal-driven approaches that relentlessly (re)focus priorities based on the value they deliver to the customer.
Onward to the user-focused future then, we hope…
Few characteristics define modern software development practices as much as the realisation that the user should be at the center of the process and the future of software development may be even more user-focused. Low-code and no-code platforms that enable faster and more intuitive development could make it even easier to keep the needs of users front of mind. But whatever software development looks like in the coming years, expect to see a continued focus on delivering value to the user.