Over Engineering "Todo List" with CQRS, ES, and Other Acronyms

By David Rovani

Elevator Pitch

A product agnostic approach to Enterprise level projects with an approachable example, this talk aims to fill the gap between introductory articles and large case studies by explaining how these various methodologies and services can be used to create an end-to-end solution.

Description

While there are plenty of introductory articles and tutorials talking about Event Sourcing (ES), Command Query Responsibility Segregation (CQRS), Functions as a Service (“serverless”), message queues & handlers, and various other paradigms and methodologies, it can sometimes be difficult to conceptualize how it all pieces together. This presentation is going to fill in those missing parts by taking the classic “Todo List” application and over-engineer it by imagining additional requirements and complications. As each challenge is presented, we’ll explore the strengths of the paradigm we’re adding, what additional considerations this adds, and what trade-offs we’re accepting.

The classic “Todo List” is a simple CRUD application working with a MVC framework on a web server that persists data to a relational database.

  • What about historical states?
  • What about network instability, active user spikes, inconsistent workload?
  • I want to completely separate the front-end team (HTML/CSS/JS) from the back-end team (API/DB).
  • What about documentation of code, business processes, and developer on-boarding?
  • How do I handle reporting? Live analysis? Metrics?
  • This application needs to integrate with completely separate systems that use different languages, frameworks, and teams.

Other topics that will be covered include JAMstack, service/event buses, documentation (OpenAPI), testing (unit & integration), and deployment.

Notes

I’ve spent the last few years or so researching, experimenting, failing, and succeeding at stitching these various workflows together. I’ve been to plenty of talks describing how CQRS/ES works, how wonderful FaaS is, all the benefits of JAMstack, etc. - but I haven’t found any that really talk about how they come together to create a full solution. As such, I’ve also had to find ways to distill all of these concepts down to something I can teach to both junior level developers and senior level engineers. The length of the talk determines how deep into various topics I can go. For example, this will give a quick overview of what CQRS and ES are, such that anyone unfamiliar with the topic can gain a high-level understanding of it, but I won’t go into such detail that the audience will become experts on the topic. The purpose of this discussion is showing when to bring each paradigm into the solution and how it connects with other concepts.

At the end of the talk, I expect that the audience will have a good understand on how each of the building blocks piece together, what solutions/products there are that can fill each of the blocks, and perhaps a view tips on how to pick the best products for their needs.

Many of the implementations details are left as an exercise to the audience, since this talk is product agnostic. I’ll provide examples of the various leading products on the market that can fill the role (e.g. React, Vuejs, Angular, etc. as front-end frameworks). Based on the audience, though, I can give examples for a specific technology stack (e.g. Azure Event Grid, Azure Functions, Azure CosmosDB).

There isn’t a specific demo for this talk, since the idea is to keep it product agnostic (and I’m terrified of a live-demo going horribly wrong!), but I will have pseudo-code examples and schematic/architecture diagrams to share.