13th January 2009

Hardcoding + procedural code = bad news

James Taylor Posted by James Taylor

In a blog post about Hardcoding Considered Harmful – or is it? Jeff Palermo said

Oren Eini boldly makes the assertion that a system is simpler to maintain when configuration is hard-coded in one place within the system. Coupled with an automated testing and deployment process, changing configuration can be just as simple and predictable as possible. Oren asserts that hard-coding as much as possible enhances maintainability. He then defends his position with an example in a subsequent post.

In the example post Oren has this code snippet:

public class DiscountPreferredMembers : OnOrderSubmittal
{
	public override void Execute()
	{
		if ( User.IsPreferred )
			Order.AddDiscountPrecentage(5);
	}
}

He goes on to say:

We hard code the rules, which is the easiest approach to getting things done. Because we have a structured way of doing that, we can now apply the ways in which we use it. For instance, if we wanted to support runtime replacements of rules, that is easy, all we need to do is to provide a FileSystemWatcher and reload them. If we want to add a rule, we just create a new class for that. If we want to modify a rule, we go and change the hard coded logic.

Wow – the things a programmer will describe as simple! What if this had been hard-coded in a Business Rules Management System or BRMS?

  • It would still be hard-coded and easy to write.
  • It would be deployed as a simple to use, structured component just as Oren describes.
  • If we wanted to support runtime replacement of the rule we would have to do nothing (the BRMS already handles that).
  • If we wanted to add a rule we would just add a rule – no need to create another class.
  • Modification of the rule would be about the same.

The differences become more extreme as the complexity of the decision we are talking about increases. If there were 5 or 10 or 100 rules that had to be applied, as there often are in discount scenarios. Now we would end up with either lots of classes and/or methods and nested if..thens. Not with business rules – just a simple, flat list of rules that are easy to read, easy to manage and easy to change. The problem with this example is not so much that it has been hard coded as that it has been hard-coded in a language that is, to quote Ira Fuch

…syntactic, abbreviated, and procedural, as opposed to semantic, verbose, and declarative

Hard-coding in business rules would dramatically improve the approach Oren proposes. Indeed many BRMS customers do exactly this – they use the BRMS and the business rules syntax but they continue to hard code the rules behind their decisions – developers just write rules, not code pretending to be rules. Now Jeff goes on to say:

I agree with Oren.  The first draft of some functionality should hard-code everything.  Then subsequent revisions will cause some information to be factored out into mediums that can be maintained while suppporting all the requirements in scope.  The requirement cause us to make decisions about what information to hard-code and which information to soft-code.

I understand the point Jeff and Oren are making here – soft-coding things can make them more complex than is necessary and can, especially if done thoughtlessly, create maintenance problems. However hard-coding in traditional procedural languages like Java or C# means creating a procedural and abbreviated piece of code that will become increasingly hard to maintain as its complexity increases and that business users will not find approachable or easy to understand. Hard-coding in business rules avoids this problem and, when something does need to be “soft-coded”, a BRMS allows the easy transition to business user rules management using template-driven or other approaches layered on to the same underlying rules execution and management environment.

Hard-coding may not be harmful absolutely all the time but coding business rules in code probably is.

This entry was posted on Tuesday, January 13th, 2009 at 4:50 pm and written by James Taylor. It is filed under Business Rules, Decision Management.
Tags:, , , , , , , , , , , , , ,
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

3 Responses to “Hardcoding + procedural code = bad news”

  1. Good points.  As with any principle, it can be under or over-applied, and you have to do critical analysis during the project.   There is no one-size-fits-all rule for this kind of thing.

Trackbacks/Pingbacks

  1. [...] it easier to do so for them and provide much better compliance and audit capabilities. As I said in Hardcoding + procedural code = bad news it is not hard-coding per se that is bad but hard-coding in an old-school, procedural [...]

  2. [...] developers will finally realize that declarative and model-driven approaches should replace hard-coding in a procedural language? Using a BPMS to specify workflow and process, a BRMS to specify business logic and a BI tool to [...]

Leave a Reply

Hire me

Decision Management News

DMSA monthly newsletter dedicated to decision management


About

Blog Partners

PAW
15% discount code - BLOGJTDC09
SDC
MVP

Categories

Latest Series

More Links

Archives

Tag Cloud

Subscribe


 Subscribe to this blog
Enter your Email

Hear Me Speak

Gartner BPM
Advanced Decisioning for Process Excellence
October 5-7, 2009

Predictive Analytics World
Putting Predictive Analytics to Work presentation and tutorial
October 19-21, 2009

EDM Summit
Decision Management keynote and tutorial
November 1-5, 2009

Recent Comments

Recent Posts

Recent Trackbacks

The Book

Popular Tags