Overly Complicated App

2018, Feb 16    

This blog post is the first in a series of posts in which I’ll detail every part of the most complicated TODO list app ever devised by a developer. For each part of the app I’ll write a post commenting on how and why I did it. In the end of the project I expect to do a final post summarizing the whole experience. Cheers!

It all started with me wanting to improve my knowledge on some specific subjects (React and Spring Boot, for example). Then, speaking with my brother, we devised a TODO list app (the HelloWorld of web development) where one would use everything one knows about web programming, not necessarily because it’s the right tool, but because it’s something to be learned/recollect/showed. Developing such an app while properly documenting it would be useful as a showcase of one’s knowledge.

The initial draft that outlines the scope of the project can be found here. It separates its development into eight categories, each of which will be done separately:

  • System Analysis

The first part of the project, where I’ll gather and document the requirements for the app.

  • Frontend

The web visual of the app. The topics I intend to cover/learn the most are React and frontend design patterns.

  • Backend

In the backend I intend to apply the classic MVC architectural pattern and use two microservices, implemented with Python3 (Django) and Java8 (Spring Boot). Another strong point here will be the web security of the application: dealing with password hashing, CSRF and more.

The backend will be simple REST APIs, which will serve JSON data to the frontend, and receive JSON data to save in the Database. The communication between the two microservices, if any, is still unclear.

  • Database

I’m going to use PostgreSQL, to which I’ll apply Security checks (grants and backups, mostly) and DB Tunning (indexes, views, configuration, etc).

In the beginning, I was thinking of using two DBs, a relational one (PostgreSQL) and a NoSQL one. But after some thinking, I couldn’t see the usefulness of such and so, dropped the idea.

  • DevOps

Here’s the part that I’m looking forward the most. I will rent a cloud server, install a Linux OS (Ubuntu, quite possibly) from the ground up, and attempt to deploy the application with Ansible and Docker files. Here’s also where the Nginx HTTP Server and reverse proxy will be installed and configured (HTTPS also).

  • Mobile App

After everything else is complete, and the app is useful, maybe I’ll do the mobile version of it, using Cordova.

  • Desktop App

Same as the Mobile App, but with Electron.

  • Miscellaneous

Here lay the topics which must be considered while developing the app, but that don’t fit nicely into one of the categories above. Stuff like testing (unit and integration), regex, functional programming and nice algorithms (to use and explain Big O notation).

The app already has a home on Github: Overly Complicated App.

Let the games begin!