Let's go!!!
I guess “the why” is a good place to start . Why am I dedicating time to writing about what I am building instead of just building it? Maybe it is yet another form of procrastination, and trust me I can get very creative when it gets to find ways to procrastinate. But I believe it is a bit more than that.
A bit of context
A few years back, 2017 if I am not mistaken, I decided I wanted to dive deep into the world of machine learning. And deep I dove! From the classic Andrew Ng and Karpathy CS321n courses, to popular books, I spent countless hours learning about a field that felt more foreign to a software engineer than I had initially anticipated. This journey eventually had me starting learning mathematics from a much more formal perspective than the more computational one I had encountered in university.
And throughout all this, I made sure I applied what I learned through practical projects. Initially I turned to implementing popular deep learning papers like ResNets, R-CNN, YOLO and more. I would try to replicate the model’s architecture and apply the training techniques on small datasets. I even built my own training rig at home! Of course that when LLMs started to become popular, I felt the predictable need to implement my own decoder transformer from scratch.
While I was doing all this, I had my full-time job as a director of engineering. A man’s gotta eat! And it was through my job that I also came in contact with the world of data engineering and distributed systems. I am now, for the second time, helping a bunch of teams building an internal data platform. One of my sources of education has been the excellent Designing Data Intensive Applications book, a true bible for all things data and distributed systems. Consequently, some of my recent projects have been implementing data and distributed stuff such as a document database with its own query language and a key-value store with a hand-rolled LSM-Tree engine.
As I continue my learning journey in machine learning, my interests for technical projects have now shifted to building something that mixes data engineering and machine learning.
… and back to the why
I know. I said I’d start with the why, and then proceeded to write 4 paragraphs of back-story. Simon Sinek would not be amused!
In both my professional work and my side projects, I always found that writing things down helped me in a number of ways. It calms the rush of ideas in my head, it forces me to stop and think, and ultimately it helps flesh out details and an attack plan. So I thought, why not take it a step further, write about what I am building, and put it out there? It will definitely force me to think and materialise my ideas in a more meticulous manner, and hopefully help me better consolidate my learnings..
I am also a fan of the “build in public” trend, in which startup founders broadcast with complete transparency the journey of building their business. An example that I’ve been addicted to is Big Desk Energy. So I’ll be taking that idea and doing a form of “learn in public” focused on the implementation of technical projects and not so much the business side of things.
Introducing Vigil
I already have a project lined up to start this series, and it is called Vigil. The core idea is to build a system that extracts video frames from a large number of traffic cameras, runs them through a computer vision model that detects car accidents and then notifies a user interface. This will require building a streaming data pipeline capable of handling large volumes of frames and use machine learning to extract insights while managing a real time updates to a frontend. Detecting accidents is just the first use case that came to my head, but I bet that there is a lot more data and insights we can extract from these traffic camera feeds and expose in both real-time and historical manners.
You can find the GitHub repo here.
In the next post, I will introduce the project in more detail, including the initial design and the various POCs implementations. So stay tuned!