Slashdot Mirror


Lessons From Six Software Rewrite Stories (medium.com)

A new take on the age-old question: Should you rewrite your application from scratch, or is that "the single worst strategic mistake that any software company can make"? Turns out there are more than two options for dealing with a mature codebase. Herb Caudill: Almost two decades ago, Joel Spolsky excoriated Netscape for rewriting their codebase in his landmark essay Things You Should Never Do . He concluded that a functioning application should never, ever be rewritten from the ground up. His argument turned on two points: The crufty-looking parts of the application's codebase often embed hard-earned knowledge about corner cases and weird bugs. A rewrite is a lengthy undertaking that keeps you from improving on your existing product, during which time the competition is gaining on you.

For many, Joel's conclusion became an article of faith; I know it had a big effect on my thinking at the time. In the following years, I read a few contrarian takes arguing that, under certain circumstances, it made a lot of sense to rewrite from scratch. For example: Sometimes the legacy codebase really is messed up beyond repair, such that even simple changes require a cascade of changes to other parts of the code. The original technology choices might be preventing you from making necessary improvements. Or, the original technology might be obsolete, making it hard (or expensive) to recruit quality developers.

The correct answer, of course, is that it depends a lot on the circumstances. Yes, sometimes it makes more sense to gradually refactor your legacy code. And yes, sometimes it makes sense to throw it all out and start over. But those aren't the only choices. Let's take a quick look at six stories, and see what lessons we can draw.

