What is Rust and Why is it So Popular?

TL;DR The Rust compiler is built on top of LLVM. Rust is a statically-typed language. Rust has optional types for handling null and the compiler requires the None case to be handled. Rust requires top-level items like function arguments and constants to have explicit types while allowing type inference inside of function bodies. Rust’s strong type system and memory safety are all enforced at compile time! Rust does not need to have a garbage collector!...

Mar 1, 2020 · 2 min · Milad Irannejad

Back to the Future with Relational NoSQL

TL;DR Distributed transactions are one of the hardest problems in computer science. NoSQL was a response to scalability limitation and a very high cost of traditional RDBMS. CAP theorem says in case of network partitions, among consistency (correctness) and availability, one has to be comprised in favor of the other. The first generation of NoSQL DBMS chose availability and they were eventually consistent. In theory, they will reconcile conflicts in a finite time after a network partitioning by probabilistically voting on what the data is supposed to be....

Feb 29, 2020 · 2 min · Milad Irannejad

Lessons from the Birth of Microservices

TL;DR Know Why With microservices, you will inevitably ship your org chart! Think about why you are doing it at an organizational level. Don’t focus on computer science! Focus on velocity. Optimize for velocity (not engineering velocity and not systems throughput). By assigning project teams to microservices, you reduce person-to-person communication and increase velocity. Serverless Still Runs on Servers The idea of single-purpose services is a failure mode to do it blindly....

Feb 24, 2020 · 2 min · Milad Irannejad

The Configuration Complexity Curse

TL;DR Three different approaches to dynamic configuration: Templating Examples: Helm, gomplate, etc. Text templating very quickly becomes fragile, hard-to-understand, and hard-to-maintain. Template writers lack the tools to build abstractions around the data. Layering Examples: kustomize Data layering breaks down when configurations grow in complexity and scale. Template writers lack abstraction and type validation. For large scale projects, inheritance creates deep layers of abstractions. Semantics are locked into an opaque tool and not exposed as language features....

Feb 22, 2020 · 1 min · Milad Irannejad

Architecture Without an End State

TL;DR In every organization of any size, the steady state is always a superposition of many different wavefronts of changes. Some of those changes are technological and some of them are market-driven The changes are originating at different places and sweeping through the organization at different speeds. Stop chasing the end state! Let’s focus on continuous adaptation instead of the grand vision. Embrace Plurality Avoid single system of record (SSoR). Federate extents from multiple different systems (multiple systems of record)....

Oct 2, 2019 · 2 min · Milad Irannejad