Reflecting my Web Application Development

published at

I hope you understand with the title I wrote, in this simply I just want to "reflecting" the way I build a web app, since its been a long time I don't build it anymore. I hope this post is quite short so I can avoid any "detailed" topic that frequently I did.


Basically we use three-tier architecture with 3 layers while creating the application:

I use MVC pattern to keep this post short and since MVC pattern is famous enough. Let's breakdown those 3 tier/layer by using some "library" as an example:

Model is just an abstraction on top of Data Layer, so we can communicate with database in *agnostic *way: No matter are you using Postgres/SQLite, all you need to care is talk with them either via Active Record/Data Mapper pattern and let them abstract the driver layer.


I don't do TDD but sometimes writing an automated test from Unit to Integration test just to make sure I can sleep tight. On Frontend, frequently I just write E2E testing (and snapshot test), because frontend world is too complex.

Some testing framework/library/runner–today–is very much, I need to use Rspec in Ruby, pytest in Python, Jest in JavaScript, and so on. Built-in testing functionality probably great–like what Go & Rust did–but maybe we need an agnostic testing framework/runner so we can keep our sanity.


Thanks to Open Source, now I don't need any platform-specific deployment strategies since Containerization is cool. Previously, I need to deal with platform-specific strategy–mostly delivered via Git–like Capistrano for Ruby and Fabric in Python.

There is agnostic way like using supervisor, but polliting my server with many environment is not my typical.

Today I just use Docker (and Docker Compose) to do some deployment, its pretty good. Still don't interesting with K8s (orchestration way) and FaaS (artifact thing).


It just a boring stack: Tmux, Vim, and Firefox. But I enjoy enough, probably its not the recommended stack choice.


Now I know how to build a Web Application by reflecting** my** "frequent" way to do it, lets write some code?