118 comments

  1. No link. by Anonymous Coward · · Score: 0

    Well this post is crap. No link to the quoted article.

    1. Re:No link. by Comrade+Ogilvy · · Score: 1

      Try the first link in TFA.

      I know, I know -- it does not look like it right one, but it is.

  2. The correct answer, of course, is that it depends by Anonymous Coward · · Score: 0

    Well gee, who knew.

  3. I disagree by aglider · · Score: 1

    Rewriting an application with proper software design stages IS a way to improve your software.
    When you have a large code base including too many corner cases snippets and dirty patches that stick out from it, then it's brine for a rewrite. But only if you carefully learn from the past mistakes.

    --
    Sent as ripples into the electromagnetic field. No single photon has been harmed in the process.
    1. Re:I disagree by ShanghaiBill · · Score: 5, Insightful

      If the person recommending the rewrite is the person who wrote the original code, they are usually right.

      If the person recommending the rewrite understands the code and has years of experience with it, they are often right.

      If the person recommending the rewrite is the new guy fresh out of uni, they are almost certainly wrong.

      Disclaimer: I was once that new guy.

    2. Re:I disagree by crgrace · · Score: 4, Interesting

      I disagree with your disagreement. Rewriting a working application is juggling with a loaded gun. You say "if you carefully learn from past mistakes" but this is almost impossible in any organization I've ever seen. All those snippets and dirty patches are not documented properly. If there are comments, they may (or may not) be out of date. Maybe there is a reason they chose a weird data structure but that guy retired 15 years ago. So you do something "proper" and find it is 10X slower. Oops.

      If I've learned anything, I've learned you gotta let sleeping dogs lie. More patients are killed by doctors in this business than anything.

    3. Re:I disagree by jellomizer · · Score: 3, Insightful

      So you rewrite your code with a new sets of corner cases snippets, dirty patches that stick out from it.

      The problem is old code while ugly, has been made to work over the decades, you are not going to learn from the past mistakes, because in the rewrite, you will undo years of patching which explains the changes in thought.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    4. Re:I disagree by Anonymous Coward · · Score: 0

      Is that not obvious to everybody? If the benefits outweigh the costs you do it. If you have a spaghetti ball that needs to be standardized you do it. You don't necessarily fire everybody and switch to Rust, but just paving over old code and expecting things to play nice indefinitely is their advice? That's how we got stuck with Flash and the rest of it.

    5. Re:I disagree by Major_Disorder · · Score: 5, Insightful

      You forgot:
      If their title is Manager, or Consultant, they are ALWAYS wrong.

      --
      First law of people: People are generally stupid.
    6. Re:I disagree by ctilsie242 · · Score: 4, Insightful

      I do think refactoring is a must and needs to be part of the design cycle, just as much as getting the features that marketing already has sold to customers.

      Technical debt is a thing, and getting that heap of hacks, kludges, workarounds, and other junk out of the codebase is just as critical as doing months long sprints to appease marketing. In fact, the Agile cycle in theory has room in between sprints for doing just this and fixing stuff. However, every place I have worked at who tried to do Agile had a "permanent sprint" in place, which not just burned people out, it made code bases which were all but impossible to maintain. Especially with management always threatening to outsource or offshore the devs, to the point where the devs knew they were going to get offshored, so they didn't care about anything except making their deliverables, even if it meant that they left gaping security holes, or just horri-bad code, because that mess would be cleaned up by someone else.

      If a company actually values its code base, they will treat it just as they do any other machine... take time to take it down and service it, fix glaring problems, add actually useful code documentation (no comments about "don't touch this routine, we don't know how it works, neither will you.") Then, start seeing if you can do things like performance testing and code optimization, perhaps a pass for security checking (strncopy(), not strcopy(), etc.)

    7. Re:I disagree by Anonymous Coward · · Score: 0

      If the person recommending the rewrite doesn't understand the code to the point that they can't fix bugs or do new development, and no one left exists who understands it in a way that you can move forward, a rewrite may be the only way. Yes, it will be painful, costly, and you will miss things. But rethinking how the system works from the ground up rather than inheriting a pile of band-aids and trying to stick more band-aids on it can be worth it in the long run. Most systems don't know where they will end up the first time they are built.

    8. Re:I disagree by DickBreath · · Score: 2

      I have been through three successful rewrites of a product. The first (when I was the new guy) was rewriting it from text mode to a fancier text UI (mid 80s). The second was in the mid 90s when it clearly needed to become a GUI application. The third was in the late 2000s when it clearly needed to become a web based application.

      One that that can help is to rewrite in modules. Build the base modules first. You can then migrate customers who only use those modules and are not in an immediate rush to upgrade to the other modules that are not yet rewritten in the new technology.

      Be sure to develop a good, no excellent conversion path for customer data.

      --

      I'll see your senator, and I'll raise you two judges.
    9. Re:I disagree by apoc.famine · · Score: 4, Interesting

      Technical debt is a thing...

      Best place I ever worked knew that, and worked to quantify it. That helps a lot when you're trying to figure out whether or not to refactor. In a couple cases, it became apparent that a partial refactor was going to accomplish something like 90% of a full one, with 10% of the effort.

      Quantifying your pain-points with even back-of-the-envelope calculations can really help you make good decisions about how to move forward.

      --
      Velociraptor = Distiraptor / Timeraptor
    10. Re:I disagree by sjames · · Score: 0

      He didn't retire, he got pushed out so they could bring in a cheaper recent grad or an H1-B.

    11. Re:I disagree by sjames · · Score: 1

      OTOH, each of those patches, especially the ugly ones represent a case of "if I knew then what I know now" for the architect. It MAY be that the problem is inherently warty, or perhaps there is a design based on the much improved knowledge of the problem that can solve it cleanly. If it's the latter, someone else may render you an also ran.

    12. Re:I disagree by nmb3000 · · Score: 1

      If the person recommending the rewrite is the person who wrote the original code, they are usually right.

      If the person recommending the rewrite understands the code and has years of experience with it, they are often right.

      I would still take it with a large grain of salt. These two groups are also the most likely to lean towards the second-system effect. There needs to be significant objective justification for a complete rewrite, more than just "Bob's gut feeling is that we need a redo".

      And yes, even the recent graduate can offer valuable insight since they're most immune to the "we've always done it this way" and the "it's always been this way" symptoms.

      --
      "What do you despise? By this are you truly known." --Princess Irulan, Manual of Muad'Dib
      /)
    13. Re:I disagree by ctilsie242 · · Score: 1

      That is a definite sign of a quality workplace. Places like that are exceedingly rare. In my experience in Agile environments, being able to take time to do anything but code the latest bell or whistle, or try to put out the latest fire, is something that rarely happens, much less having the ability to do any refactoring whatsoever.

      Most places don't even bother, because management views refactoring as "reinventing the wheel" at best, a loss of productivity at worst, because they don't see the man-hours wasted when you find four modules in the same code repository doing the exact same thing, but because there is no documentation, people wrote their own.

    14. Re: I disagree by Anonymous Coward · · Score: 0

      The former creator built the code in intensive projects each with different teams, agendas, focus areas, goals and alot of fresh funding. The new guy is put on maintenance mode, alone and without clue of either methodology, scope or cost/benefit. If rewrite has clear achievable goals maybe worth it. If to stroke dev ego or make dev life easier, almost certainly a terrible idea and waste of effort.

      Rewrite is best when new tech obsoletes old, making it faster and easier in the new way, also for users. Then failing redesign would be a huge mistake.

    15. Re:I disagree by Anonymous Coward · · Score: 0

      I'll go along with the above. Usually the problems are in limited areas. The bug tracking system can often tell you where the problems persist over time, (and often who put them there). I can recall doing a complete rewrite of a certain device driver when the list of bugs was longer than the module itself. Sometimes, you almost can't make it worse. In other cases, everyone knows where the swamp is, and may wind up "fixing" problems elsewhere to avoid disturbing fragile mess. That never works out in the end.

      Another problem is that the new hire punk is the one often that wants to do the rewrite, which has a good chance of creating a taller heap of steaming drek. You have to treat the disease with the respect it deserves, not just send in cannon fodder. Once the major problem areas have been addressed, the rest of the product is not such a burden, and is more amenable to excising the accumulated technical debt.

      But I can't keep mixing up metaphors without throwing some hate on the usual Agile implementations. One of their many defects is to quantize time such that difficult tasks like refactoring major problem areas take more than management's allotment for an interval, and so keep getting deferred forever, or until the product fails.

    16. Re:I disagree by Darinbob · · Score: 1

      The snag is that rewriting is not a direct revenue generating operation, so it's usually frowned upon as a waste of money. I know lots of code that really needs rewriting but it can't practically be done. Most likely the people who understand that code have left years ago and never documented anything (the code wouldn't even need rewriting if the original authors were good enough to know to document things clearly).

      Don't even start thinking about rewriting until you have clear documenation about what the code actually does and have developers who understand it. Don't design in a rush like the first group did. And watch out for that one guy pushing for the rewrite who thinks he knows everything but really doesn't.

      And rewriting the code may mean that you end up not being backwards compatible. Contrary to what Joel implied, the original code usually does NOT have hard earned knowlege behind it, generally all that old crufty code was written in startup days when you have to quickly ship a working demo every Friday or be out of a job, so there are tons of bugs and shortcuts riddled through everything. And you have to remain compatible with the bugs most of the time in order to interoperate (keeping the same protocols, file formats, etc).

    17. Re:I disagree by Darinbob · · Score: 1

      Have to agree there. I've seen that new guy in several places. "Why are you using C+ in your embedded system, there's this new language called Java you should use!", "Well, MY professor said that's the wrong way to do things", "I have a few suggestions for your coding style document", "I saw a goto in the code, who's the proper HR person to report this to?

    18. Re:I disagree by Darinbob · · Score: 2

      Half the time the people who wrote it don't even realize they made a mistake. I've done it myself, looking at old code and thinking "what moron did this?", looking at who made the code commit, and realizing it was me.

    19. Re:I disagree by Anonymous Coward · · Score: 0

      systemd comes to mind

    20. Re:I disagree by Anonymous Coward · · Score: 0

      If their title is Manager, or Consultant, they are ALWAYS wrong.

      How about Architect? Like, the kind of architect that's nowhere near actual code but has a better design in Powerpoint. That's how we decided to throw out a decade of high performance SQL for C#, Entity Framework and Angular because it's so easy to get developers. Who don't know WTF to do with 100+ million row tables, make terrible code-first designs we're not allowed to give input on and can barely join two tables together. So far they've spent ten man years delivering less than we did in one but since the architect is right and we're wrong it must be us tripping them up. Plus unlike our system that actually is modular but inside one database theirs can only run as one huge blob across five database where integrity will got to hell if the server goes down for real and we must restore from backup.

    21. Re:I disagree by bmimatt · · Score: 1

      As a consultant - we are ALWAYS right :)

    22. Re: I disagree by SimonInOz · · Score: 1

      Oh yes, Agile.
      Sounds great until management gets hold of it. Then they turn it into permanent sprints, oversized teams, and basically a micromanagement clusterfuck.
      Thereâ(TM)s a clue in that word âoesprintâ. You canâ(TM)t do continuous sprints. Then itâ(TM)s not a sprint. You need a rest period.

      --
      "Cats like plain crisps"
    23. Re: I disagree by tigersha · · Score: 1

      That is not really a ârewriteâ(TM) as Spolsky meant it. Going from Text to Web is really a new system. âRewritingâ(TM) there means ending in up with a new implementation of the same thinyg for no good reason

      --
      The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
    24. Re: I disagree by Anonymous Coward · · Score: 0

      There is no such thing as time between sprints in agile theory. If you are thinking of a "hardening sprint", those don't work and are anti agile. If you need one it means you didn't deliver Done code in the sprints before. Go back to 0 and try again. That said with each sprint you do need time to redactor if you need to. Its really not different from non agile where the developer just overestimates something to hide a refactoring he has been thinking about for some time. If you do agile please do it right instead of giving it a bad name because you can't even get the theory right.

    25. Re:I disagree by Anonymous Coward · · Score: 0

      Yeah, hey, hold up on the consultant one. I'm a consultant, and I'm the LAST guy to recommend a rewrite. That's my income stream there, figuring out difficult code and making fixes! I'd be out of a customer if it were easy to maintain!

    26. Re: I disagree by DickBreath · · Score: 1

      The 'no good reason' is why not to do that kind of a rewrite.

      But moving from Text to GUI then later to Web seem like two rewrites.

      Don't forget I mentioned the very first rewrite was from Text to Text -- but just much fancier text 'gui' type interface. (no mouse, but much fancier keyboard operation, more curses like, is a way to describe what I mean)

      --

      I'll see your senator, and I'll raise you two judges.
  4. The only unmatintainable code... by Anonymous Coward · · Score: 1

    ... is undocumented code. As a corollary, the first step on the path to fixing it is to execute the authors of said code and start again with competent developers who understand the value of documentation.

    1. Re:The only unmatintainable code... by ShanghaiBill · · Score: 0

      ... is undocumented code.

      Documentation is often useful to users, but rarely of much use to developers. If your code doesn't make sense without a separate document to explain it, you should be fixing your code, not writing that doc.

    2. Re:The only unmatintainable code... by HornWumpus · · Score: 4, Insightful

      The classic answer to that is 'job security' == 'unpromotable'

      But that assumes you aren't going to change companies, on your schedule, and 'fuck them'.

      The truth is 'job security' == 'not promotable without an employer change'. But that's just true for many employers in any case. If that's your boss, there is no reason not to play 'knowledge is power', just don't be slow blatant about it the PHB can see it.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    3. Re:The only unmatintainable code... by HornWumpus · · Score: 1

      'Clever code' shouldn't be blanket banned. It should be considered and if it's worth it, commented to hell and back.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    4. Re:The only unmatintainable code... by ShanghaiBill · · Score: 1

      'Clever code' shouldn't be blanket banned. It should be considered and if it's worth it, commented to hell and back.

      In-line comments are not the same as documentation. But even in-line documentation should not be used as a crutch for poor code.

      foo(a, b); // Compute the dot product of the inputs and bias

      dotProduct(inputs, bias);

      Which is better?

    5. Re:The only unmatintainable code... by Anonymous Coward · · Score: 1

      If your code doesn't make sense without a separate document to explain it, you should be fixing your code, not writing that doc.

      The code may make perfect sense for the situation for which it was created, but it may not make sense to anyone who is unaware of what that situation is. Explaining the circumstances for which the code makes sense, is what you put into the comments.

      You do that not only to give "the next guy" who has to maintain the code a head's up on why it was written that way, but because if you're in the same place for any length of time, "the next guy" is likely to be YOU, after you've forgotten why the heck you wrote that.

    6. Re:The only unmatintainable code... by Anonymous Coward · · Score: 0

      Well,

      dot_product(inputs, bias);

      would be best.

    7. Re:The only unmatintainable code... by www.sorehands.com · · Score: 1

      The comments should be in the code, so when you go back 2 years later, you know what it is doing and why.

    8. Re:The only unmatintainable code... by Darinbob · · Score: 1

      Often the incompetent people who understood the code originally leave and are replaced with incompetent people who don't understand the code. Hiring competent people may not be one of the options you're presented with.

    9. Re:The only unmatintainable code... by Beeftopia · · Score: 2

      foo(a, b); // Compute the dot product of the inputs and bias

      dotProduct(inputs, bias);

      Which is better?

      The best is:

      // Compute the dot product of the inputs and bias
      dotProduct(inputs, bias);

    10. Re:The only unmatintainable code... by Megane · · Score: 2

      Even better would be to explain why you need to compute the dot product.

      --
      #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
  5. No different than writing a book by smooth+wombat · · Score: 5, Insightful

    Sometimes you have to completely rewrite everything from the beginning.

    Other times, changing a few words here and there, or a paragraph or two is all that is needed.

    --
    We will bankrupt ourselves in the vain search for absolute security. -- Dwight D. Eisenhower
    1. Re:No different than writing a book by Anonymous Coward · · Score: 0

      On this topic, I was thinking about the Thunderbird email client. It's been pretty stable, with no major changes in years as far as I can tell.
      Does that mean it's "done", or is it too complex for people to work on?
      The latter case seems to be hinted at in this blog post.

      Thunderbird is a big, complex project that isn’t easy to jump into. So, as we closed out the year I opened a bug where we can detail what documentation needs to be created or updated for new members of the community – to ensure they can dive into the project.

      Has anyone here contributed to it and if so, any comments? I love Thunderbird but when I looked at the code several years ago it was fairly daunting.

    2. Re:No different than writing a book by 110010001000 · · Score: 0

      What authors completely rewrite a book after it has been published?

    3. Re:No different than writing a book by lazarusdishwasher · · Score: 1, Offtopic
      Would Douglas Adams count? I am not sure that he rewrote the book, but he didn't go to great lengths to make sure that the radio, television, book, and video game were the same.

      “It was a substantially expanded version of the first four episodes of the radio series, in which some of the characters behaved in entirely different ways and others behaved in exactly the same ways but for entirely different reasons, which amounts to the same thing but saves rewriting the dialogue”. -Douglas Adams, Introduction, The Ultimate Hitchhiker’s Guide to the Galaxy

    4. Re:No different than writing a book by dryeo · · Score: 2

      On this topic, I was thinking about the Thunderbird email client. It's been pretty stable, with no major changes in years as far as I can tell.
      Does that mean it's "done", or is it too complex for people to work on?
      The latter case seems to be hinted at in this blog post.

      Thunderbird is a big, complex project that isn’t easy to jump into. So, as we closed out the year I opened a bug where we can detail what documentation needs to be created or updated for new members of the community – to ensure they can dive into the project.

      Has anyone here contributed to it and if so, any comments? I love Thunderbird but when I looked at the code several years ago it was fairly daunting.

      There's a couple of problems with working on Thunderbird. It's built on Mozilla (Firefox) code base, which is huge and fast changing at times, especially lately as they replace big chunks, so right there is a huge learning curve including learning how a bunch of stuff works under the hood,
      Ant then there is the Comm-central (Thunderbird and SeaMonkey) code, which much is old and complex as well as intertwined with Mozilla code.

      They are being forced to rewrite much due to Firefox having large chunks ripped out and rewritten. Luckily they seem to have some money to hire a few full time developers, as it is a full time job just keeping up with the changes in Mozilla, including porting stuff that Mozilla has ripped out to Comm-central, keeping add-ons working while moving to the new crap etc.

      For a while it did seem pretty mature wit chunks that needed a rewrite but no one to do it. Now they're forced to keep up.
      SeaMonkey is fairing a lot worse in the keeping up stuff.

      --
      https://en.wikipedia.org/wiki/Inverted_totalitarianism
    5. Re:No different than writing a book by dryeo · · Score: 1

      Neil Gaiman? Seems to have rewritten Neverwhere. Then there's rewrites for the big screen or small screen that probably happen more.

      Even with software, I'd expect large projects not to rewrite everything, but rather chunks. Firefox for example has had a lot of rewriting in the last couple of years but I'd guess stuff like widget/ are only lightly touched.

      --
      https://en.wikipedia.org/wiki/Inverted_totalitarianism
  6. Is it really the same application by Anonymous Coward · · Score: 1

    That's how we've ended up approaching this question. Is this really the same application, or are we creating something new. Often, we've found that a major upgrade isn't an upgrade at all, but a new approach to doing a somewhat similar set of things to what our client's application has done. Joel is right; there is an amazing amount of knowledge embedded in the code base. However, if that business knowledge doesn't apply, then throw it out. Artifacts from motor controllers that were obsolete a decade ago, probably not valuable in the new product. User interface paradigms, though, that will persist in the new software really strongly suggest keeping the extant code base, as the UI paradigm reflects and drives the rest of the software. ... unless the UI is horseshit, in which case, you can assume the rest of the code is horseshit and valuable only for growing mushrooms.

  7. Never say never by Anonymous Coward · · Score: 0

    I would say, that every program from V1.x should be rewritten for V2.0.

  8. Start all from scratch by Anonymous Coward · · Score: 0

    If I have used the app a lot, I would start all over again from scratch.
    Then read a good study about what where the bugs and improvements.
    Then compare both.
    Finally, get the best of both worlds.

  9. Summarized in four words: "Make a New Product" by crgrace · · Score: 5, Interesting

    Nowhere in this article is any flaw in Joel's pronouncement to never rewrite found. The only of the six stories that was a rewrite of an existing product is Netscape and that was a disaster. The fact that Firefox came out years later doesn't make it any less of a disaster.

    In the rest of the cases, no one is re-writing their existing product and letting the competition catch up. No, what they are doing it making a new product and moving users over if possible. That makes sense and that is what I learned from Joel's original article.

    Making this seem like some kind of intriguing rethink of rewriting legacy code is false and click-baity.

    1. Re:Summarized in four words: "Make a New Product" by sjames · · Score: 1

      Even Netscape is questionable. Look at the graph again. By the time the rewrite started, it was already on the way down. IE6 had already reached parity. Did the rewrite really reach back in time?

      Clearly by the time the rewrite started they were already in deep trouble. So much that they had resorted to open sourcing the whiole thing hoping outside developers would turn their steaming pile into something. It coundn't, so they decided to do a re-write.

      Did the re-write actually fail from natural causes or was it the kiss of death from AOL? Keep in mind, Netscape isn't the only once popular software that either died or was crippled under AOL's care.

      When the community decided to rewrite the whole thing as Firefox, outside of AOL's deadly grasp, they succeeded. OTOH, IE finally died. So did IE's replacement (it's just going to be a skin over chromium now).

      TL;DRthere's too many confounding factors in the Netscape debacle for it to answer the question of rewrite or not.

  10. There is no correct answer. by Anonymous Coward · · Score: 0

    No and yes. If you code is written in C and you are trying to move the application from a character-based presentation I sure hope that you wouldn't keep your code.

    I actually worked with a company back in the 90's who had a mainframe operation that they wanted to run as a Windows GUI. At the time Microfocus COBOL offered code and APIs that would allow you to take a CUI and turn into to a semi-GUI. I spent five months and it worked but as I was only a contractor I wonder how they survived after left as any changes to the CUI required a hell of a lot of work on the GUI.

    If your application is a GUI and you want to go the web, same thing. And I (and MANY others) have done that also. That was a rewrite for a major insurance company. Trying to keep any of the C++ code would have a disaster. Eventually, that system was rewritten in C.NET. Again, total rewrite WAS the proper choice.

    So, changing platforms and/or hardware puts constraints on what you can do. If you are simply rewriting code because you don't understand it then you don't have a good understanding of what you are doing in the first place and you will FAIL.

  11. Citation needed. by mcmonkey · · Score: 5, Informative

    The articles own facts don't support the article's conclusions.

    "Netscape’s slide into irrelevance wasn’t entirely due to the rewrite—a court agreed that Microsoft had deliberately abused their monopoly. But the rewrite was certainly a contributing factor"

    The graf accompanying this section shows Netscape's market share dropping from about 80% to 50% BEFORE the rewrite. Now that drop continues from 50% to near 0% during and after the rewrite, so the rewrite certainly did not save Netscape. But the slope of the decline barely changes pre- and post-rewrite. Basically, unless there's other evidence not presented, the best conclusion is the rewrite had no effect.

    Also, "what finally ended the IE6 era wasn’t Firefox but Google Chrome."

    Except your own graf shows IE market share dropping starting in late 2002 in mirror to the rising Mozilla/Firefox. Chrome doesn't even show as a factor until 2008. The articles own facts don't support the article's conclusions.

    What really killed Netscape was releases a lousy product. 4.0 suuuuucked. (Folks on the web in '96/97 remember.) And IE at the time was releasing it's first good version, a better version. Fact is, at that time IE was better than Netscape.

    What Netscape needed was a better product, and if it took a ground-up rewrite to get that better product, then a rewrite was necessary.

    What we know now is the rewrite did not save Netscape. But we'll never know if there was some other course of action that could have saved the it. What we really should be doing is examining what was going on in '95/'96 to produce such a bad product and lose that market share in the first place, not at what rearrangements of the deck chairs was done as the ship went down.

    1. Re:Citation needed. by Anonymous Coward · · Score: 1

      There's no Java version of Netscape/Mozilla/Firefox*/etc (it's all C++); the big user-visible change with 4.x was the full application suite (Browser, Mail, IRC client and something else I don't remember right now). The rewrite mentioned by Joel is Netscape 6.0 which was a near disaster (based on alpha Mozilla code -- circa 0.5 IIRC -- really unstable, RAM-hungry and incompatible with two critical plugins at the time: Flash and Shockwave)

      My first internet experience was as a kid with Netscape 4.x and IE 5.x; IE was/felt more stable, but I liked Netscape's GUI more and it always felt snappier to me.

      *: Yes, Firefox on Android has bits in Java (parts of the GUI and probably interfaces with the rest of the system), but the core application is still C++.

    2. Re:Citation needed. by nmb3000 · · Score: 2

      The graf accompanying this section shows Netscape's market share dropping from about 80% to 50% BEFORE the rewrite. Now that drop continues from 50% to near 0% during and after the rewrite, so the rewrite certainly did not save Netscape. But the slope of the decline barely changes pre- and post-rewrite. Basically, unless there's other evidence not presented, the best conclusion is the rewrite had no effect.

      The decline of Navigator was caused by Internet Explorer. This is pretty easy to see on the graph, and for anyone who was around at the time, easy to remember. IE improved steadily with each release, and bundling it with Windows 95, first in the Plus! Pack and later in SP1 (in early 1996), had a massive effect. This, more than anything, caused the decline of Netscape.

      What Joel and others are saying is that starting a rewrite of the product prevented Netscape from reacting quickly to the problems with Navigator and implementing improvements and new features to compete with IE. The web browser market at the time was moving very fast and very loose, and stagnating an entire product for years was as good as a death sentence, even if there were other problems as well.

      So while it's true that the rewrite may not have directly caused the fall of Netscape, it was at the very least a significant contributing factor. In the same way as not going to the doctor when you have appendicitis doesn't actually kill you, it certainly won't help you avoid dying due to the illness.

      --
      "What do you despise? By this are you truly known." --Princess Irulan, Manual of Muad'Dib
      /)
    3. Re: Citation needed. by Bangback · · Score: 2

      Probably more importantly, IE was free while Navigator 4.0 was $49. While there were free licenses available for personal and educational use, corporations and institutions adopted IE en masse as the cheap âoegood enoughâ solution especially since Windows 95 had an extremely rapid corporate migration due to much improved networking and hardware support.

    4. Re:Citation needed. by Waccoon · · Score: 1

      What really killed Netscape was releases a lousy product. 4.0 suuuuucked. (Folks on the web in '96/97 remember.) And IE at the time was releasing it's first good version, a better version. Fact is, at that time IE was better than Netscape.

      This exactly reflects my experience. In college, we all used Macs, and MacOS had Netscape installed by default as it came with the install CD. Everybody was explicitly replacing it with IE5, because it was a much, much better browser.

      Mac people intentionally using MS software by choice, because it was actually better? Say it ain't so!

  12. Targeted rewrites by Anonymous Coward · · Score: 0

    I can understand targeted rewrites for clarity, performance, security, etc but not just for funsies.

    At a small startup I spent a brief amount of time, I kept in touch with the founder and like 6 months later he said they were in the midst of a major re-write because his new devs wanted to use a different language. At their stage, I definitely think it was a horrible decision, and since I was the original author I'm now unable to be of much use when he reaches out.

  13. edge cases and weird bugs by WoodstockJeff · · Score: 1

    Precisely why re-writing should be on the table.

    WHY do the "edge cases" exist? Did you not really understand the situation originally?

    1. Re:edge cases and weird bugs by david_thornley · · Score: 1

      Does anyone really understand a complicated real-world situation without trying things to see what happens?

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    2. Re:edge cases and weird bugs by bws111 · · Score: 2

      I would say nobody ever fully understands the situation originally. Thinking otherwise is hubris.

    3. Re:edge cases and weird bugs by apoc.famine · · Score: 2

      And almost everyone who codes stumbles across some old code and asks, "Who the hell wrote it like this?" And then realizes it was them a long time ago, and that there was probably a reason for it but they have no idea what it was.

      --
      Velociraptor = Distiraptor / Timeraptor
  14. Don't be a Hero. by jellomizer · · Score: 3, Interesting

    Sometime you need to disconnect your software from your ego.
    A lot of full rewrites are primarily due to the fact the developer wants to be the Hero, toss out the old broken code, and make a new superior on in their own image. (Which then over times becomes old and broken)
    Also trying to keep bad code on life support, because you had invested so much into it over your time there, is just as bad, as the application barely meets the business needs anymore, and every fix is getting increasingly more complex.

    Sometimes what the code really needs, is just some reorganization. (Move your function and methods in more logical locations in your code so you visualize the problems more easier. Beautify your code, make white spaces consistent. ) Create a script to see where each function is called and where, Delete unused functions. Identify duplicate logic and merge them, or make a parametrized function of of them. It is actually amazing how a little cleanup work can turn a mess into a manageable application for decades.

    Also if designing software really try to split Logic and Interface/System call into separate portions. The routine that checks the required field, should be straight logic. Not generating HTML or Form boxes, giving the errors. Despite what your bosses say, assume the platform it is running on will be retired in 5 years, and try to plan to port the application over.

    Finally, really try to use basic core components as much as possible, avoid 3rd party tools as much as you can (this includes semi official repositories such as with pip or cargo). Don't be a Hero and make a ground breaking new interface, just use normal component.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    1. Re:Don't be a Hero. by www.sorehands.com · · Score: 2

      Maybe it is sometimes ego. Sometimes it is being tired of fixing spaghetti code that evolved over years with a CEO that says to fix it now, without taking the time to fix it right.

      AT MSI they had a person port the code from Windows to Mac, and came out with crap that was thrown away. If done correctly, it could have been the core of the new generation and been used as core of the NLM transport module. If they did this when they ported it from DOS to Windows, the port to Mac would have been much easier. The code had comments like, "I know this is not the right way to do this, but I will fix it later, because Dick wants it now." and I saw that comment 3 years after that programmer left.

  15. I've found what works best is the Pheonix by SuperKendall · · Score: 1

    I've been a lot of projects, some where we re-wrote from scratch, some where we just kept trying to overhaul stuff...

    It's true what he says about re-writing either missing, or spending a long time discovering the special understanding of things embedded deep in your code.

    What is ALSO true though, is that trying to fold new things into an ancient code base becomes harder and harder over time, to the point where even the smallest of features is torture to implement.

    The approach that has actually seemed to work best on a number of projects I've been on, is to make the project kind of a Phoenix - create an overhaul that rises from the ashes of the old as it were.

    In practical terms that means really burning out some deep seating issue that creates problems expanding or maintaining the software. Not the whole thing, just the most painful part. Replace it completely, tear into a hundred files and remove the tendrils of evil that have spread throughout.

    Then make it all work again.

    After that, suddenly it's easier to work with the codebase - not just because some aspect of it is newer, but also because you understand so much of it so much better.

    Also probably a rule of thumb related to that is, no-one works on a re-write who has not lived In the code fore at least two years. That may be a tall ask these days.

    I'd advise this even switching to some wholly new technology, just do part and build a bridge that works between the new and old halves.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  16. WTF, Slashdot by SlaveToTheGrind · · Score: 4, Funny

    Two programming articles in a row? How in the world am I to satisfy my deep inner thirst for bleeding-edge news about global warming, basic income, the Model 3, and Ajit Pai?

    Keep this up and I'm going to have to go back to HuffPost. Sad!

    1. Re:WTF, Slashdot by johannesg · · Score: 1

      Two programming articles in a row? How in the world am I to satisfy my deep inner thirst for bleeding-edge news about global warming, basic income, the Model 3, and Ajit Pai?

      Thank you for your succinct summary of why I should really stop wasting my time here.

    2. Re:WTF, Slashdot by Anonymous Coward · · Score: 0

      Two programming articles in a row? How in the world am I to satisfy my deep inner thirst for bleeding-edge news about global warming, basic income, the Model 3, and Ajit Pai?

      Uhmmm......Fox News?...... ;)

  17. Rewriting Netscape gave IE the web. by xack · · Score: 3, Insightful

    And rewriting XUL into Web Extensions, making the rewrite mistake twice gave Chrome the web. We could have had a strong Mozilla, now we got a weak one. Imagine a Firefox released in 2000, not 2004. We could have defeated IE earlier and avoid IE6 all together.

    I hope in five years time, when Chrome has 90%+ market share Mozillians take a hard look at themselves and see that they were responsible for the chromageddon.

    1. Re:Rewriting Netscape gave IE the web. by Edward+Nardella · · Score: 1, Insightful

      Google is responsible for "the chromageddon" no one else.

      --
      My sig doesn't address Anons, sigs aren't visible to them.
    2. Re:Rewriting Netscape gave IE the web. by Slayer · · Score: 1

      We could have had a strong Mozilla, now we got a weak one. Imagine a Firefox released in 2000, not 2004. We could have defeated IE earlier and avoid IE6 all together.

      It was the dominance of IE and Microsoft's hubris which together brought down IE. Apart from a small bunch of Microsoft haters most people used IE until browser specific malware broke their computers in unacceptably short intervals. This trend did not catch on before 2003-2004, and fortunately Firefox was ready for prime time by then.

      BTW IE6 (with its legendary web standard non-compliance) hurts Microsoft a lot more these days than it hurts Firefox, so we might as well cheer the former appearance and ubiquity of IE6 :-)

  18. Joel was incorrect.. by Junta · · Score: 5, Insightful

    His article hinges upon the assumption that Netscape was screwed over by the rewrite. In reality, they were almost certainly screwed on the business side to the extent no amount of technical effort could overcome their position.

    To the extent they had technical woes, it may well have been the case they couldn't sort out how to make the improvements they wanted to make given their current design.

    Now there are valid points, that 'old code' may look crusty but there is a good chance it is crusty for a reason and that sort of thinking should be ever present while making such a call, to try to understand *why* it is crusty before throwing it out. However sometimes it is for bad reasons:
    -Written against a once-presumed 'winner' of the market that becomes defunct. Your shockwave website has to be rewritten because the supporting technology is toast, and you better be scrapping your flash website soon if not already.
    -Maybe the runtime is still around, but *your* ability to find willing developers is difficult, so you have to switch languages/runtimes to align with the labor market
    -The people doing it didn't know what they were doing and did it incorrectly. Optimally, this is the same team that recognizes they painted themselves into a corner so they know what to do next time.
    -The code is full of workarounds for third party libraries that no longer apply. True this doesn't scream 'rewrite', but one of his points was that the ugliness of code is due to fixes for things long forgotten that still matter, but it's frequently the case they do still matter.

    In short, like all opinions be informed and influenced, but no simple answer is ever 100% correct no matter what. Internalize the points and evaluate in your scenario.

    --
    XML is like violence. If it doesn't solve the problem, use more.
    1. Re:Joel was incorrect.. by Anonymous Coward · · Score: 0

      Netscape's problem is that their current code could not support the new features they needed to make. They had an architecture that parsed HTML as it was coming in from the network and directly turned it into a rendering representation. You could tell because you could make the screen flash by having a series of <BODY> tags with different background colors, and resizing the window required reloading from the network.

      Supporting CSS and the DOM API required an architecture that parsed HTML into a DOM and then turned the DOM into a rendering representation, with any changes to the DOM or CSS being reflected in the rendered output.

      The JavaScript, networking, parsing, and rendering engines were all intertwined and couldn't be upgraded piecemeal. The only choices were rewrite or get left behind in the browser wars because their architecture couldn't support all the new features coming out.

      dom

    2. Re:Joel was incorrect.. by packrat0x · · Score: 1

      "Coders at Work" lays out the problems with Netscape. Netscape had a usable product written in C. Then they bought a company that never had a successful product, and whose programmers used C++. The C++ programmers did the (horrible) rewrite.

      --
      227-3517
    3. Re:Joel was incorrect.. by Junta · · Score: 1

      While I'm willing to believe the rewrite was a debacle, I would guess that the same team that did a crappy rewrite would have also failed at extending the existing codebase as well. In fact I'd be surprised if they hadn't spent some non-trivial time failing to evolve the codebase before resorting to rewrite.

      Rewrites are frequently the 'end of the road', but I think they are usually a symptom rather than a cause. When the product starts failing, a rewrite is a likely 'hail mary' move to hope for the best. As such it can get the blame even though things were already set before that move was even attempted.

      --
      XML is like violence. If it doesn't solve the problem, use more.
  19. New versions lose new customers by Anonymous Coward · · Score: 1

    I've experienced it at multiple companies - there's an established product that's showing its age, so the C level announce there will be a new version, which has the effect of making potential customers want to wait for that rather than going with what's currently being sold. No new sales means going into debt to fund the 2.0 version and risking them going to a competitor.

    1. Re:New versions lose new customers by Anonymous Coward · · Score: 1

      Yeah, it is a fairly common story, and I believe the reason why a lot of small tech companies go under:

      - Start with a client that has money and needs an application.
      - The application is decent and makes the client happy.
      - The company has money and more clients are interested, so new features are developed for the application.
      - Enough technical debt has now accumulated that small problems take 10x as long to fix as they used to.
      - "Let's take our knowledge of the application and rebuild it from scratch." Now your development costs have doubled: you are still supporting the existing clients on the old version, and deadlines for the new version keep getting pushed back.
      - Sales and marketing people keep promising new, non-existent features for the new version, which makes good business sense, but only increases risk for development.
      - Old clients, tired of waiting for promised improvements, move on to different products.
      - Company disappears.

  20. It's tiring to maintain crap by Anonymous Coward · · Score: 0

    Bosses want new features which were sold to customers before they had any idea if they were even feasible and in what time frame. They don't care about technical debt or maintainability. Features, features, features. Sometimes features that nobody will ever use but which were part of the requirements because who knows why.
    Never, ever mention refactoring or rewriting or anything like that. They'll say "sure, if you have time" and then give you ten more things to do.
    It's a big ball of mud, barely held together by congealed elbow grease and twine.

    1. Re:It's tiring to maintain crap by www.sorehands.com · · Score: 1

      Well, if you used duct tape and paper clips it would be much easier.

  21. New Guys are Universal by Anonymous Coward · · Score: 0

    Everyone was that new guy, once upon a time.

    If life and experience doesn't teach you, then you probably aren't paying attention.

  22. Netscape is the worst example by Anonymous Coward · · Score: 0

    Netscape's decline had nothing to do with Netscape at all, it was the manuf of the operating system on 90some percent of computers at the time giving away their own browser packed in with the OS

  23. Wrong reason to to rewrite by CanadianMacFan · · Score: 2

    I once worked in a government department that liked silver bullets. One of the things they tried was moving the development shop to one language, Java. That meant rewriting everything they wrote and even used. Even apps that were running without issues had to be re-written just because it was originally written in C. They even wanted to rewrite the utility formmail.pl that most sites were using at the time just because it used Perl.

    1. Re:Wrong reason to to rewrite by magzteel · · Score: 2

      I once worked in a government department that liked silver bullets. One of the things they tried was moving the development shop to one language, Java. That meant rewriting everything they wrote and even used. Even apps that were running without issues had to be re-written just because it was originally written in C. They even wanted to rewrite the utility formmail.pl that most sites were using at the time just because it used Perl.

      Perl itself is an example. The grand rewrite to Perl 6 is still a work in progress.
      I think it killed Perl in the process.

    2. Re:Wrong reason to to rewrite by Anonymous Coward · · Score: 0

      Woops, pissed off the Perl 6 developer.

    3. Re:Wrong reason to to rewrite by Anonymous Coward · · Score: 0

      Perl 6 isn't really a rewrite of Perl.
      It's a completely new language that is only marginally inspired by Perl 5 and earlier.
      They should have just given it an entirely different name, but that would have required being honest with themselves about the magnitude of the task.
      What failed Perl 6 was a lack of leadership in the end.

  24. A lot of it is vanity by magzteel · · Score: 1

    The insistence on rewriting because "The old code is complete crap" is often just about vanity. That it works and meets the business requirements is irrelevant, they just don't like it. They don't care that rewriting it will take a lot of time and cost a lot of money to get to where they already are functionally.

    While that rewrite is going on someone else is busy maintaining and enhancing the existing product. By the time rev 2 is near done it is already out of date. Many times I've seen it get canceled. Other times it just keeps meandering along sucking up resources and making grand promises while everyone else happily stays on rev 1.

    1. Re:A lot of it is vanity by Beeftopia · · Score: 1

      I don't know that it's vanity as much as it is an unwillingness to take the time and effort to understand 1) the workflow the code supports and 2) the code itself. I guess sure, there's a bit of vanity and overconfidence thrown into the mix too. Disdain for the existing code and overconfidence in my capabilities.

      If you have have all the requirements, true, full, accurate requirements, and an intuitive, easy to use interface, sure a rewrite can succeed. The successful cases listed in the article (Basecamp to Basecamp2, Visual Studio, Inbox to Gmail, Freshbooks and Billspring) all knew what FEATURES had to be implemented. They had true requirements. They had continuity in management and likely programmers.

      Getting the true requirements can be very, very difficult for a new team. As far as the crufty edge cases go... how much of that is a user requirement versus some flakiness caused by a weakness somewhere else in the program?

      The problem with eliciting requirements from users is that they can't envison what they truly want until they can play with a real version of the product, and THEN they realize how they want to use it (I guess this is a more of a problem for a new feature). Requirements for new features seem to evolve too. Gross requirements -> user plays with the product -> refined requirements, rinse, repeat.

    2. Re:A lot of it is vanity by magzteel · · Score: 1

      I don't know that it's vanity as much as it is an unwillingness to take the time and effort to understand 1) the workflow the code supports and 2) the code itself. I guess sure, there's a bit of vanity and overconfidence thrown into the mix too. Disdain for the existing code and overconfidence in my capabilities.

      If you have have all the requirements, true, full, accurate requirements, and an intuitive, easy to use interface, sure a rewrite can succeed. The successful cases listed in the article (Basecamp to Basecamp2, Visual Studio, Inbox to Gmail, Freshbooks and Billspring) all knew what FEATURES had to be implemented. They had true requirements. They had continuity in management and likely programmers.

      Getting the true requirements can be very, very difficult for a new team. As far as the crufty edge cases go... how much of that is a user requirement versus some flakiness caused by a weakness somewhere else in the program?

      The problem with eliciting requirements from users is that they can't envison what they truly want until they can play with a real version of the product, and THEN they realize how they want to use it (I guess this is a more of a problem for a new feature). Requirements for new features seem to evolve too. Gross requirements -> user plays with the product -> refined requirements, rinse, repeat.

      Another factor is how long the rewrite will take and what the user migration path is. If it takes too long the product stagnates.
      I think the Perl 6 rewrite killed the Perl momentum and it's never coming back.

  25. Don't generalize by Anonymous Coward · · Score: 0

    The guy who writes the code, knows what went wrong and rewrites it often does a better job

  26. Perhaps that was deliberate? by Roger+W+Moore · · Score: 1

    Seems sort of appropriate for a discussion on "the single worst strategic mistake that any software company can make".

  27. Link to full article by Anonymous Coward · · Score: 0

    There's a lot more nuance in the original article. It's a long read (30 mins) but worth it. https://link.medium.com/YeSRm7XJwU

  28. Plan to throw away the first one by Anonymous Coward · · Score: 0

    I've always liked that theory (see subject line).

    Fred Brooks described it: https://en.wikiquote.org/wiki/Fred_Brooks#Quotes

  29. This killed my software by Anonymous Coward · · Score: 2, Interesting

    Maybe add this as a seventh cautionary tale.

    I developed an application for reserving lab equipment for one of the largest server manufacturers in the world. It was capable of automated inventory, software and image deployment, and automated permissions handling that worked with an out-of-band IPMI interface and was capable of getting data as detailed as PCI bus info, CPU and memory information of virtually any server that runs IPMI. I wasn't the first to attempt an inventory management system like this within our company, but it was the most ambitious and long-lived solution by far and was used by 4000+ employees for thousands of servers and virtual machines at its height in over a dozen sites world-wide.

    Unfortunately, it was never an official job duty. I did it during free time at work and during a painful point in my personal life where I sunk most of my waking hours into the project. It was developed on a LAMP server when I was still a very novice programmer and despite how gross and hacky the code was, the software ran exceptionally well, had a professional-looking UI, didn't require any kind of management beyond ensuring the hardware was functional and any auto-generated tickets by my application were solved and gained it gained a lot of positive attention. I had an instance at each location and a master one collecting data from those for backup purposes.

    I'd always intended to rewrite the code, but life priorities and job duty changes made progress very slow on that, so despite the issues with the code, I continued updating it and maintaining it to support new products and features for nearly 8 years. The issues with my earlier novice programming skills started creating more and more problems however as I didn't develop it to be modular initially and every change I made to the UI to support the new features I was adding was piling up the problems I had to fix each time. I decided to begin learning NodeJS as I knew by this time that PHP's limitations in presenting real-time data would eventually be an issue and that it wouldn't scale very well as-is.

    I began the slow and arduous process of learning a language I'd dabbled in, but never been a huge fan of. Javascript, especially when it comes to programming non-blocking code for things that must happen in a very specific order, but where some parts must be run in parallel, can be an incredibly obtuse language to program with. Javascript starts great until you start using hundreds of modules and libraries and see how splintered the community has become. It's like modding with Skyrim. I spent more time testing mods than actually playing the game. Here, I spent more time learning and testing how to make all the modules work together smoothly than actually programming the software itself, frequently finding certain combinations didn't work properly as documented and requiring extensive troubleshooting.

    I'd made steady, but very slow progress as I didn't have a lot of free time to learn the language and I was basically learning as I was developing. The final nail in the coffin was that the company decided a spreadsheet-based solution without any automation, inventory or user management was the way to go... They felt that the IT labs functionality being tied to a single developer's presence was a bad idea. To be fair, I'd been trying to hand over the project to others and act as more of a project manager for awhile, but no one stuck with it long enough to even submit a single commit. The move to the new solution was a complete and utter disaster. Hardware and pieces parts gets swapped, moved, used, etc and as time goes on, the data just gets more and more stale as people complain they can't find what they need. I was happy to just be done with it as it was mandated that all IT were supposed to move away from my application, but I've found myself in an odd scenario as people are going behind IT's back to run my software and I'm having to continue providing support for it despite my desire to escape it since I have no interest in developing an application that will eventually just get hard-blocked by IT.

  30. Mixed bag by seniorcoder · · Score: 2

    Over my 40 year career (thankfully retired now), I participated in 3 total rewrites.

    The first two never produced anything and sucked up huge amounts of development resources.
    The reason was identical both times:
    New management wanted to take over a successful product and make a name for themselves.
    They never really understood the original product and nor did the (largely) new development staff thay used.

    The third rewrite project was a success.
    The original management used most of the original development team to rebuild, from the ground up, the product.
    While the rewrite took slightly longer than the estimates, the results were better than predicted.
    The company was subsequently sold to a huge bank for hundreds of millions of dollars.
    The team that built the original product and also did the rewrite still consider themselves a team, despite the fact
    that most of us no longer work together.
    IT'S ALL ABOUT THE TEAM
    Full credit goes to the management for team building, which is the most important aspect of managing just about anything.

  31. Rewrite if Microsoft deletes your language?! by DaveSewhuk · · Score: 1

    I know lots of working VB6 code that will need to be redone because Microsoft deleted the language. First rule of software development, use no Microsoft specific tech. The replacement language Visual Fred (VB.NET) converted 80% OK and left 20% as to fix. The fix requires you to restructure lots of the converted code as they didn't "port" over many of the original concepts that made VB6 productive.

  32. I'll go w/ no need for 'complete rewrite'... apk by Anonymous Coward · · Score: 0

    See subject - I went thru it going multiplatform from Windows to Linux in APK Hosts File Engine 10++ SR-1 32/64-bit for Windows https://hosts-file.net/?s=Down... (DL link @ bottom)

    PORTED FROM Windows TO Linux/BSD (latter via binary application layer compatibility w/ Linux in BSD)

    APK Hosts File Engine 2.0++ 64-bit for Linux h t t p : / / a p k . i t - m a t e . c o . u k / A P K H o s t s F i l e E n g i n e F o r L i n u x . z i p (remove spaces between chars & download)

    * The code is a GOOD 90++% or so EXACTLY the same between Operating System platforms (albeit improved on Linux in FEATURES/EFFICIENCY/performance).

    (Only REAL "differences" were in WinSock2 vs. *NIX sockets work & drive letters vs. mounted devices work doing the port between OS (which should make my 'ps' below EASIER since BSD is close enough to Linux vs. Windows relation to it))

    APK

    P.S.=> Soon for MacOS too (I just got a NEW Mac-Mini to port it there)... apk

  33. Re:I'll go w/ no need for 'complete rewrite'... ap by Anonymous Coward · · Score: 0

    Your software is shit. It took you over 14,000 lines of code to write a fucking string sorter.

  34. Registered /.ers disagree w/ you #1/5 by Anonymous Coward · · Score: 0

    Your software is just fine - well written, functional... I'm going to continue using the Host File Engine by mmell February 17, 2017

    Your premise that hostfiles are a good way to deal with advertising and malvertising is quite valid - by JazzLad April 20, 2016

    his hosts program is actually pretty good by xenotransplant August 10 2015

    his hosts tool is actually useful for those cases in which one does indeed want to locally block stuff outright while consuming minimum system resources by alexgieg September 25 2015

    I like your host file system by Karmashock September 09 2015

    that APK guy, I use his host file by rogoshen1 Tuesday March 03, 2015

    I personally use a HOSTS file blocker produced from a genius called APK by 110010001000 October 27 2017

    * SEE SUBJECT & TELL US: How does EATING YOUR WORDS taste?

    APK

    P.S.=> You're already VASTLY OUTNUMBERED but many more are coming (you haven't done better)

  35. Registered /.ers disagree w/ you #2/5 by Anonymous Coward · · Score: 0

    Apk has the answer for that - really... kill automatic updates by adding a hosts file entry setting updates.steam.com or whatever to 127.0.0.1. You have to find the right hostname for each software you want to block updates on by raymorris (2726007) on Friday July 06, 2018

    APK your posts on this and the hosts file posts, and more, have never been in error and/or bad advice by BlueStrat (756137) on Wednesday June 21, 2017

    I support APK's stand on the hosts file and can't see why it's not used more than it is. My hosts file is 144247 lines long (4,332 Kb) it & a firewall serves me very well - by Trax3001BBS (2368736)

    ABP is insufficient as a solid hosts file does everything APK reminds us about fast turtle September 17 2013

    You need APK's hosts file - by Teun (17872) on Wednesday August 06, 2014

    APK

    P.S.=> You EATING YOUR WORDS != GOOD NUTRITION... apk

  36. Registered /.ers disagree w/ you #3/5 by Anonymous Coward · · Score: 0

    APK is totally right on this count. Adblock Plus on Firefox mobile is a dog on older, or lower end, phones. A hostfile based adblocker makes for a much better experience in this context. Of course, your phone has to be rooted, which isn't the case with Firefox + adblock." - by chihowa on Saturday May 16, 2015

    APK solution STILL relevant Thud457 June 11 2015

    In a footnote, I would like to note that I find your hosts file admirable - by vel-ex-tech (4337079) on Tuesday November 24, 2015

    APK's monolithic hosts file is looking pretty good at the moment - by Culture20 on Thursday November 17

    you're right about hosts files - by drinkypoo (153816) on Thursday May 26

    APK, I know people give you a lot of shit regarding hosts, but please don't ever stop - by nasredin (958927) on Friday June 12, 2015 @03:34PM

    APK

    P.S.=> Are you ENJOYING the taste of EATING YOUR WORDS yet?... apk

  37. Registered /.ers disagree w/ you #4/5 by Anonymous Coward · · Score: 0

    APK is kinda right... I've given up on JS based adblocking and gone to blackholing in /etc/hosts, just like it was back in the 90s. The computational load has gotten intolerable for any ad-blocking using JS. I've tried his hosts file generating software. It works. - by bmo (77928) on Thursday October 15, 2015

    get around to 'installing' a hosts file list, not sure which one, likely the one from someonewhocares.org. If it works as well as what I used for a while about ten years ago, I'll be happy. And grateful to APK for the lesson and the reminder. - by kermidge (2221646) on Wednesday March 27

    I actually went and downloaded a 16k line hosts file and started using that after seeing that post, you know just for trying it out. some sites load up faster. - by gl4ss (559668) on Thursday November 17

    dammit MS, you proved APK right about something by lgw

    APK

    P.S.=> Your words YOU'RE EATING: You choking on them yet?... apk

  38. Registered /.ers disagree w/ you #5/5 by Anonymous Coward · · Score: 0

    (APK) is still right a hosts file really does work. It even blocked a some of the video ads that were inserted into a stream OrangeTide February 10 2016

    the Host File Engine performs exactly as promised - by mmell (832646) on Thursday February 16, 2017

    I do use APK's host file on all my systems at home by OrangeTide December 01 2017

    I've never tried to belittle (APK's work), I've flat out said it's good - by BronsCon (927697) on Thursday February 11, 2016 @06:48PM (#51491263)

    * Toss on 100,000++ users worldwide too!

    APK

    P.S.=> You still haven't said how EATING YOUR WORDS tastes? apk

  39. HOW DID EATING YOUR SHIT WORDS TASTE? apk by Anonymous Coward · · Score: 0

    Dozens of /.ers liking/using/praising MY work MADE YOU EAT YOUR SHIT YOU SPEW punk (work of the likes "your kind" in a do-nothing "ne'er-do-well" shit talking WEEZIL who STALKS me by UNIDENTIFIABLE anon in you can't do) lol!

    * YOU do all you KNOW how to do: EAT YOUR WORDS & LOSE, lol!

    APK

    P.S.=> Loser, lmao @ U... apk

  40. Re:I'll go w/ no need for 'complete rewrite'... ap by Anonymous Coward · · Score: 0

    We don't see you do better than APK did. You're hotair and no action. You won't answer how eating your words taste after dozens of users shut you up.

  41. I see retarded bitch APK's pretend friend is here by Anonymous Coward · · Score: 0

    I see that retarded bitch APK's pretend friend is here to try and help defend him against the truth. If you aren't APK then you are an even bigger retard than he is. APK didn't refute anything that was said about the quality of his code because he knows the criticism is valid. Instead he just tries to deflect because he has nothing but out of context quotes that if the full comment was included would paint a very different picture of him and his work.

  42. Ah, the UNIDENTIFIABLE STALKING PUSSY by Anonymous Coward · · Score: 0

    I see that UNIDENTIFIABLE STALKING PUSSY is here to try harass me. If you aren't UNIDENTIFIABLE STALKING PUSSY then you are an even bigger retard than he is. UNIDENTIFIABLE STALKING PUSSY has no code of his own because he knows HE HAS NO SKILLS TO CREATE IT and the criticism is valid. Instead he just tries to deflect because he has nothing but out of context quotes that if the full comment was included would paint a very different picture of him and his LACK OF USEFUL work.

    * LMAO!

    APK

    P.S.=> Truer words were NEVER SPOKEN on /. ... apk

  43. "ASCII art" by Anonymous Coward · · Score: 0

    Emojis are in ASCII now!