The choice of technical stack, software and Platform nowadays is theoretically endless. But, with enough experience in software and business, it is actually very logical and specific – what you should pick – to meet the business requirements and the use desired cases. If you have enough clarity around business needs, technical expertise and requirement, you could know if some idea is viable or executable or good enough. Having clear business requirements is very important so to create specific technical requirements and specification, so the software to actually do what is supposed to.
Make software cheap.
If the budget for a software is low, close to zero, there are options to choose from, that are matching it. If you are just selling something, you could post your products free of charge on sites like olx, Facebook marketplace, Amazon, eBay, or even, create simple blog posts that are messages and not part of any particular e-commerce website or platform. If you have some business requirements, but you don’t have a lot of money, you could by a domain and point it to your home IP address and setup whatever PC with the necessary software. It will cost 10-20$ a year for a simple regular name.
In terms of software – there are a lot of ready platforms that may be tuned up a little bit to meet the business requirements and this will minimize development time and costs. When the customizations are beyond what is available there are not technically perfect, but viable options for creating proof of concepts and beyond (especially if the top performance is not that important).
- A web version of software requires basic web development skills. A web app could be packaged into an app with cordova/phonegap
- For functionalities that are not present on the web – cordova is an option. And a little deeper into more complex technologies are the options of Cross Platform Frameworks – React Native, Native Script, Flutter.
- The most expensive, but in the long run the most appropriate option is native apps. In initial phase of a business – this is on the table only if the team has technical expertise. There are also several big applications that started with only one of the platforms at the beginning. Instagram first started as iOS app. When one of the platforms is successful, creating it for the other platform is easier and straightforward, because requirements are clear.
The minimal technical availability that will reach people is the web. Devices from every form-factor have web browsers. Some may be not so feature rich, a little bit trickier to control (like controlling the browser on a TV with remote, or a 1-2 inch smart watch), but, this is the minimal but the farthest reaching option.
The same as in price – the cross platform frameworks are viable options if you want to have apps and reach people through the app stores, but you have not very big budget or expertise. They are good option for startups.
Business / functionality requirements
- The most feature rich and potentially technically limitless option for satisfying business requirements are the native platforms.
- Second on the list are the cross platform technologies. They have exposed the native functionalities through plugins – like – smartphone contacts list, Bluetooth, camera, fingerprint sensors and so on. Another feature that is exposed with Cross Platform tools is using better the hardware – like Unity for games. Engines like this run native code that is exposed with APIs, against the other, more business oriented tools, that base their APIs on the least that is commonly provided by all platforms – texts, images, buttons, etc.
- The Web has evolved a lot and there are features available like – push notifications, GPS Locations and more – to any web site. But there are also features that are not yet available to the web so, there are cases where a web is not an option.
Create Software fast / speed of development
To create a software fast is very tricky business, especially when requirements change a lot and fast. No end user knows that he wants, so change is inevitable.
- Speed of development depends on the clarity and the concrete, specific descriptions of the business requirements
- The speed of development depends on the seniority level of the technical team, their work load and motivation. Subjective as it is, there are some technical aspects that influence the speed.
- Compilation, Trans-compilation, deployment & servers start-up, testing and CI/CD. No matter how fast a developer writes the source code, many programming languages and technologies need to go through several phases that are inescapable.
- Taking the previous into account – languages that are interpreted (PHP, Python, JS, Ruby) may be technically faster for development.
- The world nowadays is moving to containers, to the cloud, and more. These are in essence – continuous integration & continuous delivery pipelines. They may, but increasingly they are not executed on the coders machines, and, they take time.
- A technology could promotes itself as hot-reloading during development or even during production, but this will not help to hot-reload the endless changes of business requirements that create bugs, workarounds and problems.
Create fast Software / speed of software / performance
Creating software that is fast, in general, takes time. When there are not many users, whatever technology that you pick will be relatively fast. Once things hit scale – the technical basis of performance will start to matter. If I have to describe shortly the key for fast software – it is the proximity of the business logic to the hardware, to the chip that executes it.
Because the speed of development is important so the business could be viable, today there are too many technologies are technically layered one over another – virtual machine inside virtual machine, containers, APIs over APIs. All these abstract level up the speed of writing software, but not the speed of execution.
- Intermediate languages – C#, Java – The business logic is parsed once at startup and executed inside a virtual machine that again, abstracts over hardware specifics
- AOT, LLVM languages – the concept is very trendy and widespread. Instead of writing business logic that is executed by another program – these technologies abstract over the hardware but at much lower level than c# and Java and it is more like a recommendations – that make the software closer to the hardware (compiled). Yes it takes time to compile, but this time is returned with speed of execution. LLVM languages are – Swift, Kotlin, Dart in Flutter, Java, Ruby, etc, WebAssembly also has the same architecture. Because it is just a recommendation of how operations are organized on a lower level – many – slower in their core languages have a tool for transforming them in faster code.
- Writing code directly for the hardware takes time, because the abstractions are minimal and far from the real world and the business logic, but it a lot faster. Tech companies that had hit big scales invested in native ideas, so they could optimize every single calculation of every chip, so to minimize electricity and hardware costs and to speed things to the sky. This is reasonable when money is not a problem.