Migrating from React to Angular: A 'Ship of Theseus' Case Study in Production

Author: Omid Farhang Published: January 1, 2026 Reading Time: 4 min

In the software world, the “Ship of Theseus” paradox is a daily reality. We replace parts of a system until, eventually, none of the original code remains. But usually, the industry moves toward the “shiny new thing.” At work, we did something that might sound like heresy to some: we migrated our core legacy React applications to Angular. This wasn’t a decision made out of fanboyism. It was a strategic move driven by the need for governance, stability, and long-term maintainability in a high-stakes FinTech environment. I’ll explain the architectural “why” and the pragmatic “how” of moving against the grain. ...

Continue Reading Migrating from React to Angular: A 'Ship of Theseus' Case Study in Production

Building a Personal Knowledge Engine with Jupyter and Local LLMs

Author: Omid Farhang Published: December 28, 2025 Reading Time: 4 min

We’ve all used ChatGPT to write a function or debug a regex. But that’s just the tip of the iceberg. The real power of Large Language Models (LLMs) isn’t in the “chat”; it’s in the integration. As I explored in my 2025 series on Jupyter and AI, the real value of these tools comes when they are part of a structured thinking process. By combining the interactive execution of Jupyter Notebooks with the reasoning power of Local LLMs, we can build something much more powerful: a Personal Knowledge Engine. ...

Continue Reading Building a Personal Knowledge Engine with Jupyter and Local LLMs

The Ethics of Legacy Code: Why Rewriting is Often a Mistake

Author: Omid Farhang Published: December 27, 2025 Reading Time: 5 min

Every developer has been there: you inherit a codebase that looks like a bowl of spaghetti, and your first instinct is to say, “We need to rewrite this.” You see the outdated libraries, the inconsistent naming conventions, and the lack of unit tests, and you think, “I could do this so much better from scratch.” But a rewrite is rarely just a technical decision. It’s a social and ethical one. Legacy code is code that is working. It’s code that is paying the bills, processing the transactions, and serving the users. When we dismiss it as “trash,” we are dismissing the context, the constraints, and the hard work of the engineers who came before us. ...

Continue Reading The Ethics of Legacy Code: Why Rewriting is Often a Mistake

Microservices Observability: Lessons from Debugging 1970s Radios

Author: Omid Farhang Published: December 26, 2025 Reading Time: 5 min

When you open up a 1970s radio, you aren’t met with logs or stack traces. You’re met with voltages, currents, and signals. If the audio is distorted, you don’t “grep” for an error; you trace the signal path from the antenna to the speaker. Modern microservices aren’t that different, though we often forget it. We’ve traded copper wires for HTTP requests and vacuum tubes for Docker containers, but the fundamental challenge of observability remains the same: how do you understand what’s happening inside a complex, distributed system without tearing it apart? ...

Continue Reading Microservices Observability: Lessons from Debugging 1970s Radios

The Cost of Consistency: Avoiding Design System Bottlenecks

Author: Omid Farhang Published: December 25, 2025 Reading Time: 5 min

Design systems are promised as the ultimate productivity booster. “Build once, use everywhere.” And for the first six months, it’s true. You see the velocity of your feature teams skyrocket as they stop arguing about hex codes and start assembling pages from a library of pre-built components. But as your team grows and your product evolves, the very system that was supposed to speed you up can start to slow you down. At work, we built a comprehensive Angular-based design system that initially reduced delivery time by 40%. However, as we scaled, we hit the “maintenance phase”: the point where the cost of consistency began to rival the cost of development itself. ...

Continue Reading The Cost of Consistency: Avoiding Design System Bottlenecks

Angular Signals and Control Theory: A New Reactivity Model

Author: Omid Farhang Published: December 24, 2025 Reading Time: 4 min

Angular Signals have changed the way we think about reactivity in the frontend. But if you step outside the world of JavaScript, the concept of a “Signal” has a much older, much deeper history in Control Theory and Electrical Engineering. When we talk about “glitch-free” execution in Angular, we are actually talking about maintaining the integrity of a signal graph. I’ll explore the connection between the physics of signals and the architecture of modern web applications. ...

Continue Reading Angular Signals and Control Theory: A New Reactivity Model

Jupyter, ChatGPT, Copilot (Part 3): Real-World Code Examples

Author: Omid Farhang Published: December 23, 2025 Reading Time: 4 min

This is Part 3 of a series on modern development workflows. Part 1: The Strategic Value of Thinking in Notebooks and Part 2: The Technical Guide to Jupyter Setup set the stage. Now, let’s look at actual code. In the previous parts, we discussed why Jupyter is a “thinking environment.” In this final part, we’ll walk through four concrete scenarios where a notebook outperforms a traditional IDE for a senior engineer. 1. API Archaeology: Mapping the Unknown When you’re dealing with a complex API, you don’t want to build a full client just to see what the data looks like. ...

Continue Reading Jupyter, ChatGPT, Copilot (Part 3): Real-World Code Examples

Jupyter, ChatGPT, Copilot (Part 2): The Technical Guide to Jupyter Setup

Author: Omid Farhang Published: December 23, 2025 Reading Time: 4 min

This is Part 2 of a three-part series. In Part 1: The Strategic Value of Thinking in Notebooks, we discussed why and when to use Jupyter. Here, we dive into the technical implementation. Part 3: Real-World Code Examples covers practical use cases. The Modern Jupyter Stack For a software engineer, the “standard” way of installing Jupyter (global pip install) is often the wrong way. It leads to dependency hell and “it works on my machine” syndrome. ...

Continue Reading Jupyter, ChatGPT, Copilot (Part 2): The Technical Guide to Jupyter Setup

Jupyter, ChatGPT, Copilot (Part 1): The Strategic Value of Thinking in Notebooks

Author: Omid Farhang Published: December 23, 2025 Reading Time: 5 min

This is Part 1 of a three-part series on modern development workflows. In this part, we explore the conceptual and strategic role of Project Jupyter. Part 2: The Technical Guide to Jupyter Setup covers installation and environment management, and Part 3: Real-World Code Examples shows it in action. If you come from a traditional software engineering background (frontend, backend, systems), chances are you’ve seen Project Jupyter everywhere, from notebooks and extensions to cloud platforms, and thought: ...

Continue Reading Jupyter, ChatGPT, Copilot (Part 1): The Strategic Value of Thinking in Notebooks

Unlocking the Power of Angular's `@ViewChild` and `@ContentChild`

Author: Omid Farhang Published: September 8, 2024 Reading Time: 6 min

Angular’s @ViewChild and @ContentChild decorators provide a powerful way to interact with child components, DOM elements, and projected content within a component’s template. While they are often misunderstood or used interchangeably, each has its own specific purpose and use cases. In this comprehensive guide, we’ll dive deep into both decorators, understanding their differences, use cases, and best practices. Additionally, we’ll explore advanced techniques for leveraging them in various scenarios and edge cases, complete with sample code for hands-on understanding. ...

Continue Reading Unlocking the Power of Angular's `@ViewChild` and `@ContentChild`