A Story About Bad Software Design and the Consequences
I was brought onto a project that had been in progress for three years. The client was expecting the app to launch within a couple of weeks. As I was working through the last remaining tasks before launch, I realized that the app architecture could not accommodate the use cases we wanted to build. That meant it was getting exponentially difficult to continue working on the app.
We confirmed the clients expectations for the app, and I determined that the app was falling below those expectations. I needed to figure out a way to maintain the company's reputation for quality software, meet the client's expectations, and deal with the small budget remaining for the app.
I worked with my colleague on drawing up a redesigned architecture for the app that would accommodate the current feature set and be flexible enough for future work. We proposed a plan to the project manager and the senior software engineer. The plan was to redesign the business logic of the app because of all the reasons I stated above. To launch at a reasonable time for the client, we would do the redesign in 1.5 weeks. To deal with the budget, it was decided that the company was responsible for the poor build of the app and we would discount the redesign.
Then we had to have a meeting with the client and tell him... "Sorry, we know you were expecting to launch the app last week, we decided that the architecture of the app should be changed and we're going to have to push the release back again." The client wasn't happy, but he appreciated the honesty. I think we made the right call because based on the client's feedback, he valued a quality app more than releasing the app earlier.
To prevent this in the future, we're having a post mortem meeting next week. I'm going to propose that we need to spend more time upfront gathering use cases and designing the architecture of the app. The design should be approved by at least one or two senior engineers. I came up with this idea because I heard the initial design of the app was done by one developer in isolation without any feedback.