Day 5: Context Is the Real Model

When we talk about AI systems, most people focus on the model—its size, parameters, benchmarks, architecture.

But in practice, the most significant determinant of performance isn’t the model itself.

It’s the context you give it.


The Invisible Weight of Context

A small model with the right prompt, data window, and retrieval strategy can outperform a larger one that’s context-starved.

Context defines relevance. It shapes how the model interprets input, constrains hallucination, and influences tone.

Without it, even the best model becomes a pattern generator with no sense of purpose.


Context Engineering > Prompt Engineering

We’re moving past clever prompts.

The new challenge is context orchestration—deciding what to include, what to exclude, and how to stitch fragments of memory, history, and metadata into something coherent.

Some practical heuristics:

  • Keep context specific to intent, not identity.
  • Don’t overload history—recency often beats completeness.
  • Treat retrieved facts as ingredients, not truth.
  • Allow models to forget strategically; it improves focus.

The Broader Shift

As models plateau, system design becomes the differentiator.

The intelligence isn’t in the model—it’s in how you feed it, constrain it, and listen to it.

In that sense, every AI product is really a context management problem disguised as an interface.

See you tomorrow.

Namaste.

Nrupal

Day 4: Notes on Stateless Design in Interactive Systems

Statelessness sounds elegant until you start building interfaces that must remember who you are, what you just did, and why it matters.

Most modern systems chase scalability through stateless APIs—containers can spin up or down freely, requests can hit any instance, and storage handles persistence.

But when the experience layer becomes interactive, purely stateless design starts to creak.


Where Statelessness Shines

  • Horizontal scaling: Each request is independent, so load balancing is trivial.
  • Fault tolerance: No single session failure can corrupt global state.
  • Simplicity in deployment: No sticky sessions, no shared memory puzzles.

Where It Hurts

  • User context: You need to rebuild understanding on every request.
  • Real-time collaboration: Shared presence and transient state demand continuity.
  • Personalization: Without context, every user looks the same to your system.

To compensate, developers start layering caches, context stores, and event streams—each re-introducing some form of “remembering.”

In practice, most systems end up soft-state, not truly stateless.


A Working Balance

  • Keep computation stateless, but store intent externally.
  • Let the front-end or an edge layer manage short-lived memory.
  • Use immutable logs for truth, transient stores for flow.

When stateless design meets interaction design, the goal isn’t purity—it’s recoverability.

If the system forgets, it should still know how to remember again.

See you tomorrow.

Namaste.

Nrupal

Day 3: When Abstractions Leak

Every developer loves good abstractions—clean interfaces, hidden complexity, reusable logic.

But every abstraction eventually leaks. The real question is how gracefully it fails when it does.


The Myth of Complete Encapsulation

Abstractions aren’t walls; they’re filters.

They simplify what’s common and defer what’s exceptional. The trouble begins when exceptions multiply—when systems scale, environments diverge, or assumptions rot with time.

At that point, you don’t just debug code. You debug intent.


Signs Your Abstraction Is Leaking

  • You start passing “config” objects just to control one internal edge case.
  • Logs become full of “unexpected state” messages that never bubble up to the user.
  • A once-simple interface now needs versioning to stay compatible with itself.
  • Performance optimizations start bypassing the abstraction layer entirely.

When that happens, the abstraction isn’t wrong—it’s just exhausted its design context.


Handling It Gracefully

  • Expose failure early. A transparent error beats a silent fallback.
  • Revisit boundaries. Maybe the abstraction should shrink, not grow.
  • Document intent, not usage. Future maintainers need to know why it exists, not only how.
  • Accept entropy. Some systems are meant to evolve, not ossify.

Reflection

Good abstractions buy clarity.

Great ones expire elegantly.

The art lies in knowing when to let one die.

See you tomorrow.

Namaste.

Nrupal

Day 2: Designing for Latency, Not Just Throughput

When building any real-time or near-real-time system, “faster” is an easy word to say and a hard metric to define. Most teams still optimize for throughput—how much work gets done per second—while neglecting latency, which is what users actually feel.

