There are two main challenges with customer software development, compared to using package based software.
The first one is how to be ready in time, on budget and with the fulfilment of requirements. This is especially true when you develop a system that would replace something existing.
The other is more long term and how to build a bespoke solution that could be maintained over the years. If it’s a bigger investment and core business, you will need to develop a solution that there for many years.
On the other and, package based solution with to much customer based code inside is also very cumbersome to maintain, so as a decision maker you are between a rock and a hard place.
Short term goals
When starting a software development project, you need to assure that you cover most of the requirements, both functional and non-functional, in the planning phase. I have seen a lot of examples where the initial estimates were a small fraction of the total cost. Therefore, as a project manager, you have to ask how the lead developer have assured that they don’t miss any requirements.
Long term goals
In order to fullfil the long term goals of maintainability and compatibility of your software, you need to have some development guidelines in place. They should assure that; the code is readable; not to long units of code; not to complex code and have re-usable part of code instead of copied blocks of code.
There are other guidelines for assuring quality in software, so these above are just an example.
These guidelines must be enforced from the beginning of the project, otherwise the technical debt will soon be to high. If running an agile project, these guidelines must also be part of each sprint, otherwise they will be forgotten.