|Perl: the Markov chain saw|
What is "enterprise software"? Maybe you think you know what it is, but can you put that into a simple sentence? Can you put it into a sentence that doesn't use "enterprise", or "software"? Let's say that you could do that. I'm sure that many of the readers have been able to do that. Now, how many of those definitions agree with other?
I've recently become interested in "enterprise software" as a Perl advocacy topic, but to talk about it, I need to figure out what it is. I thought I knew what it was, but when I tried to define it, and by that I mean including that things that I think are and excluding those things I think aren't, I didn't find it so easy. Maybe the Monastery can help me.
I went to Google to see what I can find. If you wanted the quick answer, you're reading the wrong essay. I don't have the quick answer, or even an answer, much less the answer. Google has the quick answers, and no end to them either: just pick the first one you like.
Besides that, I found the usual glib statements from frustrated techies who confused the general ineptness of big business with "enterprise software". Their definitions revolved around the cost, the code quality, and the project management type.
Look again at that middle quote. Does anyone recognize that? It's from the Perl 5 Enterprise Environment (p5ee) documentation. I didn't realize its source as I was reading it. Curiously, p5ee actually laid out a definition of what it considers "enterprise software" to be.
The p5ee page cites this definition from the Gartner Group:
Software products designed to integrate computer systems that run all phases of a businesses' operations to increase internal coordination of work and cooperation across an enterprise. These products facilitate the integration of core business operations and processes, including sales, accounting, finance, human resources, inventory and manufacturing. An implementation might involve a single application, or portions of a single application, or an enterprise system could control all major business processes in real time, via a single software architecture on a client/server platform. In the future, enterprise software will also play an important role in external linkages with suppliers, business partners and customers. A subset of enterprise applications, enterprise resource planning (ERP), software was developed for manufacturers as the next generation of manufacturing business systems and manufacturing resource planning software.
I don't have much to disagree with there, but I don't think that quite gets to it either. I think most of those things apply to whatever "enterprise software" isn't, too. Most of those things depend on quality and design. For instance, why should interoperability or portability matter? Those things are nice to have, certainly, but why should they limit what can be in the enterprise club? I still haven't defined anything, and I still really don't know what I'm talking about.
Instead of delving into it, I want to fly above it for a moment. Never mind that no one can really define "enterprise", what is an "enterprise foo"? How does something get the "enterprise" in front of it? No, scratch that. Why should anything be qualified as "enterprise"?
I started to make a list of things that I think belong in "enterprise resources". I listed seemingly banal things, not but by design. Somewhere in my head there must be an internal definition:
When I think about "enterprise", I don't think about who is involved or what they are doing. Are they using that water to wash their hands, make coffee, cool a nuclear reactor? Are they techies, sales people, or janitors? In my mind it doesn't matter who they are and what they do. The "enterprise" needs the resource for everyone.
Does that apply to software too? Is "enterprise software" something that everyone needs? Is Microsoft Word "enterprise software"? How about Oracle? More interestingly for me, is perl "enterprise sofftware"?
According to the list I just made, enterprise resources are things that come from a common source and that everyone shares. I don't think I can hammer the square peg of locally installed software into that round hole. (I can't really keep it out, though either, so you might rightfully disagree since no one can agree on things). So, I'm going to rule out Microsoft Word. Indeed, I think some people can safely get rid of Word, perhaps using OpenOffice or something else, and no one would be the wiser. Oracle, on the other hand, tends to be installed in one big place and people share it. I'll include that as enterprise software.
The common source also implies that a failure at the source affects everyone. Put a backhoe into the water main and the city shuts off the water (depriving everyone) until they fix it. If someone's desktop computer crashes, it sucks to be him, and maybe the people next to him who have to listen to the screams. The reaching effects of failure are the center of the p5ee definition, by the way.
Perl is decentralized though, so if it blows up in one place, it might be fine in another. Additionally, even though its installation is decentralized, it's source is not. What if some IT guy forgets to pay the license fees for Microsoft Word (or whatever) and they turn off system wide simultaneously? Yep, this is quite the sticky wicket.
These things are intangibles though. Most people (and that includes the population of the universe) don't really use Perl, although they use things that use Perl. Most people directly use the water, electricity, and other things I included in my list. The same goes for Oracle, or SAP, or whatever. They probably use things built on top of those things though. Maybe enterprise software isn't the building blocks, but the buildings themselves, such as the online phone directory or the accounting software.
This is where things get really murky for me. I started this little journey thinking that people must just be really stupid to not be able to pin this down, but I haven't been as successful as I think I should have been. I'm one of the dummies, apparently.
At the moment I've ruled out the components of a system, such as the programming language and the database server, and written in the things created with them. Things bifurcate from here: there is stuff that you can buy and there is stuff that you can make. Does it matter where it comes from or who makes it? If you believe the glib comments you can find on Google, it matters because enterprise software is expensive and built by teams of hundreds. I think, however, that a couple of interns who throw together a CGI::Prototype implementation of the company phone directory can be just as useful to everyone as an expensive third party product to do the same thing. The interns can might something even more useful because they can do anything they like.
From there, does size matter at all? When I think of groups, how big does it have to be for it to qualify as enterprise? The perl interpreter, for instance, doesn't have a huge development team, but its running some really big projects. It's just a building block though. However, being that Perl is pretty powerful, small groups can use Perl to create really big things. I don't have an answer for this.
Moving on, if Perl is just the building block, what characteristics do I think enterprise software should have? The p5ee folks laid out what they think, but they didn't hit most of the things I thought up in my list. At the top of my list was configurability. The difference between the hacked up script and a tool designed for use by many people is the ability to decide parts of its input and behavior. That is, the enterprise software is designed for use by more than one person.
After thinking about those a while, I gave up on configurability. It would certainly be nice if things were configurable, but does it matter if it is? I've made the assumption that a lot of people are going to use this thing in different ways. I haven't allowed that as part of the definition though. Of course, it doesn't have to be configurable by everyone, but someone somewhere sets something up or defines some templates.
Does this exclude "turnkey" software then? Some people don't want to configure anything. They want to plug it in, turn it on, and let it go. Why should let be any less enterprise if everyone still uses it? Most people care more about information than they do about colors and "dancing monkeys", as I use to call them.
At some point, I have to stop equivocating. I can go back and forth ad infinitum without gaining any more insight. Perhaps this is the sort of question you're supposed to take into the monastery with you so you have something to think about for the rest of your life. So, after all this thought (wasted mostly), stopping here, my definition for enterprise software is simply this:
Software whose failure everyone notices quickly.
In that short statement is the notion of the common and shared source, the use by people doing different things, and its importance to the users. The Gartner definition fits nicely in there, but so do many other definitions. It includes most important parts of the p5ee defintion. It also fits small, medium, and big business as well as web applications such as LiveJournal and MovableType. It's not enterprise software if no one realizes it doesn't work anymore.
This excludes perl though, strangely. If the perl5porters totally screwed up perl5.9.x (very unlikely), a lot of people won't even notice. There are people still waiting to find the problems in perl5.8. But it also includes perl because a single installation can screw up all the users of something else.
Finally, is perl enterprise software? Well, there's more than one way to answer that (TMTOWTAT - Tim Toe Tat). Ask me again next week, and if you don't like that answer, just wait another week.