Successful business leaders that rely heavily on technology are constantly faced with the challenges of developing modern software systems and modernizing existing applications to keep their organizations at the forefront of innovation.
The role of a modern software system is to increase efficiency, enable innovation and provide outstanding customer experiences. It's important to understand that the software exists to support the business and is a combination of business logic, data and the relationships between the two.
In order to really define a modern software system it's important to clarify and define how the pieces that make up the system support the business. With so much jargon going around not everything means the same thing to everyone.
For example, backend means different things to different people in a development team.
Asking three different developers "What is a backend" can illicit three different answers.
A Node.js developer might say, "Well, the backend is the Node.js piece that is talking to the APIs for something else."
But a DevOps engineer would have a different viewpoint, "Well, the backend is the infrastructure that enables Node.js to talk to the APIs for something else."
And a full-stack developer might say, "Well, the backend is the piece of software that exposes the API that Node.js is talking to."
It's all about perspective. Clearly defining what a backend is in the context of the project ensures that the right people are focusing on the right things and that the structure of the project is clearly defined.
Poorly defined architectures give a less comprehensive view of a product and make optimization and innovation more difficult.
Develop a strategy that incorporates the organization's core technical strengths and where each part of the project is clearly defined as to how it contributes to business objectives.
Over the past 5 years the emergence of cloud computing , Site Reliability Engineering (SRE) , distributed services, regionalization and disruptive technologies such as React , React Native , GraphQL , among others have seen a renewed push for organizations to build more modern applications and software systems that take advantage of these technologies.
But in order to determine which technologies are going to support the business objectives there are some important questions that need to be answered.
These are the types of questions excellent software consultants should be asking before any planning on a new system can begin.
Without full understanding and clear definitions, companies can make costly decisions about new technologies that will need to be fixed in the future.
Here at NearForm, we are big proponents of GraphQL, when it is used in the proper context, but there are instances where GraphQL may not have the desired effect or, worse, can actually increase the total cost of ownership (TCO) of a product.
GraphQL is not a silver bullet. It must make sense in the overall context of the business logic and add value.
While GraphQL can be a great tool, it can also be a crutch that people use to hide poorly designed backend systems.
Let's say that a company has really bad APIs used by three different teams for a lot of important data that the application needs in order to function. It's easier in the short term to build a GraphQL interface than it is to fix the problem.
In this case, GraphQL actually causes more problems than it solves. It ends up just being a middleware layer that will grow over time. It also means a new team is required to maintain that in addition to everything else.
By analyzing the application beforehand and defining the real source of the problem as the APIs themselves that company could have redirected its resources into solving a core problem instead of adding an extra layer of abstraction on top of an already poorly performing infrastructure.
The organizational structure should mirror the application structure. That's not to say that new software should be built to reflect the existing structure per se, but rather the company structure should align itself with the application structure.
To make this process more transparent and less confrontational Shaun Anderson developed the Swift Application Modernization Method , which is a process he uses with clients to define how a software application "wants to work".
With clearly defined processes and a clear strategy, the organizational and system structure will present itself organically. A strategic partner can help facilitate the conversations that bring clarity to the process and ultimately deliver a more optimized system that addresses business objectives in the way that makes the most sense to all involved.
When the system and organizational structures align it can open up new opportunities to understand how the system works and different ways of measuring important metrics that support business functionality.
Modernizing existing software systems is something that every successful enterprise will undertake at some point. The ones who come out on top are those that get the definitions, strategy and structure right from the beginning. The sad fact is most digital transformation projects fail for one reason or another. According to McKinsey , less than 30% of Digital Transformation efforts succeed.
A strategic partner that is experienced in multiple sectors has worked on vastly differing projects that deliver vastly different results and that knows how to establish the strongest foundation for each unique situation can vastly increase the chances that a digital transformation effort will succeed.
In the software development process, there are decisions to be made which can have either incremental or exponential benefits.
Take the GraphQL scenario from above, for example. Implementing the GraphQL layer on top of existing, poor APIs can make it easier for developers to work with those APIs but as long as the underlying problem is not addressed, those incremental benefits may potentially be negated by the cost of maintaining the system.
A strategic partner that clearly defines the application structure could recognize the source of the problem as the APIs, make recommendations for making them better and more performant and negate the need for a potentially cost-intensive GraphQL layer thus increasing the value deliverable via the APIs while also eliminating the need for a dedicated team to manage the GraphQL layer. The benefits are distributed throughout multiple layers of the application, exponentially.
Innovation comes at an organizational level. That's why it's important to have clear definitions, clear strategy and a clear organizational structure that mirrors the way the modern software system wants to work.
Strategic partners understand the importance of alignment across the board and how bringing everything together can unlock truly powerful and transformative capabilities and paths.
There is no secret sauce or guaranteed organizational structure that will work across all organizations. Each organization has its own unique nuances, strengths and weaknesses. Trying to copy another organization's successful path to transformation will almost certainly fail.
Each solution needs to be tailored to each unique organization in order to free up the full potential that innovation can unlock.
A competent strategic partner is familiar with multiple ways to achieve a desired outcome and can help an organization choose the right path based on the way the system "wants to behave" in relation to the existing skill set in the company.
While many programming languages have similarities, not all paths to learning new technologies are the same. A strategic partner that understands a company's skill set and philosophy can work with the partner to bring along the developers in a way that is best suited for them so that they can get the most value out of any new technologies that will be used in the project.
With hundreds of successful software modernization projects under our belt, we have had the opportunity to work across a multitude of sectors and seen problems large and small.
We take a comprehensive approach to building modern software systems to ensure maximum value and efficiency are achieved for our clients while unlocking innovation and giving them the power to take control of their products once our engagement has ended. Contact us today to talk about your next software modernization project.