I have come up with a lot of ideas over the years, and this year is going to be the year that I actually finish a minimum viable product for one of them. I think I have a pretty good idea, but my true motivation is to learn a new technology stack. This project will be a web service with the potential for a lot of user content. Let’s dive into the stack I plan to use for this project.
For the backend I plan to use Go. I really like Go for RESTful API’s. It is a simple language that is easy to learn and maintain. For this project I will need plenty of backend logic and processing and Go will fit those needs perfectly. I also want to make it completely RESTful with no server-side generated pages because I will need to follow up the MVP with an iOS application. Writing the backend in this way allows me to use a single backend for both the web application and the iOS application. I also thought about giving ASP .NET Core a try. The new ASP.NET Core looks like it was designed really well. We are actually going to start using it for a new project at work. I didn’t go with it for now though because it was more difficult finding a place to host it. I will be trying out Heroku, since they offer free development hosting, but they don’t support .NET Core yet.
Since I won’t be using any server-side generated pages, I needed to find a single-page application (SPA) framework for the web based frontend. For this I chose Vue. I also looked at Angular 2 and React. I am not typically a frontend developer and Angular 2 and React were hurting my brain just trying to figure out the dependencies for development. I finally got a working example in Angular 2 and found that it worked fairly well, but still needs some time for wider community support. I heard about Vue and decided to give it a try. I found it much simpler to get started and learn; that could be because I did all the hard learning with Angular 2, but Vue just felt right.
This project has the potential to accumulate a lot of user generated content very quickly. I want to be able to scale the storage of that data easily. I also want to be able to rapidly deploy changes to the model. Finally, I want to be able to host the data in the cloud cheaply. MongoDB checks all of these boxes and can be hosted at MLab with 512MB for free. This will give me plenty of space to alpha test with friends and family and find out if the project will have the potential to pay for itself before jumping into paid hosting. I have used MongoDB in the past and I really like developing with it.
Now we come to my favorite new technology for 2017, Docker. I started learning about Docker last year, but I never found the time to really dive into it. This year I went all in on trying to figure it out. This technology is amazing! I was able to run a go backend service with mongodb on my laptop without installing go or mongodb locally. Throw in docker-compose and this all happens with one command. This will really speed up development. In the past I have worked on projects with my brother using the LAMP stack. My brother is a great graphics designer, but is not a developer. We wasted a lot of time just trying to get the LAMP stack running and fixing it when it stopped working. With docker all he has to do is check out the latest code and type in one line to run the application locally. I have not started learning about deploying docker containers to production, but that will come soon enough.
So 2017 will be the year that I create something awesome with Go, Vue, MongoDB, and Docker. Look for more posts about these technologies as I work on my project. What will you create this year and what will your stack be?