मुझे पता था एजेंसियों को क्या चाहिए—इसलिए मैंने Day 2 पर Multi-Tenancy बनाया
20 साल एजेंसियों में काम करने के बाद, मुझे पता था कि multi-tenant architecture इंतज़ार नहीं कर सकता—तो Day 2 पर, सिर्फ एक काम करने वाले AI agent के साथ, मैंने अपनी development complexity को तीन गुना बढ़ा दिया ताकि भविष्य में rewrite से बचा जा सके।
21 अगस्त, 2025। STRAŦUM बनाने का Day 2।
मैं अपनी डेस्क पर बैठा था — एक काम करने वाला AI agent (Business Strategy), basic authentication, और एक बहुत सरल data model। कॉफी ठंडी हो रही थी। मुझे बिल्कुल पता था कि मैं किसके लिए बनाना चाहता हूँ: SMEs जिन्हें AI marketing की मदद चाहिए, और agencies जो इसे कई clients में इस्तेमाल कर सकें।
दोनों audiences। Day 1 से।
20 साल एजेंसी साइड पर काम करने के बाद, मैं समझता था कि एजेंसियों को वास्तव में क्या चाहिए — चमकदार marketing version नहीं, बल्कि 10-15 clients को अलग-अलग strategies, अलग-अलग brand guidelines, अलग-अलग सब कुछ के साथ manage करने की messy reality। मुझे यह भी पता था कि SMEs को सस्ती strategic help की सख्त ज़रूरत है।
लेकिन Day 2 पर, अपने सरल data model को देखते हुए, मुझे एक असहज बात एहसास हुई: दोनों audiences के लिए बनाने का मतलब था multi-tenant architecture बनाना। अभी। बाद में नहीं।
दिन के अंत तक, मैंने एक ऐसे फैसले के लिए commit कर दिया जो मेरी development complexity को तीन गुना बढ़ा देगा और मेरी timeline हफ्तों बढ़ा देगा।
मैंने Day 2 से multi-tenant architecture बनाया।
क्या यह ambitious था या पागलपन? सच कहूँ, मुझे यकीन नहीं था। अब भी 100% यकीन नहीं है। लेकिन यहाँ कहानी है कि क्यों वो फैसला — लगभग बिना किसी working product के लिया गया — मेरे सबसे महत्वपूर्ण technical choices में से एक साबित हुआ।
दोनों Audiences क्यों? 20 साल का Agency Experience
vision कभी सिर्फ SME नहीं था। शुरुआत से, मैं दो अलग-अलग audiences के लिए बनाना चाहता था:
SMEs (छोटे businesses, 1-30 कर्मचारी) — वो Strategic Co-Founder जो आप afford कर सकते हैं:
- Marketing agencies या consultants afford नहीं कर सकते
- Strategic marketing expertise नहीं है
- Learning curve के बिना quick wins चाहिए
Agencies (5-15+ clients manage करने वाली) — अपनी Strategic Capacity Scale करो, Headcount नहीं:
- कई clients में strategy work में डूबे हुए
- Consistent frameworks चाहिए जो scale हों
- Clients के बीच complete data isolation ज़रूरी
Agencies क्यों? क्योंकि मैंने 20 साल agency side पर बिताए हैं। मुझे यह दर्द पहले हाथ से पता है।
मैंने strategists को 12 clients के साथ 12 अलग-अलग brand guidelines जुगल करते देखा है, tools के बीच context copy-paste करते हुए, प्रार्थना करते हुए कि गलती से गलत client को गलत strategy न भेज दें। मैंने agencies को अच्छे लोगों को burnout से खोते देखा है क्योंकि headcount बढ़ाए बिना strategic thinking scale करने का कोई तरीका नहीं।
और सच कहूँ? मैं खुद को challenge करना चाहता था। सिर्फ SMEs के लिए बनाना सरल होता — एक user, एक organization, straightforward routing। Agencies के लिए बनाने का मतलब था multi-client dashboards, data isolation, role-based permissions, client-scoped सब कुछ।
मैं कुछ complex बनाना चाहता था। कुछ जो वास्तव में उन कठिन समस्याओं को हल करे जो मैंने दो दशकों से देखी थीं।
Day 2 का एहसास: Multi-Tenancy Retrofit नहीं किया जा सकता
Day 2 पर, अपने सरल data model को देखते हुए, मैंने यह समझा:
SME architecture (जो मेरे पास था):
```
users → campaigns → agent_outputs
```
Multi-tenant architecture (जो agencies के लिए चाहिए था):
```
organizations (SME or AGENCY)
↓
clients (agencies only)
↓
campaigns
↓
agent_outputs (with org_id AND client_id)
```
अंतर सिर्फ "कुछ columns जोड़ो" नहीं है। यह एक मूल रूप से अलग data model है।
अगर मैं पहले SMEs के लिए बनाता और बाद में agency support जोड़ता, तो मुझे करना पड़ता:
- हर existing table में `org_id` migrate करना
- पूरे database में RLS policies retrofit करना
- Client context के लिए frontend routing rewrite करना
- Multi-tenant scenarios के साथ सब कुछ re-test करना
यह feature addition नहीं है। यह rewrite है।
जितना ज्यादा मैं इंतज़ार करता, retrofit उतना महंगा होता। Day 2 सस्ता था। Day 60 दर्दनाक होता। Day 200 होता "शायद हम agencies के लिए अलग product बनाएं।"
तो मैंने फैसला किया: Day 2 से multi-tenant बनाओ, या स्वीकार करो कि agencies कभी first-class citizens नहीं होंगी।
Trade-Offs: Multi-Tenancy की असली कीमत
यहाँ वो हिस्सा है जहाँ मुझे रुककर खुद से पूछना चाहिए था: "क्या तुम्हें यकीन है? तुम्हारे पास एक काम करने वाला agent है। एक।"
लेकिन मैं नहीं रुका। इसके बजाय, मैंने पागलों की तरह SQL schemas लिखना शुरू कर दिया। Day 2 पर multi-tenancy का मतलब था ऐसी कीमतें स्वीकार करना जो किसी भी reasonable person को दोबारा सोचने पर मजबूर करें:
Cost 1: Development Complexity (3X)
हर table को `org_id` चाहिए था। Agency tables को `client_id` चाहिए था। RLS policies को दोनों filters चाहिए थे। हर query, हर API endpoint, हर frontend route — सबको multi-tenant aware होना था।
अनुमानित complexity वृद्धि: समान features के लिए 3X development time।
(Spoiler: यह वास्तव में 4X के करीब था। मैंने कम आंका। Classic me। :P)
Cost 2: बढ़ी हुई Development Timeline
Day 1 से दोनों audiences के लिए बनाने का मतलब था launch तक लंबा रास्ता। यह ऐसा दिखता था:
Timeline:
- 20 अगस्त: Building शुरू की (Day 1 से multi-tenant)
- 15 सितंबर: 4 हफ्ते, 3 agents काम कर रहे, October target
- October: 10 दिन बीमार रहा, code नहीं कर सका
- 5 नवंबर: Private Alpha launch (कुल 75 दिन)
Multi-tenancy ने क्या जोड़ा:
- Public और agency tables के बीच Schema routing
- हर table पर RLS policies (आखिर में 26 tables पर 83 हो गईं)
- हर agent के through Client context propagation
- Dual routing patterns (SME vs agency URLs)
क्या SME-only architecture के साथ तेज़ launch होता? शायद 3-4 हफ्ते तेज़। लेकिन फिर agencies आतीं तो rewrite का सामना करना पड़ता।
Cost 3: Security Requirements (ज़्यादा Risk)
SME data isolation table-stakes है। Agency data isolation mission-critical है।
जोड़ी गई Requirements:
- 26 tables पर 83 RLS policies
- Schema-level isolation (public vs agency schemas)
- हर CRUD operation के लिए Database router functions
- Comprehensive audit logging
- Multi factor authenticator option
Security complexity: SME-only से 5X ज़्यादा।
कुछ हफ्ते मैंने actual AI agent development से ज़्यादा समय Row-Level Security policies पर बिताया। इसे sink in होने दीजिए।
Cost 4: Testing Complexity (2X Test Cases)
हर feature को testing चाहिए थी:
- ✅ SME flow (सरल)
- ✅ Agency flow (client-scoped)
- ✅ Data isolation (Nike ≠ Adidas)
- ✅ Permission boundaries (क्या agencies SME data देख सकती हैं? नहीं।)
Test maintenance: दोगुना।
जानते हैं क्या मज़ेदार है? एक ही test को थोड़े अलग contexts के साथ दो बार लिखना। किसी ने कभी नहीं कहा।
---
फिर भी मैंने यह Trade-Off क्यों किया
तो सीधी बात: 3X complexity, बढ़ी हुई timeline, 5X security overhead, दोगुनी testing... और फिर भी मैंने किया?
हाँ। सोच ऐसी थी (जैसी भी थी):
कारण 1: Retrofitting एक बुरा सपना है
Day 2: लगभग कोई code नहीं लिखा। Data model अभी flexible। कोई users migrate करने को नहीं।
Day 60: 45 tables, 200k lines of code, 15 alpha users। Multi-tenancy जोड़ने का मतलब होता आधा codebase rewrite करना।
सबक: Architectural decisions समय के साथ exponentially बदलना कठिन हो जाते हैं।
Day 2 पर कीमत: ~5 घंटे data model redesign करने में।
Day 60 पर कीमत: ~200 घंटे सब कुछ refactor करने में।
मैंने companies को multi-tenancy retrofit करते देखा है। यह brutal है। आप basically उड़ते हुए plane को rebuild कर रहे हैं। यात्रियों के साथ। जो आपको पैसे दे रहे हैं।
कारण 2: मैं वास्तव में Agencies समझता हूँ
यह theoretical market research नहीं था। मैंने 20 साल agencies को बिल्कुल इस समस्या से जूझते देखा।
मुझे पता था उन्हें चाहिए:
- Complete data isolation (client 1 client 2 की strategy नहीं देख सकता)
- Client-scoped सब कुछ (brand guidelines, personas, campaigns)
- Role-based access (account managers vs strategists)
- Client presentations के लिए White-label potential
मैं यह सही से बना सकता था क्योंकि मैंने वो दर्द जिया था। यह ऐसा advantage नहीं था जिसे SME-only ship करके और "agencies बाद में जोड़ेंगे" कहकर बर्बाद करना चाहता था।
कारण 3: Challenge ही मकसद था
यह बात मैं अक्सर नहीं कहता: मैं complexity *चाहता* था।
मैं एक middle-aged founder हूँ जिसका परिवार है, कोई 22 साल का नहीं जो energy drinks और बिना नींद पर survive कर सके। अगर मैं एक साल कुछ बनाने में बिताने वाला हूँ, तो वो कुछ ऐसा हो जो मुझे challenge करे। कुछ जिस पर मुझे technically गर्व हो।
Proper data isolation, RLS policies, schema routing के साथ multi-tenant architecture — यह कठिन है। यह interesting है। यह ऐसी engineering problem है जो मुझे रात 2 बजे भी engaged रखती है।
सिर्फ SME बनाना तेज़ होता। लेकिन क्या मैं कठिन हिस्सों से गुज़रने के लिए उतना motivated होता? शायद नहीं।
कारण 4: दोनों Audiences एक-दूसरे को बेहतर बनाती हैं
SMEs और agencies competing use cases नहीं हैं। वे complementary हैं:
- Agencies product validate करती हैं: अगर agencies इस पर client data भरोसा करती हैं, तो SMEs भी करेंगे
- SMEs volume देती हैं: ज़्यादा users मतलब ज़्यादा feedback, तेज़ iteration
- Architecture दोनों के लिए काम करता है: Team accounts, role permissions, और white-label दोनों audiences के लिए काम करते हैं
दोनों के लिए बनाने का मतलब था *complete* solution बनाना, ऐसा simplified version नहीं जिससे बाहर निकल जाऊँ।
कारण 5: Future-Proofing
Agencies से भी आगे, multi-tenancy architecture ने enable किया:
- Team accounts (कई users वाले SMEs)
- Reseller partnerships
- White-label opportunities
- Enterprise sales (अगर कभी वहाँ जाना चाहें)
Option value: Multi-tenancy ने ऐसे business models unlock किए जिनकी मैं Day 2 पर कल्पना भी नहीं कर सकता था।
Implementation: Day 2 Architecture Decisions कैसे दिखे
यहाँ वो है जो मैंने 21 अगस्त को वास्तव में बनाया:
Database Schema (Core Decision)
```sql
-- Organizations table (SME or AGENCY)
CREATE TABLE organizations (
id UUID PRIMARY KEY,
name TEXT,
type TEXT CHECK (type IN ('SME', 'AGENCY')), -- Critical distinction
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Clients table (agencies only)
CREATE TABLE clients (
id UUID PRIMARY KEY,
org_id UUID REFERENCES organizations(id), -- Which agency owns this
company_name TEXT,
slug TEXT UNIQUE, -- For URL routing
created_at TIMESTAMPTZ DEFAULT NOW(),
-- Constraint: Only agencies can have clients
CONSTRAINT clients_agency_only CHECK (
(SELECT type FROM organizations WHERE id = org_id) = 'AGENCY'
)
);
-- Campaigns table (multi-tenant aware)
CREATE TABLE campaigns (
id UUID PRIMARY KEY,
org_id UUID REFERENCES organizations(id), -- Always required
client_id UUID REFERENCES clients(id), -- Required for agencies, null for SMEs
name TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Agent outputs (multi-tenant + client-scoped)
CREATE TABLE agent_outputs (
id UUID PRIMARY KEY,
org_id UUID REFERENCES organizations(id),
client_id UUID REFERENCES clients(id),
campaign_id UUID REFERENCES campaigns(id),
agent_type TEXT,
content JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
Day 2 पर Key decisions:
- हर table पर `org_id` (RLS enable करता है)
- `client_id` nullable (SMEs के पास clients नहीं)
- Organizations पर `type` discriminator (SME vs AGENCY)
- Constraint: सिर्फ agencies clients बना सकती हैं
Row-Level Security (Day 2 Planning)
```sql
-- RLS policy for campaigns (multi-tenant isolation)
CREATE POLICY campaigns_org_isolation ON campaigns
FOR ALL TO authenticated
USING (
org_id = get_user_org_id() AND
(client_id IS NULL OR client_id IN (SELECT id FROM clients WHERE org_id = get_user_org_id()))
);
```
यह policy ensure करती है:
- ✅ Users सिर्फ अपनी organization के campaigns देखें
- ✅ Agency users SME campaigns न देख सकें
- ✅ Agencies एक-दूसरे के clients न देख सकें
कीमत: Day 2 पर 5 initial RLS policies लिखीं। Launch तक 83 हो गईं।
URL Routing (Day 1 से Multi-Tenant)
```typescript
// Frontend routing structure (planned Day 2)
// SME routes (simple)
/campaigns/:campaignId
/agents/strategy/:campaignId
// Agency routes (client-scoped)
/clients/:clientSlug/campaigns/:campaignId
/clients/:clientSlug/agents/strategy/:campaignId
```
इस URL structure ने enable किया:
- ✅ हर URL में Client context (agencies)
- ✅ SME और Agency flows के बीच clear separation
- ✅ Bookmarkable, shareable URLs
- ✅ Per client Analytics tracking
Results: क्या यह सार्थक रहा?
Launch date: 5 नवंबर, 2025 (शुरुआत से 75 दिन)
Multi-tenancy से development overhead:
- Schema design और migrations
- 26 tables पर 83 RLS policies
- Database router functions
- Dual routing patterns (SME vs agency URLs)
- Client context propagation
Claude Code और Gemini 2.5 Pro के साथ, actual coding solo से तेज़ हुई। लेकिन RLS policies debug करना जो *काम करनी* चाहिए लेकिन नहीं करतीं? रात 2 बजे AI assistance के बावजूद यह दर्दनाक ही रहता है।
अब मेरे पास क्या है:
- Organizations के बीच complete data isolation
- Client scoping के साथ agency-ready architecture
- 26 tables पर 83 RLS policies
- Schema-level routing (public vs agency schemas)
- Day 1 से built-in White-label potential
- एक product जो वास्तव में SMEs और agencies दोनों की सेवा कर सके
क्या यह सार्थक था?
मुझसे 6 महीने बाद पूछिए जब actual customers actual पैसे दे रहे होंगे। अभी मैं 15+ users के साथ private alpha में हूँ, अभी भी सीख रहा हूँ कि क्या काम करता है और क्या नहीं।
लेकिन मुझे यह पता है: मेरे पास दोनों audiences को ठीक से serve करने का architecture है। अगर मैं SME-only बनाता और बाद में agencies जोड़ने की कोशिश करता, तो अभी 3 महीने के rewrite का सामना कर रहा होता। इसके बजाय, मैं product-market fit पर focused हूँ, architectural debt पर नहीं।
यह सही trade-off लगता है।
Framework: Multi-Tenancy कब जल्दी बनानी चाहिए
हर product को Day 2 पर multi-tenancy नहीं चाहिए। यह framework इस्तेमाल करें:
Multi-Tenancy जल्दी बनाएं अगर:
✅ Target market में agencies/resellers शामिल हों (per customer ज़्यादा value)
✅ Data isolation critical हो (legal/compliance requirements)
✅ B2B जहाँ team accounts likely हों (Slack, Figma model)
✅ White-label opportunities हों (reseller GTM strategy)
✅ Enterprise sales possible हो (Day 1 से multi-client चाहिए)
Multi-Tenancy जल्दी Skip करें अगर:
❌ B2C product (individual users, कोई organizational hierarchy नहीं)
❌ MVP को speed चाहिए (पहले product-market fit test करें)
❌ कोई team/agency use case नहीं (single-player tools)
❌ Simple data model (बाद में org_id जोड़ना आसान)
❌ Solo founders जो सीख रहे हैं (complexity बहुत ज़्यादा हो सकती है)
सीखे गए सबक: अपनी Expertise के लिए बनाओ
1. Audience Knowledge से Architecture Drive होना चाहिए
Hypothetical users के लिए design मत करो। उन users के लिए design करो जिन्हें तुम वास्तव में समझते हो।
मेरा advantage: 20 साल का agency experience मतलब मुझे ठीक-ठीक पता था agencies को क्या चाहिए — data isolation, client scoping, role-based access।
गलत approach: "चलो पहले SMEs के लिए बनाते हैं और agencies बाद में जोड़ेंगे जब उन्हें समझ लेंगे"
सही approach: "मैं पहले से agencies समझता हूँ। अभी बनाओ जब सस्ता है।"
अगर आपके पास किसी market segment में deep expertise है, तो इसका इस्तेमाल करें। "Simpler first" के लिए defer मत करें।
2. Early Complexity Late Refactoring से बेहतर है
Day 2 architecture cost: 5 घंटे data model redesign।
Day 60 architecture cost: 200 घंटे सब कुछ refactor करने में।
40X अंतर।
अगर आपको 80% यकीन है कि multi-tenancy चाहिए होगी, तो जल्दी बनाओ। जितना ज़्यादा इंतज़ार करोगे, उतना महंगा होगा।
3. Technical Challenge Motivation हो सकती है
यह personal है: मैं कुछ कठिन बनाना *चाहता* था।
RLS policies, schema routing, और proper data isolation के साथ multi-tenant architecture — यह interesting engineering है। इसने मुझे कठिन हिस्सों में engaged रखा।
अगर आप solo founder हैं, तो motivation को underestimate मत करो। कुछ ऐसा बनाना जो challenge करे शायद तेज़ ship करने से ज़्यादा कीमती हो।
4. Architecture Business Models Enable करता है
Multi-tenancy सिर्फ technical decision नहीं था। इसने enable किया:
- Agency pricing tiers (जब भी pricing figure out करूँ)
- White-label opportunities
- Enterprise sales potential
- SMEs के लिए Team accounts
Architecture = code form में business optionality।
5. Solo Founders Multi-Tenant बना सकते हैं
"Multi-tenancy एक person के लिए बहुत complex है" → गलत।
Modern tools (Supabase RLS, database functions, AI-assisted development) के साथ, solo founders enterprise-grade multi-tenancy बना सकते हैं।
Time cost: 70 दिन (part time)।
आपको क्या मिलता है: Real data isolation, कोई hack नहीं जिसका बाद में पछतावा हो।
अगर आप दोनों audiences को seriously serve करना चाहते हैं तो यह worth it है
अंतिम विचार
Day 2 यह जानने के लिए बहुत जल्दी था कि STRAŦUM सफल होगा या नहीं। मेरे पास एक agent था। कोई users नहीं। कोई validation नहीं। बस 20 साल का agency experience जो मुझे बता रहा था कि agencies को वास्तव में क्या चाहिए।
बढ़ी हुई timeline कभी-कभी दर्दनाक लगती थी। दूसरों की launches देखना जबकि मैं अभी भी RLS policies debug कर रहा था और database router functions लिख रहा था? Frustrating शुरुआत भी नहीं बताता। ऐसे दिन थे जब मैंने सवाल किया कि complexity इसके लायक है या नहीं।
लेकिन अब मुझे यह पता है: Day 1 से दोनों audiences के लिए बनाना सही call था। किसी clever unit economics calculation की वजह से नहीं — मुझे अभी भी नहीं पता कि कौन सी pricing काम करेगी। लेकिन इसलिए कि मेरे पास दोनों audiences को ठीक से serve करने का architecture है।
Day 2 पर multi-tenancy सिर्फ technical decision नहीं था। यह उन users के लिए बनाने पर एक bet था जिन्हें मैं वास्तव में समझता हूँ, hypothetical users पर नहीं जिन्हें बाद में figure out करता।
क्या वो bet pay off हुई?
मैं अभी 15+ users के साथ Private Alpha में हूँ। मेरे पास जवाब अभी नहीं है। लेकिन इतना कह सकता हूँ: जब कोई agency पूछती है "क्या हम इसे proper data isolation के साथ कई clients के लिए इस्तेमाल कर सकते हैं?" मैं हाँ कह सकता हूँ। मुझे "हम उस पर काम कर रहे हैं" नहीं कहना पड़ता।
यह सही foundation लगता है।
समय बताएगा कि मैं ambitious था या बस ज़िद्दी। (शायद दोनों थोड़ा-थोड़ा, सच कहूँ।) :)
क्या आपने कभी ऐसा architecture bet जल्दी लिया जो उस समय बहुत ambitious लगा — और क्या वो pay off हुआ? मुझे आपकी कहानी सुनना अच्छा लगेगा।
शुभकामनाओं सहित,
Chandler
STRAŦUM architecture series: यह Day 2 का फैसला बस शुरुआत थी। Day 67 पर, मुझे पूरी multi-tenancy layer rebuild करनी पड़ी जब एक security audit ने architectural flaws reveal कीं। फिर आईं lost navigation context से 31 blank screens, और एक खोज कि मेरा database technically correct लेकिन 296x too slow था।
---
Multi-tenant SaaS बना रहे हैं? STRAŦUM का architecture Day 1 से SME और Agency दोनों customers को support करता है। Alpha access request करें https://stratum.chandlernguyen.com/request-invitation पर
---
अभी भी सीख रहा हूँ कि architecture decisions असल में business decisions हैं। अभी भी RLS policies debug कर रहा हूँ। अभी भी Day 2 के choices पर सवाल कर रहा हूँ (लेकिन अब कम)। और building adventures https://www.chandlernguyen.com/ पर।
---





