How to Increase ROI for Your Custom Development Projects
It’s an exciting time to be in IT these days! Digital transformation is gaining in popularity, one element being the move of IT infrastructure to the cloud. Many different platforms that are available today provide a lot of opportunities to build exciting functionality through custom development and platform integrations.
On top of that, companies are looking for more options to provide their customers with self-service opportunities, either through customer portals or through bots using traditional and modern service channels such as telephony, SMS, or instant messaging apps like Facebook Messenger or WhatsApp.
All of this requires a significant number of process automations and system integrations, which allows companies to build custom solutions for their internal and external services, so they can provide better customer service and more efficient processes.
Why is all of this important?
Because companies that ignore the digital transformation will miss out on the next generation of customers, and continuously lose ground on their competition, which will be faster and better at delivering business value.
Why digital transformation is affecting project development
Software development is at the heart of the digital transformation!
Here are some examples of contact center and business cloud platforms, innovating for the digital transformation era:
- Salesforce enables sophisticated customization and integration through its Apex programming language and Heroku application platform.
- Amazon Connect uses the power of Lambda functions to bring their conversational IVR to life.
- Twilio is built for developers from the ground up, and almost every product they release puts the developer front and center.
Overall, more and more companies are transforming their applications into platforms or at least investing heavily into APIs that allow for deeper integration.
Unfortunately, the increasing demand for custom development comes with a maintenance cost attached. And that cost can vary significantly, based on the quality of the architecture and implementation of any given solution. If a company relies on an integration to submit orders from their CRM to the order management system, the integration becomes an additional point of failure (in addition to the two systems involved). An error in the code could prevent the orders from being submitted, and in a worst case scenario, this error might not even be noticed right away.
In theory, those automations provide a defined business value, but the reality is that this value is reduced by technical debt accrued during development. This includes not only errors in the implementation that cause the integration to fail, but also the additional effort needed to implement new business requirements in the future. The latter is very difficult to track, since there is no reference point to what a “perfect” system looks like. Nevertheless, it exists, and I have seen simple feature requests take a substantial amount of time refactoring the initial solution because it did not follow best practices.
This brings us to the last question: What can be done to reduce the negative effect that software quality issues can bring to a project or a business solution?
3 steps for improving the quality of your projects
I recommend the following 3 key steps as a starting point to improving the quality and outcome of your custom development projects. There are obviously more things that you can do, but from my experience, the following actions are essential for maintaining the ROI of any project.
1. Use software design patterns and development best practices
Design patterns have been proven to be successful when it comes to increasing code quality in a product. Not only do they introduce consistency between developers, they also ensure that the developed code is easy to understand and extend as your business solution evolves. Applying those patterns even to the smallest components will help to reduce bugs and, consequently, maintenance costs further down the road.
2. Introduce quality processes and automated testing
These elements are core to any software application development these days. First of all, any code developed, whether it is big or small, should be tracked in a version management system such as Git. It is critical that developers can review the history of a file to understand the context of how it evolved. With that, it is also possible to introduce code reviews as a standard process of everyone’s work. Any changes should be peer reviewed to ensure that standards are followed, and to reduce the risk of introducing errors. Adding automated tests, such as unit or acceptance tests, will further improve the quality of the solutions. While code reviews ensure the quality and correctness of the implementation at the current time, automated tests are there to detect regression introduced by future modifications of the code. All automated tests should be executed every time a new change is introduced to the environment.
3. Add Reliability Engineering
This step is the most difficult. Reliability Engineering extends the solution by building a framework of utilities and services that business solutions use for the implementation of the use cases. Those utilities and services are designed to handle malfunction of the business logic by recording incidents, raising alerts, applying strategies of self-healing, or possibly even initiating a restart of an entire system or component. For example, in the situation described above where the integration between the CRM and order management system would fail, notifications could immediately be sent out to IT that the integration is broken. If the reason for the failure was a connection timeout, which could mean that the order management system does currently not have enough resources available to process the order, the integration could queue the record and process it at some later time, assuming that more resources will then be available and the order submission will succeed.
In the best case scenario, human intervention is not needed, but if it is, it is important that every failure is handled consistently. While it is understood that production issues will occur, the goal of the framework is to detect those early and to collect critical diagnostic information that will significantly speed up the root cause analysis. Reporting this information will enable IT to make the right decisions to solve the issue quickly.
It should be noted that many of today’s cloud platforms have these features baked in. The key is to utilize their framework to make sure application and platform issues are handled in the same fashion. There obviously must be a balance between value and implementation time when deciding what reliability features should be included in a solution.
Nonetheless, any steps taken in this area will further secure the ROI, by ensuring that the final solution will work as expected. If it does not, it will have the smallest impact possible on the organization.
The value in following these steps & breaking down silos
It needs to be understood that any of these steps will add development time for the initial implementation of any use case. However, it should be noted that this time increase is mostly just theoretical nature. In practice, if those measurements are not applied, a project typically requires more time for bug fixes and re-work of those use cases, often exceeding the time spent adding those quality processes.
Breaking down the silos between enterprise systems adds a lot of value to the organization. This is an important part of the 4th industrial revolution. However, the applications that link those systems together are becoming a critical element for a company’s operations and must therefore be set up using strategies that ensure quality and flexibility for the future. This let’s your organization focus on continuous expansion rather than chasing the mistakes made in the past.