Infra code and Clojure/script full-stack app code

Infra code and Clojure/script full-stack app code.

Introduction

In my previous blog posts (AWS IoT First Reflections and AWS IoT Storage Considerations, I described my first AWS IoT platform project and its infrastructure building process. Now I have moved on to implementing the full-stack Clojure/script app to visualize the IoT data on that platform. While developing the full-stack app, I realized that I need to think about what full-stack app development really is and who is a full-stack developer.

Traditional Definition

The w3schools provides a concise definition for a full-stack developer: A full stack web developer is a person who can develop both client and server software.

I have been in IT business for some 25 years. I remember the Java application server era when we created HTML UIs using JSP, Java Server Faces, and other mechanisms that were popular at that time. Later on, the so-called single-page application paradigm got popular, and developers started using Javascript to implement the HTML UIs. In many projects, the backend was implemented still using Java. This caused in bigger projects the development to divide into two different teams - the backend team (using e.g. Java) and the frontend team (using Javascript). Later on, when Nodejs got popular, developers started to implement the backend also using Javascript. Now you could build a modern single-page application using just one programming language, and those developers began to call themselves full-stack developers.

Enter the Cloud Era

Now that we have entered the cloud era in which most applications are running in the cloud, a new competence is required: the ability to create Infrastructure as Code. In many bigger projects, there is a DevOps team that is responsible for the cloud infra (actually a bit of a contradictory term since the whole point of DevOps is that there is no dedicated Ops team). This is because most application developers do not feel comfortable creating IaC solutions - they just want to be application developers (backend, frontend, or both).

Real Full-Stack Developer

In my latest project, I’m responsible for creating an IoT platform that can ingest a large number of IoT events and store them in two storages: all events in S3 based data lake and the latest events in RDS. I’m also responsible for creating a full-stack application (using Clojure and Clojurescript). It’s pretty easy to develop a full-stack app using Clojure/script since you can use the same language in both backend and frontend sides, and Reagent makes building a modern React-based single-page application easy.

I’m the only developer responsible for building the whole system (thankfully, a competent UI designer creates the UI layout design since I have no artistic eye). It is really enjoyable to work on a small green-field project like this - you get to build the cloud infrastructure and the applications running in the infra yourself. When implementing the infrastructure, the backend, and the frontend, you can create a coherent solution and optimize the overall development process. I would say that this is real full-stack development.

Conclusions

Perhaps we should define the concept of full-stack development and a full-stack developer in this new cloud era. You are a full-stack developer if you can create the cloud infrastructure as code and then implement the backend and frontend for your application running in that infra.

The writer is working at Metosin using Clojure in cloud projects. If you are interested to start a cloud or Clojure project in Finland or you are interested in getting cloud or Clojure training in Finland you can contact me by sending an email to my Metosin email address or contact me via LinkedIn.

Kari Marttila