How I am building my minimum viable products

This post is part of my 200 words per day challenge that I am sharing publicly on Twitter in order to improve my writing and develop a writing routine. Feel free to join and comment.

I have entirely or partly made 8 software products so far: delfops (Linux server monitoring), towardmastery.co (blog / content management system), justinien.co (messaging interface), cashmyflight-bot.com (legalbot), akeduk.com (IBM Watson / Messenger middleware), icare-comparateur.com (comparator of flight refund services), pyrohabit.com (budgeting app), ymappr.com (mapped todo app) and the upcoming frugalsquad.com (findependence community).

7 of them were built using a classical LAMP stack (PHP / MySQL). Icare was implemented in Vue.js. Becoming proficient at the MERN (mongodb, expressjs, react, node) stack is a big goal of mine over the next year, but in this article I will only cover my use of the LAMP stack.

I didn’t really choose PHP. PHP choose me when I was 13 and trying to learn how to develop a custom forum to create a role-play game. I didn’t go very far at the time: just learnt some XHTML, CSS and how to setup a local server to run some simple scripts. But it got me hooked on software, and that’s how I later set out to become a software engineer.

Later in college I stumbled upon entrepreneurship competitions, internships and school projects allowing me to develop my programming skills. At this point I was pretty familiar with the language, but never had the opportunity to use it in a professional setting. That’s when I did my end-of-study internship and got to learn Symfony, one of the three main PHP framework based on a MVC (model / view / controller) architecture. As of today I use Symfony 4 to speed up my development process and make my code increasingly secure and reusable from one product to another.

When I do a feature once, I can quickly improve and distribute it in another application. This way I end up with many boilerplates that I can use to bring all of my ideas to life.

Animation and dynamic content are added through JQuery. No fancy Javascript framework. JQuery is really easy to use so it’s a big plus when it comes to rapid prototyping. It also doesn’t really make sense for me to early optimize by switching to a more performant tool. Combined with Bootstrap 4.1, I don’t feel limited by my technology stack so far.

My apps are monolithic, but the more my code base is growing, the closer I am to divide it into separate microservices — authentication, CMS, notification system etc. Those microservices might even turn into fuel for new SaaS products.

I do all of the web hosting on Infomaniak (apache / linux). What got me to choose this company is their green hosting services powered by renewable energies. Gotta do my part as a maker in the ecological issues our world is facing.

My code is versionned on Github using Git, mostly on private repositories. My deployment process is pretty simplistic: I push all of my production code to the master branch, and pull it from my server using ssh. Takes a few minutes all in all.

Infomaniak offers custom email hosting, cronjob, environment variables and domain names, so I centralize everything in there.

I do not document my private repositories, but I do write manuals when it makes sense (example: Akeduk’s user guide).

I always do write unit tests and data fixtures using PHPUnit.

My code editor of choice is Atom, because 1) it is open source 2) it has a dynamic community and 3) lots of cool original features (teletype, multi-cursors for example).

I set up all of my project management activities in Trello boards, following a Kanban-like methodology. I always follow the same development process. First I build the data-access layer using Symfony Entities. Then I grow the model layer by adding CRUD services. I call those services in Symfony forms, API controllers or more regular controllers. Once the back-end is done, I go to the front-end and do some CRUD templating using Twig. I polish my controllers and integrate some JQuery animations or fetch calls to API endpoints to obtain a dynamic interface. My API endpoints always serve data in a JSON or HTML format as to implement the front-end as thin as possible.

I like to create my visual identity first before going into coding (name, logo and color pattern).

Hardware-wise, I stick to a ASUS Zenbook 13 with no external monitor / keyboard to avoid multi-tasking. I use an old computer mouse to ease my design activities — pretty hard to use Gimp without one.


Liked this short post ? Follow my adventures in real time on Twitter.