An Architect's View

CFML, Clojure, Software Design, Frameworks and more...

An Architect's View

Why NIH and RTW are bad!

February 24, 2007 ·

Not Invented Here and Reinventing The Wheel. We've all done it. We find something that does a perfectly good job but either it's written in a different language or written by someone else we don't know so we just decide to go ahead and write our own version. It plagues any coherent attempt at Open Source within the ColdFusion community - look at the number of half-baked calendars available (and don't get me started on the unit testing frameworks!). Scott Hanselman has a wonderful post about trying to rewrite a perfectly good Boo library in C#. Classic NIH / RTW. And he paid for it - but at least he had the sense in the end to reuse the other person's wheel.

Tags: programming

22 responses

  • 1 Ben Nadel // Feb 24, 2007 at 8:50 AM

    I am not saying that "I" am the one to do it... but if people can't look at something and think to themselves "I can do that better", how are things ever going to improve?
  • 2 Sean Corfield // Feb 24, 2007 at 10:34 AM

    Note that I said "something that does a perfectly good job". However, if folks want to improve on an Open Source project, they should get involved and contribute - instead of going off and creating their own Open Source project in competition. It's called "teamwork".

    Now, if the "something" you find really does a crappy job, it probably is worth doing it better yourself - but even so, it's worth at least trying to contribute to the original project.
  • 3 Chris Scott // Feb 24, 2007 at 2:40 PM

    How timely, and I could not possibly agree more. There are open source projects out there that are succeeding and have a good degree of adoption, if people have ideas to improve them, wouldn't we ALL benefit from them joining the project instead of going into competition? It seems that starting a competing project really only serves the individual instead of the community at large.
  • 4 Peter Bell // Feb 24, 2007 at 10:18 PM

    @Sean, I agree 100%. The fact that you didn't write something is a lousy reason not to take advantage of it!

    @Chris, I disagree. If this was the case, we wouldn't have Model Glue or Mach-II as Fusebox already existed. I take it you feel that Joe did something wrong by releasing MG rather than joining the Mach-II team and not being a "team player"?

    I think Mach-II is great, but I also see a learning process going on as different frameworks look at each other to learn from different approaches in a way that a single committee writing the "one true framework" could never do.

    I also see benefits in ColdBox and a bunch of other approaches to MVC. I think there is real value in the Darwinian winnowing of different approaches in the "OSS market".

    Markets are messy and inefficient. Time is wasted on products and approaches that don't turn out to be of use, and confusion in markets can delay adoption, but it is also the least bad approach that anyone has ever invented to allow the best ideas to succeed.

    Vive la difference!

  • 5 Peter Bell // Feb 25, 2007 at 9:37 AM

    To follow up, Sean, what are your criteria for distinguishing NIH from a valid new framework? Does Transfer meet those criteria compared to Reactor (I'm guessing yes) and does Model-Glue when compared to Mach-II (or is Joe a bad boy?!).

    Some more thoughts:

    Chris, would love to hear your thoughts on the "competition" introduced by Joe (MG vs M2) and Mark (Transfer vs. Reactor). Were they both serving themselves rather than the community? If not, what exactly ARE your heuristic for determining whether a new framework is "acceptable" or not. Looking forward to understanding your position more clearly!
  • 6 Peter Bell // Feb 25, 2007 at 9:42 AM

    Sean, On a more pragmatic note, have you found a good reference implementation of a Calendar in any language (CF or others - hopefully CF) that you think people should be rallying around? I'm gonna need a calendar and I sure ain't gonna write one myself. Any opinions appreciated!
  • 7 Nick Tong // Feb 25, 2007 at 10:23 AM

    I agree with 90% of what you are saying Sean but i believe there are some benefits of similar frameworks. Take a look at the presentation layer frameworks in CF - they aim to do the same job but do it differently, each suiting different people. Also, sometimes, similar frameworks lend ideas to each other.
  • 8 Brian Rinaldi // Feb 25, 2007 at 11:11 AM

    I wholeheartedly disagree with this idea. Who cares about competition in open source projects honestly. If someone wants to make a new project that achieves the same result simply because they think they have a cooler name for it, I say so what? So long as they are not simply taking someone else's code and selling as their own, I think they have every legitimate right to do a new project...and if the community doesn't see the need, then they won't use it.

    Were Fusebox and Mach II doing a crappy job when Joe created Model Glue? Are Model-Glue and Mach II not legitimate projects because Fusebox was perfectly good at the time (I know m2 has an interesting history in this case, but I think the point remains)? I think the "don't tread on my turf" attitude is just as damaging to open source development as NIH and RTW. It creates the appearance like this is some sort of private club where the existing members determine who is welcome or eligible.

    And Chris, so what if it only serves an individual, that is where many of these projects start. My generator started as my own personal thing...I think there may even have been a generator or two out there before me. Crap, I forgot to contact the OS police releasing it...guess I am selfish like that.
  • 9 Raymond Camden // Feb 25, 2007 at 12:15 PM

    I don't agree with this. First - RTW can be very good for learning. Now I know you weren't talking about development for educational purposes (or I don't think you were), but I thought I'd bring it up. I find that building something that already exists is helpful in learning because you spend less time worrying about features (since you already know what the features are).

    Why is it that more than one OS calendar is bad? Do we really need to have just _one_ of every type of application? I mean I get the idea that if all you want to do is make a better blog, it makes sense to add to BlogCFC (just for example), but if you have a totally different approach to how blogging should work, how the code should be set up, etc, then I think it makes sense to build your own app.
  • 10 Sean Corfield // Feb 25, 2007 at 12:16 PM

    Clearly a "hot" button for several people in different ways - as I hoped it would be :)

    Mach II evolved from Fusebox to address a different need (a lot of people seem to forget that Mach II was originally Fusebox MX, created by Hal Helms, one of the fathers of Fusebox).

    Model-Glue arose partly as a reaction to the way Mach II implements implicit invocation and partly as a "better" MVC framework for CFers (using terms and approaches that seemed more in keeping with their experience and less blatantly OO).

    All three of those frameworks have a loyal following.

    Joe wrote Arf! (Active Record Factory) and then abandoned it when Reactor appeared - a more full-featured Active Record factory implementation (remember that Joe wrote ChiliBeans originally for Model-Glue but stopped work on it once ColdSpring became popular - and included integration with ColdSpring in Model-Glue).

    Transfer solves a different set of problems. Whilst still an ORM, it focuses on business objects and caching and does not take the Active Record approach.

    These frameworks have a lot invested in them and offer genuine choices to a large community. They are all also doing a good job.

    My point was really aimed at the small utilities, where there are dozens of similar, half-baked offerings. People look around, don't like anything on offer and then, instead of picking one that is close to what they need and enhancing it and giving back to the community, they go off and create yet another utility tailored to just their needs. The result is that we never get one - or even a handful - of truly great utilities in that space.

    Nick gets my point - he agrees but notes that the MVC frameworks approach the problem with sufficient differences as to offer genuine choice.

    Brian misses my point - and goes on the defensive, because he released his own "competing" project.

    Let's look at Brian's post:

    How many bean generators are there out there? Probably quite a few. How many *well-known* and *widely-used* bean generators are there? Not very many, and Brian's is one of them. Why is his so popular? Because it generates code that caters for a range of frameworks and it's a flexible, feature-rich system. Brian went beyond building a project just to solve *his* needs - he created something that solves *many* people's needs. That's a *good* project and has moved things forward.

    I'd hope that people coming along now and thinking about bean generators would look around, single out Brian's Illudium PU-36 Code Generator and, perhaps, Peter's Rooibos Generator and decide to contribute to one (or both!) of those instead of starting from scratch.

    I hope that makes my position clearer?
  • 11 Cliff Meyers // Feb 25, 2007 at 2:38 PM

    I absolutely agree with Chris. Before you start an OSS project, it makes sense to survey the field to see if there is an existing framework to which you can contribute your efforts first. Instead of the spending time duplicating existing functionality from another framework, that time can be better used to enhance or extend the features that are already there. To me, that's only common sense.

    As for when a new framework in a particular problem space is needed/warranted, I'd say that it breaks down to mainly two scenarios:

    (1) The project leader/owner isn't receptive to new input or the addition of features, or
    (2) The design approach is significantly different so as to be incompatiable with the first.

    Back 2+ years ago when MG came on the scene there wasn't much going on in the Mach-II space and requests for new features were largely ignored. Given that, it made a lot of sense for Joe to go ahead and work on MG. As Sean points out, Joe had a vision that was grounded a bit more in simplicity than the M2 designers had considered.

    As far as Transfer/Reactor... a cursory examination of each points out hugely different design approaches. One is an ActiveRecord persistence model whereas the other is more in the spirit of a "pure" ORM that can persist any object without requiring that the class extend a particular framework class, a la Hibernate / EJB3.

    At the end of day, it's a free world and anyone can do whatever they want. Want to build yet another MVC framework? Go ahead. Hopefully you aren't wasting your employer's time and money doing it though. At the end of the day, there isn't an "OSS Police" that will show up to take you away. But the community as a whole benefits more when people work together and collaborate rather than go off and do own their own thing.
  • 12 Chris Scott // Feb 25, 2007 at 2:38 PM

    "Chris, would love to hear your thoughts on the "competition" introduced by Joe (MG vs M2) and Mark (Transfer vs. Reactor). Were they both serving themselves rather than the community? If not, what exactly ARE your heuristic for determining whether a new framework is "acceptable" or not. Looking forward to understanding your position more clearly!"

    Peter, exactly where did I say this? You seem to be very good at misquoting people, and I know you have been confronted already once in the past week about it. Did I say ANYTHING AT ALL about MYSELF being a determining factor in the viability of a framework or project? I posed one question only, if people have ideas that can improve some of the popular frameworks out there, which is more beneficial to the community? Getting involved in the project or starting a clone that adds one feature?

    Mine is entirely a question of what is best for the community, I have absolutely no interest in determining which frameworks are "acceptable" and frankly must ask you to refrain from putting words in my mouth that were clearly not said or intended. It thoroughly irks me that both Ray and Brian have responded to what you have twisted my comment into. Ask yourself, if I believed MG was simply a self serving project of Joe's that was just "competition" to Mach II, then why would I be contributing my time to help joe improve it?
  • 13 Brian Rinaldi // Feb 25, 2007 at 2:59 PM

    Sean, I think that your response does indeed clarify your position. In the end, I do generally agree with your position as clarified. I agree that contributing is the more productive route no doubt. I also see your point on the utilities, there is obviously diminished value to a new approach to a small problem.

    I stick to my guns however on the "don't tread on my turf" kind of attitude that can arise, especially on the bigger projects. I understand where this comes from, because these developers put a lot of blood, sweat and tears into the project. All their good intentions however do not give them the right to give them ownership of ay particular space.

    My apologies on seeming defensive. My frustration was more directed at a conversation on another list. I am not sure there is much good in judging ill the intentions of developers who give their work away freely, whether I like their project or not. The rabid cf developers of the world don't give stuff away (rather they charge for other people's work).
  • 14 Peter Bell // Feb 25, 2007 at 3:30 PM

    Hey Chris,

    To quote you exactly:

    "There are open source projects out there that are succeeding and have a good degree of adoption, if people have ideas to improve them, wouldn't we ALL benefit from them joining the project instead of going into competition? It seems that starting a competing project really only serves the individual instead of the community at large."

    I get that you are not taking on the mantle of "the Decider", but you are suggesting that joining an existing framework instead of creating a new one is the right way to go if the existing framework is "succeeding" and has "a good degree of adoption". In many cases I agree. I'm just asking if you personally have any other rules for determining whether you think it is valid for someone to start a new framework as opposed to contributing to an existing one (not that they are mutually exclusive, I have found myself on team Fusebox and owe Kevin Roche some input on the great work he's doing on FB6 which I'm supposed to be helping with!).

  • 15 Peter Bell // Feb 25, 2007 at 3:34 PM

    ANd Chris,

    I *know* you are supportive of MG and I also agree that creating a clone with one additional feature is crazy. For instance, with LightWire I was looking for a single cfc I could easily package with any size of app, optimized for DI into transients (we all know CS DI's into transients by setting prototype=true, but I have been told repeatedly that it is ot optimized to do so - I can dig out the old emails if you want) and with a programmatic config file. I knew I was never going to get CS into a single reasonably sized file, so with no other actively supported community DI engines in CF I had to roll my own. Still can't figure out what the big deal is about . . .
  • 16 Brian Rinaldi // Feb 25, 2007 at 3:43 PM

    Chris, FWIW (and I cannot obviously speak for Ray) but Peter's comments had not yet even shown up on the site when I posted mine due to comment moderation. I think we need to check the anger here as it is clouding yours and possibly Dave's perceptions. Having met all three of you (i.e. including Peter), I think you all seem like decent guys with the best of intentions who have all made contributions for the betterment of the ColdFusion community.

    I am a fan of and use ColdSpring. I have also looked through Peter's code thoroughly (what little there was of it and I even made some changes to it where I felt they were needed). I think the approaches are pretty dissimilar.

    In fact, I personally think Peter spends too much time when discussing his project praising ColdSpring. While it is deserving of praise, I think it only feeds a perception that his project isn't legitimate. It is small and specific and meets a potentially niche requirements that many of us may never encounter which is exactly why I think it didn't belong within ColdSpring.

    I shouldn't speak for Peter and I am not taking sides here, but my guess is that if Dave had approached Peter and asked for him to also write a programmatic config for ColdSpring, Peter would haev done this as well. I am just not sure where all this pent up anger is coming from and I don't think it serves anyone to be quite honest.
  • 17 Peter Bell // Feb 25, 2007 at 5:11 PM

    Hey Brian, Thanks - both for the comment and the improvements to the code base!

    Chris. I've dropped you and Dave another note offline. I don't want to put words in your mouth and say you dislike the fact that I created LightWire, because on careful reading there is nothing in the words you use to say that is the case.

    If you did have a problem with anything I've done, I feel there might have been a degree of misunderstanding and I'd really like to clear that up if possible - online/offline/however. As I've said way too many times, I like and respect yourself and Dave and think you've done an amazing job with ColdSpring, and while I will stop mentioning CS, I *still* think it is the best DI framework for the vast majority of use cases and have said so publicly just about every time I've mentioned LightWire - which as far as I am concerned is designed to solve a much more specific set of use cases - of which mine happens to be one.

  • 18 Sean Corfield // Feb 25, 2007 at 5:54 PM

    Peter, as far as I'm concerned, you're just digging yourself into a deeper hole over this issue... We have two ears and one mouth - a wise man suggested we use them in that proportion.

    Not everyone wants to have to justify and explain and clarify every single word that comes out of their mouth (or keyboard) and your persistence in trying to extract that from people is, I'm afraid, rather annoying. The perception is that you are constantly, publicly badgering Chris and Dave (this week - maybe next week it will be someone else).

    No one is asking you to stop mentioning ColdSpring. Once again I think you are reading intent into words that had no such intent.

    You called for editors to help filter the information out there - think about an editor to filter your own writing... So far you've posted *six* comments here - and three of those were consecutive!

    As I said, NIH/RTW is clearly a hot topic but I want the discussion to stay *on-topic*...
  • 19 Peter Bell // Feb 26, 2007 at 9:59 AM

    Fair 'nuf.
  • 20 Peter J. Farrell // Mar 1, 2007 at 2:16 AM

    I'm always behind on the news since I tend to read up in chunks for the CFW. Thought I would jump in on this issue. It's much easier to criticize a newer framework when it's solving the same issues in the same way of another framework (maybe with just a change of vocab/syntax). However, as the project evolve -- if you believe Darwin works in the software world -- things tend diversify and become "different". I've been really digging the idea that software design and engineering is more like ecosystems instead of "building" architecture. If idea of a single framework was the only way to go, it would be like having only have one species of monkeys and one type of fish, etc. However, that is not the case and we have many species of monkeys (e.g. frameworks).

    For example, Model-Glue:Unity is starting to offer vastly different "big picture" features in contrast to Mach-II. I'd say it's mainly scaffolds if we were to boil it down and maybe ColdSpring integration (although, CS works equally well in both frameworks). However, I digress...

    I find it funny that people think that Mach-II and Model-Glue are in competition. To me, that's complete bull*hit. While I try to follow what's up in the Model-Glue world for the sake of perspective, I code and work on Mach-II in my own world -- usually completely unaware of the small goings on in other frameworks.

    Anyways, I think we'll see the frameworks continue to evolve -- while Fusebox, Model-Glue and Mach-II et al. will remain in the same family (i.e. monkeys)...we are all different. Mach-II 1.5 is mostly an infrastructure improvements, just wait until we go 2.0!
  • 21 Peter Bell // Mar 1, 2007 at 8:11 AM

    Peter - very nice comment and great summary of the value of a competitive ecosystem.

    On the other hand, frameworks *and* religion? I can see the headlines already:

    "Farrell angers both creationists and Model Glue afficianados by calling Joes creation a 'Monkey'."

  • 22 Peter J. Farrell // Mar 1, 2007 at 11:09 AM

    @PB: Oh my, do we have to go there? I'm sick hearing about framework evangelism equated with a religious movement. And I used the word monkey because, as of late, I use monkey instead of foo or bar -- it cracks a few more smiles in the non-developer crowd I work with.