Decoupling a monolithic PHP application: a practical example
Decoupling a monolith is not a rare problem. It appeared in most of the companies I worked in. This happens because, at the early stages of any startup, there is so-called decision debt being…
Adding a multi-step form, for example user onboarding, is really straight-forward to do with Rails. This article outlines a solution that is easy to follow, easy to adapt and tweak.
A reverse proxy is a critical piece of software commonly found in various setups within a distributed system. You may have encountered it as a proxy enabling service mesh, a load balancer…
Reverse Proxy Deep Dive Part 2: Why HTTP Parsing at the Edge Is Harder Than It Looks
In Part 1 of this series, we explored a high-level overview of reverse proxies and dived deep into connection management. This post shifts our focus to the intricate world of HTTP handling within a reverse proxy.
This article dives into the throughput and quality of the async code review process and explains co-creation patterns – Pair and Mob programming – as an alternative way of working.
Over the years, in my role as a lead full-stack developer, solutions architect, and mentor, I’ve been immersed in the world of micro frontend architecture, working across different large-scale frontend projects where multiple teams, stacks, and deplo...
Node.js runs JavaScript code in a single thread, which means your code can do one task at a time and can’t use multiple cores. To remedy this, Node.js introduced the worker-threads module, so that you can create threads and execute multiple JavaScript tasks in parallel on multiple cores. In this tutorial, you’ll create a Node.js app with a CPU-intensive task. You’ll use the worker-threads module to offload the CPU-intensive task to another thread to avoid blocking the main thread.
Practices that set great software architects apart
Great software architects don’t just make technical decisions—they balance competing priorities, navigate messy org charts, and align engineering with business strategy. This post explores the habits and mindset that separate competent architects from truly impactful ones, and why those differences matter. Whether you're eyeing the role or already in it, these are the practices that move the needle.
Soft vs. Hard Dependency: A Better Way to Think About Dependencies for More Reliable Systems
Explore the critical role of soft and hard dependencies in system architecture. Learn how to enhance reliability and manage service expectations effectively.
Pragmatic Monad Understanding - GlassBlade - Medium
This is my personal notes on monads, that some might find helpful. I’ve included more information in the appendix if needed. In my experience it is often more useful to talk about what a specific…
Since 2002, I have been keeping track of all the tricky bugs I have come across. Nine years ago, I wrote a blog post with the lessons learned from the bugs up till then. Now I have reviewed all the…
This post explores the enduring challenge in software programming of how to pass invisible contextual information, such as loggers or request contexts, through applications without cumbersome explicit parameter passing. It examines various approaches throughout history, including dynamic scoping, aspect-oriented programming (AOP), context variables, monads, and effect systems. Each method offers a unique solution, from the simplicity of dynamic scoping in early Lisp to the modularity of AOP and the type-safe encoding of effects in modern functional programming. The post highlights the trade-offs of each approach, such as the unpredictability of dynamic scoping or the complexity of monad transformers. It also touches on how context variables are used in modern asynchronous and parallel programming, as well as in UI frameworks like React. The author concludes by noting that the art of passing the invisible is an eternal theme in software programming, and this post provides valuable insights into the evolution and future directions of this critical aspect of software architecture.
Many years ago I played League of Legends for about 2-3 years.
If you have ever played it as well, you know that there is a champion called Caitlyn. Caitlyn is straightforward to play but hard to master. You need to use her abilities aggressively early in the game otherwise mid game you will have a hard time.
I would compare coding in React with playing Caitlyn. It's simple, every developer who knows a bit of Javascript can write some components, connect them and voila - there is your web app.