50 years on from the invention of the microprocessor, we are spoiled for choice. The variety of software solutions to any problem are so vast that they make the choice the most difficult part of solving the problem. A good problem to have, some might say. However, it can be an overwhelming decision process if you truly open your options to everything that’s available.
In the past five decades, we have gone from building software systems using low level languages that abstracted away the 0s and 1s into sets of instructions that could execute on the chip but were vaguely readable by humans, to higher level languages that reflected readable human decision-making processes, to conditional statements and descriptive algorithms. We have built an elegant foundation to talk to digital machines: Instructional and logical languages derived from English.
The abstractions in these languages have advanced alongside other technology innovations. Abstractions are now built upon abstractions. The touchscreen in the SpaceX Dragon, for example, is a wonderfully simple means for people in space to interact with an extremely complex computer-controlled vehicle. It’s written using modern, common or garden-variety programming languages – the same ones that are used to render this article on the phone or computer screen on which you are reading it now.
However, while the languages may be common, how they are used differs from case to case, and company to company. The SpaceX systems are bespoke because the company needed an edge to allow it to be at the forefront of its industry. Elon Musk may have looked for something in the AWS marketplace, or he might have consulted Gartner for the magic quadrant of rocket control UI systems, but would have ended up with no choice but to build his competitive edge from the ground up.
Forever evolving
Whether SpaceX spent millions of Dollars, or billions, the money is certainly not wasted. Its systems are providing the foundation for something that will evolve to accommodate amazing pilot experiences in future generations of Falcon and Dragon spaceships. That same code, tweaked and modernised over time, may still be sending instructions into the lander that starts the colonization of Mars. The frameworks that the company builds may also be released into the world for other ambitious entrepreneurs to utilise in accelerating their intergalactic dreams, in much the same way that Google, Facebook and Twitter provided frameworks back to the software world.
These days, very little custom software is built from scratch – we build upon frameworks that continuously evolve and accelerate the process. Even the SpaceX team didn’t start from scratch. It’s largely a case of assembling the most appropriate prebuilt helper components and implementing custom user interfaces and business processes and logic underneath with code. The patterns are modern. The principles are based on re-use and the ability to refactor and change to accommodate new requirements. Spaghetti code monoliths are a thing of the past.
Modern architecture, utilising cloud serverless technologies, make it much simpler and faster to build, run and operate. The complexities of the past have been removed – what would have taken six months and a prayer 10 years ago now takes six weeks.
Solving square pegs and round holes
Commercial models for software have changed. Ever since Salesforce decided that you can rent their platform solutions and not buy them outright, the rest of the commercial software world followed suit. SaaS is the way forward: Multi-tenanted, cloud-based software that’s configurable to varying degrees. Microsoft, IBM, SAP, Oracle, Workday, ServiceNow – all the systems that any company could ever want – offer a plethora of capability for servicing production, R&D, procurement, sales and marketing, HR, and finance, abstracted to a level of most common need, available to anyone with deep enough pockets and fairly standard operating procedures.
It makes sense for the large vendors to break up their SaaS offerings into granular services that they can charge for independently. Ideally, there should be the opportunity to select only the features you need from a checklist and have each one customised to exactly the purpose you need them for. That’s where it’s going, but we are not there yet. SaaS Modules are designed to be a best fit for most. With enough customisation and configuration, they can often be made to eventually fit most businesses.
That’s the trade-off. The tweaking of something not designed to be tweaked in the way you want it tweaked leads to issues with upgrades down the line. Phrases like “square pegs and round holes” and “when the only tool you have is a hammer, everything looks like a nail” spring to mind.
Any technology implementation done today should be closely linked to business objectives, and enterprises need to have a clear idea on the business use cases that a particular technology could solve. With custom software development, it is possible to have a clear picture of the quantifiable value every investment in enterprise application development is made.
When your company invests in custom software design and development, the specific needs and problems of your company are targeted. The end product is centric to your business and focuses on what you really want to accomplish. It will also allow you to differentiate yourself in the crowded marketplace. Custom software gives your company a way to be innovative and edge out your competitors.