A SaaS Experience

Web technologies are rapidly changing. Constantly evolving, continually expanding. When I began learning and experimenting with web technologies, times were simpler, at the same time less flexible. Recently, I have been researching, and learning, and working with newer, more available technologies, and I wish to share the experience with you. I want to explore a true SaaS application design, development and setup, and share with you my experiences.

Before we begin! When I look back at work I completed 8-10 years ago I cringe, technologies have changed, and my knowledge has changed, however I do not declare myself an expert at what I do. I am highly capable, and can complete tasks with minimal fuss, however I will openly admit that some items you may see in this blog are not the industry standard or “best-practice”, but they do work! And quite well for my purposes. The aim of this blog is to introduce concepts to followers, and hopefully inspire some to start learning and developing their own ideas. When I look back on this project in 12 months, I expect to cringe again, however I hope the lessons we all learn from this project, help us move forward with the next!

My goal for this blog is to follow the development of a small cloud based application, which will later be released as open-source on GitHub, and to follow the decisions, the research and the learning involved in bringing the idea to life. We will follow the “base” application, to which I will later add more advanced modules to be used to extend the functionality and make this project a viable SaaS application for commercial use.

Please understand that this is designed to be a learning experience for all, myself included, and as such please understand there is no need for negativity in the comments. If you don’t agree with the content, please understand that there are others who may value the insights it may provide.

Adding a User Interface – A SaaS Experience

Adding a User Interface – A SaaS Experience

In this article we will look at how we can add some structure and design elements to our application. So far, we have ugly white screens that simply display un-styled menus and forms. In order to make our framework, and our application easily customisable, I want to be able to swap and change between templates and styles easily within my application.

Generating Menus – A SaaS Experience

Generating Menus – A SaaS Experience

In this article, we can will build navigation menus that will allow our users to navigate through our application. We will develop a menu generator, that builds the menus for us, and also checks the logged in User’s permissions, and only shows pages and links relevant to that user. We will begin by creating a Path() object, which will store details about the user’s current location within our Application, or their Path from the root of our application.

Company/Client Management – A SaaS Experience

Company/Client Management – A SaaS Experience

Our Application, as simple as it may be functionality wise, is designed to be available for any number of freelancers, agencies or companies to utilise. In order to manage this, we need an effective way of creating Companies in our App, and separating their data using namespacing in our Datastore. In this article, we will create the ability to add, edit and remove companies from our App and also look at how we can assign Users to a Company on signup, and after the Company has been created.

Page Management – A SaaS Experience

Page Management – A SaaS Experience

Our simple PHP MVC Framework is starting to take shape. We now need to start building some structure for our App. In this article, we will begin implementing a page management system that will allow us to generate navigation menus and to expand our authentication system to handle user level roles and custom page permissions.

Adding Authentication – A SaaS Experience

Adding Authentication – A SaaS Experience

In this article, we will add some authentication to our App, and allow only registered users to access it’s content. Eventually, we will add user level access, and custom permissions, but to begin, we will allow users to log in, and access everything we have created so far.

User Handling – A SaaS Experience

User Handling – A SaaS Experience

In this series, we have been looking at the development of our own simple PHP MVC Framework. In order to add an authentication system and security to our framework, we need to be able to work with users. We can utilise many of the elements we have already created and tested, and bring them together to add, edit and disable users, and to demonstrate how our framework will help us build our app.

Exception Handling – A SaaS Experience

Exception Handling – A SaaS Experience

In this article, we will look at how we can manage exceptions in our application, and how we can log these exceptions for debugging later. We can also set certain exceptions and errors to notify us by email, so we can be notified and get to work resolving the issue straight away.

Performance with Memcached – A SaaS Experience

Performance with Memcached – A SaaS Experience

Performance should always be a consideration when developing any web application. Users expect a fast response and minimal delay when interacting with your application. While we are already utilising a highly scalable cloud setup, and a high performance datastore, we can further improve our performance by caching data.

Testing Datastore – A SaaS Experience

Testing Datastore – A SaaS Experience

In this series, we have seen datastore pop up in a few places, yet we have not conducted any unit testing on our datastore code. The reason for this, is that we cannot access datastore from the command line, as required by PHPUnit. Datastore is only available through the localhost port provided by the Google App Engine SDK. How do we test our datastore items?

Share This
Hi, I'm Budi

Follow A SaaS Experience

Register your details to receive updates to the "A SaaS Experience" blog. This will help you follow our progress!

You have Successfully Subscribed!