Fmr. McDonald's USA CEO: $35K Robots Cheaper Than Hiring at $15 Per Hour

Let's say you have a really bulky service called GodService that your team has decided to make, and you have a set of things to do for that sprint/epic.

After writing all the code and delivering an awesome product using GodService, a few sprints go by. A new set of features that are extremely similar to your original service are brought to the table. Let's also assume that because you're using Agile and you had to deliver the shiny product, you wrote to get shit done and didn't have time to properly abstract/document/diagram everything. Now a bunch of code implicitly relies on the GodService in it's current form.

Also, just for fun, let's say that nothing's commented and naming consists of "I_LOVE_AGILE_1" and "catpyjama" and

public void smitePeons(ref CatPyjama catpyjamaInstance) { 
    catpyjamaInstance += I_LOVE_AGILE_1; 
}

Do you try and make it work for the kids? If so, abstract the common functionality out of GodService as best you can, and extend ThorService and OdinService with the new functionality. If you do this, 99% of the time, something breaks somewhere else causing more rewrites.

Do you accept your fate and pray to the Many-Faced God? If so, completely restructure the code base so this doesn't happen again, and create a beautiful ExistentialCrisisFactory that can instantiate BeliefServices in any form, with any type of deity or parameter, on demand, forever. At least you accepted you have to rewrite lots of stuff.

Do you drink and #yolo? If so, you repeat yourself and create an OdinService alongside GodService and hope that they never cross paths, or hack the new service functionality into GodService, and pass arguments like

public void smitePeons( boolean isOdin, boolean isPoseidon ) { 
    if (isPoseidon && !isOdin){ 
        surfsUp(); 
        pointyStick(); 
    } 
    else if (isOdin && !isPoseidon){ 
        drinkTooMuch(); 
        dieOfOldAge(); 
    }
    else { 
        plague(); 
    }
}

etc., etc.

tl;dr: Agile can layer shit on shit if the proper design work (or something like that) isn't done.

/r/news Thread Parent Link - foxbusiness.com