The main focus of my current sprint is to work out what environment I will be using for the implementation of SmallScrum.
I would like to be able to run the application on a VPS, for which I will have complete freedom to configure any Web server, programming language runtime, DBMS and framework. I already own two VPSs - one used by this website and one not currently used. I can also acquire a DigitalOcean VPS if need be, thanks to the GitHub Student Developer Pack.
Whatever hosting provider I chose, I intend to use nginx for the Web server, because it has excellent support for HTTP/2.0 and is known for being robust, speedy and performant.
If I require a relational database, I would like to use PostgreSQL, as it is known for being robust and generally very compliant with the SQL standards. I am generally very experienced with SQL commands.
However, I am also very willing to consider NoSQL alternatives provided they are robust and have good documentation, as I have never used one before. MongoDB springs to mind as a common choice for NoSQL databases.
I would like to use a framework to help me with the development. Ideally, the framework would provide me with a system for unit testing.
I am using a user-centred design process for creating the application, so I'm very focused on the user experience. Whatever set of Web technologies I chose to use to implement the client-side of the application must enable me to create a delightful, polished and very snappy user experience.
Ideally, the technology stack will enable me to provide the following:
- Must support Single-Page Applications (SPA). In other words, loading content through AJAX requests to help ensure that content is snappy. The Web History API should be used to make sure the URL is still correct and that the browser back button still works. One of the goals of the application is to make sure developers aren't annoyed by the sluggishness of loading pages. Even a 500 ms delay is not good enough.
- Responsive Web Design to ensure the application can be used on a wide range of devices. However, I am currently unsure if any users are likely to interact with the application using a smartphone or tablet. (This requirement is good practice, but may not be essential.)
Investigation into frameworks
|Name||Language||Persistent storage||Built-in unit testing||Supports SPAs||Compatible with PE||Comments|
|✓ (PHPUnit)||✗||✓||Excellent documentation.|
|TypeScript||MongoDB||✗||✓||✗||Excellent documentation. Very flexible. Immature platform.|
|Database via RESTful JSON API||✓ (QUnit)||✓||✓[^1]||Excellent documentation.|
Laravel and Symfony are perhaps the most well known and widely used PHP frameworks. Laravel in particular is comparable to Ruby on Rails in how it generally works. However, these are not specifically designed to facilitate the back-ends of SPAs, so they would be unsuitable for use in this application. Frameworks in this category (which I will call server frameworks) are only focused on generating pages purely on the server-side, and are not worth looking into.
Ember is another widely used framework. I particularly liked using Ember, and found its code structure to be very simple. It also provided a command line tool with code generators, similar to server frameworks like Ruby on Rails. There was also built-in unit testing infrastructure and built-in support for Babel (a tool that backports ES6 and ES7 code to ES5). It's also very extensible. Notable add-ons include: Mirage for prototyping communications with the server, thereby removing the need to develop the server-side code at the same time as the client-side code; Deploy for automatically deploying a new production build from a local environment to a Web server; and Fastboot for falling back to traditional server-side rendering of pages when needed.
Another possible option is Backbone.js, which I did not look into in detail due to time constraints. It has much more emphasis on communication with the server via a RESTful API than Angular or Ember. However, I wasn't impressed with the documentation, and the design of the Backbone.js APIs seemed more complicated than Angular and Ember.
During this little investigation into the possible frameworks I could use to create SmallScrum, it has shown an interesting change in the types of frameworks we now use to develop websites, and the types of experiences we create for those websites. While PHP and MySQL were the staples for website environments, more modern systems seem to be making use of node.js and MongoDB. Additionally, SPAs are becoming very common.
Therefore, I have decided to use Ember for the project. I've basically fallen in love with it. I've found it to be straightforward, robust, extensible and I even get to use ES6 syntax! When looking into Angular, I was looking forward to the possibility of using TypeScript, but I can settle for Babel.