The Holy Grail of Software
I was reading Business 2.0 yesterday and I read Om Malik's editorial on a bunch of new businesses that let you roll your own app without any programming involved (Coghead, Teqlo, Dabble DB, BEA, and QEDWiki are the ones he mentions). Although he seems to be pretty hyped about them, I don't think they'll fly. Let me give you my programmer's perspective on this real quick.
There are a few stages in a programmer's career. They go something like this:
- Competence
- Blind enthusiasm
- Enlightenment
- Blind enthusiasm
When you first start programming, you work in the real world for a while until you're finally competent. You can figure out how to do the things you need to do. I believe this is the desired output for these apps, the end result is to duplicate what a programmer at this stage is capable of.
After a while, you realize that programming doesn't really place any rules on you, you decide how the software works and you decide how it should behave. You also realize that software can be written to be dynamic, which means that absolutely nothing has to be hard-coded! That means that theoretically, you can make one application that will work for EVERYTHING, and never have to program again! And then you can just sell it and make a million bucks! The Holy Grail of Software!
I would guess that every developer out there has this exact same idea at one point in their career. I know I've had it myself multiple times, and all of the programmers I know had this idea too. And in fact I even wrote a couple of apps that did it pretty well for specific purposes. I'm guessing that this is where these apps originated. (Although some seem to be focused more on creating mashups than full-fledged applications, which is a perfectly good use for them.)
Then you reach enlightenment. This is actually pretty discouraging, because what happens is once you start coding all this cool stuff you dig a little deeper and, whoa, hang one, there's a whole other layer to this onion that you've never seen before! What's all this stuff about transactions, contracts, standards, redundancy, and services? You never needed any of that stuff before, and your apps worked just fine. It turns out that if you want to write an application that actually gets used a lot, scales well with that use, integrates with other systems, and meet complex business requirements, you need an almost completely different skillset.
You also realize that your initial thoughts to create the Last Application Anyone Would Ever Need were pretty misguided. Once you've been involved in actual development for long enough, you know that there's just no way to write an application that will meet every need out there. It's just not possible. Your user interface won't work for everyone, or the logic won't work for everyone, or it won't be able to handle the custom business rules, or it won't be able to integrate with the custom systems you have, or it will need to work differently on the second Tuesday of October and you didn't design it for that, or all of the above at once if you're really unlucky. In fact, there are massive systems called WebSphere and BizTalk that specialize in making complex workflows function and fitting systems together. The likelihood of rolling all of that into one single application is practically nil. So you are enlightened, but not particularly happy about. This is why those apps will fail.
Now I don't know if everyone else goes through this process, it's just my guess. I've seen other people that stop there and just resign to custom-writing each individual application. But I actually went on to reach another stage of blind ambition which is where I'm at now (well, I hope it's not blind, but that's kinda beside the point). I finally feel like I've absorbed that inner layer of the onion. The Last Application Anyone Will Ever Need still seems like a dumb idea to me, which is why I don't like these companies, but now I have a different Holy Grail.
I don't think one application should run everything, but I do think that they can all work together. I think that in the mess that is the semantic Web there are bits and pieces that can actually work together to be a framework that a standardized application infrastructure can sit on top of. Although I don't think that it's possible to write one application and never have to write anything ever again, I DO think it's possible to write the core functionality of certain pieces of software so that you never have to write CERTAIN PARTS again. Think about what SalesForce is doing with AppExchange: they've created an API that everyone who uses SalesForce can use as the core of their application, and they don't have to write those pieces over again. It's brilliant. However, I'm not comfortable letting all my data live inside of SalesForce's data centers, and I don't have enough any access to the core AppExchange code base if I need to customize it in some really funky way. It also severely limits your market if you're trying to build software for the general public.
So here it is, my new Holy Grail of Software: A distributed application infrastructure that sits on top of the Internet as its back-end database. If you read between the lines quite a few of my posts recently have been me thinking out loud about it. And it's really been quite a fun exercise to try to figure out how it should work, I think it's very doable and actually not very far down the road.
And by the way, don't you think that if these apps really turned out software that was really good at what it did they would just sell the end product outright and churn out one fantastic app after another until they were the only software company left?