The Hidden Cost of Waiting

A system with great throughput but poor latency feels sluggish.

Think of a conversation where one person responds after a five-second pause each time. The bandwidth of speech hasn’t changed—but the experience has.

The same applies to inference pipelines, data APIs, and even UI interactions. Latency compounds silently: an extra 80 ms here, 120 ms there, until responsiveness collapses under the illusion of “efficiency.”

Practical Ways to Think About It

  • Budget latency early. Treat every component—network, I/O, model, render—as having a latency cost that must be justified.
  • Instrument aggressively. Use fine-grained timing logs instead of broad “response time” metrics.
  • Prefer predictable latency to lower averages. Users adapt to consistency; systems fail under variance.
  • Cache what can be anticipated, not just what was requested. Anticipation often beats optimization.

Reflection

Throughput scales hardware. Latency scales perception.

In a world moving toward real-time AI interactions, designing for latency first might be the most human-centric decision we can make.

See you tomorrow.

Namaste

Nrupal

Day 1: Rebooting Consistency

Every system needs a reboot once in a while—not because it’s broken, but because clarity demands a reset.

Today marks Day 1 of a deliberate writing routine. One post, every day. Technical where it needs to be, reflective where it matters.

There’s a lot happening across the AI, systems architecture, and automation space. Things are changing faster than most teams or individuals can document, let alone understand. My goal with this blog is to track patterns, decode noise, and capture signals worth exploring.


Why Now?

Because real work often stays invisible.

I’ve realized that documenting doesn’t just help others—it improves design decisions, speeds up debug cycles, and sharpens long-term thinking. Consider this my public changelog—less about what I’m building, more about how I’m thinking.


What You Can Expect

Without going into specifics, topics may include:

  • Approaches to designing modular AI systems
  • Handling complexity in distributed workflows
  • Observations on compute vs responsiveness in inference-heavy apps
  • Data ingestion strategies across diverse formats
  • Practical tradeoffs between local vs cloud deployments
  • Notes on tools, edge cases, and implementation quirks

Some posts may be short and opinionated. Others may get into system-level thinking. Either way, no fluff.


Closing Thought

Not every day will produce something perfect. But shipping ideas daily forces precision. This blog is where that happens.

See you tomorrow.

Namaste.

React Native – Getting Started

React Native allows building apps for both iOS and Android platforms. This is not building a hybrid application but the render part of React is done using native controls.

iOS development environment setup is easy and doesn’t require additional steps apart from those mentioned in the getting started section of facebook’s react-native site.

Android development environment setup is tedious as warned in the getting started site.

  1. At the time of writing this post, react-native tools do not support Java 9. Be sure to install JDK 8 versions only.
  2. Before executing react-native run-android the emulator should be running.
  3. Emulator should be using API 23 and running Marshmallow.
  4. ensure that this is added to the zsh or bash profile export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

Namaste

Nrupal

Software product shelf life

When is a software product dead?
All software products are designed with a particular shelf life in mind. This shelf life means the amount of time the software survives without being ported to a different technology.

We can say that a software product is dead when
1. We have to port the solution into a different technology to be usable.
2. We have to re-architect for a major feature upgrade to keep its usability.
3. There are no more users using the software.
4. The back end services if any, cannot be supported and will be retired.

when one or more than one of these happen, we can declare that our beloved software product has reached its end of life. All software products go through following common stages. These are not the stages in a software development life cycle which ends at maintenance.
1. Concept
2. Risk assessment
3. Technology stack assessment/design
4. Development
5. Testing
6. Deployment
7. Maintenance
8. Implementing new features + maintenance.

After a few iterations of the above the product reaches stability and can be considered to be mature. This is when the product is not actively developed on and only minor enhancements or bug fixes will be performed. Then after a little while the product becomes less useful and will require more effort to maintain it. Which is when it has to be identified as it reaching its end of life. At this stage a new one can be developed or this re-architected to give more shelf life.

It is required to identify and accept the end of life of the product and start planning for the stages after it.

 

