CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Eric Wise

Business & .NET

Five Signs of the (Development) Apocalypse

Throughout my time in consulting, mentoring, and full time work I have come to notice a few signs that tend to lead to over budget, late, and failed projects.  The intention of this post is to share these insights, hopefully with a bit of humor and it is definitely not to be taken as religious mantra.  =)

 

 

Sign 1: “What We Need Is A Rules Engine”

This statement always hits me like the bell toll of doom.  While I’m certain that there are scenarios that justify a rules engine the most common time I have heard this phrase have been from the small/medium business with a relatively low complexity application and worst of all, the statement appears before a single line of code has been written.

 

How can you possibly advocate something as complex as a rules engine when you haven’t even seen what coding patterns have emerged yet?

 

 

Sign 2: “We need to be Future Proof”

Once again, this is a problem at the start of a project.  Once upon a time I was doing work for a company that was looking to design the next version of its internal software.  Said software was a glorified database I/O application that ran just fine on a single server.  The lead of said project demanded a structure that forced all of the developers to be remoting-friendly and spent a few months designing a back-end framework to wrap remoting calls to make them easier.

 

The extra (useless) work not only ran the project over time and budget, but also caused confusion to the developers since they had to learn a custom framework which supplied functionality that wasn’t ever being used.

 

 

Sign 3: “XML-itus / aka configuration hell”

It seems from time to time in organizations an architect comes along that is absolutely fascinated by the XML concept and wants to put absolutely everything into XML configuration files with the thought of designing this glorious application that never has to be recompiled again.  Don’t get me wrong, I’m a big fan of web.config and configuration files where they make sense… this is a pretty limited scope for me though.

 

Once upon a time I worked on an application where lists, keys, etc were spread out in various xml files plastered all over the application structure.  The end result is when you were looking for something you had no idea where to find it.

 

Once upon a time I also worked on a project where an “enterprise framework” required that all stored procedures be placed into a huge xml file with all of their parameter information, etc as child nodes in the stored procedure.  The grand vision of this is that you could make changes without recompile, the grand reality of this was that anytime a database change was made you had to search this 5000 line config file to find the stored procedure and edit the xml config file as well as the database deployment.  Can you say additional points of failure?  Besides which adding or reading new parameters required logic changes anyways.

 

 

Sign 4: “Bringing Down The Enterprise Hammer / aka round peg, square hole”

Ah, the glorious enterprise framework.  For some reason it seems like developers feel compelled to create vast frameworks for their organizations and that every project and developer has to use them.  The flaw in this strategy is that the framework is often designed before the code that is intended to use it in which case the framework becomes bloated and often does not address the real problems end of line applications are trying to solve in an elegant fashion.

 

Common Frameworks should never be written before experiencing the real problem domain.  Instead, developers should practice the following:

 

  1. Code Once
  2. When the code appears a second time notice it.
  3. When the code appears a third time, promote it.

 

In this way you let your problem domain dictate the common functionality you carry around.

 

 

Sign 5: “We’ll add staff later as-needed”

This is a big management blunder that I have seen many times.  They under staff at the start of a project to save money, and plan on adding developers later if the project starts to slip off schedule.  The reality of the situation often is that adding developers to a late project makes the project later.

 

To developers, the reasons for this are fairly obvious.  When you enter a new project there is a period of low productivity where you are learning the ins and out of the existing application and determining what needs to be done.  Non technical managers often think that a developer is like a phone support person in that all you have to do is put a body in the seat, give a few hour training session and it’s off to the races.


Comments

karl said:

#1:
Dude, you must consult for the Canadian government!

#3:
I don't find it to be the problem it was just a couple years back. Going back 4 years or so, I remember clients asking to have things XMLd that just didn't make sense.

#4:
In my experience the "architects" that create the frameworks leave the project before it's close to done. They see it as a great success - everyone else as a failure. Unfortunetly, they're gone, so they haven't learnt and go on to make the same mistake over and over again.

#5:
9 women could give birth in 1 month
# June 22, 2006 11:10 AM

The other Carl said:

#1 - 'How can you possibly advocate something as complex as a rules engine when you haven’t even seen what coding patterns have emerged yet?'

- WTF is a "code pattern"?  If it has anything to do with coding, how could "coding patterns" emerge until you've made - at a minimum - some assumptions about the implementation - probably including a language/platform?  

- Would this statement ring your bell, too?:  "How can you advocate for something as complex as Java/C/<insert any language> when you haven't seen what coding patterns have emerged?"  How is this any different from your statement?  Rules are just another means of writing code, like Java, Python, Haskell, C#, etc.  Are you saying you have to start writing a system in Assembler before deciding to use Ada?

- Throughout *my time* in consulting, mentoring, blah blah blah, I have found that the statement "What We Need Is A Rules Engine" is not a technical requirement.  It's a shortcut for expressing all the "advantages" that rule engine vendors feed to prospective clients:  ease of maintenance, insight into systems, auditability, clarity of code, speed of deployment, etc.   Focus on what you user is trying to tell you.

# June 22, 2006 3:33 PM

Jeremy D. Miller said:

Very funny, and horrifyingly familiar.  Here's a #6 from the Agile world --> "You can just refactor it later"
# June 22, 2006 4:13 PM

Eric Wise said:

Other Carl- The keywords were "low complexity", and no code, which means no prototype or proof of concept to show why a rules engine is necessary.

I also qualified the statement by saying that there are situations out there that justify rules engines, but most of the time I hear those words come out of someone's mouth it's very premature.

