Building resilient systems is no longer a best practice. It as an expectation. Whether you’re running a small internal app or handling millions of transactions a day, the assumption is the same: your service should stay online, even when things go wrong. That includes major failures such as a full region outage on your cloud provider. This is where geo-resilience comes in. Think of it as the modern approach to designing for the worst-case scenario. Your architecture will determine whether users feel the impact of an outage or whether they don’t even know it happened. In this post, we will…
-
-
React just took a quiet but deeply meaningful step forward. With the release of the React Compiler, we are entering a new phase of performance. In this new era not the developer, the compiler takes on the burden of micro-optimisation. In this blog post, I will be summarizing what has happened. For a deeper dive please check https://react.dev/learn/react-compiler. If you’ve written React for any length of time, you’ve likely to get familiarized with useMemo, useCallback, and memoization strategies. We have learned to optimize re-renders manually, scattering hooks throughout our components to avoid unnecessary updates. However the results have been complicated.…
-
In the world of enterprise software, some names have stayed strong for decades. C# and Java are two of those names. They shaped the way companies built applications. They gave us reliability, structure, and a deep ecosystem of tools and libraries. For a long time, they were simply the best choices for building serious systems. However, the ground of the world of software is a wobbly ground, does not stand still. We are now in an age where speed, simplicity, and flexibility matter more than ever. Cloud-native systems, containers, and microservices have changed the way we think about software. New…
-
JavaScript has come a long way since its creation. It started as a very basic language for making web pages interactive. It has become more powerful and it has been the monopoly over web development for decades. However in this blog post we won’t be talking about JavaScript’s web development capabilities. The idea of Node.js has been an unexpected step for JavaScript, because JavaScript was tightly coupled with frontend development. Yet Node.js was allowing it to run on the server. This was a game-changer for the industry. It enabled developers to use JavaScript for both frontend and backend. However, no…
-
REST APIs are everywhere. From mobile apps to web platforms, they connect the front-end and back-end in a clean and standard way. In this post, we’ll write a basic REST API using Go. It will not use any third-party packages. Only the Go standard library. We’ll simulate a database using a simple map. Go is fast, simple, and powerful. It compiles to a single binary. It starts up quickly and uses little memory. Go has strong support for concurrency, and the standard library is great for building APIs. In a microservices setup, services talk to each other. Often they use…
-
Over the past few months even weeks, DeepSeek has emerged as an unexpected guest in the AI market. It literally redefined the AI industry and cost trillions of dollars loss in stock markets. Even though I am also interested in, I won’t focus on that side of DeepSeek today. The reason it caused such a fundamental change is that it uses significantly fewer resources than its competitors in the market. The level of optimization is so high that you can run a fully pre-trained model even on a laptop. Today, I will take you through how to run DeepSeek R1…
-
In C#, it’s common to sprinkle your code with debugging information—like console logs that help you track down bugs. However, when you’re ready to release your application to the world, you don’t want all that extra debug code to slow things down. This is where the Conditional attribute comes into play. The Conditional attribute allows you to mark certain methods so that they’ll only be called when specific conditions are met—typically when you’re building in a debug environment. When you build your application for release, the compiler ignores these methods, as if they weren’t there at all. This helps to…
-
Recursive functions are a staple in many programmers’ toolkits. They allow us to solve complex problems by having a function call itself with a different set of parameters until a certain condition is met, known as the base case. This is an elegant way to process data structures like trees or to perform repeated operations until a condition is satisfied. However, recursion comes with its cost. Each recursive call adds a new layer to the stack (a special area in a program’s memory) that tracks where each function should return control once it completes its execution. This is known as…
-
Micro-optimizing refers to making small modifications to code in an attempt to improve performance, often at the expense of making the code harder to read, understand, and maintain. While it’s natural for developers to want their applications to run as efficiently as possible, it is also crucial to balance these optimizations with the overall clarity and maintainability of the code. Micro-optimizations may be a bit faster language constructs, helps to handle tricky algorithms for minor performance gains, or restructuring code in a way that makes it harder for others (or even yourself) to understand later. These optimizations are “micro” because…