Namaste

Nrupal

Self healing applications in .NET

The most common cause of failure is an un-handled exception caused by unexpected format of data. When such a thing happens, human intervention is required, which involves restarting the application. What if we can get the application to notify us when this happens and then restart itself?

Notifications when there is an un-handled exception is a common practice. If you are not already doing it, you must be. All it takes is a few lines of code. In the event handler for un-handled exception, log the exception details and send an email out to the dev team (ensure through TDD that there can be no failures in the email sending part!!!). Going on to the next step, if the application restarts itself we can have a self healing application.

Since it is not possible to restart itself, we will use a helper. A second application that wraps around the main application. The helper wraps the main application in an App Domain and monitors for exceptions. All un-handled exceptions from the App Domain are caught, notified, logged and the application restarted. Here we can setup a new App Domain. So the application keeps running even during failures.

There will be situations when the problematic data keeps tripping the application and may keep failing over and again. Having a threshold of the number of consecutive fails helps escalating the issue. It can follow escalation by sending an email on the first fail, email with high priority for the second fail and an SMS for the third failure. At this point the wrapper application can wait for human intervention and not restart the application.

 

Namaste

Nrupal

 

Raspberry Pi and Windows 10 IoT

Being able to run Windows 10 on Raspberry Pi is one of the best news I read a few months back. I was planning on using the Pi to control lights and automate a few things in the house. Being able to program against GPIO in C# is amazing. So I started out with downloading the ISO and setting up the Pi with Windows 10. There are numerous blogs detailing the process.

The website to administer the Pi is amazing. That website should be open sourced and explained how to setup more like that. Since I will be relying on the Pi for lights, heat, other sensors in the house, I would like it to be reliable to say the least. So the first test is to let the Pi run without any other programs on it and check how long it is running without crashing. It turns out that I had to restart several times to access the Pi as it kept dropping from the network. Checked on the router for connected devices before jumping to the conclusion that Pi has crashed. Once the lights and sensors are wired to the Pi, I would want to keep the down time to a minimum and the requirement to restart the system to zero.

Windows 10 IoT on the Pi is not reliable enough to run security systems or for running extended periods. I had to switch to Raspbian and NodeJS to get a reliable system. The NodeJS site has been up and running since a week without any problems.

The actual wiring details and setup along with code to control lights in the house will follow.

 

Namaste

Nrupal

 

Running Silverlight Application in a Console App

Silverlight is officially dead. There was a time, though brief, when Silverlight was the choice to develop new UI apps. Silverlight was the natural choice when UI had to be browser independent, platform agnostic and be able to develop using the goodness of the .NET Framework.

What happens to all the applications when a framework dies?

They are either re-written or still supported by until they have served their purpose. When there is a lot of business logic stuck in the Silverlight Application, how do we re-use this?

I happened to come across a situation where the Silverlight application generates binary data files which can be read or updated by the Silverlight application only. We do not need the UI to come up, we need just the data to be accessible from a console application if possible. Can we use a library built with Silverlight framework in a Console application being built in the full .NET Framework? The answer turns out to be Yes!

App Domains to the rescue.

.NET Framework has an amazing feature of AppDomains, which allow us to set boundaries and sandbox applications. It is possible to build a console app referencing Silverlight libraries and then running it in an AppDomain so that we can switch the framework Dlls at runtime.

If the Silverlight application uses third party libraries, all those need to be dropped into the bin folder and loaded into the App Domain.

There will be warnings during compile time complaining about mismatch of the System.dll and System.Windows.dll versions. Ignore these warnings and switch the Dlls with the ones from Silverlight runtime when starting the AppDomain.

To run the SL app in Console app, we will need two Console Applications. The first one will be run in the normal .NET Framework and is responsible for triggering the AppDomain which will load the required Silverlight libraries for the second console application which contains all the BL required to access the SL app.

The most important thing is to ensure that the correct version of System.dll and System.Windows.dll are loaded into the AppDomain at runtime.

 

Namaste.

Nrupal.