Reflecting my Web Application Development

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.

Architecture

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

  • Presentation Layer (Basically V in MVC)
  • Application Layer (C in MVC)
  • Data Layer (M in MVC)

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:

  • Presentation: React, Jinja, Handlebars, plain HTML.
  • Application:  Express, Django, Rails.
  • Data: Postgres, MariaDB, MongoDB.

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.

Testing

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.

Deployment

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).

Development

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

Summary

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