I’m working at a new-ish job with a higher rank than I’ve had previously in my career (so I’m green at this place), and I’ve developed the backbone of a new piece of software we’re going to use for our infrastructure. Let’s call this ABC. Some time ago, my boss asked me and one other guy to use it to build a prototype for an actual upcoming use case for this infrastructure.
I’ve personally had competing priority(ies), and I’m also having to make meaningful changes to ABC, primarily on my own. This involves taking some preexisting libraries and integrating them with ABC.
The problem is this: The libraries are stuffed into a huge .NET Framework project, they aren’t organized or self-describing (there are circular references and such), documentation is basically non-existent, it’s hard for multiple reasons to get anybody to spend a lot of time walking me through these libraries, etc. However I basically need to port this to .NET Standard (ABC is in .NET Core, and .NET Framework doesn’t play nice when making containerized microservices in a Linux-ish deployment), and I need to kind of hurry.
Originally I tried sticking about as close to copy-and-paste as possible, porting probably 80-90% of the original project and just not actually needing or using the rest for now. Some of this stuff is dealing with Azure, and things that work at compile-time do not work at run-time. So I’ve been going through and trying to migrate incompatible LOC one-by-one, sticking as close to the original as possible.
But I just keep wondering . . . Do I just need to take the original apart to some extent, then put it back together in a somewehat new way? This will cost time, but the original has had several people make many changes, without a consistent design, documentation, or anything. Again, this thing has circular class dependencies and so on. It’s hard to follow, and it’s hard to get good information on.
So where does the line need to be drawn? On the one side, you have the approach of just continuing to bludgeon through something that you don’t understand and still won’t completely understand, just to get a prototypical port in place before the “real thing” is perfected by a different person or people. On the other side of the ring, you have the possibility of – not really rewriting the whole project, because it’s just way too big – but completely reengineering more relevant components and effectively reinventing the wheel.
This port is not the primary objective; it is a means to an end, and the “real” port will be done by somebody else later. But it still needs to work for now, to produce the prototype that depends on it. So where do you draw the line, when this kind of needs to hurry up and get done?