When Maitenance Hits
Maintenance is one of the most overlooked aspects of a system. The software developer underestimates how many bugs and unhandled edge cases there will be. The client overstates the simplicity of the solution they need.
Both parties are at the opposite end of the system thinking spectrum. The software developer wants to systemize everything and the client wants to just solve the problem at hand. At the same time, both parties are constrained by the budget but they want different outcomes. As a software developer you want to make money now - "I will do to for cheap and make money on maintenance". As a client you want to solve your problem now - "I want to pay once and make my problem go away".
Yet maintenance is the hardest aspect to handle because it happens in production. A hostile environment filled with debris from unhandled edge cases over time. Life will never be easier than in development. Got something wrong? Just restart the entire thing. Deleted some users by accident? No worries, they were fake anyway. The back-up is not recoverable? Just reseed the entire database. The app is down? Take all the time you want, you are the only user.
This care-free mentality is not applicable to production, especially when you are the one who has to do maintenance. Anything that can be solved in development for cheap will end up costing many times more when maintaining a system in production. If it can be solved at all. Whoever rushes a production release thinking they will fix all the issues afterwards is being genuinely irresponsible. Once you app has its first user, you can never go back to carelessly solving problems.
What if there is no more budget for maintenance or is limited to critical issues like database recovery? You have developed and deployed a system full of bugs that nobody pressured you into doing but yourself with the assumption of making up the money afterwards while fixing your own bugs. In a rush to win the project you have hurt your reputation and earned little money. Overall losing more than you gained. Was the project worth your now use of time free of charge to salvage your reputation?
For any software project that successfully solves the client's, the development time is always lower than the maintenance time for a system should always function for longer than it was needed to be developed just to make the economics work. And for the sake of making the economics work, always, always, budget in the maintenance or at least have a serious discussion about it.