The project

I've recently been hired to work on a project which is essentially a system which registers events through a web-service call and delivers reports through another web-service call. I've spent 4 weeks in a fruitless attempt to understand how the current implementation is supposed to work but have failed to do so -- I have a feeling that the rest of the team doesn't quite know how things are supposed to work either. Testing the project requires a lot of arcane magic that I'm not well versed in and neither are the people who wrote it.

The solution

I fiddled a bit with the project on my own time and came up with a much simpler design in about 10 minutes. A mock up revealed that the new design would reduce the amount of code by about 98% (yes, that much). The new design is a lot simpler, is easy to understand, is to extend and less resource hungry. It also eliminates the need for 4 of the 5 subsystems, including running background processes every few minutes to do clean up.

The problem

I hinted to my boss that we need to scrap the project and start over and that I had a much simpler solution ready -- all she had to do was say 'go', and I'd get it done. I estimate that it would take me about 3 days to implement and test the system (so about a week seems reasonable).

This project lays the foundation for a much bigger project which is partly what management thinks will be the future of the company and if this project isn't fixed now, the bigger project will go down in flames.

How do I tell my boss that I think the current project need to be rebooted?

Bear in mind that I'm the new guy and my foot print on the project right now is pretty much zero. The main developer on the project is leaving for another job and the other person assigned as developer to the project isn't exactly the smartest guy in the world.

  • 1
    If you didn't understand how the code itself works, how did you find out what the app is suppose to do to the point you feel you can build something that does the same thing?
    – user8365
    Feb 1 '17 at 1:35
  • I just looked at what it was supposed to rather than how the implementation works. The real problem stems from an overengineered SQL database coupled with having two datastores (one SQL and one NoSQL). This leads to a set of background jobs moving data from the NoSQL database to the SQL database. I have a fair understanding of the different components of the system, but the implementation is simply too complex.
    – Clearer
    Feb 1 '17 at 7:16

Can you prove that your solution covers all the legitimate cases the current version does? Ideally, can you prove it produces identical results even for the error cases? (Sometimes that matters.) Can you prove that, after handling any edge cases, it will still be simpler?

You can do the first 90% of a programming problem with 10% of the work. The remaining 10% takes the other 190% if the work. And sometimes even that 10% is more than this year's budget can be stretched to handle on top of ongoing support costs.

Sometimes the right answer is to start the rewrite as an entirely new product... Or even as a "skunkworks" effort, writing it on spec until you have enough to demonstrate that it really is better.

  • A working system is proof :-) Yes, I'm fairly confident that I can prove it. The system should be as simple as I describe it -- get input, put it in the database, generate report. There's really nothing special going on. There are no real error cases since the system is supposed to take anything that's given to it and I control all input sources anyway (a single app which generate events on fixed input from a user). The only part that can be tricky is the part that I'm working on now and that won't become more or less complex.
    – Clearer
    Jan 31 '17 at 23:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .