<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mohammed Khalid Shaik</title><link>https://moknshaik.com/</link><description>Recent content on Mohammed Khalid Shaik</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 27 Jul 2026 00:00:00 -0500</lastBuildDate><atom:link href="https://moknshaik.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>Enterprise Document Conversion API</title><link>https://moknshaik.com/projects/document-conversion-api/</link><pubDate>Wed, 01 Jul 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/projects/document-conversion-api/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;
&lt;p&gt;Document conversion ran synchronously: a caller uploaded a file, held the connection open, and waited for the conversion to finish before getting a response. For anything but the smallest files that meant blocking for more than fifteen minutes per file, which made the API unusable for any workflow that needed to convert more than one document at a time or run unattended.&lt;/p&gt;
&lt;h2 id="constraints"&gt;Constraints&lt;/h2&gt;
&lt;p&gt;This was an enterprise, multi-tenant context, so a few things were non-negotiable rather than nice-to-haves:&lt;/p&gt;</description></item><item><title>Managed Analytics Platform</title><link>https://moknshaik.com/projects/managed-analytics-platform/</link><pubDate>Mon, 01 Jun 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/projects/managed-analytics-platform/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;
&lt;p&gt;Standing up an isolated analytics environment — a SAS Studio pod and its supporting services, scoped to one user or team — was a manual process that took days. Someone had to provision compute, wire up storage, configure access, and confirm everything came up correctly, all by hand, before an analyst could start working.&lt;/p&gt;
&lt;h2 id="constraints"&gt;Constraints&lt;/h2&gt;
&lt;p&gt;The users were pharmaceutical clients, which shaped what &amp;ldquo;done&amp;rdquo; meant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Access control and audit-friendly operations.&lt;/strong&gt; Every environment had to be attributable to a specific request, and every state change had to be something you could account for after the fact, not just something that happened silently in a cluster.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes state drifts from database intent.&lt;/strong&gt; The database is the source of truth for what &lt;em&gt;should&lt;/em&gt; exist; the cluster is the source of truth for what &lt;em&gt;does&lt;/em&gt; exist. Left alone, those two views diverge — a pod dies, a manual &lt;code&gt;kubectl&lt;/code&gt; edit lands, a partially-applied change gets stuck — and nothing notices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;p&gt;Each environment carries an explicit operational state — stored in the database rather than inferred from cluster objects — moving through phases such as requested, provisioning, ready, and error as it&amp;rsquo;s stood up, used, and torn down. A scheduled reconciliation loop, built on APScheduler, runs on an interval and compares the database&amp;rsquo;s requested state against what the cluster actually reports, applying whatever changes are needed to close the gap. Failure is modeled the same way as everything else: a failed apply moves the environment into an explicit error state that the next reconciliation pass picks up and retries, instead of raising an exception that some human has to notice and clear by hand. The diagram below illustrates the shape of that loop:&lt;/p&gt;</description></item><item><title>Promotion Approval Workflow</title><link>https://moknshaik.com/projects/promotion-approval-workflow/</link><pubDate>Fri, 01 May 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/projects/promotion-approval-workflow/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;
&lt;p&gt;Promotions went through a manual approval process, and promotion-duration limits — how long a discount was allowed to stay active — weren&amp;rsquo;t systematically enforced. That combination meant approvals were slow and inconsistent, and promotions could run longer than intended without anyone catching it until the impact had already been felt.&lt;/p&gt;
&lt;h2 id="constraints"&gt;Constraints&lt;/h2&gt;
&lt;p&gt;The workflow had to fit into systems that already existed rather than replace them: approvals, pricing, and promotion data all lived in other tools, so the new workflow had to integrate with them over their existing REST APIs rather than becoming a new system of record that everything else had to migrate to.&lt;/p&gt;</description></item><item><title>Production LLM Agent Runtime</title><link>https://moknshaik.com/projects/llm-agent-runtime/</link><pubDate>Mon, 20 Jul 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/projects/llm-agent-runtime/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;
&lt;p&gt;An agent runtime that writes files and executes tools on a user&amp;rsquo;s behalf needs verifiable trust boundaries — a way to know that what an agent is about to write is safe, that what it claims to have verified was actually verified, and that a stub implementation quietly masquerading as a real one gets caught before it ships.&lt;/p&gt;
&lt;h2 id="constraints"&gt;Constraints&lt;/h2&gt;
&lt;p&gt;Two things shaped the work. First, the CLI is used non-interactively — in scripts and pipelines — so it needs a stable exit-code contract that callers can depend on rather than parsing output text to guess whether something succeeded. Second, this is a large, multi-contributor codebase, and a large multi-contributor codebase invites plausible-looking stubs: code that has the right shape and passes a shallow review but doesn&amp;rsquo;t actually do the thing it claims to.&lt;/p&gt;</description></item><item><title>Essentials of Production in Python Applications</title><link>https://moknshaik.com/writing/essentials-of-production-python/</link><pubDate>Mon, 27 Jul 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/writing/essentials-of-production-python/</guid><description>&lt;p&gt;
 Machine learning (ML) is revolutionizing industries with innovative and efficient solutions. However, many online tutorials only cover basic or intermediate ML development, lacking comprehensive guidance for productionizing and commercializing these technologies. This article outlines a structured approach to creating high-quality, production-grade ML applications.
&lt;/p&gt;

&lt;h2&gt;Components of Production-Grade ML Applications&lt;/h2&gt;

&lt;section id="creating-projects"&gt;
 &lt;h2&gt;Creating Projects Using Poetry&lt;/h2&gt;
 &lt;p&gt;Poetry is a tool for dependency management and packaging in Python. It allows you to define project dependencies, manage virtual environments, and package your projects for distribution.&lt;/p&gt;</description></item><item><title>The Real Leverage Problem: AI in Software Development</title><link>https://moknshaik.com/writing/real-leverage-problem-ai-in-software-development/</link><pubDate>Mon, 27 Jul 2026 00:00:00 -0500</pubDate><guid>https://moknshaik.com/writing/real-leverage-problem-ai-in-software-development/</guid><description>&lt;p&gt;The hardest problem in applying AI isn&amp;rsquo;t capability — it&amp;rsquo;s classification. Specifically, identifying which problems are &lt;strong&gt;probabilistic&lt;/strong&gt; versus &lt;strong&gt;deterministic&lt;/strong&gt;, and then among the probabilistic ones, which are worth the cost of AI involvement.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-deterministic-trap-in-software-architecture"&gt;The Deterministic Trap in Software Architecture&lt;/h2&gt;
&lt;p&gt;Take software architecture. The system has to be airtight — no leaks, no ambiguity. And given the number of times an application runs in production, any probabilistic error that AI could make while architecting is essentially guaranteed to surface. Race conditions, null pointers, memory leaks — if the probability is non-zero and the system runs long enough, it&amp;rsquo;s not a matter of &lt;em&gt;if&lt;/em&gt;, it&amp;rsquo;s &lt;em&gt;when&lt;/em&gt;.&lt;/p&gt;</description></item></channel></rss>