Live data from Hacker News

Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

news.ycombinator.com

11–20 of 23 posts

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#11
post #9
post #3

Disclaimer: I don't call myself 10X anything but I do work through 10X Management. I only work on legacy code, that's my specialty. My opinions are my own and don't represent 10X Management. First off not all legacy code is "shitty." The main reason I am 10 or 100 or 1000 times more effective with legacy code is that I'm usually the only programmer the customer has talked to who will work with it. Everyone else has o…

> Imagine if you had a leak in the roof at your house and the first five people you called out to repair it told you to tear the house down and start over. And they told you that because the house wasn't built with the kind of lumber and roofing they prefer, or they don't think it's aesthetically pleasing based on their strict adherence to Frank Lloyd Wright's style. Or that whomever built the house must have been mo…

My analogy is imperfect, sure. And sometimes software is so bad that it should be tossed out. I mostly see that when business requirements have changed so much that the software is a drag, not adding value. Or a vendor went out of business (ask me about the companies left holding the bag because of SCO), or something else in the IT landscape caused the code to become obsolete and unworkable. But in my experience (and this is what I do) those cases are relatively rare.

In the last 10 years freelancing I've taken on close to 40 projects, I've only told two customers that they should start over. In both of those cases we weren't looking at crufty 20-year-old code. The software was fairly new, just poorly designed or implemented (WordPress is not a great platform for everything, folks). One project was a pile of random piecework from low-price contractors hired online -- no conceptual integrity. Talking to other programmers who do the same kind of work I do, I get the same anecdotal evidence: most software systems are maintainable despite the best efforts of programmers to make things too complicated and obscure.

Rather than rewrite from scratch it's safer to refactor bit by bit, fixing a defined set of problems little by little. That keeps your chance of success high and customer risk low. Try to remove dependencies rather than add more. Carefully get things like version control, testing, tooling in place, but don't get carried away, some code resists retroactive unit tests and you shouldn't be breaking stuff just to make it fit your toolchain. Resist the urge to "refactor" everything to suit your aesthetics or received wisdom about how code should look.

You're right that it's more common to see features added on and the worst bugs addressed. That's usually because the core of the system is solid and doesn't need a lot of maintenance. It can also happen when the core is a black box no one understands and the programmers are afraid they'll break it.

Most important is to listen to the customer but don't believe everything they say -- customers often can't describe in detail how their own business processes really work. Don't assume that just because the code is written in an old language or isn't based on OOP or doesn't have unit tests that it's shit -- you can blind yourself to good design principles that aren't in fashion anymore. And have some humility -- it's unlikely you actually know how to rewrite a non-trivial application from scratch and get a better result than what the customer already has, unless it's an unusable pile of goo already.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#12
post #4
post #2

No, because 10x is a myth. Usually someone described (probably by themselves) as a 10xer are the ones responsible for the code base being so bad in the first place. 10xers only work on green fields, they never get a chance to see what a catastrophe their ideas turned out to be.

Generalizations, not true. In my experience many of the most talented and valuable programmers work on important legacy systems. There is a class of programmers who only want to work on green fields projects, and they may think they are 10X or ninjas or rockstars. They aren't. That's arrogance, not skill or expertise or ability to deliver. I have 40 years programming experience to back that up. I agree that measuring…

"That's arrogance... I have 40 years programming experience to back that up."

Ironic juxtaposition.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#13
post #4

Earlier quoted context omitted.

Generalizations, not true. In my experience many of the most talented and valuable programmers work on important legacy systems. There is a class of programmers who only want to work on green fields projects, and they may think they are 10X or ninjas or rockstars. They aren't. That's arrogance, not skill or expertise or ability to deliver. I have 40 years programming experience to back that up. I agree that measuring…

"That's arrogance... I have 40 years programming experience to back that up." Ironic juxtaposition.

Maybe, I didn't notice that. I was pointing out the difference between experience and believing that I can do better than other programmers because I watched an online course about AngularJS and now I can fix everything. I try to stay humble when learning a new code base.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#14
There is no such thing as a general 10x engineer. There are engineers that are 10x better than average at writing network stack and engineers that are 10x better at writing PDE solvers and engineers that are 10x better at creating user friendly web front ends, but it's not the same person. By the same vein there are absolutely engineers that are 10x better than average at dealing with legacy code bases, but a massive factor is also how experienced they are with the domain that the codebase is about. For example is the code base some sort of logistics management system, then someone who has worked on a lot of logistics management systems in the past is going to have a significant advantage.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#16
A more realistic view of 10x engineer is not someone who can produce 10x amount of code... it's producing the same amount of value at 1/10th the effort by being able to focus on actual goal.

Sometimes that means fixing existing codebase instead of the massive effort to do a rewrite (see gregjor's great comment).

Sometimes that means figuring out that the custom legacy software can be replaced by an off-the-shelf solution.

Sometimes that means figuring out that only some of the legacy software is actually important, so only that part needs to be maintained and the rest can be deprecated.

See also https://codewithoutrules.com/2016/08/25/the-01x-programmer/

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#17
post #3

Disclaimer: I don't call myself 10X anything but I do work through 10X Management. I only work on legacy code, that's my specialty. My opinions are my own and don't represent 10X Management. First off not all legacy code is "shitty." The main reason I am 10 or 100 or 1000 times more effective with legacy code is that I'm usually the only programmer the customer has talked to who will work with it. Everyone else has o…

The ROI of maintaining and enhancing is probably under-represented in the freelance space. It may make more financial sense for freelancers to bid on greenfield projects but I wonder, aloud here, if there is some business model for a network of freelancers that are experts in maintaining , with price tiers of one-time fix, small-medium sized project and retainer based services.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#18
Well, depends.

For example, we had a 10x guy recommend that we re-write our health insurance web app back-end in Golang, but then, we realized that meant we couldn't cover generic prescriptions.

In that case, he wouldn't have remained 10x over the older Python/Django code.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#19
This 10x thing is quite frankly stupid.

The distribution of developer skill (if that's even something that can be plotted) is not bimodal with good developers and bad developers, it's normal. Sure someone 2 SDs above the mean might be 10x more productive than someone 2 SDs below the mean, but the same can be said for literally anything that requires skill.

While we're at it, why don't we call Gordon Ramsay a 10x chef? Or Yo-Yo Ma a 10x cellist. While this is technically true, it's not particularly insightful, and certainly not something you should use to label yourself.

To answer your question, yes someone skilled at software development will be slowed down if dealing with a legacy codebase.

Re: Ask HN: Efficiency of 10x engineer while refactoring legacy/messed up code base?

#20
post #19

This 10x thing is quite frankly stupid. The distribution of developer skill (if that's even something that can be plotted) is not bimodal with good developers and bad developers, it's normal. Sure someone 2 SDs above the mean might be 10x more productive than someone 2 SDs below the mean, but the same can be said for literally anything that requires skill. While we're at it, why don't we call Gordon Ramsay a 10x chef…

I agree with almost everything. Talent and experience make a difference, but programmer productivity is situational. Some teams and projects bring out the best in everyone. And I've had bosses and customers and team members who make sure no one is very productive.

Working with legacy code is a skill too. I don't think it's true that a skilled programmer will necessarily be slowed down with a legacy codebase. Another way to look at legacy vs. green field is that with a legacy system there's already a fairly complete spec, expressed in the code. Learning to read and understand code is a skill that programmers can learn if they care to.

Post reply on HN