I grew up on Legos, building massive structures out of little plastic blocks. My mother hated Legos – mostly because her interaction with them consisted mainly of stepping on them with bare feet – but she would still buy me an add-on set for each of my younger birthdays. Back in the stone age, the Lego pieces were very limited: 4×2, 2×2, 1×1, 10×2 in red, blue, yellow, green; and the ever-popular gray foundation.
When I studied Computer Science in college, building a software program was similarly limited: My choices were BASIC, C, or Assembly Language, all written to run on the ever-popular time-sharing mainframe. (This was after punch cards, but before 3.5 inch floppy disks.) We’d build programs from massive amounts of fully custom code, all hand typed into a green screen terminal using the easy-to-learn-but-impossible-to-master VI editor.
How Times Have Changed
Flash forward to today, where there are over 2300 distinct Lego pieces in over 50 colors. There is a whole hobby (art form?) based upon salvaging pieces from different Lego sets to reassemble into unique new objects. There are even theme parks devoted to the craft. Today you can purchase the OMG UBER Lego Star Wars set: the Millennium Falcon, a 5000 piece behemoth with fully rotating radar dish, for only $500. Want to customize it? No problem. Because of one of the most brilliant business decisions ever, almost every new Lego piece is fully backward compatible with the original pieces, and every other piece created since.
Similarly, software development has matured to where almost nothing we construct is truly from scratch. We have many well-established ‘software stacks’ that provide a framework. On that we add commercial and non-commercial libraries. We take open source software sets and tweak them for non-standard uses. And a huge part of what we are doing is creating connections between fully working systems so that they share data and communicate with each other – the software equivalent of customizing the Lego Millennium Falcon.
What’s In a Description?
At times, it’s very difficult to explain to potential clients that “Custom Software Development” does not mean starting from scratch; that our box of Legos is bigger than the 4 sizes and 4 colors from yesteryear. That’s not to say there isn’t a huge amount of skill (art form?) in selecting the right pieces, assembling them together, and filling in the gaps. It’s not quite as simple as assembling an IKEA desk, but it’s not as primitive as building a desk from your father’s box of Legos.
Perhaps Digital Mettle should describe what we do as “Customized Software Assembly”? No, that description doesn’t capture it well. It’s not as painfully bad as stepping on a loose Lego brick in your bare feet, but it’s close. I think we’ll stick with “Custom Software Development” for now.