This Computer Weekly Developer Network series is devoted to examining the leading trends that go towards defining the shape of modern software application development.
As we have initially discussed here, with so many new platform-level changes now playing out across the technology landscape, how should we think about the cloud-native, open-compliant, mobile-first, Agile-enriched, AI-fuelled, bot-filled world of coding and how do these forces now come together to create the new world of modern programming?
This contribution comes from Bartosz Pranczke in his capacity as senior engineering manager for web at Netguru — the Poland headquartered company is known for its work designing and developing web and mobile applications for clients worldwide, focusing on outstanding user experience.
Pranczke writes as follows…
Software development practices evolve continuously.
Over recent years, the main incentive for change has been a strong business need for flexibility. Just like in the Darwinian origins of species, it is not the best digital product that survives, but the one that’s the most adaptable. That’s why it is essential for businesses to be able to pivot and adjust the product to the ever-changing market environment, using the new data coming from user feedback and competitor analysis.
The ability to transform fast and efficiently has become one of the most important competitive advantages. This business demand for adaptability has strongly influenced software development practices. The best technology and software development processes provide a range of ways of maximising adaptability.
We need to learn how to react to unexpected change. Although we don’t know what the next unexpected events will be, we can define ‘areas of uncertainty’ and these areas are related to particular business domains.
There are four key elements that help increase adaptability.
#1 Shorter release cycles
Even the best idea can become obsolete if it is not turned into reality quickly enough. That’s why the ‘lead time’ needed for a concept to become a live software solution is a critical indicator to follow. The shorter the time, the lower the cost of experimentation. In today’s economy, businesses with a higher cost of experimentation are severely crippled. Easy, fast and cost-efficient experiments constitute a substantial advantage.
#2 Self-contained teams
In order to successfully compete in a dynamic, unpredictable environment, you need to reduce the internal complexity of your software development process. The best way to do it is to enable and empower your team to be self-contained. If you can, provide a complete solution including exploration, design, development, testing, deployment and post-deployment.
For high-tech teams, DevOps is usually the best set of practices to create adaptable teams. The architecture of the system should make it possible to get things done without excessive communication between teams.
For less technical teams there are low-code development platforms that can help to be as self-contained as possible.
#3 Democratise data visibility
When you are going fast, it’s easy to get lost. That is why good software development practices strengthen the visibility of relevant data. All team members need insight into users’ feedback, lead time, workflow status, as well as any anomalies in the production systems.
On the other hand, it’s equally important to avoid information overload. Don’t focus on measuring everything. Measure the right things.
#4 Consider Conway’s Law
Last but not least, these contemporary software development practices are for humans, not for computers. The people working on a system make it adaptable. Your team needs to be truly agile and flexible. In-depth knowledge of the project should be common among the team members.
No technology will fix a rigid working environment.
Actually, I believe in what is known as Conway’s Law, which says that a team will produce a system, which is a copy of the organisation’s communication structure. The result of a software development process derives from the interactions between the people working on it. That is why you shouldn’t expect your product to be adaptable if the team structure is not.
These are the four features that define, in my opinion, modern software development practices. I’m very interested to hear your take on this. Let me know what you think.