Front-end (runs on your browsers/generated and passed to front-end)
—-
Back-end (model, controller, and sometimes viewer components)
—-
Database(s) (in memory and/or persistent to hold the data)
The above three components (let's refer to them as `Web App` for now) work together and provide you an app. Want to add it to the internet on your own server that you are admining? then you will have something similar to the following:
Domain name server (DNS)
—-
Web App (Direct access over the internet)
—-
Server OS (FreeBSD, Ubuntu, etc.)
For the DNS, you need to purchase an IP, domain name and set up your DNS. Most likely you will purchase your DNS, so you don't need to bother to set it yourself and for the server, either you bought it and stuck it somewhere at your home (not recommended for security reasons) or you went and bought/rented a server in a data center. Let's assume you hit the chord and have 10k concurrent users and also further we assume that your server could accept 10k concurrent users, what will the overview look like?
Content Delivery Network (CDN) for serving static files.
—-
Domain name server (DNS)
—-
Load balancer (e.g., Nginx)
—-
Web App instances
—-
Server OS (FreeBSD, Ubuntu, etc.)
The difference here is that you purchase a CDN service to serve your static files (e.g., JS,CSS, images, etc.) and bring the load balancer to the front of the server so that it redirects the HTTP calls into the local instances.
So at this point, what are the components that you bought to serve your application? CDN, DNS, IP, domain name, physical server, rent in a DC. If you go into the cloud route and use a virtual machine (still keeping it basic with 10k users) then you still pay for CDN, DNS, IP, domain name and VM. Also on the free side of things (load balancer and OS) there are various paid versions such as Nginx Pro and RedHat. So first of all, all these software that you paid for in their core are not web or mobile apps and therefore you could think of similar line of products but also there is an interesting fact about them: to build them you need more than just the last shiny web or mobile framework to create them but also all of the sudden the potential impact of an alternative product becomes gigantic. Simply because you impact millions of developers and hundreds of millions of their users. So hypothetically speaking your potential product impact becomes global overnight. By the way this is just scratching the surface and staying at the Web app dependencies, you could think about OS itself and helpers and all the services could be developed and provided (mail service, security monitoring, etc.).
So let me put it this way:
To think outside the box for SaaS you need to look inside the box!
There is even more to unpack here if you are a technologist and developer: All the foundations of the internet are written outside the usual JVM-, Python, .Net-based languages and frameworks. So here is the new product hypothesis:
Over the years, layers upon layers of abstractions and components were added into our software stack. If you have a good understanding of the basis of computer science, architecture and programming, you can create small improvements in the foundations to have a gigantic impact on many software products.
For example, you can’t be an OS contributor with the latest Web framework you learned, you need to first look at the legacy code that was written decades ago and see where you can contribute with languages that today might consider them low level such as C. For example, for fun of it as I was looking into testing C code, I was curious to see when assert.h was written, so I looked at its definition in a FreeBSD distribution (also available on your Mac), that is a while back:
This goes to all other modules and services in the OS, as well as the glue of the internet: networking. Your home has a router that you are connecting into, right? What are the software that you think you can create to help the users and developers? Again, you need to know the core components and layers of the networking and most likely need to write the software in C, C++ or Erlang, depending on the brand. Or maybe you become ambitious and want to create a hardware/software product that is both router and a FTP server and release it to the market, you then need to know a number of foundations on both software as well as electronics (to design the board, sent it for fabrication, testing both hardware and software, and writing software for certain chips).
On the mobile side of things if it requires a server for supporting the app (e.g., registration, authentication, keeping the score of the game you created) then all the above is necessary but also on the app itself you need to think also inside the box and see the improvements that you can make: all the sensors and camera features, could you create a product that ease the users/developers?