I was reading this Ask HN post about a consulting arrangement that seemed a Sisyphean task. Here’s an excerpt:
I have been asked to consult a company in how they should speed up their development process.
Today the application which in the end of it all is a web application, consists of a lot of old ASP classic code, a COM+ bridge for being able to function within a mix of a lot of different .NET libraries written in .NET 3.5 (CLR 2). COM+ acts as a bridge between the two technologies.
The teams cannot compile code inside the development tools, it can’t debug unless they do it with some obscure hacks and workarounds and it seems that no one is really in control of what is going on in the core code base and no one really want to touch the original code base to clean it up and refactor/re-write it.
Seems pretty hopeless, right? “Teams can’t compile code”?! Unfortunately, this type of task is more typical of consulting engagements than not. After all, if there was a simple solution, why would the company have engaged a high priced consultant? (If you are consulting and not ‘high priced’, well, that’s a problem, but a different one better left for another post.)
The comments on the post are interesting and worth reading. I left one, but wanted to expand on it. Now, I’m not familiar with the tech stack at all, but I am familiar with a large codebase (where large is relative to the size of the team supporting it–100K LOC can be large to two person team) with a lot of technical debt that was crucial to the business. I have also consulted for years.
Whenever you are consulting, the first task is always to ascertain the real problem. Hint–it’s often not what you were explicitly hired to do. In this case, I’m guessing the real issue is that the web application needs to change to meet business needs, and that it can’t do so fast enough because of the accretion of complexity. But a guess isn’t good enough, you need to find out what you are being hired to do–it could be you are being hired to provide cover to spend money to rewrite the app or to be blamed when a development team misses dates or to actually speed up compilation.
Then, you need to learn who wants the task done, and who is writing the checks. They are sometimes the same person, but not always. You also need to learn how these folks want to be communicated with, including method, verbosity and frequency.
Finally, you can start to dig into the (software) problem. (This process assumes you are doing time and materials billing.) Do a preliminary investigation and look at some of the following:
- given the end goal, what are intermediate steps that can get you there? How long would it take to get one or two of these steps?
- are there third party solutions that can get you 90% of the way to solving the business problem–this can include framework upgrades?
- are there subsystems of the current hand coded solution that are isolated and can be reworked with minimal impact on the system?
- are there one or two huge issues that would be a relatively easy win (version control, big bugs, moving configuration from code to a database, etc)?
Prepare ballpark estimates on the level of effort to accomplish some of these. After that, you need to sit down with whoever wants the task done and whoever is paying for it. Present your options, making it clear that any time estimates are truly SWAGs.
Let them decide.
If they ask for a recommendation, be prepared to make one, but the decision must be theirs. They have the business context to know how much to invest in this system.
After that, either withdraw or start executing against the plan you and the decision makers have decided on.