Eric Wise

Sponsors

The Lounge

Blogs I Read

Fun & Games

Advertisement

Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
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.

Posted 06-22-2006 10:26 AM by Eric Wise

[Advertisement]

Comments

karl wrote re: Five Signs of the (Development) Apocalypse
on 06-22-2006 11:10 AM
#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
The other Carl wrote re: Five Signs of the (Development) Apocalypse
on 06-22-2006 3:33 PM
#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.

Jeremy D. Miller wrote re: Five Signs of the (Development) Apocalypse
on 06-22-2006 4:13 PM
Very funny, and horrifyingly familiar.  Here's a #6 from the Agile world --> "You can just refactor it later"
Eric Wise wrote re: Five Signs of the (Development) Apocalypse
on 06-22-2006 5:11 PM

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."

Labnotes » Blog Archive » links for 2006-06-23 wrote Labnotes &raquo; Blog Archive &raquo; links for 2006-06-23
on 06-23-2006 11:45 AM
The other Carl wrote re: Five Signs of the (Development) Apocalypse
on 06-23-2006 3:33 PM
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?)
One more time -- Chip’s Quips wrote One more time -- Chip&#8217;s Quips
on 06-23-2006 9:18 PM
GMan wrote re: Five Signs of the (Development) Apocalypse
on 06-28-2006 8:00 PM
#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!


meneame.net wrote Five Signs of de (Development) Apocalypse
on 06-30-2006 3:39 PM
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;
Sahil Malik wrote re: Five Signs of the (Development) Apocalypse
on 07-04-2006 7:47 PM
Hey !! Xmlitis was my invention :), go find your own problems :-D
Craig wrote re: Five Signs of the (Development) Apocalypse
on 07-08-2006 12:29 PM
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.
Mastoo wrote re: Five Signs of the (Development) Apocalypse
on 07-19-2006 1:53 PM
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.
Dirk Masterson wrote re: Five Signs of the (Development) Apocalypse
on 07-20-2006 8:20 AM
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.
Sean Gephardt's Blog wrote June 2006
on 09-14-2006 7:25 PM
Sean Gephardt's Blog wrote the best and most of June 2006
on 09-15-2006 2:35 AM
Sean Gephardt's Blog wrote the best and most of June 2006
on 09-15-2006 2:35 AM