With new software features, you need to look much broader and further than just the problem and the solution you develop for it. The new features you develop have an impact on your organization, other business processes and data, the future, other applications...in short: your success! Have you thought about all the factors that affect you with new software functionality before you start developing?
Is what is intended being developed?
Software development involves several people, each with their own interpretation of the same issue. The customer has a problem and describes it from his perspective, the consultant interprets it from his own point of view, the engineer sees the resulting change proposal from yet another point of view, and the result is ultimately not what the customer originally intended. So communication is crucial. You need to continuously tune in and feed back to see if you have understood each other and thus are able to arrive at an appropriate solution.
Does the new functionality provide benefits?
What is the reason behind the development of the new functionality? "This is how we did it in the previous system" is not a legitimate reason. Software development costs money and therefore must deliver value. Return On Investment is what it's all about. So make sure you have clearly mapped out how you work now (software and business processes), how this will change with the intended new functionality and what benefits this will bring. Will you work more efficiently? Make fewer mistakes? Serve customers better? You must be able to justify that software development will make the organization more successful.
What is the impact of the functionality on other processes?
What you develop may work well, but how does it affect the other processes? Is the rest of the system still working properly? Too often, only the new functionality is tested, even though it is an integrated part of a complete application. Assess how the new piece to be developed fits within the existing application and processes. Does it fit with what you already have and how you work now? And make sure you have the right tools for testing. Automated test applications and load testing are essential tools to keep testing existing processes.
What are the implications for the customer?
Changes can impact existing processes as well as existing data. How do you ensure that a change is backwards compatible? How do you ensure that existing customer data is placed correctly in a new process structure and is not lost? You will have to take this into account beforehand, but also during the process. Here, too, good communication with the consultant and the customer is not to be underestimated.
How do you integrate different platforms as efficiently as possible?
Today, it is no longer tenable to work on a single platform. Mobile applications and Web applications are increasingly becoming part of a complete package. This also raises issues, as different development languages, platforms and processes must be integrated flawlessly with each other. Apart from knowledge of the languages and updated technical documentation, good process descriptions and testing are very important in this regard.
What are the implications for the future?
Customization, when upgraded, you may have to redevelop or may not even be able to take it to the next version. This can become a time-consuming and costly job and the customer actually has to invest in changes they already had. Therefore, when customizing, think very carefully. Does the customer really need this new piece of functionality? And is it something that solves a short-term problem or is it something that is needed for the longer term? Is the technology one that will still be used in a few years and - not unimportantly - supported?
In addition, of course, you will have to take into account that a year from now you may not be as into the subject matter as you are now, or that a fellow developer will need to look at your code. In short: When creating functionality, think not only about how to make it workable, but also think about keeping what you create maintainable. This might take a little more work in the early stages, but it will pay off handsomely later. After all, before you know it, your code will grow into an opaque plate of spaghetti and three other things will fall over with every change.
Eighty percent of good development is done before you even code a single letter. So think carefully before you start developing, map out everything about new functionality, and only then make an informed decision. That will save you a lot of trouble!
Peter Conijn is Application Developer at Dysel and turns modern technology into practical and useful applications for customers.