Urban Potato

Application Building Blocks

Is the future of application development just assembling high-level building blocks? Or will we forever be writing fresh code for everything? Scoble's post made me think.


Is the future of application development just assembling high-level building blocks? Or will we forever be writing fresh code for everything? Scoble's post made me think.

Scoble has a great post about a new MVC tool he's seen that takes MVC a few steps further, where an entire application can be built without using code. There is a long comment thread that is a great intresting read. Yes, this has been done before by many tools. Arguments about how well it scales once you leave the demo and start doing real work with it.

Despite all sorts of problems with this model, it fits in really well with reality. Take the creation of anything worthwhile today: a house, a car, a microprocessor, and you have a few very sharp, very focused individuals who spend a lot of time in very narrow niches designing parts of the whole. But, those few individuals aren't the ones stamping out houses and cars. Their designs are carried as blueprints to people with a different set of skills who actually build the stuff.

Software today isn't like that. To build any application everyone on the team has to be a rocket scientist. Even one unchecked return value can spell disaster -- its as if you're buliding a house and you're holding all the walls together by drilling holes and fastening the entire thing together with one very long piece of rope. All you need is one bad knot, or one sharp hole, and the whole house caves in. Sure, software can be designed to be robust, but you've got to have every person on the team highly trained to know what "robust" is.

I believe that in order to evolve software development into something that can reliably produce programs that are, well, reliable, we need to segment the development community just like other disciplines. Visual Basic already did this -- you had to be a rocket scientist to write an ActiveX control, but you could use one pretty easily. But, it doesn't go far enough. As soon as you have to step into writing code, the chances of slipping up increase several fold.

What's worse, with modern frameworks like the Java libraries and the .NET Framework we have, in some ways, erased this barrier to entry. New Windows Forms controls are written in C# or VB, or any language I choose. New Swing components are written in Java. This is great, because it puts everyone on a nice level playing field. Just because I like VB I'm no longer second class citizen. That's great, because my choice of language really shouldn't matter. But it's also bad, because not everyone is cut out to be a rocket scientist.

I'm a firm believer in drag-and-drop application design. You should just have a bag of tricks you can drop and connect together. Those tricks should even connect themselves together as much as possible so there are fewer knobs to fiddle with. Of course, when you do this you always lose flexibility. So be it. When building a house a construction worker uses 2x4 lumber almost exclusively in the United States. It's a standard. It does impose limitations, but those limitations become assets because other things can interoperate (drywall dimensions, standard stud spacing, and even drywall screws all depend on things being a standard size). Writing a modern application today -- one that interoperates with other things on the internet, is self-updating, secure, and all the rest of the lastest buzz-words -- is a damn hard task. I'd be happy to let a few focused people figure out how to create complete building blocks that I then just drop into my application.

The big question, of course, is can you create a set of reusable blocks that are general purpose enough to create a variety of applications, but not so complex that you defeat the purpose of having the blocks in the first place. And, once you create these blocks, how do you create a development tool that shows you the relationships between them without it looking like a nightmarish art project?

What do you think? Is this the future of software or just another demo-ware fad?

Brian • 1/22/2004 3:31:48 PM