How to build the tech for a SaaS company in 2017
Opinions on how a modern software development stack should look like
One of my responsibilities as the tech lead at snapADDY is to think about, how our technology stack has to evolve over time to stay efficient and competitive. This article summarizes what technologies and approaches I would consider as a SaaS company that starts from scratch today.
Servers are finally dead — Long live the Cloud!
The Challenge: Maintaining your own servers, handling security updates and backups manually is a lot of work.
The big IaaS and PaaS players AWS and Microsoft Azure are very far developed by now and even regulatory issues in difficult geographies like Germany are resolved with local regions to choose and legally proof contracts available.
The capabilities of just firing up a database, application or server with a couple of clicks moves everything to a higher abstraction level. That way many of the administration tasks can be done by the developers themselves “on the side” without requiring deep understanding of manual server maintenance.
Services like Firebase even go one step further, as they are basically ready to use back-ends with live synchronization, user handling and cloud messaging all built in. These “Back-End as a service” tools are the latest evolution in this field. At least for prototyping they are today a totally viable option to get started fast.
Services to consider
- Amazon Web Services (Market Leader)
- Microsoft Azure (Market Leader)
- Google Cloud Platform (Not as developed as the top 2)
- IBM Bluemix
- Firebase (A look into the “Backend as a service” future)
- (Feel free to suggest more in the comments, I will add them to the list)
Monolithic Back-Ends are dead — Long live Polyglot Services!
The Challenges: Big monolithic servers are hard to maintain, test and scale. Developers need to run and understand “the whole thing”. Sometimes there are great tools and libraries available in other languages, that are hard to integrate into one big server.
I don’t want to focus on this point too much, as I think the discussion about microservices at the moment is a bit over-hyped and sometimes goes in a too esoteric and non-pragmatic direction.
I basically believe in dividing your application into services and to use different tools for different tasks. This all is fueled by the IaaS and PaaS capabilities mentioned in the point above. Starting new server instances for another programming language or framework now has very little overhead.
Recommended Technologies
- Anything you need to get the job done, that can talk HTTP and JSON basically ;)
- Personally I still love NodeJS + Express + PostgreSQL as my bread and butter back end stack
True Native is dead — Long live the Web!
The challenge: If you want to support the web, all mobile platforms and perhaps even desktop you need to have multiple specialists for each platform. Knowledge can not easily be reused between them and it is harder to create a unified user experience.
As the first HTML 5 apps build with early frameworks like jQuery mobile got somewhat of a bad reputation, as they did not perform as well, as the native applications, more modern frameworks like Ionic and now Ionic 2 are way more sophisticated and the browsers and mobile devices got much faster.
Smooth CSS animations, native scrolling… Today you should think twice before deciding if it is worth to invest in specialist developers for Android, iOs or even Windows Mobile. The benefits of reusing your web development knowledge for app development are huge while the gaps between web and native become smaller and smaller.
Also in the desktop space, mainly thanks to Github’s Electron project, reusing your web development knowledge is a real option to support Windows, Mac and Linux desktops with the same code base and programming knowledge as well. The currently very popular programming text editors Visual Studio Code and Atom are great examples on the kind of experiences you can create with this.
The conclusion is with this approach you now only need one team with strong JavaScript and web development knowledge to basically build everything: Backend, web, mobile apps and desktop. Believe me, we at snapADDY do exactly that and it works :o)
Recommended Frameworks
Front-End Framework silos are dead — Long live the DOM!
The Challenge: Developing a modern JavaScript front-end today, you pretty much have to commit to one framework to use. Interoperability between these frameworks is difficult.Once you start to create your front end with Backbone, Angular 1.x, Ember or React you are to a certain extend stuck with it. You can not easily reuse the code between those frameworks, as they are very opinionated on how things are done
I really like the approach of modern frameworks like Angular 2 or the Polymer library to use the low level DOM APIs as their main building blocks. This development is fueled by the emergence of the new web component standards and ECMAScript 6 which finally defines a unified module syntax.
This will to a certain extend remove the walls between different frameworks as they will be able to communicate on a common ground with default DOM attributes, properties and events.
I think it is not yet clear if this will actually play out this perfectly, as most of this is not yet finally defined and implemented in all browsers, but the vision behind it is great!
For more complex projects you also have the option to sprinkle in some static typing with TypeScript, which got a lot of traction the last two years. I was a skeptic for a long time, but I think it very elegantly extends the JavaScript standard with the typing feature. Still there is some inconvenient overhead to handle type definition files etc, but it is getting better from version to version.
Recommended Frameworks
- Angular 2
- Polymer
- (Feel free to suggest more in the comments, I will consider adding them to the list)
Conclusion
Considering all the current developments I am very optimistic it will get even easier for new SaaS companies to focus on what creates value to customers without reinventing the wheel or getting stuck in low level technology problems.
So lets keep on “SaaSing all the things” and build the future of B2B software together. I look forward to it :)