Also, on coding patterns, they're great, I use them.  I don't often start with them though.  Check out the book "refactoring to patterns".  Patterns do what they are meant to do very well, but oftentimes abstract things, making it more difficult as far as clarity and readibility.  They also take more time to set up properly than simply coding a method, which is why you shouldn't use them until the need arises.  It's a similar scenario to the coding a framework on the front side, you end up implementing things and abstracting things that don't need to be abstracted, ultimately paying an unecessary cost.

Naturally there are some patterns that can and should be implemented up front, as with many things coding, there's no all encompassing answer.  "Refactor all later" as jeremy says, can be just as painful in the right (wrong?) situation.  But some things are best left alone until needed.  Finding that balance is an art form.

"just because you're given a hammer doesn't make every problem a nail."

# June 22, 2006 5:11 PM

The other Carl said:

ewise - Let me first say that I agree with most of the spirit of what you're saying; I'm simply trying to correct some of your implicit comments.

"no prototype of proof of concept to show why a rules engine is necessary", "the statement appears before a single line of code has been written" - It's called requirements gathering, analysis & design.  I don't need a POC to show that I need, e.g., a messaging system (MOM, etc.), or a system that can handle distributed transactions (DB, Entity Beans, etc.), or an expert system (Rule engine, etc.).  If we're trying to pass on lessons about good development practices, we *shouldn't* be telling people to design by coding.

"Coding patterns" - I'm still not clear on what you mean.  Your example "Refactoring to Patterns" talks about Design Patterns.

"just because you're given a hammer doesn't make every problem a nail" - EXACTLY.  Look at the problem, then design the right solution.  Don't start coding an application, then decide what technology would have been correct.  (BTW, when woul you do this?  AFTER you've written the system, and failed performance testing?  AFTER you've put it into production, then found out you can't maintain the code you've written?)
# June 23, 2006 3:33 PM

One more time -- Chip’s Quips said:

# June 23, 2006 9:18 PM

GMan said:

#1 - The "rules engine" should C# or VB.Net; buying a COTS engine reduces success probability by 95%.  This is often retored in Dilbert'ese with "but our business user's can write their own rules with XXX's engine".  Ha ha, hee hee.  That brings tears to my eyes.

#4 - "A few months in the lab can often save a few hours in the library".  Why buy/borrow/copy when creating from scratch is so much more fun and generates so many more billable hours?   Standards shmandards!


# June 28, 2006 8:00 PM

meneame.net said:

Eric Wise expone de manera ir&#243;nica y socarrona cinco signos que seg&#250;n &#233;l hacen que incluso antes de empezar el desarrollo este ya est&#233; condenado al fracaso. Encontrado buscando informaci&#243;n sobre motores de reglas. Bueno, yo s&#237;
# June 30, 2006 3:39 PM

Sahil Malik said:

Hey !! Xmlitis was my invention :), go find your own problems :-D
# July 4, 2006 7:47 PM

Craig said:

The Other Carl Said: "It's called requirements gathering, analysis & design.  I don't need a POC to show that I need, e.g., a messaging system (MOM, etc.), or a system that can handle distributed transactions (DB, Entity Beans, etc.), or an expert system (Rule engine, etc.).  If we're trying to pass on lessons about good development practices, we *shouldn't* be telling people to design by coding. "

Other Carl, while I think that in many cases you can know ahead of time whether you need some of those things, there are many times that you can't.  Reaquirements are NEVER perfect.  There are many things you simply can't discover or know about until you start coding.

In the case of a rules engine, the developers are usually trying to abstract something that is very large and complicated before they have experienced that large and complicated thing.  They are trying to create a solution before they fully understand the problem.  It would be like trying to write a database abstraction layer or an O/R Mapper without ever having worked with databases before.  When .NET first came out, developers started writing their own data access abstraction layers (such as the Data Application Blocks) because of the tedium of writing the same ADO.NET code over and over.  But they first had to experience that problem before they could write those abstraction layers.  Until you have seen problems in code where you notice you are writing the same thing over and over, you aren't really qualified to write an abstraction layer to fix that problem.  

Unfortunately, many developers try to be extra smart and "think ahead" and create those abstractions before they know what it is they need to abstract.  Often, this usually has NOTHING to do with the requirements and is purely technical.
# July 8, 2006 12:29 PM

Mastoo said:

Speaking of good lists, I ran across another good somewhat related list:

http://swcses.eponym.com/blog/_archives/2006/3/10/1814430.html

Take a look at the "Top 10 signs you might be a code writing hack"

I passed luckily.
# July 19, 2006 1:53 PM

Dirk Masterson said:

I can't believe I am wasting my time with this but...

I don't care how small the project is, or how simple you "think" it is,  Requirments Analysis and Design is needed.  The smallest, "simplest" projects can spiral out of control if this on not done.  Eric, maybe you are writing software in a vacuum.  Also, see #2 on Mastoo's "Top 10 signs you might be a code writing hack".  

I guess I am wondering Eric, where do you get off writing a list like this.  Do you really have the background to support what you are spewing??   May God help those who you are mentoring.
# July 20, 2006 8:20 AM

Sean Gephardt's Blog said:

# September 14, 2006 7:25 PM

Sean Gephardt's Blog said:

# September 15, 2006 2:35 AM

Sean Gephardt's Blog said:

# September 15, 2006 2:35 AM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add
Check out Devlicio.us!

Our Sponsors