Software is not code - Part 1

-

Tale of the spreadsheet punk

A friend of mine builds tools in Microsoft Excel for small businesses. These don’t do much, except adding and calculating taxes, inventory, sometimes streamline very specialised workflows for a business. And these are fairly capable spreadsheets, albeit without a lot of features; Except what these were designed to do. These spreadsheets don’t sync with the cloud, don’t get backed up in case something goes wrong, they don’t offer real time collaboration features, they don’t have any bells and whistles. Most of the time, these are plain boring spreadsheet with coloured cells. Even though it sounds simple, it does shave off valuable time from a shopkeepers business routine. Maybe it kept some sanity at a little sweet shop’s yearly tax calculation, or it helped a businesses keep track of all the invoices digitally, or probably it saved a little shop bunch of money by not making the business owner consider buying & training for expensive accounting software. A computer punk just built them a software that they didn’t know could exist.

I have deep respect for my friend. He has not only made something entrepreneurial out of his spreadsheet skills, he took the idea of what software is, and bent it to the point that it shook my elitist perception about what computing is all about. My friend isn’t probably the first one to do this. I’m fairly certain there’s quite a few people who write their own software for themselves in Microsoft Excel or Microsoft Access. But we don’t really hear about these computing “success” stories often. These purer forms of computing; This way of using personal computers in ways we don’t generally think about anymore, is severely underrepresented in our culture. I say, it’s time we change that.

A Microsoft Excel invoicing system

“Real” software

You could argue, that these spreadsheets can’t really be called software, it’s literally using spreadsheet programs the way spreadsheets were meant to be used. It doesn’t take a genius to imagine using spreadsheets that way. And you’d be right. But there’s nothing that stops individual spreadsheets from being a “software”. These are tools, materialising on a computing hardware, solving problems, complementing our minds and augmenting our lives. Isn’t that what software is in at its purest form?

And it’s the same for services a slew of services & softwares like Airtable, Google Sheets, Microsoft Access, Zapier that enables creation of other “software”. These applications enable individuals or organisations to define interaction among seemingly disparate pieces of information and events, carving a bunch of concepts into a tool without writing any computer code. These enable people to create tools with tools that they are already familiar with to solve however niche of problems that might exist; Maybe in their little suburb in India, or their neighbourhood homeless shelter in California, or maybe even in a corporate board room. Bottomline is that this computing culture is something we should all cherish and participate in.

“Real” software development is often associated with writing computer code, lots of it, making it scalable, shoving in a lot of features, doing a tonne of UX research. Recently someone wrote that it’s an elitist myth. And I couldn’t agree more. As professional software developers, we tend to sneer at things that doesn’t meet our standards of tidiness, hygiene, scalability, feature-sets etc. We like to think of software as something that’s described to a computer in written form by hand, lovingly crafted, in a language that can represent even infinite data structures in strict mathematical terms, describing every behaviour to an incredible precision and accuracy, pored over and talked about and released into the wild as “real” software. But the moment we sneer at amateur computing for NOT adhering to “real” programming practices, we nurture a culture of elitism when what we should really be doing is encouraging more computing than programming. “Real” programming in the end is just an attempt quell the growth pains that comes when rudimentary computing hits teen-ages.

Here’s an example.

You want a start a nice biriyani delivery service, and you want people to be able to order biriyani online from a website. You could first build a website, write a funnel software behind that website that takes orders, and processes payments. Then create a pipeline that would put all the successful orders into a tablet in real time, and then train a person to use the tablet to read out the order so that the cook can make the biriyani, and send delivery out. All this because you wanted to serve some people good biriyani!

Now think about this scenario, you use an off the shelf website maker like Squarespace. Integrate Zapier, integrate PayPal, integrate Airtable; You get to keep track of your orders, and push orders into a kitchen employees phone. You might get charged a premium for using these no-code services, but that’s nothing compared to paying salaried developers writing custom code for you even before your business starts. Eventually, when you start scaling the business up to multiple cities, semi-automatically order ingredients for your kitchen, open multiple kitchens, having a separate cooking and delivery funnel, for all of that you will eventually need to write custom code that specifically caters to your business one piece at a time. But you can still get up and running with your business without writing a single line of code (maybe a teensy bit of it). And that’s incredibly empowering!

We need to encourage more of such use of computers and the internet as a whole. Computing is more than our comfy bubbles of micro-services, Event Driven Architectures and scaling issues. There’s no reason to sneer at rudimentary computing solutions. Not culturally at least. It’s not all F.A.N.G and “optimised algorithms for doing free text search in real time document streams”. It’s not that little hot lambda that you deployed that publishes events to 100s of third party clients. It’s not the meta programmed piece of logistic system that guides 1000s of delivery folks around the city on scooters. Computing is not the homogeneous internet that we are used to experiencing these days. Computing is and always has been a creative pursuit, and these niche little corners where people create within constraints, frankly speaking, deserves a lot more attention that it does now.

And yes, we do need software that’s correct, well written, that scales, that fails gracefully when it’s environment breaks down etc. It’s abundantly clear that world runs on code and we as professional software developers do need to be vigilant about the software we write, the way we write it, the way we think about it. All the techniques and intellectual tools that we have acquired over the history of computing, we need to use them effectively and write good reliable powerful software and make the world a better place. But it’s also very important to do what makes sense in the context given. Just as reliable well written software is super important, so is the bodged up computing solution someone hooked up on their iPad. Let’s make this distinction between rudimentary computing and “real” programming blurry as responsible computer nerds for a better more inclusive future. Let’s stop encouraging coding to everyone and start advocating computing. And respect the art of the bodge.

To end, here's a video of Tom Scott explaining the Art Of The Bodge