We have recently started restructuring a site to include some new elements to make managing it easier. When we first set out the design of the new features was straight forward and my coworker and I both felt we had a good grasp of what was going to happen on both the database side and in the actual interface. We were dead wrong.
Development started out on the right foot but as we added certain functionality we began to realize that the functionality was beginning to change other pieces of the software. The result was database problems that could not be resolved through rewriting queries and making table changes, to fix the problems we would have to restructure the database completely. Not an option at this point.
The solution? Inform the client of the bigger requirements and the change of certain elements and let them make the call.
Basically I hate being in a situation like this, it is not fun for anyone and it just adds costly time to development. Was it a problem of foresight for my coworker and I? Personally, I think we could have taken more time to lay out the needs and the changes that would occur but I also think that there were certain things we wouldn’t be able to see effected until we put the system in action.
This makes me lean much more to modular design in software, with components completely seperated from one another and linked by a central “switchboard”. Hello, Java! Java’s OO design forces this onto the developer (for the most part) and makes software development a much more modular process. C/C++ do this as well but since they do not force it like Java there are ways to get into sloppy, nonmodular code.