One of my clients a few years back came to me with a serious problem.
She hired a fairly experienced programmer to build software for her business, and he promptly subcontracted the work to a junior programmer.
When it was done, it looked great, and was easy to use.
You could add a record.
You could delete a record.
You could add two records.
You could delete two records.
Unfortunately, that’s as far as it went. The software crashed as soon as you added 3 records to any screen. Apparently, nobody had thought to test adding 3 records while it was being built, and it was in final testing before they noticed.
They blamed the problem on having bad programmers, but when I examined the code, that really wasn’t the case.
The code itself was pretty solid, except for one serious design flaw.
The problem was the difference between a programmer and a software developer.
I have met many programmers to whom I could assign tasks and get back decent code. But there are very few I would hire to build a complete software package from scratch.
There’s a big difference between, for example, writing a function to sum up all the items on an invoice, and writing an entire accounting software package. Being able to do the former has no relevance to being able to do the latter.
Building an entire application requires far more than coding skills.
You need to understand security, databases, user interfaces, software architecture, testing, debugging, and more. A programmer without all that extra experience is probably not going to do a good job writing an entire application from scratch.
The bigger and more complex the application, the more experience is required to make it successful.
When you hire someone to write software, make sure they’ve actually built entire applications, and not simply individual pieces of an application. Preferably applications similar in size to yours, or bigger.
By the way, in this case I was able to fix the software. It was a lot of work, but it could be done.
Other projects have been so poorly designed they were unsalvageable. Not because of bad programmers, but because of programmers who could do certain tasks well, but not build software from scratch.