This 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 piece is written by Progress’s senior manager of developer relations, Sara Faatz — the company is known for its work with cloud technologies, software application development and adaptive user experience products for web, cross-platform mobile application deployment and user interfaces.
Faatz writes as follows…
Defining what a modern software development practice looks like is like pondering the meaning of life and pretending there is only one answer (although the geek in all of us will say there is only one answer to the latter… and it is “42”, right?).
That said, it’s safe to say that at a somewhat abstract level, the best software development has always been a perfect blend of art and science. Even with the varying complexities of modern apps today, that still holds true. But it also begs the obvious question – what are the features of art and science that can be identified in modern software development practices?
Before we can begin to answer that, we need to acknowledge what’s driving the need for modernisation in the first place.
The drive for modernity
Some will argue that developers, by nature, are always looking to create something new, something better than what came before. That wouldn’t be wrong. Some will say that developers want to be empowered to deliver the impossible – also an accurate answer. But at its core, modern development is driven by the demands of the end user.
As the end user becomes ever savvier, they also become less patient, less forgiving and more demanding. They want responsive, accessible, interactive, intuitive apps. They want apps that are beautifully styled and provide feature-rich experiences across all channels. They want performance, speed, security and quality.
It is with these demands in mind, that the foundation for modern software development practices are set. While not every practice will look exactly alike, if we break it down to the balance between art and science used to achieve the needs of the end user, we can find enough commonality in all modern software development practices to be able to identify the pattern.
Art: design + development
For many years, there has been talk about the need for greater collaboration between design and development.
What a designer sketches, a developer tries to replicate… and often with varying degrees of success. When we introduce multiple screen sizes and form factors, the experience can vary greatly if collaboration between design and development is not in synch.
To combat this, many modern software development practices are beginning to employ the use of design systems in order to provide an outstanding experience to the end user and streamline processes internally.
Typically, a modern software design system consists of UI components and visual style guidelines – both in the form of reusable code and reusable design artifacts. The system could include UI patterns, foundational elements, and design principles or guidelines. Many go as far as defining what tools should be used for optimal UI and UX. Probably one of the most widely known design systems (and most used due to its open-source nature) is Google’s Material Design.
With a design system in place developers and designers are singing from the same sheet of music. This eliminates many delays and inconsistencies and provides prescriptive guidance for both the visual and functional experience of the app. It allows developers to deliver the beautifully styled, feature-rich responsive experiences the end user has come to expect.
The second, and equally important way to identify a modern software development practice is by its DevOps approach.
A truly collaborative function, DevOps brings together multiple disciplines, people, and processes with the common goal of high quality and high efficiency. The speed, performance, security and quality that the end users demand live and die with the DevOps team.
When build automation, CI/CD, security, release automation, QA, plus testing and monitoring are dialed in via a well thought out and executed DevOps strategy, the result is faster times to market, more agility, better productivity and increased security – all hallmarks of modern software development.
While you could argue that there are additional examples of art and science in modern software development, you would be hard pressed to find a modern practice without design systems of some kind and a highly functioning DevOps practice.
The beauty of both of these elements is that as the needs of the end user changes, by nature they both have enough agility built into them that they can evolve to meet those needs. It’s not the “answer to the ultimate question of life, the universe and everything” but it’s pretty darn close.