On most project teams, software designers create a software design and throw it to the software developers without considering implementation aspects. The software developers then find it difficult to implement such kind of a design.
One often occurring problem is that of managing database connections. Most software designers forget about this aspect. They create classes with all details about their members (class variables and methods). They also describe all the details about relationships among the classes and how data will pass from one class to another. When this detailed software design is passed to developers, they start thinking about implementing the design. But they encounter one problem though. How to take care about database connections as database connections management is never described in the design.
In such a situation, developers modify the design themselves. Since database connections are required at many places, they create a separate class for database connection management. The other place which needs to be modified in the design is user authentication. User authentication or session management is also one area which is used very frequently throughout the software application. Here again, software designers do not consider the aspect of code reuse. So the developers again need to modify the design so that code reuse can be done properly.