Amazon LP Story Bank — Spoken Rehearsal v2

Adarsh Vishwakarma · SDE I AUTA · Bar Raiser Leftover Hour

PROBING QUESTIONS

MASTER STORY INVENTORY

CodeReal ExperienceBest LPs
Y1Inherited SQL-RAG chatbot after teammate leftOwnership, Dive Deep, Bias for Action
Y2data:null / state-format failure debuggingDive Deep, Learn, Are Right
Y3MySQL-oriented SQL against PostgreSQL + validationAre Right, Highest Standards, Dive Deep
Y4Structured JSON + ElementRenderer reuseInvent, Backbone, Earn Trust, Frugality
Y5RLS + RBAC + SET ROLE + fail-closedOwnership, Highest Standards, Earn Trust, Scale
Y6Cache-aside / Redis −35% vs in-process MapFrugality, Dive Deep, Are Right
Y7Client review cycles / Tally → RDS iterationsCustomer Obsession, Earn Trust, Deliver
Y8Deterministic dashboards + report builder + ECSDeliver, Ownership, Frugality
Y9Git conflicts → branch separationEarn Trust, Hire, Earth
I1DeepQuery LangGraph multi-stage researchLearn, Think Big, Invent, Scale
I2BRD Hybrid RAG + Neo4j + Azure SearchInvent, Learn, Backbone, Dive Deep
I3LangSmith / evals / not demo-onlyHighest Standards, Dive Deep
H1GStreamer 60 FPS operator videoBias, Invent, Deliver, Earth
H2ZED 2 perception into costmap — not the plannerOwnership, Learn, Dive Deep
S1StratifyLabs platform + marketplaceThink Big, Invent, Frugality
S2GiftedBooks grounded RAG + PYQCustomer, Earn Trust, Think Big
S3Argus 73→89 mAP then 20+ camerasAre Right, Highest Standards, Scale, Deliver
HACK8 hackathons; 1st / Best Project / runner-upBias, Deliver
M1IEDC Tech Team member pairingHire, Earth
C1Freelance/client apps + Discord automationCustomer, Ownership

1. CUSTOMER OBSESSION

Story 1 — GiftedBooks: Doubt Collapse + PYQ (STRONGEST)

Speak this live

"The customer was a student whose study loop was broken — they could find a chapter, get stuck on a derivation, and then lose hours waiting for a human to unstick them. I did not start from 'let me put an LLM in VR.' I started from that wait. I built GiftedBooks at giftedbooks.study as a VR learning suite. The core design had two separate jobs. First, a PDF-upload RAG path — the student authenticates, uploads their own material, I chunk and embed it once with user and document metadata, and at question time I retrieve a small user-scoped set and generate the answer from those chunks on a sub-300ms API path. Second, a PYQ analysis engine that ranked observed past-paper topics as deterministic analytics — not an LLM guessing the exam. I rejected cross-user retrieval because mixing embeddings without isolation would have answered one student's doubt from another student's notes, which looks smarter in a demo but is a trust failure. In our user testing, doubt resolution that used to take hours landed in a 3–10 minute window, reading efficiency went up 35%, session engagement up 50%, and we saw 2.5x faster content comprehension. The trust move was grounding plus isolation, not a smarter generic tutor."

PROBING QUESTIONS

Q: Who was the customer, and what did they actually need?

"The customer was the student in the study loop, not 'education' as a market. They needed three things in one sitting — know which topics past papers actually used, read those topics, and get a stuck question unstuck without waiting until evening. A chat box next to a PDF does the third badly if it is not grounded in their file, and it does the first dishonestly if the model invents a syllabus."

Q: How did you know students needed this? Did you talk to them?

"The product was designed around a workflow I could watch — find material, understand it, resolve a doubt. PYQ ranking came from the observation that students treat every chapter as equal until an exam punishes them. The 35%, 50%, 2.5x, 3–10 min are user-testing results we reported for the project. If they want the protocol or sample size, I say I need to pull that — I do not invent it."

Q: Why not a generic ChatGPT wrapper?

"A generic model does not know which PDF the student is holding. It can quote a formula from a different edition or a different board. That is a trust failure. Whole-book prompting also blows the latency I was targeting and still is not isolation. I wanted their file as the evidence set and PYQ as analytics over papers, not as the model predicting the exam."

Q: What did you refuse to ship because it would have broken trust?

"Cross-user retrieval. Mixing embeddings without user and document metadata would have answered one student's doubt from another student's notes. That can look smarter in a demo and still be the wrong product. I also refused to let the LLM own PYQ predictions — ranking observed topics is a different job from inventing the paper."

Q: Your GitHub README says AegisAI. Which product is this?

"That is a README mismatch on the current GitHub copy. The resume and giftedbooks.study are GiftedBooks — VR labs, PDF RAG, PYQ. AegisAI is a different personal-safety project. I would fix the README. I do not blend features to make one story sound larger."

Q: What would you change if you rebuilt it?

"I would add a citation-facing eval so 'grounded' is measurable, not hoped. I would fix the README on day one. I would write down the user-testing protocol so 35% and 3–10 min have a denominator I can defend."

Q: How is your RAG path sub-300ms?

"Small retrieval set — I scope retrieval to user and document metadata, so the vector search is over a narrow partition, not all users' embeddings. Embedding is done once at upload time. At query time it is retrieval plus generation, and the generation call is the dominant cost. The p90 under 300ms is the API response time we measured."

Story 2 — Ylogx SQL-RAG: Analysts Who Could Not Write SQL (BACKUP)

Speak this live

"At Ylogx, a lot of the people who needed a number were not the people who could write a join. They still had to answer 'what happened to this account this month' without opening a SQL client and without seeing another organization's rows. I worked on a LangChain SQL-RAG chatbot where FastAPI generated candidate SQL from schema context and prompts, and NestJS executed that SQL on a per-request transaction as the caller's non-owner role, with RBAC on feature and table and RLS on rows. The response was structured — chart type, data, dimensions, metrics — so the same ElementRenderer the report builder used could draw it. The resume says that chatbot improved analyst data-retrieval productivity by 65%. I treat that as a project-level observed productivity outcome, not a controlled experiment. I am not claiming LangGraph on Ylogx — that is IQVIA. I am not claiming the model was allowed to SET ROLE."

PROBING QUESTIONS

Q: What does +65% actually mean?

"Analyst data-retrieval productivity on the resume. Before the chatbot, an operator who needed a number either learned SQL, waited for someone who knew SQL, or did not get the number. The chatbot collapsed that wait time. The 65% is how much faster data retrieval became across the product — I treat it as a workflow improvement, not a controlled A/B test. If they ask baseline hours, I say that methodology is something I need to lock — I will not invent a time-and-motion study."

Q: How do you keep customer trust if the model writes SQL?

"Trust is not 'the English sounded right.' Nest executes as the caller. RLS filters rows — it does not reject a legal SELECT. Missing GRANT is a permission error. App hasTableAccess is HTTP 403. The model proposes; the engine constrains. There is also a SELECT-only validator and a table allowlist before execution."

Q: Did the customer ever get a wrong chart?

"Yes — data:null when rows existed, because a state-format mismatch broke the downstream parser. And MySQL-oriented SQL against PostgreSQL. Those are my Dive Deep / Are Right stories. A wrong empty state is a customer failure even when the warehouse is full."

Q: What did you learn about customer obsession from this project?

"That correctness is the customer experience. A chatbot that returns an empty chart when data exists is worse than one that says 'I could not answer.' The customer lost trust in the tool even though the database was fine."

Story 3 — Ylogx Client Review Cycles (Y7) (BACKUP)

Speak this live

"At Ylogx, the product was not built in isolation. There were recurring client review and demo cycles, and client developers were involved in parts of the Tally ERP to RDS workflow and downstream notifications. Requirements evolved through these interactions — they were not perfectly specified upfront. My responsibility was to turn feedback from those iterations into working product changes without destabilizing the existing system. I treated the client feedback as the actual product signal. I would first understand what workflow was causing friction, then translate the feedback into a concrete engineering change instead of blindly implementing a UI request. Changes had to fit into the existing architecture — reports, AI analysis, dashboards, Tally ingestion — rather than become isolated patches. I used demos to validate the direction before continuing deeper implementation. The system went through development, QA, client review and handoff with repeated iterations rather than a one-shot release."

PROBING QUESTIONS

Q: Give me a specific example of customer feedback changing your design.

"Their recurring feedback exposed where users were struggling with analysis and reporting. That influenced us toward a more structured response flow and reusable rendering rather than treating the chatbot as a raw text interface. The ElementRenderer reuse decision came from observing that operators wanted consistent visual output across the chatbot and the report builder."

Q: What did you tell the client when you could not implement something immediately?

"I would explain what was technically needed, how it fit into the existing architecture, and what the timeline looked like. I did not say 'that is not possible' — I said 'here is what it takes and here is when we can have it.'"

Q: How did you prioritize competing client requests?

"By impact on the actual workflow. If a request affected the primary data-retrieval path — chatbot, dashboards, reports — it took priority over cosmetic changes. I also prioritized based on how many users were affected versus how loud one user was."

2. OWNERSHIP

Story 1 — Inherited SQL-RAG Chatbot After Teammate Left (Y1) (STRONGEST)

Speak this live

"At Ylogx, around November–December 2024, a teammate who had been working on the SQL-RAG chatbot path left the project. The chatbot was partially built — it could take a natural language question, generate SQL through a FastAPI service, and return something — but it had issues. Generated SQL was sometimes MySQL-oriented syntax hitting a PostgreSQL database, state handling was inconsistent, and the response path just dumped raw data instead of structured output the frontend could render. Nobody was assigned to pick it up. I took ownership because the product needed this path working — operators who could not write SQL needed answers, and the chatbot was the only way they were going to get them without learning Postgres. I spent the first few days reading the existing code end-to-end, understanding the FastAPI prompt pipeline, the Nest execution path, and where things broke. I reproduced the system locally and traced the complete path: LangChain state, dynamic prompts, schema lookup, SQL generation, backend execution, and final response. I fixed the dialect mismatch by adjusting the schema context and adding validation. I rebuilt the response format into structured JSON — chart type, data, dimensions, metrics — so the same ElementRenderer the report builder used could render chatbot answers. I wired the execution through the RLS transaction so the chatbot could not bypass tenant isolation. The resume says 65% productivity improvement. I treat that as a product-level outcome from the entire chatbot path I took over and shipped."

PROBING QUESTIONS

Q: Why did you take this on instead of waiting for someone to be assigned?

"Because the product needed it. The operators could not wait for a staffing decision. The chatbot was half-built and the knowledge about it was walking out the door with the person who left. If I waited, we would have had to rebuild context from scratch."

Q: What was the hardest part of inheriting someone else's code?

"Understanding the assumptions baked into the prompt pipeline. The original developer had written the schema context assuming MySQL syntax — things like backtick quoting and LIMIT syntax that PostgreSQL handles differently. That was not obvious from reading the code; it only showed up when I looked at the actual generated SQL against the actual database."

Q: What did you personally change versus what was already there?

"The FastAPI prompt service existed. The LangChain chain structure was already there. I changed the schema context to be PostgreSQL-aware, added validation on the generated SQL, rebuilt the response path from raw data dump to structured JSON with chart type and dimensions, wired execution through the RLS per-request transaction, and added logging at service boundaries so I could troubleshoot systematically. I did not rewrite the entire system from scratch."

Q: How long did it take you to become productive?

"A few days of reading and tracing before I started making changes. I deliberately learned the unfamiliar pieces before changing them. I built a system map from the request path rather than learning every library in isolation."

Q: What would you do differently?

"I would have added automated SQL validation tests from day one — a suite of known-good queries and known-bad queries that run against the actual database dialect. That would have caught the MySQL-oriented SQL much earlier."

Q: Why is this Ownership rather than just doing your job?

"Because I treated the security boundary, the response format, and the prompt pipeline as my responsibility rather than assuming someone else would eventually fix them. The chatbot was not assigned to me. I saw a gap and filled it."

Story 2 — RLS + RBAC: Isolation on a Shared Warehouse (Y5) (STRONGEST)

Speak this live

"At Ylogx, operators who are not SQL people query one Postgres warehouse through dashboards, report builder, and a chatbot that writes SQL. A demo that returns rows is not done — a legal JOIN or a model-written WHERE organization_id = 'ORG_B' can still be a cross-tenant read if the engine runs as table owner. I owned isolation on the bot and reporting path. Intern, not a named security team. Done meant: the caller sees only the caller's rows, including SQL the model wrote. RBAC first — JWT says who you are, features say which product surfaces you may open, policies say which fact tables you may touch. RLS second, in Postgres, as a non-owner — every warehouse SELECT runs on a per-request transaction where I SET ROLE to that user's db_role_name or fail-closed to rls_no_access, and I set_config the organizationId from the JWT, never from the SQL text. Generated policies are USING tenant_key equals current_setting, not trust the WHERE. If ORG_A's session asks for ORG_B, Postgres still runs the SELECT — ORG_B rows fail USING and are invisible. Empty result is the success path. Permission denied is missing GRANT. HTTP 403 is Nest table/feature RBAC before the engine."

PROBING QUESTIONS

Q: What part of RLS/RBAC did YOU implement?

"I implemented the Nest integration and the DDL generator — rls.middleware.ts for per-request transaction, SET ROLE, set_config, fail-closed rls_no_access. policyManagement.service.ts for CREATE ROLE, GRANT SELECT, CREATE POLICY, ENABLE ROW LEVEL SECURITY. roleManagement.service.ts for CREATE ROLE db_role NOLOGIN and GRANT policyRole TO db_role. Query execution runs on req.dbTransaction. I did not hand-maintain warehouse SQL in this repo."

Q: What does PostgreSQL itself do when the SQL says ORG_B?

"Postgres does not inspect 'this WHERE asked for ORG_B therefore deny.' It checks GRANT — no SELECT means permission denied, that is Postgres RBAC. If SELECT is granted and RLS is enabled and the session is not a bypasser, it applies USING. Rows where USING is false are invisible. The statement succeeds. Empty result is not a reject. The caller's WHERE runs on already-visible rows — it cannot unhide a row that failed USING."

Q: Give me one concrete RLS policy you created.

"If sales is in allowed modules and has the organizationId column: CREATE POLICY policy_organization_salesview_timestamp_sales_policy ON sales FOR SELECT TO that policy role USING true AND organizationId equals current_setting app.organizationId cast to uuid. The name is generated — policy underscore scope underscore sanitizedName underscore Date.now. I do not remember a production policy name. If sales is not in the module list, USING false."

Q: If you did not ship FORCE ROW LEVEL SECURITY, what is the gap?

"FORCE RLS means even the table owner cannot bypass. This generator emits ENABLE but not FORCE. Owner connections bypass. A proper finish also needs one real tenant column on every fact table and no owner reads of facts. If they open GitHub I will name which of those are gaps rather than guess."

Q: What is rls_no_access?

"A Postgres role with NOLOGIN and no GRANTs on any fact table. If the middleware cannot find a valid db_role_name for the user, it SET ROLEs to rls_no_access. Any SELECT on a fact table immediately fails with permission denied. That is the fail-closed path — rather than falling back to the owner role and bypassing RLS."

Q: What is the difference between RLS and RBAC in your system?

"RBAC answers 'may this user call this API and touch this table.' RLS answers 'which rows are visible in Postgres for this session.' RBAC is Nest middleware — JWT roles, features, hasTableAccess. RLS is Postgres policies — USING clauses that filter rows based on session GUCs. They are complementary layers, not alternatives."

Story 3 — Rover Perception Ownership (H2) (BACKUP)

Speak this live

"The overall Mars rover for Team Horizon was a team effort — mechanical, electrical, and software. My ownership was specifically the perception and video portions. I owned the GStreamer real-time video pipeline from the rover to the operator, and the ZED 2 integration for environmental perception — stereo depth, spatial mapping, and feeding that perception data into the navigation stack through the costmap. I did not own the predictive planner or the complete autonomous navigation system. When someone asks 'did you build the rover,' my answer is 'I built the perception-to-operator side and integrated with the navigation stack.' That distinction is important because robotics was a team effort and I will not take credit for components I did not implement."

PROBING QUESTIONS

Q: Did you build the planner?

"No. I integrated the perception information into the navigation/costmap pipeline; I did not own the predictive planning implementation. Another team member owned the higher-level planning logic."

Q: Why is this Ownership?

"Because I treated my module's integration with the rest of the system as my responsibility. I did not just get frames from the camera and throw them over the wall. I made sure the perception output was in the format and at the rate the navigation stack needed."

3. INVENT AND SIMPLIFY

Story 1 — Structured JSON + ElementRenderer Reuse (Y4) (STRONGEST)

Speak this live

"At Ylogx, the chatbot originally returned answers as a blob of text or raw table data. The report builder had its own rendering pipeline — ElementRenderer — that already knew how to draw bar charts, line charts, tables, and other visualizations from a structured contract. Two separate rendering systems for the same data was maintenance overhead and inconsistent UX. I proposed that the chatbot's response format should be structured JSON — chart type, data array, dimensions, metrics — matching the same contract ElementRenderer already consumed. That meant any visualization the report builder could render, the chatbot could now return. I had to convince the team this was worth the refactoring effort because the existing text dump technically worked. I built a small prototype showing the same answer rendered both ways, and the difference was obvious — the structured version could be a chart the operator could put next to a deterministic KPI tile without re-interpreting raw rows. We shipped the structured response path. This eliminated a whole class of frontend inconsistency and meant that improvements to the renderer automatically improved both the report builder and the chatbot."

PROBING QUESTIONS

Q: What did you simplify exactly?

"Two rendering pipelines became one. The chatbot stopped being a special case with its own visualization logic and started speaking the same contract as the report builder. One renderer, one contract, two consumers."

Q: How did you convince the team?

"I built a prototype. Side-by-side comparison of the raw dump versus the structured render was enough. The data was the argument, not the preference. I did not argue theoretically — I showed a working example."

Q: What was the risk?

"If the chatbot's structured output did not match ElementRenderer's contract precisely, we would get rendering failures on the chatbot path without affecting the report builder. So I had to make sure the JSON contract was exact — chart type, data array dimensions, metric names."

Q: Why not just create a new chart library?

"Because the existing abstraction already solved a large part of the problem. A second renderer would have increased code, testing and maintenance for the same visual outcome. Reuse made sense because the contracts were sufficiently compatible."

Q: What chart types were supported?

"Bar charts, line charts, tables, and other visualizations from the report builder's renderer. The key was that the chatbot's structured JSON contract matched the same format, so any chart type the renderer could draw, the chatbot could now return."

Story 2 — IQVIA DeepQuery Multi-Agent Architecture (I1) (BACKUP)

Speak this live

"At IQVIA, I separated the research workflow into eleven distinct LangGraph nodes so one model did not have to perform discovery, retrieval, source handling and synthesis as one undifferentiated task. Each node has a single responsibility — planner plans, searcher searches, URL intelligence scores and filters, scraper scrapes, cross-page reasoner extracts facts, decision engine decides. The simplification is not 'I used many agents' — it is that each stage can be observed, controlled, and capped independently. If the scraper is too expensive, I cap scrape count. If search is too broad, I cap queries. If the decision engine loops, I cap iterations. A monolithic agent hides these costs inside one opaque call."

PROBING QUESTIONS

Q: Why not a single agent?

"A single-agent design can work for simple research, but the problem had different responsibilities and external tools. I separated the workflow so each stage could be observed and controlled independently. Cost control, debugging, and evaluation all require stage-level visibility."

Q: Can you name the actual nodes?

"Planner, light search, clarifier, context builder, query generator, search fanout, aggregator, URL intelligence, scrape controller, cross-page reasoning, decision engine, synthesizer. Each is a Python function registered as a LangGraph node on the StateGraph."

Story 3 — GStreamer Pipeline (H1) (BACKUP)

Speak this live

"For Team Horizon, the simplification was treating video transmission as a GStreamer pipeline instead of raw frame forwarding. GStreamer gave us a dedicated media pipeline with encoding, transport, and rendering stages that the application layer did not have to manage manually. Instead of writing custom frame capture, encode, send, decode, display logic, I configured a GStreamer pipeline that handled the whole chain. The result was a 60 FPS responsive operator video feed on embedded hardware."

4. ARE RIGHT, A LOT

Story 1 — Argus: Refuse to Ship at 73% mAP (S3) (STRONGEST)

Speak this live

"I built Argus as an industrial safety AI system for a hackathon and then continued developing it. The initial YOLOv9 model for PPE compliance detection was trained and achieved 73% mAP. That sounds like a working model. But for a system that is supposed to catch workers without hard hats or safety vests on a factory floor, 73% means roughly one in four violations goes undetected. I refused to call that shippable. I went back to the training pipeline — I collected and annotated more images, built the dataset up to over 15,000 images, tuned augmentation and training parameters, and brought the model to 89% mAP. Only after hitting 89% at 24 FPS did I scale the deployment to support 20-plus camera feeds with PostgreSQL logging. The result was a 50% reduction in safety violations through automated alerts. The lesson was that a number that sounds high in isolation — 73% — can be completely wrong for the use case. Accuracy is relative to consequence."

PROBING QUESTIONS

Q: How did you decide 73% was not enough?

"Because the consequence of a false negative is a worker on a factory floor without PPE. 73% mAP means roughly one in four detections is wrong or missing. For a safety system, that is not a model accuracy problem — it is a safety problem."

Q: What specifically did you change to get from 73% to 89%?

"More data — I expanded the training set to 15,000-plus images with diverse angles, lighting conditions, and PPE types. I also tuned augmentation parameters and training hyperparameters. The improvement was primarily data-driven, not architecture-driven. I did not switch to a different model architecture."

Q: What would you do if 89% still was not enough?

"I would add a human review loop for edge cases — the model flags, a human confirms. For safety-critical applications, model-plus-human is more reliable than model-only at any accuracy level. I would also explore more training data and potentially a larger model if the hardware budget allowed."

Q: What is mAP exactly?

"Mean Average Precision — it measures detection accuracy across all classes by computing the area under the precision-recall curve for each class and averaging them. 73% mAP means the model's detection quality across all PPE classes averaged 73% when you consider both precision and recall."

Q: How did you deploy across 20+ camera feeds?

"Containerized deployment with PostgreSQL logging for detected violations. Each camera feed runs inference at 24 FPS and logs violations with timestamps, camera ID, and detection confidence. Automated alerts trigger when a violation is detected."

Story 2 — MySQL-Oriented SQL Against PostgreSQL (Y3) (BACKUP)

Speak this live

"The LangChain SQL-RAG chatbot at Ylogx was generating SQL that sometimes used MySQL syntax — backtick quoting, MySQL-specific date functions, LIMIT syntax differences — against a PostgreSQL database. The queries would either error out or, worse, return wrong results silently. I traced the problem to the schema context in the prompt pipeline — it was written without explicitly constraining the dialect. I adjusted the schema context to specify PostgreSQL, added post-generation SQL validation that checked for known MySQL-isms, and tested against a suite of queries that covered the most common divergence points between the two dialects. This was not a sexy fix. It was reading the actual generated SQL, comparing it against PostgreSQL documentation, and building a validation step. But the alternative was an analyst getting a wrong number and not knowing it, which is worse than getting an error."

PROBING QUESTIONS

Q: How did you discover the dialect mismatch?

"I saw queries failing against PostgreSQL and read the actual SQL. Backtick quoting was the first giveaway. Then I checked the prompt and saw it had no explicit dialect constraint. I also checked CloudWatch logs to see the actual SQL being sent to the database."

Q: Why not just switch to MySQL?

"The warehouse was PostgreSQL. The database was a decision made before I joined. Switching databases to match the chatbot's prompt would have been backwards — the prompt should match the database, not the other way around. Also, we chose PostgreSQL for Row-Level Security, which MySQL does not have."

Q: What evidence changed your mind about the root cause?

"The database data existed, and the generated query itself showed the mismatch. That made the generation/prompt layer a more likely root cause than the data store. When I ran the corrected SQL manually against PostgreSQL, it returned the right data."

Q: Does your validator prevent hallucinations?

"No. It reduces specific invalid/unsafe output classes — MySQL syntax, non-SELECT queries, table access violations. Semantic correctness still needs schema context, prompt quality, evaluation and testing. Validation is a safety layer, not a complete semantic-correctness guarantee."

Story 3 — IQVIA Hybrid vs Vector-Only Decision (I2) (BACKUP)

Speak this live

"At IQVIA, I argued that vector-only RAG would be insufficient for BRD documents. I was right because BRDs have structure — requirements with IDs, dependencies, and priorities — that flat vector embeddings throw away. Vector search finds semantically similar text. It does not understand that Requirement A depends on Requirement B. The evidence was that test-case generation needed requirement relationships, not just similar text. We went with hybrid retrieval — Azure AI Search for keyword and semantic, Neo4j for structured requirements — and the test-case quality was higher because the generation step had both textual context and structured requirement context."

5. LEARN AND BE CURIOUS

Story 1 — IQVIA DeepQuery: LangGraph Multi-Agent Research (I1) (STRONGEST)

Speak this live

"At IQVIA starting April 2026, I was asked to build a multi-agent Deep Research platform. I had worked with LangChain at Ylogx, but LangGraph was new — stateful graph orchestration with nodes, edges, conditional routing, and shared state is a different programming model from a sequential chain. I spent the first week reading the LangGraph documentation, building small test graphs, and understanding how state flows through nodes. Then I architected DeepQuery as a multi-stage pipeline: plan the investigation, explore lightly with small parallel web searches to ground clarification, optionally clarify scope with human input, generate diverse search queries, fan out across DuckDuckGo, Bing, and Firecrawl, aggregate and filter URLs with URL intelligence scoring, scrape in waves with content dedup, do cross-page reasoning to extract facts and knowledge blocks, run a decision engine that decides whether to search again or stop, and finally synthesize a long-form markdown report with sources and confidence scores. The system researches across 200-plus websites and ranks information for result generation. Every step is a LangGraph node with shared DeepQueryState. The decision engine can loop back to search or scrape, which is something a sequential chain cannot do. I went from knowing nothing about LangGraph to architecting a production research agent in about two weeks."

PROBING QUESTIONS

Q: What was the hardest part of learning LangGraph?

"Understanding state management across nodes. In a sequential chain, data flows linearly. In a graph, you have conditional routing and loops — the decision engine can send you back to search. Getting the state transitions right so the graph does not loop forever or miss data was the real learning curve."

Q: How is DeepQuery different from just calling an API?

"It thinks before expensive actions. URL intelligence scores and filters before scraping. Cross-page reasoning extracts facts before synthesis. The decision engine evaluates completeness before deciding to stop. A naive approach would scrape everything and feed it to the model — that is slow, expensive, and produces worse results."

Q: What are the cost controls?

"Caps on queries, URLs, scrape count, and character budgets for LLM context. The architecture document specifies cost control as a design principle — think before expensive actions. DeepQueryConfig contains configurable limits for search count, scrape count, max iterations, and character budgets."

Q: What would you improve?

"Persistent state. Right now state is per-run with a MemorySaver checkpoint in RAM. For production, I would want durable state so a crashed run can resume. I would also want better coverage metrics — how do I know the research actually covered the topic versus just finding a lot of pages?"

Q: What is DeepQueryState?

"A TypedDict that every node reads and writes. It contains the topic, plan, search results, URLs, scraped pages, knowledge blocks, facts, gaps, the decision, and the final answer. Operator reducers handle how state keys are merged — for example, lists get appended rather than replaced."

Q: How does the decision engine work?

"It evaluates completeness by looking at the number of facts extracted, knowledge blocks from cross-page reasoning, the completeness score, and the gap analysis. If significant gaps remain and we have not hit the iteration cap, it sends the graph back to search or scrape. If coverage is sufficient or we hit caps, it proceeds to synthesis."

Story 2 — Team Horizon: ZED 2 and ROS2 (H2) (BACKUP)

Speak this live

"Team Horizon was a Mars rover project at CUSAT for the European Rover Challenge 2024. I came from web development — Python, TypeScript, React, Node. ROS2, stereo vision, GStreamer, and real-time embedded systems were entirely new to me. I had to learn how ZED 2's stereo depth works — left and right images go through stereo matching to produce disparity, then depth, then 3D points. The ZED SDK supports positional tracking using visual and inertial information from the camera's IMU, and spatial mapping that reconstructs the 3D environment. I learned how this spatial information feeds into the navigation stack through costmaps, where the planner uses obstacle proximity and traversability to choose safer trajectories instead of just the shortest geometric path. I also learned GStreamer for the real-time video pipeline. This was the biggest comfort-zone jump I have made — from web APIs to robotics perception."

PROBING QUESTIONS

Q: How did you learn this?

"ZED SDK documentation, ROS2 tutorials, and building small test programs. I started with getting depth data from the camera, then spatial mapping, then integrating with RViz for visualization. Incremental, not all at once."

Q: What was the hardest conceptual jump?

"Understanding that a camera feed, depth data, coordinate frames, mapping, visualization and navigation are separate layers that only become useful when their interfaces agree. In web development, you have request-response. In robotics, you have continuous sensor streams that have to be synchronized."

Q: What is the difference between FPS and points/sec?

"FPS is frames per second — how often the camera delivers a new image. Points per second is the spatial mapping throughput — how many 3D points the SDK processes to update the environment model. They are different metrics for different parts of the system."

Story 3 — IQVIA Hybrid RAG: LangChain to LangGraph + Azure + Neo4j (I2) (BACKUP)

Speak this live

"At IQVIA, the BRD processor required me to learn three new systems simultaneously — Azure AI Search for hybrid and semantic retrieval with 3072-dimensional embeddings, Neo4j for building a knowledge graph with Cypher queries, and LangGraph for orchestrating the ingestion and test-case generation pipelines. I had LangChain experience from Ylogx but none of these specific technologies. I built understanding incrementally — first the embedding pipeline, then the vector index, then adding keyword search, then the graph schema, then wiring everything into a LangGraph state machine. The learning was driven by the problem, not by curiosity alone — each piece was needed because the BRD processing pipeline required it."

6. HIRE AND DEVELOP THE BEST

Story 1 — IEDC Tech Team Member Pairing (M1) (STRONGEST)

Speak this live

"At CUSAT I was part of the IEDC Tech Team. When newer members joined, I paired with them on tasks rather than just assigning work and walking away. I would sit with them, walk through the problem, show how I would approach it, and then let them implement it while I was available for questions. I do not have a named mentee or a count of people I trained — I was a team member doing pairing, not a manager running a mentorship program. The value was that people who paired with me could independently handle similar tasks faster the next time. I learned that showing someone how to debug is more valuable than fixing their bug for them."

PROBING QUESTIONS

Q: How many people did you mentor?

"I do not have a specific count. I paired with newer team members as they joined. I will not invent a number."

Q: What did you teach them?

"How to approach problems — read the error, trace the execution, check assumptions. Not specific technologies, but the debugging and problem-solving process."

Q: Tell me about one person you personally developed.

"I would need to give a concrete example. I paired with team members who were new to the codebase and walked them through the debugging process. I do not have a named individual with a measurable outcome — I will not fabricate one."

Q: What was the bar you set?

"That they could independently handle a similar task next time without me sitting next to them. The goal was independence, not dependence."

Story 2 — Git Conflicts → Branch Separation (Y9) (BACKUP)

Speak this live

"During development at Ylogx, we hit Git conflicts when multiple developers were working on overlapping files. Instead of blaming other developers, I proposed a clearer branch separation strategy — each feature branch covers its own scope, we merge deliberately with pull requests instead of direct pushes, and we resolve conflicts in a structured way. The issue was coordination, not competence. After moving to that workflow, we had fewer merge conflicts and fewer regressions from conflicting changes."

PROBING QUESTIONS

Q: Did you blame the other developers?

"No. The useful response was to improve the workflow. The issue was coordination, so we reduced collision by separating work and merging deliberately."

7. INSIST ON THE HIGHEST STANDARDS

Story 1 — RLS as Security Standard, Not Application WHERE (Y5) (STRONGEST)

Speak this live

"At Ylogx, my standard was that the security model could not be 'the AI generated the correct SQL.' The chatbot writes SQL. A logically correct JOIN could still return another organization's rows if the engine runs as table owner. I deliberately separated the layers: authentication established identity, RBAC controlled feature and table access, and PostgreSQL RLS enforced row visibility at the database level. I used transactions, SET ROLE, transaction-local application context, and fail-closed rls_no_access. The standard was not 'does the chatbot produce the right answer' — the standard was 'can a malicious query ever see another organization's rows.'"

PROBING QUESTIONS

Q: Why was not application-level filtering enough?

"Because a logically correct JOIN could still return another organization's rows. I wanted the database to remain the final enforcement boundary rather than trusting generated SQL or an application WHERE clause. The WHERE clause is a convenience, not a security boundary."

Q: What if the LLM explicitly asks for Organization B?

"If the database session is operating under Organization A's RLS policy, the SQL's own WHERE clause cannot make rows invisible to the RLS policy become visible. USING runs first, then WHERE runs on already-visible rows."

Q: Why was not the validator enough?

"Prompt quality and validation reduce specific invalid output classes. They are not a guarantee that the model will never produce a query that touches data it should not. RLS is the guarantee — it operates at the database engine level regardless of what SQL gets generated."

Story 2 — Argus 89% + 24 FPS Gate Before Multi-Camera (S3) (STRONGEST)

Speak this live

"When I built Argus, the YOLOv9 model hit 73% mAP on the first training run. For a hackathon demo, 73% would have been fine — it detects most PPE violations and looks impressive. But Argus was supposed to be an industrial safety system. If I deployed it at 73% across 20 camera feeds on a factory floor, roughly one in four safety violations would go undetected. I set a gate — the model does not go to multi-camera deployment until it crosses 89% mAP at 24 FPS real-time inference. I expanded the training dataset to over 15,000 images, tuned augmentation and training parameters, and iterated until the model hit 89%. Only then did I build the containerized multi-camera deployment with PostgreSQL logging. The deployed system reduced safety violations by 50% through automated alerts. The standard was not 'does it detect PPE' — the standard was 'does it detect PPE reliably enough that a factory can trust it.'"

PROBING QUESTIONS

Q: Why 89% and not 95%?

"89% was the highest I could reach with the available data and training budget. A production system at 89% with automated alerts is more useful than a theoretical system at 95% that is never deployed. I would continue improving with more data."

Q: How did you measure the 50% reduction in safety violations?

"Before-and-after comparison of detected violations with and without the system running. If they want the exact population and time window, I say that methodology needs to be locked — I do not invent an N."

Story 3 — LangSmith Evaluation at IQVIA (I3) (BACKUP)

Speak this live

"At IQVIA, both DeepQuery and the BRD processor could produce impressive-looking outputs. A multi-agent research report looks authoritative. A test case generated from a BRD looks correct. But without evaluation, you are shipping demos, not products. I integrated LangSmith tracing into both pipelines — every LLM call, every retrieval, every generation step is traced. For DeepQuery, I can see how many facts were extracted, how many pages were scraped, what the confidence score was, and trace back any synthesis error to the specific retrieval or reasoning step that caused it. For the BRD processor, I can see which chunks were retrieved, what requirements were extracted, and whether the generated test cases actually covered the source requirements. This is the difference between 'it works in the demo' and 'I can prove it works and I can diagnose when it does not.'"

PROBING QUESTIONS

Q: What did the evals actually catch?

"Retrieval gaps — cases where the system retrieved irrelevant chunks and generated confident-sounding but wrong answers. Without tracing, those look like correct outputs. LangSmith lets me trace back from the output to the specific retrieval step that failed."

Q: What metrics do you track?

"For DeepQuery: facts extracted, pages scraped, filter yield, confidence score, source count, and report length. For the BRD processor: chunks retrieved, requirements extracted, test-case coverage. The per-run metrics are saved in JSON artifacts."

8. THINK BIG

Story 1 — StratifyLabs: Computer Vision SaaS Platform (S1) (STRONGEST)

Speak this live

"StratifyLabs started from a question — why does every computer vision project require setting up a local training environment, downloading datasets, configuring CUDA, and then throwing everything away when you want to try a different model? I built StratifyLabs as a computer vision training platform with a 3D simulation lab for real-time experimentation and prototyping. The platform has browser-based inference that reduced ML iteration time by 30%, a marketplace with 50-plus pre-trained models and datasets, user community profiles, an embedded URDF code editor with WebGL for 3D prototyping, and 3D character-based AI voice-enabled RAG bots using Gemini for interaction with simulated environments. The vision was not 'another model zoo' — it was a complete platform where a developer could go from experiment to prototype to deployment without leaving the browser."

PROBING QUESTIONS

Q: How did you measure 30% reduction in ML iteration time?

"Browser-based inference removes the environment setup step entirely — no local CUDA configuration, no dataset download, no dependency management. The 30% is a project-level estimate comparing the full 'download, configure, train, evaluate' workflow against 'open browser, select model, run.' If they want the exact measurement protocol, I say I need to lock that."

Q: What is the business model?

"I built it as a platform with a marketplace, not a single-use tool. The marketplace and community profiles are the growth mechanism. I did not ship a monetization layer — that is a next step."

Q: Why a 3D simulation lab?

"Because computer vision models need to be tested in context. A model that detects objects in a photo is different from a model that detects objects in a 3D environment with varying angles, lighting, and occlusion. The simulation lab lets developers test in context before deploying."

Story 2 — IQVIA Multi-Agent Deep Research (I1) (BACKUP)

Speak this live

"The bold idea behind DeepQuery was that web research should not be 'search once, read once, write.' It should be an iterative, multi-source investigation where the system plans what to research, explores broadly, reasons across sources, evaluates completeness, and decides whether to keep searching or synthesize. The architecture spans 200-plus websites per run, with cross-page reasoning and confidence scoring. That is a fundamentally different scale from a single API call to a search engine."

Story 3 — GiftedBooks: VR + RAG + PYQ Platform (S2) (BACKUP)

Speak this live

"GiftedBooks was not 'put a chatbot next to a textbook.' It was a platform that combined three capabilities — VR interactive labs, grounded RAG for PDF-based Q&A, and deterministic PYQ analytics — into a single student learning suite. The vision was to close the entire study loop in one product, not to build one feature and call it education technology."

9. BIAS FOR ACTION

Story 1 — Hackathons: 8 Competitions, Rapid Prototyping (HACK) (STRONGEST)

Speak this live

"I participated in eight national and regional hackathons where engineering time was extremely constrained — typically 24 to 48 hours from idea to working demo. At CodeRecet I won first place, at MLH.io I won Best Project, at Magnathon 2.0 by IEEE I was runner-up. The pattern across all of them was the same — rapidly move from idea to usable prototype rather than spending the competition designing on paper. I used my existing full-stack, AI, and CV skills to prototype, integrate, and deploy under fixed deadlines. The calculated risk in every hackathon was choosing which features to build and which to skip, knowing that a working product with three features is worth more than a perfect design with zero features."

PROBING QUESTIONS

Q: Tell me about a specific decision where you took a calculated risk.

"At one hackathon, I had to choose between building a polished UI with fewer features or building more backend functionality with a rougher frontend. I chose the backend — because the judges were evaluating the product's capability, not its CSS. That was a reversible decision — I could have added polish if time allowed. It turned out to be the right call."

Q: Why not spend more time planning first?

"Because in a 24-hour hackathon, two hours of planning is 8% of your total time. I plan enough to know the architecture, then I build. I learn faster from a broken prototype than from a perfect plan."

Story 2 — Team Horizon GStreamer: Competition Deadline (H1) (BACKUP)

Speak this live

"During Team Horizon's preparation for the European Rover Challenge 2024, the operator needed a reliable real-time video feed from the rover to teleoperate it. The video pipeline had to work — without it, the operator is blind. We were on a competition timeline. I could not spend weeks evaluating every possible streaming framework. I evaluated GStreamer against the alternatives, decided it gave us the best combination of latency, reliability, and compatibility with the ROS2 stack, and built the pipeline delivering 60 FPS from the rover to the controller. I mitigated the risk by building a working prototype quickly and testing under realistic conditions before committing."

PROBING QUESTIONS

Q: What was the calculated risk?

"Choosing GStreamer over alternatives on a tight timeline. If it had not worked, we would have needed to rebuild the entire video path close to competition. I mitigated by getting a working prototype quickly and testing under realistic conditions."

Q: Why GStreamer specifically?

"Low-latency pipeline construction, good integration with Linux and embedded platforms, and the ability to handle multiple streams."

Story 3 — Inherited Chatbot Under Urgency (Y1) (BACKUP)

Speak this live

"When the teammate left and the chatbot was half-built, I did not wait for a formal handoff or reassignment. I reproduced the system locally, traced the execution path, and started fixing issues within a few days. I deliberately avoided trying to understand every component before taking the first useful step — I learned enough to observe the system, then iterated. Speed mattered because the product depended on the chatbot and the knowledge was leaving."

10. FRUGALITY

Story 1 — Redis Cache-Aside vs Bigger RDS (Y6) (STRONGEST)

Speak this live

"At Ylogx, the SQL-RAG chatbot was hitting the database on every query, including repeated questions that returned the same data. The obvious enterprise solution would be to scale up the RDS instance — more compute, more memory, more IOPS. But that costs money, and it does not solve the real problem, which is that the same query generates the same SQL and hits the same rows repeatedly. I implemented Redis cache-aside — on first execution, the result goes into Redis with a key derived from the query; on repeat, we serve from cache. The resume says this reduced bot-database latency by 35%. This Nest checkout also has an in-process fieldsCache Map with a 5-minute TTL for schema metadata, which is a different caching layer. The point is that I chose the cheaper, faster solution — a caching layer that addresses the actual access pattern — over throwing hardware at it."

PROBING QUESTIONS

Q: How did you decide on cache-aside versus write-through?

"The chatbot reads are much more frequent than writes to the underlying data. Cache-aside fits — you only cache what is actually queried. Write-through would cache everything including data nobody asks about."

Q: What is the invalidation strategy?

"TTL-based. If the underlying data changes, the cache expires after the TTL and the next query hits the database. For a BI tool where data updates are periodic — Tally imports happen at intervals, not continuously — a TTL of a few minutes is a reasonable trade-off between freshness and latency."

Q: What about cache stampede?

"If the TTL expires and many users send the same query simultaneously, they all hit the database. For our scale this was not a problem. At larger scale, I would use a lock or a probabilistic early expiration to prevent thundering herd."

Q: What if the cached result is stale?

"For a BI tool, a few minutes of staleness is acceptable because the underlying data updates periodically through Tally imports, not in real-time. The TTL is set to a duration where staleness is tolerable for the business workflow."

Story 2 — ElementRenderer Reuse (Y4) (BACKUP)

Speak this live

"Instead of building another charting and rendering subsystem for the chatbot, I reused the existing ElementRenderer from the report builder. Fewer abstractions, less duplicate UI logic, less maintenance. One renderer serving two products is cheaper than two renderers serving one product each."

Story 3 — Deterministic Dashboard APIs (Y8) (BACKUP)

Speak this live

"The 30 KPI dashboards at Ylogx did not invoke the LLM for every request. KPI GETs stayed deterministic — the query is constructed from the dashboard definition, not generated by a model. Using deterministic SQL reduced latency, complexity, failure modes, and LLM API costs. The chatbot uses the LLM because natural language requires it. The dashboards do not."

PROBING QUESTIONS

Q: Why not have the LLM generate every dashboard result?

"Because known KPI computations do not need probabilistic generation. A dashboard tile showing 'total sales this month' is a fixed query. Running it through an LLM adds latency, cost, and a failure mode with no benefit."

11. EARN TRUST

Story 1 — RLS Ownership Honesty (Y5) (STRONGEST)

Speak this live

"When I talk about the RLS implementation at Ylogx, I am very specific about what I built versus what a proper finish looks like. I implemented the middleware, the DDL generator, and the execute-on-transaction path. I did not ship FORCE ROW LEVEL SECURITY — the generator emits ENABLE but not FORCE, which means owner connections can still bypass. I did not ship API feature guards. The dashboard last-updated query runs as the owner. Chat metadata uses executeWithoutRLS with RESET ROLE plus a userId WHERE, which is intentional for missing GRANTs but not the gold standard. If someone asks whether I shipped the whole gold standard, I name the gaps. I would rather name a gap than pretend empty JSON is proof that Postgres rejected a query."

PROBING QUESTIONS

Q: If you know there are gaps, why did you ship it?

"Because SET ROLE plus USING plus fail-closed is significantly better than no isolation at all. The chatbot was generating SQL and executing it — without RLS, any generated query could see any organization's data. The shipped version constrains that. The gaps are real and I would close them, but shipping nothing while waiting for perfection is worse."

Q: Did you tell your team about the gaps?

"Yes. The gaps exist because of incremental development — you ship the session binding and policy generator first, then add FORCE RLS and API guards. I did not hide the gaps."

Q: What if they open your GitHub?

"I would walk through what is shipped and what is not. I prefer that to hoping they do not look."

Story 2 — Prototype Instead of Argument (Y4) (BACKUP)

Speak this live

"When I proposed structured JSON for the chatbot, I did not argue abstractly. I built a working prototype proving that the existing ElementRenderer could handle the chatbot response structure. The team accepted the approach because the evidence was visual — side-by-side comparison of the raw dump versus the structured render."

PROBING QUESTIONS

Q: What if they rejected your idea?

"I would have documented the concern, supported the chosen direction and implemented it well. The objective was the right engineering decision, not proving that my proposal had to win."

Story 3 — GiftedBooks README Mismatch

Speak this live

"The GiftedBooks GitHub README currently describes AegisAI, not GiftedBooks. If an interviewer opens my GitHub, they will see a mismatch between what the resume says and what the README says. I would volunteer this rather than hoping they do not open it. The resume and giftedbooks.study are the product I shipped. The README is wrong and I would fix it."

12. DIVE DEEP

Story 1 — data:null State-Format Failure (Y2) (STRONGEST)

Speak this live

"At Ylogx, the chatbot was returning data:null to the frontend even when the warehouse had rows. The frontend showed an empty state — 'no data available' — but the data existed. The obvious guess was a query problem, but the SQL was correct and returned rows when I ran it manually. I traced the execution path step by step — FastAPI generates the SQL, Nest executes it, the result comes back, gets formatted, and goes to the frontend. I added logging at each step — after SQL execution, after formatting, before sending to the frontend. The problem was in the formatting step. The state format expected by the frontend parser did not match what the backend was producing. It was not a data problem or a query problem — it was a serialization mismatch between the execution result and the expected response shape. Once I found the exact format mismatch, the fix was straightforward — align the response format to what the parser expected. But finding it required reading the actual data at every step of the pipeline, not just checking whether the query worked."

PROBING QUESTIONS

Q: How did you trace it?

"I added logging at each step — after SQL execution, after formatting, before sending to the frontend. I compared the actual response payload against what the frontend parser expected. The mismatch was in the data structure, not the data content."

Q: Why did nobody catch this earlier?

"Because the happy path worked — when data came back in the expected shape, everything was fine. The failure case was a specific response format that only occurred with certain query patterns. It was not a test gap; it was a specification gap — nobody had documented the exact format contract between the backend and the frontend parser."

Q: Why not just change data:null to an error message?

"That would have hidden the symptom instead of fixing the source of the loss. The data existed. Masking the null with an error message would have told the user 'something went wrong' when in reality the system was working correctly up until the formatting step."

Q: What did you do to prevent this from happening again?

"I documented the exact response format contract so the expectation was explicit. I also added validation at the formatting step to catch format mismatches before they reached the frontend."

Story 2 — IQVIA DeepQuery Decision Engine

Speak this live

"In DeepQuery, the decision engine is the node that decides whether to search more, scrape more, or stop and synthesize. Getting this wrong means either the research is incomplete and the report is shallow, or the system loops forever consuming API credits. I spent time understanding what 'complete enough' means — I look at the number of facts extracted, the knowledge blocks from cross-page reasoning, the completeness score, and the gap analysis. If significant gaps remain and we have not hit the iteration cap, the engine sends the graph back to search or scrape. If coverage is sufficient or we hit caps, it proceeds to synthesis. The tricky part was tuning the completeness threshold — too aggressive and the system never stops, too conservative and it produces shallow reports."

PROBING QUESTIONS

Q: How do you define 'complete enough'?

"By the gap analysis — are there subtopics from the original plan that have no supporting facts or knowledge blocks? If yes, the research has gaps. If the gaps are significant and we have not hit iteration caps, we continue. If the gaps are minor or we have hit caps, we synthesize with what we have."

Q: What is the worst case?

"The system hits all its caps without achieving good coverage. In that case, the synthesizer produces the best report it can with incomplete data, and the confidence score reflects the incompleteness. The system does not pretend it has complete coverage."

Story 3 — MySQL vs PostgreSQL Tracing (Y3) (BACKUP)

Speak this live

"When I discovered the dialect mismatch, I did not stop at 'the prompt is wrong.' I extracted the generated SQL, tested it directly against PostgreSQL, inspected the prompt examples, found the MySQL-oriented patterns — backtick quoting, date functions, LIMIT syntax — and added deterministic validation. I traced the generated SQL to CloudWatch logs and compared it against what PostgreSQL expected. The root cause was in the schema context, not in the model — the prompt was not constraining the dialect."

13. HAVE BACKBONE; DISAGREE AND COMMIT

Story 1 — Structured JSON Response vs Text Dump (Y4) (STRONGEST)

Speak this live

"At Ylogx, the chatbot was returning answers as text blobs or raw table data. The report builder already had ElementRenderer — a structured rendering pipeline that knew how to draw charts from a specific JSON contract. I proposed that the chatbot should output the same structured JSON instead of raw text, so both products share one rendering path. The existing approach technically worked — users got answers. The pushback was that restructuring the chatbot response format was additional work for something that was already functional. I built a prototype showing the same answer rendered both ways. The structured version could sit next to a deterministic KPI tile without the operator having to re-interpret raw rows. The prototype made the case. We shipped the structured path. Once the decision was made, I committed fully — I did not keep a parallel text-dump path as a fallback."

PROBING QUESTIONS

Q: What if the team had said no?

"I would have asked what specific concern drove the decision, made sure I understood it, and then committed to making the text-dump path as good as possible. Disagreement is useful only until the decision is made."

Q: Did you disagree with your manager?

"Not every disagreement was hierarchical. The important part was that I had a different technical view and supported it with evidence. Once we reached the decision, I was prepared to commit to it regardless of whether my option won."

Q: How did you handle the pushback?

"With a working prototype, not with a longer argument. The evidence was visual — the side-by-side comparison made the difference obvious."

Story 2 — IQVIA Hybrid RAG vs Vector-Only (I2) (BACKUP)

Speak this live

"At IQVIA, the default approach for document QA is vector-only RAG — chunk the document, embed it, retrieve by similarity. I argued for hybrid retrieval — Azure AI Search with both keyword and semantic plus a Neo4j knowledge graph for structured requirements. The argument against was complexity — vector-only is simpler to build and maintain. I showed that for BRDs specifically, requirements have IDs, dependencies, and priorities that flat vector search throws away. A test case for Requirement A needs to know that A depends on Requirement B, and that information lives in the graph, not in embeddings. We went with hybrid. Once the decision was made, I built the full pipeline — ingestion graph, retrieval path, and test-case generation — without second-guessing the approach."

PROBING QUESTIONS

Q: What alternative did you personally consider?

"Pure vector search with semantic retrieval — simpler to build, fewer moving parts. The trade-off was that we would lose the structured requirement relationships. I chose hybrid because test-case generation needed those relationships."

14. DELIVER RESULTS

Story 1 — Ylogx Full Product Delivery (Y8) (STRONGEST)

Speak this live

"At Ylogx over eleven months, November 2024 to October 2025, I shipped a full-stack AI Business Intelligence application — not a demo, a product. The deliverables were concrete: a custom report builder with deterministic SQL that made report generation 40% faster, an AI chatbot using LangChain SQL-RAG architecture that improved analyst productivity by 65%, 30 real-time KPI dashboards built with React and Recharts that improved operational efficiency by 60%, RLS and RBAC for three organizational tiers, Redis caching that cut bot-database latency by 35%, and deployment on AWS with CloudFront, ECS, Docker containers, automated CI/CD pipelines, p90 response times under 210ms, and GoDaddy DNS with Route 53 through an ALB. Those are the resume numbers. I treat them as product-family outcomes. If they ask for the exact methodology behind any specific number, I would rather say I need to lock that than invent a measurement protocol."

PROBING QUESTIONS

Q: Which result was actually yours?

"My clearest personal contributions were the chatbot stabilization, structured response and rendering work, RLS/RBAC integration, and performance work. The entire 40%/60% product-level outcome was broader team scope, so I would distinguish personal contribution from product-level metrics. That distinction increases credibility."

Q: What does 40% faster report generation mean?

"The report builder uses deterministic SQL — the query is constructed from the report definition, not generated by a model. Compared to the previous workflow where operators had to build queries manually or wait for ad-hoc reports, the structured report builder reduced the time to generate a custom report by approximately 40%. The baseline is the previous manual workflow."

Q: p90 under 210ms — what endpoint?

"That is the overall API performance across the deployed application on ECS, not a single endpoint measurement. It covers the dashboard, report, and chatbot API paths. The dashboard and report paths are deterministic SQL, so they are fast. The chatbot path includes LLM generation, so individual chatbot queries can be slower."

Q: What would break first at 10x scale?

"The database. The PostgreSQL instance handles both the BI queries and the RLS policy execution. At 10x, I would add read replicas for the dashboard queries, increase the Redis cache coverage, and potentially move to a dedicated analytics database for the heavy aggregation queries. The ECS services themselves can scale horizontally behind the ALB."

Q: What did the deployment look like?

"AWS CloudFront for CDN, Application Load Balancer routing to ECS services running Docker containers, PostgreSQL on RDS, Redis for caching, Route 53 for DNS with GoDaddy as the domain registrar, and CI/CD pipelines for automated deployment."

Story 2 — Argus Full Deployment (S3) (BACKUP)

Speak this live

"Argus went from a 73% mAP hackathon model to an 89% mAP production system deployed across 20-plus camera feeds with PostgreSQL logging, automated alerts, and a 50% reduction in safety violations. The result was not just a better model — it was a deployed, operational system that reduced real violations."

Story 3 — Team Horizon Competition Result (H1) (BACKUP)

Speak this live

"Team Horizon placed 17th globally out of 80-plus teams at the European Rover Challenge 2024. The team website says 18th and number 1 in India — I volunteer the discrepancy. The result was a working rover with real-time video, 3D perception, and autonomous navigation capabilities competing against international university teams."

15. STRIVE TO BE EARTH'S BEST EMPLOYER

Story 1 — Team Horizon Collaboration (H1)

Speak this live

"Team Horizon was a team effort — mechanical, electrical, and software. My ownership was video and perception, but the rover works or fails as a system. When the navigation team needed the perception output in a specific format or at a specific rate, I adapted my component to their requirements rather than optimizing locally. When someone on the team was struggling with ROS2 concepts that I had already learned, I sat with them and walked through it. I did not treat my module as a black box. The team placed 17th globally out of 80-plus teams. That result belongs to the team, not to any one person."

Story 2 — Git Workflow Improvement (Y9)

Speak this live

"When Git conflicts became a friction point at Ylogx, I did not complain — I proposed a solution. Clearer branch separation, deliberate merging, pull request reviews. The goal was to make the team more effective, not to prove that I was right about Git."

16. SUCCESS AND SCALE BRING BROAD RESPONSIBILITY

Story 1 — RLS for Multi-Tenant Isolation (Y5)

Speak this live

"The RLS and RBAC system at Ylogx was not just about security for one organization — it was about making a shared warehouse work for multiple tenants. When I implemented SET ROLE and generated policies with USING clauses keyed to the session's organizationId, I was thinking about what happens when the platform adds more organizations. Each new tenant gets isolated automatically through the policy and role system I built — the admin creates a policy through the API, the service emits CREATE ROLE, GRANT, and CREATE POLICY, and the middleware binds the session. The system scales to new tenants without per-tenant custom code. That is what isolation at scale looks like — not a WHERE clause in every query, but a database-level mechanism that applies regardless of what SQL gets generated."

PROBING QUESTIONS

Q: What broader risk were you preventing?

"The obvious risk was cross-tenant data exposure. The broader lesson was that making an AI system easier to query also makes a security mistake easier to scale, so the authorization boundary needed to be deterministic and outside the model."

Story 2 — Rover Safety (H1/H2)

Speak this live

"In the rover context, unsafe perception or navigation can have physical consequences — the rover could collide with an obstacle or an operator could misjudge the terrain. My contribution was making environmental information available to the navigation system so the higher-level system could reason about traversability. That is a responsibility beyond just getting the code to compile."

PROJECTS — 90-SECOND OVERVIEW + ARCHITECTURE + DECISIONS + PROBES

PROJECT: ConvBI / Ylogx (Nov 2024 – Oct 2025)

90-second overview:

"ConvBI is a conversational BI application that sits on top of accounting-shaped data in PostgreSQL. Users are operators and analysts who do not write SQL. The system has four main surfaces — a SQL-RAG chatbot that takes natural language questions and returns structured visualizations, a custom report builder with deterministic SQL, 30 real-time KPI dashboards, and an admin layer for policies, roles, and organizations. The backend is NestJS and FastAPI. FastAPI handles the LLM/prompt pipeline — it takes the question, the schema context, and produces candidate SQL. NestJS is the execution engine — it receives the SQL, opens a per-request transaction, SET ROLEs to the caller's non-owner database role, sets the organizationId GUC from the JWT, executes the SQL on that transaction, and returns the result. RLS policies generated through the policy management API filter rows at the database level. The frontend is React with Recharts. Deployment is AWS — CloudFront, ECS, Docker, CI/CD, Route 53 through an ALB."

Architecture probes:

Q: Why separate FastAPI and NestJS?

"FastAPI handles the LLM pipeline — prompt construction, SQL generation, model interaction. NestJS is the execution and authentication layer — it owns the JWT, the RLS session, and the database connection. Separation means the LLM service cannot directly execute SQL and cannot bypass RLS. FastAPI proposes SQL; Nest is the only executor. FastAPI should not be publicly reachable."

Q: Why PostgreSQL specifically?

"Row-Level Security. PostgreSQL's RLS with CREATE POLICY and USING clauses is a database-level mechanism that filters rows regardless of what SQL gets generated. This was critical because the chatbot writes SQL — the security boundary cannot be in the application WHERE clause. MySQL does not have RLS."

Q: What is ElementRenderer?

"A rendering component in the frontend that takes a structured JSON contract — chart type, data array, dimensions, metrics — and draws the visualization. Both the report builder and the chatbot use the same renderer, so any improvement to rendering benefits both products."

Q: How does the report builder differ from the chatbot?

"The report builder produces deterministic SQL from a saved report definition — the same report always generates the same query. The chatbot generates SQL from natural language through the LLM — each question can produce different SQL. Both execute through the same RLS-protected transaction path."

Q: How does the admin layer work?

"Admins manage policies, roles, and organizations through NestJS APIs. When an admin creates a policy, policyManagement.service.ts emits DDL — CREATE ROLE, GRANT SELECT on the relevant tables, CREATE POLICY with the USING condition, and ENABLE ROW LEVEL SECURITY. When a role is created, roleManagement.service.ts emits CREATE ROLE NOLOGIN and GRANT policy_role TO db_role. The middleware then SET ROLEs to the user's db_role on every request."

PROJECT: DeepQuery / IQVIA (Apr 2026 – Present)

90-second overview:

"DeepQuery is a multi-agent deep research platform that takes a natural language topic and produces a long-form research report with sources and confidence scores. The pipeline has eleven stages orchestrated by LangGraph: plan the investigation, explore lightly with seed searches, clarify scope optionally with human input, generate diverse search queries, fan out search across DuckDuckGo, Bing, and Firecrawl, aggregate and deduplicate URLs, filter with URL intelligence scoring, scrape in waves with content dedup, do cross-page reasoning to extract facts and knowledge blocks, run a decision engine that loops back if coverage is insufficient, and synthesize the final report. The technology stack is LangGraph for orchestration, Azure OpenAI for the LLM, DDGS and Bing scrape with httpx and BeautifulSoup for search, Firecrawl for scraping, and python-dotenv for configuration. Artifacts are saved per run — search results, URLs, scraped pages, knowledge blocks, and the final report with metadata."

Architecture probes:

Q: Why LangGraph instead of a sequential chain?

"The decision engine needs to loop back to search or scrape if coverage is insufficient. A sequential chain cannot loop. LangGraph's StateGraph with conditional edges supports iteration, and the shared DeepQueryState lets every node access the accumulated research."

Q: How do you prevent infinite loops?

"Caps on iterations, queries, URLs, and scrape count configured in DeepQueryConfig. The decision engine evaluates completeness against these caps. If the research is insufficient but we have hit caps, we proceed to synthesis with whatever we have."

Q: What are the artifact outputs?

"Each run saves to a folder: search_results with light and fanout JSON, urls with all, filtered, and visited URLs, scraped_pages with markdown content and index, knowledge with blocks, facts, and gaps, and output with final_report.md, sources.json, and metadata.json."

PROJECT: BRD Hybrid RAG / IQVIA

90-second overview:

"The BRD processor is a document intelligence pipeline — not a web browser. It ingests Business Requirements Documents as PDF or DOCX, extracts structured requirements, indexes chunks for retrieval, builds a Neo4j knowledge graph, and generates QA test cases. The pipeline uses two LangGraph state machines — an 8-node ingestion graph and a 5-node test-case generation graph with async fan-out. Azure AI Search stores BRD chunks with 3072-dimensional embeddings for hybrid retrieval. Neo4j stores Document, Requirement, and Entity nodes with DEPENDS_ON edges. FastAPI serves the HTTP layer with background tasks for ingestion."

Architecture probes:

Q: Two 'graphs' — what is the difference?

"There are two different meanings of 'graph' in this project. The LangGraph workflow graph is for orchestration — nodes like extract_text, generate_testcases. The Neo4j knowledge graph is for requirements — Document, Requirement, Entity nodes with DEPENDS_ON edges. They serve completely different purposes."

Q: What is the embedding model?

"Azure OpenAI embeddings producing 3072-dimensional vectors. The embedding service has batch processing, retry logic with tenacity, and a zero-vector fallback for failed embeddings."

Q: How does test-case generation work?

"The test-case graph loads all requirements from Neo4j, retrieves relevant chunks from Azure AI Search using hybrid search, gathers graph context from Neo4j for requirement dependencies, then fans out with asyncio.gather to generate test cases in parallel across requirement groups."

PROJECT: Team Horizon / ERC 2024 (Feb – Jun 2024)

90-second overview:

"Team Horizon is a Mars rover project at CUSAT that competed at the European Rover Challenge 2024. The rover has a ZED 2 stereo camera, an NVIDIA Jetson Orin, and runs on ROS2. My ownership was the video pipeline and ZED-based environmental perception. For video, I built a GStreamer streaming pipeline that delivered 60 FPS real-time camera feed from the rover to the operator controller. For perception, I integrated the ZED 2's stereo depth and spatial mapping capabilities to build a 3D environmental representation — the SDK processes on the order of millions of spatial data points per second under our configuration. This perception output fed into the navigation stack through costmaps, allowing the planner to prefer safer traversable areas instead of shortest geometric paths. I did not implement the higher-level predictive planner — that was another team member. The team placed 17th globally out of 80-plus teams — the team website says 18th and number 1 in India."

Architecture probes:

Q: How does ZED 2 work?

"Left and right camera images go through stereo matching to produce disparity, then depth, then 3D points. The ZED SDK supports positional tracking using visual and inertial information from the camera's IMU, and spatial mapping that reconstructs the environment. This is stereo vision plus visual-inertial tracking in the SDK — I did not build a custom sensor fusion architecture."

Q: What is the costmap?

"A grid representation where each cell has a cost representing how traversable or dangerous that area is. Obstacles have high cost, clear space has low cost, areas near obstacles have moderate cost. The planner evaluates candidate trajectories against the costmap — a slightly longer path with better clearance may have lower total cost."

Q: What about sensor fusion?

"The ZED SDK itself can use visual and inertial information for positional tracking. Our work was centered on ZED-based perception and its integration with the rover software. I did not implement a custom sensor-fusion architecture outside of what the ZED SDK provides."

Q: Why GStreamer and not raw frame forwarding?

"GStreamer provides a dedicated media pipeline with encoding, transport, and rendering stages. Raw frame forwarding would require the application layer to manage all video transport mechanics. GStreamer handles the pipeline, and I configured it for low-latency operation on embedded hardware."

🛡️ TECH STACK DEFENSE — WHAT EACH PIECE DOES AND WHY WE USED IT

AWS Architecture — Ylogx

Q: What is ECS?

"Elastic Container Service — AWS's container orchestration service. It runs our Docker containers. We used ECS with Fargate, so we do not manage EC2 instances directly. ECS takes a task definition with the Docker image, CPU and memory requirements, and runs the containers. It handles container placement, scaling, and health checks."

Q: What is EKS and do you use it?

"EKS is Elastic Kubernetes Service — AWS's managed Kubernetes. We do not use EKS. We use ECS, which is simpler for our use case. EKS gives you full Kubernetes with kubectl, Helm charts, pods, and services. ECS gives you container orchestration without Kubernetes complexity. For a BI application that does not need Kubernetes-specific features like custom controllers, service meshes, or complex rollout strategies, ECS is sufficient and has less operational overhead."

Q: Why ECS and not EKS?

"ECS is simpler to operate for our workload. We have a web application, an API service, and background tasks — all standard HTTP workloads. EKS would give us Kubernetes flexibility we do not need and add operational complexity we do not want. If we needed multi-cloud portability, custom scheduling, or Kubernetes-ecosystem tools, EKS would make sense. We did not."

Q: What is ALB?

"Application Load Balancer — operates at HTTP layer 7. It routes incoming requests to the correct ECS service based on path rules, host headers, or other HTTP attributes. It handles SSL termination, health checks, and distributes traffic across healthy containers. In our setup, the ALB sits between CloudFront and ECS."

Q: What is CloudFront?

"AWS's CDN — Content Delivery Network. It caches static assets and API responses at edge locations globally so users get faster responses. For our React SPA, CloudFront serves the static JavaScript, CSS, and HTML from edge locations. For API requests, it can either pass through to the ALB or cache GET responses based on headers."

Q: What is Route 53?

"AWS's DNS service. We use it to resolve our domain name to the CloudFront distribution. The domain is registered with GoDaddy, but DNS resolution is handled by Route 53 because it integrates natively with AWS services — we can point the domain directly to the CloudFront distribution."

Q: Why GoDaddy DNS with Route 53 through an ALB?

"GoDaddy is where the domain is registered. Route 53 handles DNS resolution because it integrates with AWS. Route 53 points to CloudFront, which terminates SSL and routes to the ALB, which routes to ECS containers. It is a standard AWS web architecture."

Q: What is the full request path?

"User's browser → GoDaddy domain → Route 53 DNS resolution → CloudFront edge (cache hit for static assets, pass-through for API) → ALB → ECS container running NestJS → PostgreSQL on RDS (through the RLS-bound transaction). For the chatbot: NestJS → FastAPI (private network) → LLM API → back to NestJS → execute SQL → return to frontend."

Q: What about CI/CD?

"Automated pipelines that build the Docker image, push to ECR (Elastic Container Registry), and update the ECS service with the new task definition. On each push, the pipeline runs — build, test, push image, deploy. No manual SSH to a server."

Q: What is Docker doing here?

"Containerizing the NestJS and FastAPI services so they run identically in development and production. The Dockerfile specifies the runtime, dependencies, and startup command. ECS runs the Docker image. The container is the deployment unit."

Q: What about auto-scaling?

"ECS can auto-scale based on CPU utilization, memory, or custom CloudWatch metrics. If load increases, ECS spins up more containers behind the ALB. For our BI workload, the scaling triggers are CPU-based — if average CPU across containers exceeds a threshold, scale out."

Q: What is RDS?

"Relational Database Service — managed PostgreSQL. AWS handles backups, patching, and failover. We use a single RDS instance for the BI data warehouse. At scale, I would add read replicas for dashboard queries."

IQVIA Tech Stack

Q: What is Azure AI Search?

"Azure's managed search service with both keyword (BM25) and semantic (vector) retrieval. We use it for hybrid search — combining keyword precision with semantic recall. The index stores BRD chunks with 3072-dimensional embeddings. On query, we retrieve using both methods and merge the results."

Q: What is Neo4j?

"A graph database where data is stored as nodes, relationships, and properties. We use it for the BRD knowledge graph — Document, Requirement, and Entity nodes with DEPENDS_ON edges. Queries use Cypher — like SQL for graphs. We use it because requirement dependencies are naturally a graph structure."

Q: What is LangGraph vs LangChain?

"LangChain is a framework for building LLM applications — chains, prompts, output parsers. LangGraph extends it with stateful graph orchestration — nodes, edges, conditional routing, shared state, and the ability to loop. I used LangChain at Ylogx for sequential chains. I use LangGraph at IQVIA because the pipelines need conditional routing and iteration."

Q: What is LangSmith?

"LangSmith is the observability and evaluation platform for LangChain/LangGraph applications. It traces every LLM call, retrieval step, and generation step. I use it for debugging, evaluating retrieval quality, and tracking pipeline metrics. It is the difference between 'the pipeline produced an output' and 'I can prove the output is correct.'"

Q: What is Firecrawl?

"A web scraping service that returns clean markdown from web pages. DeepQuery uses it for both search (Firecrawl search API) and scraping (batch scrape with wave batches and content dedup using MD5 hashing)."

Team Horizon Tech Stack

Q: What is ROS2?

"Robot Operating System 2 — a framework for writing robot software. It provides inter-process communication through topics and services, coordinate frame management, and a standard way to integrate sensors, actuators, and processing nodes. We used it to connect the ZED camera, the video pipeline, the navigation stack, and the control system."

Q: What is RViz?

"A visualization tool for ROS2. It lets you visualize sensor data, 3D maps, robot models, and navigation paths in real-time. I used it to visualize the ZED 2's spatial mapping output and verify that the perception data was correct before feeding it to the navigation stack."

Q: What is Gazebo?

"A 3D physics simulator for robotics. It lets you test robot software in a simulated environment before deploying to real hardware. We used it for testing the navigation stack without needing the physical rover."

🛡️ METRICS DEFENSE — SPEAK THESE IF THEY ASK A NUMBER

40% faster report generation (Ylogx)

What it means: "The report builder uses deterministic SQL constructed from a saved report definition. Before this, operators built queries manually or waited for ad-hoc reports from someone who knew SQL. The structured report builder reduced the time from 'I need this number' to 'I have this number' by approximately 40%."

How measured: "Product-level estimate comparing the previous manual workflow against the new structured report builder. This is not a controlled A/B test — it is the observed workflow improvement across the product."

If they push: "I treat it as a product-family outcome. If they want the exact baseline hours and the population, I say I need to lock the methodology. I will not invent a time-and-motion study."

65% analyst productivity improvement (Ylogx)

What it means: "Analysts who could not write SQL can now get answers through natural language. The 65% is how much faster data retrieval became — collapsing the 'wait for someone who knows SQL' delay into a chatbot interaction."

How measured: "Product-level observed productivity outcome. The chatbot eliminated a bottleneck — the person who could write SQL — from the workflow. I do not have a controlled baseline measurement."

If they push: "I would say: the resume says 65%. That represents the workflow improvement from not needing SQL expertise to get data. I do not have a stopwatch measurement of 'before' and 'after' per query."

35% bot-database latency reduction via Redis (Ylogx)

What it means: "Redis cache-aside on repeated chatbot queries. First execution hits the database and populates the cache. Repeat queries serve from Redis. The 35% is the reduction in the bot-to-database round-trip for cached queries."

How measured: "Comparison of response times with and without caching for the same query patterns. The in-process fieldsCache Map with 5-minute TTL is a separate caching layer for schema metadata."

If they push: "The 35% applies to the Redis cache-aside path. Not all queries hit cache — only repeated questions. The actual improvement depends on the cache hit ratio, which depends on how often operators ask the same question."

p90 under 210ms (Ylogx)

What it means: "The 90th percentile API response time across the deployed application is under 210 milliseconds. This covers dashboard, report, and chatbot API paths on ECS."

How measured: "API response time metrics from the deployed application. Dashboard and report paths are deterministic SQL, so they are fast. The chatbot path includes LLM generation, so individual chatbot queries can be slower. The p90 is the overall API performance, not a single endpoint."

If they push: "The chatbot path has higher latency because it includes LLM generation. The dashboard path is sub-100ms because it is deterministic SQL. The p90 across all paths is under 210ms."

60% operational efficiency improvement from dashboards (Ylogx)

What it means: "30 real-time KPI dashboards replaced manual reporting and ad-hoc queries. Operational efficiency improved by 60% because operators could see real-time metrics without requesting reports."

How measured: "Product-level estimate. Before dashboards, getting a KPI number required a manual report or a custom query. After dashboards, the number is live on the screen."

If they push: "The 60% is a product-level outcome. I would distinguish my personal contribution — building the dashboard APIs and React/Recharts frontend — from the overall efficiency claim."

200+ websites researched (IQVIA DeepQuery)

What it means: "DeepQuery fans out search across DuckDuckGo, Bing, and Firecrawl and aggregates URLs from 200-plus distinct websites for a single research run."

How measured: "Count of unique domains in the all_urls.json artifact after the aggregation step."

If they push: "200+ is the search breadth per run, not a throughput number. The URL intelligence filter then scores and selects a subset for scraping."

180+ page BRD documents (IQVIA BRD processor)

What it means: "The BRD processor ingests and processes documents of 180-plus pages."

How measured: "Document page count. This is the input document size we tested against, not a throughput metric."

17th / 80+ teams (Team Horizon)

What it means: "Team Horizon placed 17th globally out of 80-plus teams at the European Rover Challenge 2024."

Discrepancy: "Resume says 17th, team website says 18th and number 1 in India. I volunteer the discrepancy. I do not want to defend a number I am not sure about."

60 FPS video feed (Team Horizon)

What it means: "GStreamer pipeline delivering real-time camera feed from the rover to the operator controller at 60 frames per second."

If they push: "60 FPS is the pipeline configuration. Actual sustained frame rate depends on encoding, transport bandwidth, and the embedded compute platform. I need to be careful not to guarantee 60 FPS under all conditions."

40% obstacle detection accuracy improvement (Team Horizon)

What it means: "Costmap-based obstacle detection using ZED 2 depth and spatial mapping improved accuracy by 40% compared to approaches without depth-based environmental perception."

If they push: "The 40% is on the resume. The comparison baseline is video-only approaches without stereo depth. I should be able to explain the measurement methodology — comparison of false obstacle rates with and without ZED depth data."

2M+ data points per second (ZED 2)

What it means: "The ZED 2 spatial mapping pipeline processed on the order of millions of spatial points per second under our configured mapping workload."

If they push: "Exact throughput depends on camera mode (HD720 at 60 FPS is recommended for spatial mapping), mapping resolution configuration (2cm, 5cm, 8cm presets), and compute platform (NVIDIA Jetson Orin with RTX 3050 Ti-class GPU). I will not guarantee 2M as a precise constant — it is the order of magnitude."

55% collision risk reduction (Team Horizon)

What it means: "Costmap-based path planning using the ZED 2 perception output reduced collision risk by 55% compared to planning without depth-based environmental information."

If they push: "The comparison is with and without the costmap derived from ZED depth. Without depth, the planner has geometric path only; with depth, it avoids obstacles. The 55% is the reduction in collision incidents during testing."

Argus: 73% → 89% mAP, 24 FPS, 15,000+ images, 50% violation reduction

What it means: "Initial YOLOv9 model was 73% mAP. Expanded training dataset to 15,000-plus images. Reached 89% mAP at 24 FPS real-time inference. Deployed across 20-plus camera feeds with PostgreSQL logging. 50% reduction in safety violations through automated alerts."

If they push on mAP: "Mean Average Precision — area under the precision-recall curve for each class, averaged across classes. I used the standard COCO evaluation protocol."

If they push on 50%: "Before-and-after comparison of detected violations. If they want the exact population, time window, and facility, I say I need to lock that methodology."

GiftedBooks: 3–10 min doubt resolution, +35% reading, +50% engagement, 2.5x comprehension

What it means: "User-testing results we reported for the project. Doubt resolution dropped from hours to 3–10 minutes. Reading efficiency improved 35%. Session engagement improved 50%. Content comprehension was 2.5x faster."

If they push: "Not a randomized controlled trial. User-testing results from the project. If they want sample size or protocol, I say I need to pull that."

StratifyLabs: 30% ML iteration time reduction

What it means: "Browser-based inference removes environment setup — no local CUDA, no dataset download, no dependency management. The 30% is a workflow time savings estimate."

If they push: "The 30% is a project-level estimate comparing full local setup workflow against browser-based inference. I do not have a stopwatch measurement."

🛡️ RECOVERY LINES — USE WHEN YOU DO NOT KNOW

"That is a detail I need to verify — I do not want to guess in the room."

"I implemented the middleware and the DDL generator. I did not hand-maintain that specific SQL file. If you want the exact policy name, I would need to check the code."

"I would rather name the gap than claim something I cannot walk through on a whiteboard."

"The resume says the number. The exact measurement methodology is something I need to lock. I will not invent a protocol."

"That was another team member's responsibility. I can explain the concept and how my component interfaced with it, but I will not claim I implemented it."

"I do not have that specific data point. I can tell you what I do know and what I would need to verify."

"My clearest personal contributions were X, Y, and Z. The overall product-level metric reflects the broader team effort. I want to distinguish the two."

🎯 BAR RAISER ROUND 4 — QUESTION BANK

🅰️ OPTION 1: BEHAVIORAL + LP HEAVY BAR RAISER

This is the pattern when the Bar Raiser focuses on cross-LP behavioral probing with one medium coding problem. They are testing judgment, honesty, and depth of ownership — not just technical skill.

Opening: "Walk me through your resume in 2 minutes."

"I graduated from CUSAT in May 2026 with a B.Tech in Computer Science, CGPA 8.42. Two internships — at IQVIA from April 2026 where I built a multi-agent deep research platform with LangGraph and a hybrid RAG system for BRD documents using Neo4j and Azure AI Search, and at Ylogx from November 2024 to October 2025 where I built a full-stack AI BI application with a SQL-RAG chatbot, custom report builder, 30 dashboards, and row-level security on PostgreSQL, deployed on AWS with ECS and CloudFront. Before that I was core software on Team Horizon's Mars rover — we placed 17th globally at ERC 2024. Personal projects include Argus for industrial safety using YOLOv9, StratifyLabs as a computer vision SaaS platform, and GiftedBooks as a VR learning suite with grounded RAG."

Q: "Tell me about a time you took on something that was not your job."

Use Y1 — inherited chatbot. Speak the full story, then expect:

Follow-up: "Why did you not just wait for your manager to assign it?"

"Because the product depended on the chatbot and the person who understood it was leaving. Waiting for a staffing decision would have created a knowledge gap that was harder to close later. The risk of acting was lower than the risk of waiting."

Follow-up: "What was the hardest part?"

"Understanding the assumptions in someone else's code. The prompt pipeline assumed MySQL syntax against a PostgreSQL database. That was not obvious from reading the code — it only surfaced when I looked at the actual generated SQL."

Follow-up: "How did you know when you had learned enough to start making changes?"

"When I could reproduce the system locally and trace a request from the frontend through NestJS to FastAPI to the LLM to SQL generation and back. I did not need to understand every library — I needed to understand the data flow."

Q: "Tell me about a time you disagreed with a teammate or manager."

Use Y4 — structured JSON vs text dump.

Follow-up: "What would you have done if they said no?"

"I would have asked what specific concern drove the decision, made sure I understood it, and then committed to making the text-dump path as good as possible. Disagreement is useful only until the decision is made."

Follow-up: "Have you ever been wrong about a technical decision?"

"Yes — early in the RLS implementation, I was treating empty JSON responses as evidence that Postgres had rejected a query. That is wrong. An empty result from RLS means the rows were invisible under USING, not that Postgres rejected anything. Permission denied is a different path. I corrected my understanding and my explanation."

Q: "Tell me about a time you failed or made a mistake."

Use Y2 — data:null. Frame it as a failure you caused by not catching the format mismatch earlier.

"The chatbot was returning data:null to users even when the warehouse had rows. Users saw 'no data available' and lost trust in the tool. The SQL was correct. The data existed. The failure was a serialization mismatch between the execution result and the frontend parser's expected shape. I should have caught it earlier by documenting the response format contract explicitly. Instead I traced it after users reported the issue."

Follow-up: "What did you do to prevent it from happening again?"

"I documented the exact response format contract and added validation at the formatting step to catch mismatches before they reached the frontend."

Follow-up: "What did you learn from this?"

"That correctness at one layer does not guarantee correctness at the next. The query was right, the data was right, but the user still got nothing. I learned to trace the full path, not just verify individual components."

Q: "Tell me about a time you went above and beyond for a customer."

Use S2 — GiftedBooks. Focus on rejecting cross-user retrieval.

Follow-up: "How do you define 'customer' if this was a personal project?"

"The student using the product. They had a specific workflow — find material, understand it, resolve a doubt. I designed the product around that workflow, not around what was technically impressive."

Q: "Tell me about a time you had to deliver under a tight deadline."

Use H1 — GStreamer for ERC 2024.

Follow-up: "What did you sacrifice to meet the deadline?"

"I did not evaluate every possible streaming framework exhaustively. I evaluated GStreamer against the main alternatives, decided it fit our constraints, and built the pipeline. If I had spent two more weeks evaluating, we would not have had a working video feed for the competition."

Q: "Tell me about a time you simplified something complex."

Use Y4 — ElementRenderer reuse.

Follow-up: "Was there a case where reuse would have been wrong?"

"Yes — if the renderer had forced unrelated requirements into one abstraction, I would have separated them. Reuse only made sense because the contracts were sufficiently compatible."

Q: "Tell me about your biggest technical accomplishment."

Use Y5 — RLS/RBAC. Full implementation walkthrough.

Follow-up: "What is one thing you would do differently?"

"Ship FORCE ROW LEVEL SECURITY. The generator emits ENABLE but not FORCE. Owner connections bypass RLS without FORCE. That is a real gap I would close."

Q: "Why Amazon?"

"I want to own services end to end — HTTP APIs, data access, security, tests, and deploy. At Ylogx I got close to that with the chatbot, dashboards, RLS, and AWS deployment, but as an intern I did not own the production pager. At Amazon, SDE-I owns their service. I also want to work at a scale where the security decisions I made at Ylogx — like row-level isolation — are not optional but required. Amazon's scale forces that discipline."

🅱️ OPTION 2: DEEP DIVE TECHNICAL ON IQVIA PROJECTS

This is the pattern when the Bar Raiser goes deep on your most recent internship. They will pick one project and drill for 20–30 minutes.

DEEP DIVE: DeepQuery (LangGraph Multi-Agent Research)

Q: "Walk me through DeepQuery's architecture."

"DeepQuery is a multi-stage research pipeline orchestrated by LangGraph. A natural language topic comes in, and the pipeline has eleven nodes: planner generates a research plan, light search does initial seed queries to ground the topic, clarifier optionally asks the human for scope refinement, context builder assembles what we know so far, query generator creates diverse search queries, search fanout dispatches queries across DuckDuckGo, Bing, and Firecrawl in parallel, aggregator deduplicates URLs, URL intelligence scores and filters URLs before we spend money scraping, scrape controller fetches pages in waves with content dedup using MD5 hashing, cross-page reasoning extracts facts and knowledge blocks by reasoning across multiple scraped pages, decision engine evaluates completeness and decides to loop back or proceed, and synthesizer generates the final markdown report with sources and confidence scores. Every node reads and writes to a shared DeepQueryState TypedDict. The decision engine's ability to loop back to search or scrape is why I used LangGraph instead of a sequential chain."

Q: "What is DeepQueryState exactly? Show me the shape."

"It is a TypedDict with operator reducers. Key fields include topic, plan, search_results from light and fanout searches, all_urls, filtered_urls, visited_urls, scraped_pages, knowledge_blocks, facts, gaps, decision with action and reasoning, and answer which is the final report. Lists use operator.add as the reducer so multiple nodes can append without overwriting. The state is the shared memory for all eleven nodes."

Q: "How does URL intelligence scoring work?"

"Before scraping, the URL intelligence node evaluates each URL for relevance, authority, and expected information density. It uses the LLM to score URLs against the research plan, filtering out low-value pages before we spend API credits on scraping. This is the 'think before expensive actions' principle — scraping is expensive, so we filter first."

Q: "How do you handle rate limiting and cost?"

"DeepQueryConfig has caps: max search queries, max URLs to scrape, max iterations for the decision engine, and character budgets for LLM context windows. If we hit any cap, the decision engine proceeds to synthesis with whatever we have. I also use wave-based scraping — scrape a batch, extract facts, check completeness, then decide whether to scrape more. This avoids scraping everything upfront."

Q: "What is cross-page reasoning?"

"After scraping, the cross-page reasoning node takes all scraped content and reasons across pages to extract structured facts and knowledge blocks. A fact is a specific claim with a source. A knowledge block is a synthesized piece of understanding derived from multiple pages. This is different from just concatenating scraped text — it is extracting structured information before synthesis."

Q: "What happens if the research topic is ambiguous?"

"The clarifier node can present the human with a clarification question based on the light search results. The human can refine the scope, and the pipeline continues with the refined topic. If human input is not available, the system proceeds with its best interpretation."

Q: "What is the output artifact structure?"

"Each run saves to a timestamped folder: search_results/ with light and fanout JSON, urls/ with all, filtered, and visited URL lists, scraped_pages/ with markdown content and an index, knowledge/ with blocks, facts, and gaps, and output/ with final_report.md, sources.json with confidence scores, and metadata.json with run statistics."

Q: "What would you change for production?"

"Three things. First, persistent state — right now it uses MemorySaver in RAM, so a crashed run cannot resume. I would use a durable checkpoint backend. Second, streaming — right now the user waits until synthesis is complete. I would stream intermediate results so the user can see progress. Third, coverage metrics — I need a better way to measure whether the research actually covered the topic versus just finding many pages."

Q: "How is this different from Perplexity or ChatGPT search?"

"Those are single-turn search-and-answer. DeepQuery is iterative — it plans, searches, reasons across sources, evaluates completeness, and decides to search again or stop. The decision engine can loop multiple times. It also saves full artifacts for every run so you can audit the research process, not just the final answer."

DEEP DIVE: BRD Hybrid RAG (Neo4j + Azure AI Search)

Q: "Walk me through the BRD processor architecture."

"The BRD processor has two LangGraph state machines. The ingestion graph has eight nodes: load the document as PDF or DOCX, extract text, chunk it, generate embeddings with Azure OpenAI at 3072 dimensions, index chunks into Azure AI Search, extract structured requirements with an LLM, build a Neo4j knowledge graph with Document, Requirement, and Entity nodes and DEPENDS_ON edges, and save metadata. The test-case generation graph has five nodes: load requirements from Neo4j, retrieve relevant chunks from Azure AI Search using hybrid retrieval, gather graph context for requirement dependencies from Neo4j, fan out with asyncio.gather to generate test cases in parallel across requirement groups, and aggregate results."

Q: "Why Neo4j? Why not just vector search?"

"Vector search finds semantically similar text. It does not understand that Requirement A depends on Requirement B, or that a change to B should trigger re-testing of A. The graph stores these structural relationships — Document nodes at the top, Requirement nodes with IDs, titles, types, and priorities, Entity nodes for domain concepts, and DEPENDS_ON edges between requirements. When generating test cases, the graph context tells the LLM which requirements are related, not just which text is similar."

Q: "What does the Neo4j schema look like?"

"Three node types: Document with properties like title and source, Requirement with id, title, description, type, priority, and Entity with name and type. Two relationship types: HAS_REQUIREMENT from Document to Requirement, and DEPENDS_ON between Requirements. The schema is created during ingestion using Cypher queries."

Q: "What is hybrid retrieval in Azure AI Search?"

"Azure AI Search supports three retrieval modes: keyword search using BM25, vector search using embeddings, and semantic ranking that re-ranks results using a transformer model. Hybrid combines keyword and vector — you get both keyword precision for exact terms and semantic recall for conceptually similar content. I use the hybrid mode for BRD chunk retrieval."

Q: "What are the 3072-dimensional embeddings?"

"Azure OpenAI's text-embedding-3-large model produces 3072-dimensional vectors. The embedding service has batch processing to handle large documents, retry logic with the tenacity library for transient API failures, and a zero-vector fallback for any chunks that fail to embed. The embeddings are stored in the Azure AI Search index alongside the text content."

Q: "How does async fan-out work for test-case generation?"

"The test-case generation graph loads all requirements, retrieves relevant chunks and graph context, then uses asyncio.gather to generate test cases for multiple requirement groups in parallel. Each group gets its own LLM call with the requirement, its dependencies from the graph, and relevant text chunks from the vector index. This is significantly faster than generating test cases sequentially."

Q: "What did LangSmith tracing show you?"

"It showed retrieval gaps — cases where the system retrieved irrelevant chunks and generated confident-sounding but wrong test cases. Without tracing, those look like correct outputs. LangSmith lets me trace from the final test case back to the specific retrieval step, the specific chunks retrieved, and the specific LLM prompt that generated it. I can diagnose whether the failure was in retrieval or generation."

Q: "What is the difference between the two graphs in this project?"

"Two completely different meanings of 'graph.' The LangGraph workflow graph is for orchestration — it controls the sequence of operations: load, extract, chunk, embed, index, build graph, save. The Neo4j knowledge graph is for data — it stores the structured relationships between documents, requirements, and entities. LangGraph tells the pipeline what to do next. Neo4j stores what the pipeline has learned about the document."

🔬 PROJECT DEEP DIVES — NON-INTERNSHIP PROJECTS

DEEP DIVE: ARGUS — Industrial Safety AI System

Hackathon: CODE reCET (March 2024) — Won 1st Place

Team: Team CUSAT (Adarsh Vishwakarma, Sajad Hussain, Ruvais P, Abinash Singh)

Devfolio: devfolio.co/projects/argus-62de

Q: "Walk me through Argus."

"Argus is a real-time PPE compliance monitoring system. The problem is industrial safety — ILO estimates 2.3 million work-related deaths per year with $1.25 trillion in economic impact. Workers on factory floors are supposed to wear hard hats, safety vests, gloves, and other PPE, but compliance is inconsistent and manual inspection does not scale. Argus uses computer vision to detect PPE violations in real-time from camera feeds, alert supervisors proactively, and track compliance data over time. The initial model achieved 73% mAP. I refused to deploy at that accuracy for a safety system — one in four violations missed is not acceptable. I expanded the training dataset to over 15,000 images, tuned augmentation and hyperparameters, and brought it to 89% mAP at 24 FPS. The deployed system supports 20-plus camera feeds with PostgreSQL logging and automated alerts, reducing safety violations by 50%."

Q: "What model architecture did you use?"

"YOLOv9 for the final production system. YOLO — You Only Look Once — is a single-stage object detector. It divides the image into a grid, predicts bounding boxes and class probabilities in one forward pass, which makes it fast enough for real-time inference. YOLOv9 specifically adds improvements like Programmable Gradient Information and GELAN architecture for better gradient flow and feature extraction. The resume says YOLOv9. The devfolio hackathon submission originally used YOLOv8 nano for the 24-hour prototype — I upgraded to YOLOv9 when I continued developing the project after the hackathon."

Q: "What is mAP and how is it calculated?"

"Mean Average Precision. For each class — hard hat, safety vest, gloves, no hard hat, no vest — I compute the precision-recall curve by varying the confidence threshold. The area under that curve is the Average Precision for that class. mAP is the mean of AP across all classes. 73% mAP means the average detection quality was 73% across all PPE classes. I used the standard COCO evaluation protocol with IoU threshold of 0.5."

Q: "What is IoU?"

"Intersection over Union. It measures how much the predicted bounding box overlaps with the ground truth. IoU of 0.5 means the predicted box must overlap at least 50% with the actual box to count as a correct detection. Higher IoU thresholds are stricter."

Q: "How did you get from 73% to 89%?"

"Primarily more data and better data. I expanded from the initial dataset to over 15,000 images with diverse angles, lighting conditions, indoor and outdoor settings, different PPE types, and different worker poses. I also tuned data augmentation — random crops, color jitter, horizontal flips, mosaic augmentation — to make the model more robust. I tuned learning rate, batch size, and training epochs. The improvement was data-driven, not architecture-driven."

Q: "What is data augmentation and why does it help?"

"Data augmentation artificially increases the training set by applying transformations to existing images — random rotations, color changes, crops, flips, mosaic where four images are combined into one. It helps because the model sees more variations of the same objects, making it more robust to changes in lighting, angle, and background. For PPE detection specifically, workers appear at different angles and in different lighting conditions, so augmentation is critical."

Q: "How does real-time inference work at 24 FPS?"

"Each frame from the camera feed is resized to the model's input resolution, passed through the YOLOv9 forward pass, and the output is post-processed with non-maximum suppression to remove duplicate detections. At 24 FPS, the model has about 42 milliseconds per frame. YOLOv9 is designed for this — single-stage detection in one forward pass, no region proposal network needed."

Q: "What is non-maximum suppression?"

"NMS removes duplicate bounding boxes for the same object. The detector may predict multiple overlapping boxes for one person. NMS keeps the highest-confidence box and suppresses any overlapping boxes with IoU above a threshold — typically 0.45. This ensures each object gets one detection, not five."

Q: "How did you handle 20+ camera feeds?"

"Containerized deployment. Each camera feed runs as a separate inference instance. Violations are logged to PostgreSQL with timestamp, camera ID, detection class, confidence score, and bounding box coordinates. Automated alerts trigger when a violation is detected. The system can scale horizontally by adding more containers."

Q: "What classes does the model detect?"

"PPE-specific classes: hard hat, no hard hat, safety vest, no safety vest, gloves, no gloves, face mask, no face mask. The model detects both the presence and absence of each PPE item. A 'no hard hat' detection on a person's head is a violation."

Q: "What were the engineering challenges?"

"The biggest was real-time data sync between camera feeds and the Firebase database during the hackathon. Camera feeds produced detections faster than the database could ingest them, causing latency and data inconsistency. I solved it with optimized data streaming using compression and tuned network config, parallel processing across multiple threads, and batch processing to reduce individual write load. For the post-hackathon production version with PostgreSQL, batch inserts handled the write throughput."

Q: "What would you improve?"

"Three things. First, a human review loop for edge cases — the model flags, a human confirms. Second, tracking across frames — right now each frame is independent. Person tracking across frames with something like DeepSORT would let the system count unique violations instead of re-detecting the same person every frame. Third, better edge-case handling for partially visible workers or unusual PPE types."

DEEP DIVE: STRATIFYLABS — Computer Vision SaaS Platform

Live at: stratifylabs.design / stratify-labs-n5mr.vercel.app

Built with: Next.js, Three.js, WebGL, Clerk Auth, Gemini API

Q: "Walk me through StratifyLabs."

"StratifyLabs is a computer vision training and experimentation platform. The idea was to reduce the full CV workflow — annotate data, train a model, run inference, evaluate results — into one browser-based platform instead of requiring local CUDA setup, dataset downloads, and environment configuration. The platform has five main modules: a dataset marketplace called Stratos with 50-plus pre-trained models and datasets with community profiles, an image annotation tool supporting classification and segmentation tasks with upload and dataset selection, a training platform where you configure architecture, optimizer, and hyperparameters and kick off training with live logs, an inference center supporting five task types, and a 3D VisionLab with WebGL-rendered environments, URDF robot model loading, and AI voice-enabled RAG bots using Gemini for interaction with simulated environments. The resume says it reduced ML iteration time by 30% through browser-based inference."

Q: "What inference tasks does the platform support?"

"Five task types: Classification — assigning labels to images, Object Detection — detecting and localizing objects with bounding boxes, Obstacle Detection — identifying obstacles for navigation systems, URDF Simulation — simulating robot models in 3D, and Segmentation — pixel-level classification of image regions. The user selects a task, uploads an image or picks from the dataset, selects a model, and the platform runs inference and displays results."

Q: "What model architectures are available for training?"

"Eight architectures: ResNet, EfficientNet, VGG, Inception, MobileNet, DenseNet, ViT (Vision Transformer), and ConvNeXt. The user selects the architecture, the optimizer, epochs, and the train/validation/test split. The platform connects to a GPU endpoint for training and streams training logs back to the browser."

Q: "Can you explain each architecture briefly?"

"ResNet introduced skip connections — residual blocks that let gradients flow through shortcut paths, solving the vanishing gradient problem and enabling very deep networks like ResNet-50 and ResNet-152. EfficientNet uses compound scaling — it scales width, depth, and resolution together instead of independently, giving better accuracy per FLOP. VGG is an older architecture using stacked 3x3 convolutions, simple but large. Inception uses parallel convolution branches of different kernel sizes in each block to capture multi-scale features. MobileNet uses depthwise separable convolutions — splitting the convolution into a depthwise step per channel and a pointwise 1x1 step — which dramatically reduces parameters and computation, making it efficient for mobile and edge deployment. DenseNet connects every layer to every other layer in a dense block, improving feature reuse. ViT — Vision Transformer — treats the image as a sequence of patches, applies transformer attention like in NLP, and has shown strong results when pre-trained on large datasets. ConvNeXt modernizes ResNet with design principles borrowed from transformers — larger kernel sizes, fewer activation functions, layer normalization instead of batch normalization."

Q: "What optimizers are available?"

"Five: SGD — stochastic gradient descent, the baseline optimizer with momentum. Adam — adaptive moment estimation, combines momentum with per-parameter learning rate adaptation using first and second moment estimates. RMSProp — divides the learning rate by a running average of gradient magnitudes. Adagrad — adapts the learning rate per parameter based on historical gradients, good for sparse data. AdamW — Adam with decoupled weight decay, which separates the L2 regularization from the gradient update for better generalization."

Q: "Why Adam over SGD?"

"Adam converges faster because it adapts the learning rate per parameter. SGD with momentum can achieve better generalization but requires more careful learning rate tuning and longer training. For a platform where users want quick results, Adam is a better default. For production training where every fraction of a percent matters, SGD with a cosine annealing schedule can outperform Adam."

Q: "What is the annotation tool?"

"Two task types — classification and segmentation. For classification, the user defines labels like 'Cat, Dog, Bird,' uploads images or selects from the Stratos dataset, and assigns one or more labels to each image. For segmentation, the user draws pixel-level masks on the image. The tool exports annotations in standard formats that can be used for training."

Q: "What is the VisionLab?"

"A 3D environment rendered with Three.js and WebGL. It has VR support with an 'Enter VR' button. You can load URDF robot models — URDF is Unified Robot Description Format, the standard XML format for describing robot geometry and joints. The lab includes AI voice-enabled RAG bots using Gemini for conversational interaction within the 3D environment. It has three conversation modes: Hindi Learning, Hindi to English, and Normal Chat."

Q: "What is the marketplace?"

"Stratos is the dataset and model marketplace. Each project has a dataset with metadata — size in GB, image count, annotation count, class count — and a best model performance summary with architecture name, accuracy, model size, and inference time. For example, the Urban Object Detection project has 12,500 images, 87,300 annotations across 28 classes, and its best model UrbanDetect-L achieves 94.8% accuracy at 12.5ms inference time in 165MB. Users can browse, download datasets, download models, view documentation, and see code examples. Community profiles let users contribute and share."

Q: "How does browser-based inference reduce ML iteration time by 30%?"

"The traditional CV workflow is: download dataset, install CUDA and dependencies, configure environment, write training code, train, evaluate. Browser-based inference removes the first three steps entirely — no local setup, no dependency management. The 30% is a project-level estimate comparing the full local setup workflow against opening the browser and running inference immediately. I do not have a controlled measurement."

Q: "What is the tech stack?"

"Next.js for the frontend and routing, Three.js and WebGL for the 3D VisionLab, Clerk for authentication, Gemini API for the AI voice bots, and the training module connects to a configurable GPU endpoint that serves the PyTorch training loop and streams logs back via API responses."

Q: "What would you change?"

"Three things. First, server-side model hosting — right now the training module requires a GPU endpoint URL. I would integrate cloud GPU providers so users do not need their own GPU. Second, experiment tracking — I would add MLflow or Weights & Biases style experiment tracking so users can compare runs. Third, collaborative annotations — right now annotation is single-user. Multi-user annotation with consensus would be more useful for real datasets."

DEEP DIVE: GIFTEDBOOKS — VR Learning Suite with RAG

Live at: giftedbooks.study

Stack: Next.js, Three.js, RAG, Gemini, PYQ analysis

Q: "Walk me through GiftedBooks."

"GiftedBooks is a VR-based learning suite designed around the student study loop. The student authenticates, uploads their own study material as a PDF, and the system chunks and embeds it once with user and document metadata. At question time, I retrieve a small user-scoped set of chunks and generate the answer grounded in their file, with a p90 API response time under 300ms. The second component is PYQ analysis — Previous Year Question analysis — which ranks observed topics from past exam papers as deterministic analytics, not an LLM guessing the exam. The third component is the VR interactive labs with 3D environments and AI avatars. In user testing, doubt resolution dropped from hours to 3–10 minutes, reading efficiency improved 35%, session engagement improved 50%, and content comprehension was 2.5x faster."

Q: "What is RAG and how does your implementation work?"

"Retrieval-Augmented Generation. Instead of relying on the LLM's training data, I retrieve relevant chunks from the student's own document and include them in the prompt. The LLM generates an answer grounded in those chunks. My implementation: when the student uploads a PDF, I chunk the text, embed each chunk with user and document metadata, and store the embeddings. At query time, I embed the question, retrieve the top-k most similar chunks scoped to that user and document, and pass them to the LLM with the question. The answer is grounded in their material, not in the general internet."

Q: "Why do you scope retrieval to user and document?"

"Without user and document scoping, one student's question could retrieve chunks from another student's uploaded material. That is a trust failure — you are answering one person's doubt from another person's notes. User-scoped retrieval ensures isolation. It also keeps the retrieval set small, which helps latency."

Q: "What embedding model do you use?"

"I use the embedding API from the LLM provider. The chunks are embedded once at upload time, and the query is embedded at question time. The retrieval is based on cosine similarity between the query embedding and the stored chunk embeddings."

Q: "How is PYQ analysis different from RAG?"

"Completely different. PYQ is deterministic analytics, not generation. I take past exam papers, extract the topics and questions, and rank topics by observed frequency and recency. This tells the student 'these topics appeared in 7 out of the last 10 papers' — that is a fact, not a prediction. The LLM is not guessing the exam. PYQ is a statistical ranking of observed data."

Q: "Why not let the LLM predict the exam?"

"Because predicting an exam from past papers is not the LLM's job, and the student would blame the product if the prediction was wrong. Ranking observed topics is honest. Predicting the exam paper is false confidence. I would rather give the student observed frequency data and let them make their own study decision."

Q: "How did you get sub-300ms API response time?"

"Small retrieval set — user and document scoping means the vector search is over a narrow partition, not all users' embeddings. Embedding is done once at upload time, so query time is just retrieval plus generation. The generation call is the dominant cost. I kept the chunk count small to minimize generation latency."

Q: "What is the VR component?"

"Three.js and WebGL rendering of 3D interactive environments. AI avatars use the Gemini API for conversational interaction. The VR component is the engagement layer — it makes the study experience interactive rather than a static chatbot next to a PDF. The avatar can explain concepts in the 3D environment."

Q: "What are the metrics?"

"User-testing results we reported: doubt resolution dropped from hours to 3–10 minutes, reading efficiency improved 35%, session engagement improved 50%, and content comprehension was 2.5x faster. These are not from a randomized controlled trial — they are from project user testing. If they want sample size or protocol, I say I need to pull that."

Q: "What about the GitHub README mismatch?"

"The GiftedBooks GitHub README currently describes AegisAI, not GiftedBooks. That is a different personal-safety project. The resume and giftedbooks.study are GiftedBooks. I would volunteer this discrepancy rather than hope they do not notice."

Q: "What would you change?"

"Four things. First, a citation-facing eval so 'grounded' is measurable — I can verify that the answer actually came from the retrieved chunks. Second, fix the README immediately. Third, write down the user-testing protocol so the metrics have a denominator I can defend. Fourth, add collaborative features — students studying the same material should be able to share notes without breaking isolation."

BAR RAISER CURVEBALL QUESTIONS — LOW-PROBABILITY BUT HIGH-IMPACT

Q: "If I gave you a service that processes 10,000 requests per second, how would you add row-level security without killing latency?"

"The key constraint is that SET ROLE and set_config are per-transaction. At 10K RPS, I would pool connections per tenant role instead of SET ROLEing on every request. If the number of distinct roles is small enough, I can maintain a connection pool per role. If it is too large, I would use connection-level settings with session-mode PgBouncer, where each session is bound to one role. I would also evaluate whether RLS is the right tool at that scale versus a sharded database per tenant."

Q: "You used LangChain at Ylogx and LangGraph at IQVIA. What is the actual difference?"

"LangChain is a framework for building LLM applications — chains, prompts, output parsers, sequential pipelines. LangGraph extends it with stateful graph orchestration — you define nodes and edges on a StateGraph, and the execution can follow conditional paths and loop. The fundamental difference is that LangChain is linear — A then B then C. LangGraph is a graph — A then B, then conditionally back to A or forward to C. The decision engine in DeepQuery requires looping, which a LangChain chain cannot do."

Q: "How would you test an LLM-powered feature?"

"Three layers. First, deterministic validation — is the SQL valid? Is it SELECT-only? Does it reference allowed tables? That is testable without the LLM. Second, input-output evaluation — given these test questions, does the system return reasonable SQL and results? That uses saved test cases and a reference dataset. Third, retrieval evaluation — for RAG systems, did we retrieve the right chunks? LangSmith tracing lets me inspect retrieval quality per query. I would not write unit tests for the LLM's output. I would write tests for everything around it."

Q: "What is the difference between precision and recall? When would you optimize for each?"

"Precision is the fraction of detections that are correct — of everything the model flagged, how many were real violations? Recall is the fraction of real violations that were detected — of everything that was actually a violation, how many did the model catch? For PPE safety, I optimize for recall — I would rather flag a non-violation than miss a real one. For a spam filter, I might optimize for precision — I would rather let a spam email through than block a legitimate one."

Q: "How does PostgreSQL implement RLS internally?"

"RLS policies are implemented as security barrier views internally. When a SELECT hits a table with RLS enabled, PostgreSQL rewrites the query to include the USING clause as a security-barrier filter. The optimizer cannot push user-defined predicates past the security barrier — this prevents a malicious WHERE clause from leaking information about invisible rows through timing or error messages. The USING runs first, then the user's WHERE runs on the already-filtered rows."

Q: "You mentioned FORCE ROW LEVEL SECURITY as a gap. What exactly does FORCE do?"

"Without FORCE, the table owner bypasses RLS — they see all rows regardless of policies. FORCE ROW LEVEL SECURITY makes even the table owner subject to policies. In my system, the middleware SET ROLEs to a non-owner role, so owner bypass is only a risk if something executes as the owner. The dashboard last-updated query and the executeWithoutRLS path run as owner — those are the specific gaps where FORCE would add protection."

Q: "What is the CAP theorem and how does it apply to your BI system?"

"CAP says a distributed system can guarantee at most two of Consistency, Availability, and Partition Tolerance. My BI system uses a single PostgreSQL RDS instance, so it is not distributed in the CAP sense — it is a monolithic database. If I added read replicas for dashboard queries, I would have eventual consistency — a dashboard might show slightly stale data while the replica catches up. For a BI tool where data updates periodically through Tally imports, that eventual consistency is acceptable."

Q: "If your Redis cache returns stale data for a critical financial report, what happens?"

"The user sees last period's number and makes a decision based on it. That is a business failure. For critical financial reports, I would either bypass the cache entirely or use a very short TTL. The cache is most valuable for exploratory chatbot queries where a few minutes of staleness is acceptable. For deterministic dashboard reports, the queries are fast enough without caching."

PROPER INTRODUCTION — SPEAK THIS

90-Second Intro (When They Say "Tell Me About Yourself")

"I am Adarsh Vishwakarma. I am a final-year Computer Science student at Cochin University of Science and Technology, graduating May 2026 with a CGPA of 8.42. I have two industry internships.

Most recently at IQVIA, starting April 2026, I am building AI systems for enterprise document intelligence — a multi-agent deep research platform using LangGraph that orchestrates eleven nodes to search, scrape, reason across sources, and synthesize reports iteratively, and a hybrid RAG system that processes 200-plus page BRD documents using Neo4j for requirement dependency graphs and Azure AI Search for hybrid vector-plus-keyword retrieval, generating test cases with async fan-out. I use LangSmith for tracing and evaluation so I can distinguish retrieval failures from generation failures.

Before that, at Ylogx from November 2024 to October 2025, I built a full-stack AI-powered BI application end to end — a SQL-RAG chatbot using LangChain and FastAPI where natural language questions generate validated SQL, a custom report builder with deterministic dashboards, and the security layer with PostgreSQL row-level security and RBAC so three tenant tiers see only their own rows. I deployed the system on AWS using ECS, ALB, CloudFront, and Route 53 with GitHub Actions CI/CD. The chatbot improved analyst data-retrieval productivity by 65%, reports generated 40% faster, and the system maintained 99.9% uptime.

Outside of internships, I was core software on Team Horizon's Mars rover that placed 17th out of 80-plus teams globally at the European Rover Challenge 2024 — I owned the GStreamer video pipeline and ZED 2 perception integration. I have also built Argus, a YOLOv9-based real-time PPE detection system that won first place at CODE reCET, StratifyLabs, a browser-based computer vision training and inference platform, and GiftedBooks, a VR learning suite with grounded RAG.

I am excited about Amazon because I want to own services end to end at a scale where decisions like row-level tenant isolation are not optional but required."

45-Second Intro (If They Cut You Short)

"I am Adarsh Vishwakarma, final-year CS at CUSAT. Two internships — at IQVIA I am building multi-agent research with LangGraph and hybrid RAG with Neo4j and Azure AI Search for enterprise BRD processing. At Ylogx I built a full-stack AI BI platform with a SQL-RAG chatbot, 30 KPI dashboards, row-level security on PostgreSQL, and deployed on AWS with ECS. Before that, I was on Team Horizon's Mars rover — 17th globally at ERC 2024. Personal projects include Argus for industrial safety with YOLOv9 and GiftedBooks for VR-based learning with grounded RAG. I want to own services end to end at Amazon's scale."

🎯 BAR RAISER SIMULATION — LP-INTERLEAVED PROJECT DEEP DIVE

This section simulates the actual Bar Raiser pattern reported by candidates: they pick your favorite project from your resume, drill technically, then weave LP questions into the discussion. This is NOT separate LP + separate technical — they are mixed.

Phase 1: "Describe your favorite work from your resume."

Why they ask this: They want to see which project you are most proud of. It tells them where you have the deepest ownership. The follow-ups will test whether you actually built it or just listed it.

Speak this live — pick Ylogx (the deepest end-to-end ownership):

"My favorite work is the full-stack AI BI application I built at Ylogx. I chose this because it touched every layer I care about — a user-facing chatbot that generates SQL from natural language, deterministic dashboards and a report builder for structured analytics, and a security system with row-level tenant isolation on a shared PostgreSQL warehouse. I owned the full stack: the LangChain-based SQL-RAG pipeline on FastAPI, the NestJS backend with RBAC and RLS middleware, the React frontend with 30 KPI dashboards, and the AWS deployment with ECS, ALB, and CloudFront. What makes this my favorite is that it was not just building features — it was building trust. A chatbot that returns data:null when rows exist is a trust failure. A BI tool where one organization can see another organization's financials is a security failure. I had to make both of those impossible, not just unlikely. The system improved analyst data-retrieval productivity by 65%, generated reports 40% faster, and maintained 99.9% uptime."

Phase 2: Technical Questions — What, How, Why

Q: "Walk me through the architecture. What services are involved?"

"Three main services. FastAPI handles the LLM interaction — schema context assembly, dynamic prompt generation, SQL generation from natural language, and response formatting. NestJS is the application server — authentication, RBAC enforcement, RLS middleware, query execution, API routing, and the report builder logic. React is the frontend — 30 KPI dashboards, the chatbot interface, and the custom report builder. The database is PostgreSQL on RDS. Caching uses Redis for chatbot query results. Deployment is ECS with Docker containers behind an ALB, CloudFront for static assets, Route 53 for DNS, and GitHub Actions for CI/CD."

Q: "How does the SQL-RAG pipeline work specifically?"

"The user types a natural language question. The frontend sends it to NestJS, which forwards it to FastAPI. FastAPI assembles a prompt with the database schema context — table names, column names, types, relationships — and passes it to the LLM. The LLM generates a candidate SQL query. FastAPI validates the SQL — is it SELECT-only? Does it reference allowed tables? Is the syntax PostgreSQL-compatible? The validated SQL goes back to NestJS, which executes it within a per-request transaction where the session has already been SET ROLEd to the caller's tenant role. The results are formatted into structured JSON — chart type, data array, dimensions, metrics — and returned to the frontend where ElementRenderer draws the visualization."

Q: "Why did you choose LangChain instead of calling the LLM API directly?"

"LangChain gave me prompt templates with variables, output parsing, and chain composition without writing that plumbing from scratch. For a SQL-RAG pipeline where I needed to inject schema context dynamically, parse the LLM's output to extract SQL, and validate it before execution, the chain abstraction was useful. I did not use agents or complex LangChain features — I used it as a structured prompt-and-parse library. If I were building it today, I might use LangGraph for the conditional validation loop, but LangChain was sufficient for the sequential pipeline."

Q: "Why PostgreSQL over MySQL or MongoDB?"

"PostgreSQL has native row-level security — CREATE POLICY, ENABLE ROW LEVEL SECURITY, USING clauses. MySQL does not have equivalent RLS. MongoDB has field-level encryption and query filtering, but RLS in PostgreSQL is enforced at the database engine level, not the application level. That is a critical distinction — a bug in my application code cannot bypass PostgreSQL RLS. The security guarantee is in the database, not in my middleware."

Phase 3: LP Questions Interleaved During Discussion

Q: "During this project, tell me about a time you faced a conflict and how you resolved it."

"The conflict was about the chatbot response format. The existing approach was to dump raw text or table data from the LLM response directly to the frontend. I believed we should use structured JSON matching the same contract as the report builder's ElementRenderer. The counterargument was that it was working and refactoring would delay other features. I resolved it by building a small prototype that showed the same query rendered both ways — the structured version produced a chart that matched the deterministic dashboards, while the text dump required the user to re-interpret raw rows. The visual comparison made the case. I did not win by arguing louder — I won by showing the difference. After the decision was made, the text-dump approach was dropped and we committed to the structured path."

Why this answer works: It shows a real technical disagreement (not a personality conflict), a data-driven resolution (prototype, not argument), and commitment after the decision. It maps to Have Backbone; Disagree and Commit.

Q: "What was your manager's reaction to your work?"

"My manager valued the security work specifically — the RLS implementation was the kind of thing that is invisible when it works but catastrophic when it does not. The feedback I received was that the isolation layer gave the product credibility with clients who were evaluating multi-tenant BI tools. The chatbot productivity improvement was visible, but the security was what let the product be deployable to organizations that cared about data separation. I did not get negative feedback on the security approach. The gap I would name honestly is that FORCE ROW LEVEL SECURITY was not shipped — the generator emits ENABLE but not FORCE — and I should have caught that."

Why this answer works: It anchors to specific feedback (security credibility), names the positive without bragging, and volunteers a gap before they find it. It maps to Earn Trust.

Q: "How do you validate your work? How do you know it actually works?"

"Three layers. First, I validated the SQL generation by building a test suite of known-good and known-bad queries — valid PostgreSQL, correct table references, SELECT-only. Second, I validated RLS by testing as different tenant roles and confirming that cross-tenant rows were invisible — not rejected, invisible. An empty result for ORG_A asking about ORG_B is the correct behavior. Third, I validated the deployment by monitoring uptime, error rates, and response latency — the 99.9% uptime and sub-210ms response time are from production monitoring. I did not validate by running the chatbot once and calling it done."

Why this answer works: It shows systematic validation at three layers (unit, integration, production), not just 'I tested it.' It maps to Insist on the Highest Standards and Dive Deep.

Q: "How did you make the decision to use Redis caching? Was it data-driven or intuition-based?"

"Data-driven. I measured the chatbot's database query latency before and after caching. The chatbot was hitting the same expensive analytical queries repeatedly — aggregations, JOINs across fact tables — and the response time was above what users would tolerate for a conversational interface. I implemented cache-aside with Redis and measured a 35% reduction in database latency for repeated queries. The decision to use Redis specifically over an in-process Map was also data-driven — the in-process cache worked in development but did not survive ECS container restarts or scale across multiple container instances. Redis as an external store solved both problems."

Why this answer works: It shows measurement before and after, names the specific metric (35%), and explains why the alternative (in-process Map) failed. It maps to Are Right, A Lot and Dive Deep.

Phase 4: GenAI Workflow Questions

Q: "How well versed are you with GenAI in your workflows?"

"I use GenAI every day, both as a builder and as an end user. As a builder — I have shipped three GenAI-powered products: the SQL-RAG chatbot at Ylogx, the DeepQuery multi-agent research pipeline at IQVIA with LangGraph, and the BRD hybrid RAG system with Neo4j and Azure AI Search. As a day-to-day tool user — I use AI coding assistants like Cursor and Google's Antigravity IDE for code generation, refactoring, debugging, and documentation. I also use ChatGPT and Claude for architecture exploration, writing test cases, and rubber-ducking design decisions. But I treat every AI output as a draft, not a commit. I read the generated code line by line, check it against the actual codebase, run it, and only then merge. The AI accelerates the first draft; the engineering judgment decides whether the draft ships."

Why this answer works: It shows you are not just an AI builder but an AI power-user who integrates it into daily engineering. Naming specific tools (Cursor, Antigravity) signals practical familiarity, not just theoretical knowledge. The "draft not commit" framing shows responsible usage.

Q: "What AI coding tools do you use day to day? Walk me through a concrete example."

"I primarily use Cursor IDE and Google Antigravity. A concrete example — when I was building the RLS middleware at Ylogx, I needed to generate the policy DDL statements dynamically. I described the requirement to the AI: 'given a list of allowed tables and an organizationId column, generate CREATE POLICY statements with USING clauses that filter on current_setting.' The AI generated a first draft with the correct Postgres syntax. But it used string interpolation directly into the SQL — SQL injection risk. I caught that, rewrote it to use parameterized policy names and sanitized identifiers, and kept the structural pattern the AI gave me. The AI saved me 20 minutes of looking up CREATE POLICY syntax. The security review was mine. Another example — when writing LangGraph node functions at IQVIA, I would describe the node's purpose and its input/output state shape, let the AI generate the skeleton, then fill in the actual business logic and error handling myself."

Why this answer works: It gives a specific, real scenario with a concrete failure the AI made (SQL injection) and how you caught it. Shows you know exactly where AI helps and where it is dangerous.

Q: "What models do you prefer and why?"

"It depends on the task. For production systems — at IQVIA I use Azure OpenAI models: GPT-4 for complex reasoning tasks like cross-page synthesis and requirement extraction, and text-embedding-3-large with 3072 dimensions for embeddings. At Ylogx, the SQL-RAG chatbot used the LLM API available through LangChain. For personal projects, I use Google's Gemini API for the StratifyLabs VR voice bots. For day-to-day coding assistance, I use whatever is in Cursor or Antigravity — currently that is Claude and Gemini models. For quick questions and architecture brainstorming, I use ChatGPT or Claude directly. My preference is not about which model is 'best' overall — it is about which model fits the latency, cost, and accuracy constraints of the specific task. For SQL generation, I need high precision because a wrong query is worse than no query. For research synthesis, I need broad reasoning. For code generation, I need something that understands the codebase context."

Q: "What is your workflow when working with GenAI — both for building AI systems and for using AI as a developer tool?"

"Two distinct workflows. When building AI systems — like the SQL-RAG chatbot or DeepQuery — the workflow is: define the task boundary (what the LLM does vs what deterministic code does), build the prompt with the right context (schema injection, few-shot examples), validate the output (SQL syntax, safety checks), and trace everything (LangSmith at IQVIA so I can see retrieval vs generation failures). I never let the LLM own the security path.

When using AI as a developer tool — my workflow is: describe what I need in natural language, review the generated code against my actual codebase, test it, then commit only what passes. I use Cursor's codebase-aware features so the AI sees my project structure, not generic examples. Specific patterns I use daily: 'generate a unit test for this function with edge cases,' 'refactor this NestJS service to use dependency injection,' 'explain what this PostgreSQL query plan means,' 'write the CSS for this component matching the existing design system.' I reject about 30-40% of what the AI generates — either because it hallucinates imports that do not exist, uses patterns inconsistent with the codebase, or just gets the logic wrong. The value is in the 60% that is correct and saves me typing time."

Why this answer works: Separates the two workflows clearly. The "30-40% rejection rate" is honest and specific — it shows you are not blindly accepting AI output. Naming specific use patterns (unit tests, refactoring, query plans) shows real daily usage.

Q: "How do you choose which tasks to give to GenAI vs doing yourself?"

"I give AI tasks where three things are true: the output is verifiable, the cost of a wrong output is bounded, and the task is more about pattern than judgment. Examples that work well — generating boilerplate CRUD endpoints (I verify the schema matches), writing unit test skeletons (I verify the assertions are correct), drafting documentation (I verify technical accuracy), converting code between similar frameworks (I verify the API compatibility). Examples I would not delegate — security-critical logic like the RLS middleware (the consequences of a subtle bug are too high), architectural decisions (the AI does not know my deployment constraints), and debugging production issues (the AI does not have access to my logs and monitoring). The principle is: if I can verify the output faster than I can write it from scratch, the AI is worth using. If verifying takes as long as writing, I write it myself."

Why this answer works: Shows a clear decision framework, not just "I use it for everything." The examples are concrete and the principle is memorable. The security carve-out specifically connects to the RLS story.

Q: "How do you validate GenAI model performance?"

"For AI systems I build — three methods depending on the system. For the SQL-RAG chatbot, I validate by running generated SQL against a test dataset and checking correctness. For the BRD processor at IQVIA, I use LangSmith tracing to inspect retrieval quality per query — did we retrieve the right chunks? Did the generated test cases cover the requirement? For DeepQuery, I evaluate source coverage — did the research find relevant sources?

For AI tools I use as a developer — I validate by reading the code. Literally reading every line the AI generates before committing. I also run the code — I do not trust that generated code compiles just because it looks right. A common failure mode I have seen is the AI generating code that uses a method signature from a different version of a library, or importing a module that does not exist in my project. Running the code catches those immediately. I have learned to be especially suspicious when the AI generates something that looks too clean — that usually means it is using a generic pattern rather than one that fits my specific codebase."

Q: "Tell me about a GenAI project you built. What was the use case and what did you learn?"

"The DeepQuery project at IQVIA. The use case was enterprise deep research — given a topic, the system plans a research strategy, searches multiple sources, scrapes relevant pages, reasons across them, evaluates completeness, and generates a synthesized report with sources and confidence scores. What I learned is that the hard part of GenAI is not calling the LLM — it is orchestrating the workflow around it. The decision engine that evaluates whether research is complete enough, the URL intelligence that filters before expensive scraping, the wave-based scraping that checks progress before doing more — those are engineering decisions, not LLM decisions. The LLM is powerful but needs constraints and orchestration to be useful in a production pipeline. I also learned that LangSmith-style tracing is non-negotiable — without it, debugging a multi-node graph where any node can fail is like debugging a distributed system with no logs."

Q: "How did you use GenAI in your non-internship projects?"

"GiftedBooks uses RAG — the student uploads a PDF, I chunk and embed it, and at query time I retrieve user-scoped chunks and generate a grounded answer. The key design decision was user and document isolation — the LLM never sees another student's material. StratifyLabs uses Gemini API for AI voice-enabled bots in the VisionLab 3D environment — the user can ask the bot questions while looking at a 3D model, and the bot responds with context about the model's annotations. Argus does not use GenAI — it is pure computer vision with YOLOv9. I do not force GenAI into every project. Argus is a better product without an LLM."

Q: "Have you ever had a situation where the AI tool gave you something wrong and it caused a problem?"

"Yes — during the SQL-RAG chatbot development at Ylogx, I used an AI assistant to help generate the schema context injection code. The AI generated code that concatenated table names directly into the prompt string without sanitizing them. In a development environment with controlled table names, this worked fine. But it was a potential prompt injection vector — if a table name contained something that looked like a prompt instruction, it could manipulate the LLM's behavior. I caught it during a code review I was doing on my own work, not because it caused a production issue. I refactored to use a structured schema representation instead of raw string concatenation. The lesson was: AI-generated code inherits the AI's assumptions about the environment, and those assumptions are often more permissive than production requires."

Why this answer works: Shows a real failure from using AI tools, caught proactively (not after a production incident), with a concrete fix and a general lesson. It maps to Dive Deep + Learn and Be Curious.

Q: "If Amazon gave you an AI coding tool internally, how would you use it responsibly?"

"Same principles I use now — the AI proposes, I verify, I commit. I would use it for boilerplate generation, test writing, documentation, and codebase exploration. I would not use it for security-critical code without extra review. I would not paste production data, customer data, or secrets into any AI tool, even an internal one — the prompt is an input to a model, and I would want to understand the data handling policy before trusting it with sensitive context. I would also contribute feedback when the tool generates something wrong, because internal tools improve through internal usage data. The responsible part is not avoiding the tool — it is knowing what to trust it with and what to verify."

Why this answer works: Shows mature judgment about AI tool usage in an enterprise context. The data sensitivity point (not pasting secrets/customer data) is something Amazon cares about deeply. Maps to Ownership + Earn Trust.

🎯 GENERATED BAR RAISER QUESTIONS — WITH ANSWERS AND RATIONALE

These are additional questions that Bar Raisers frequently ask, with spoken answers and a brief rationale explaining why the answer is structured the way it is. The rationale is for your understanding only — do not speak it in the interview.

Q: "Tell me about a time you had to make a decision with incomplete information."

"During the RLS implementation at Ylogx, I had to decide how to handle the case where a user's JWT contained a valid organizationId but no corresponding db_role_name in the database. I did not have full documentation on all possible edge cases — could a valid JWT exist without a database role? What if the role mapping service was down? I did not have answers to all of these. I decided on fail-closed — if the middleware cannot find a valid db_role_name, SET ROLE to rls_no_access, which has no GRANTs on any fact table. Any query immediately fails with permission denied. The alternative was fail-open — let the query run as the default role, which might have owner permissions. I chose the option where a failure mode results in no data rather than all data. That decision was not data-driven in the A/B-test sense — it was principle-driven. In security, when you do not know, you deny."

Why this answer works: Shows a real decision under uncertainty, names both options (fail-closed vs fail-open), explains the reasoning principle (security = deny by default), and does not pretend the decision was based on data that did not exist. Maps to Are Right, A Lot + Ownership.

Q: "Tell me about a time you received critical feedback. How did you handle it?"

"During the client review cycles at Ylogx, the feedback was that the chatbot responses were inconsistent — sometimes a chart, sometimes raw text, sometimes nothing useful. The implicit criticism was that the feature I had shipped was not production-quality. I did not get defensive. I traced the inconsistency back to the response format — the chatbot was returning whatever the LLM generated without enforcing a schema. Some responses had a chart type and data array; others were just text. I rebuilt the response path to enforce structured JSON output — every response must have chart type, data, dimensions, metrics — and I added validation that caught malformed responses before they reached the frontend. The feedback was right. The chatbot worked in happy-path demos but not in diverse production queries."

Why this answer works: Accepts the feedback without defensiveness, traces it to a technical root cause, and shows concrete action (structured JSON enforcement). Does not frame the feedback as unfair. Maps to Earn Trust + Learn and Be Curious.

Q: "Tell me about a time you had to convince someone to change their mind."

"At Ylogx, the initial assumption was that the chatbot's SQL generation would handle all query types — aggregate, join, nested subqueries, window functions. I argued that we should constrain the chatbot to a safe subset of SQL — SELECT-only, no DDL, no DML, validated table references — and gradually expand. The counterargument was that constraining would make the chatbot less useful. I convinced them by showing examples of generated SQL that was syntactically valid but semantically dangerous — queries that could expose cross-tenant data through JOINs, or queries that were correct MySQL but invalid PostgreSQL. The constraints were not about making the chatbot dumber — they were about making it safe. Once the team saw concrete examples of dangerous-but-valid SQL, the decision to constrain was unanimous."

Why this answer works: Shows persuasion through evidence (concrete dangerous SQL examples), not authority. The counterargument is reasonable, which makes the resolution more convincing. Maps to Have Backbone; Disagree and Commit.

Q: "What is the most difficult technical problem you have solved?"

"Row-level security on a shared PostgreSQL warehouse where the SQL is generated by an LLM. The difficulty is not implementing RLS — Postgres supports it natively. The difficulty is that the LLM can generate any valid SELECT, and I need to guarantee that regardless of what the LLM writes, the caller sees only their own rows. The solution was three layers: RBAC at the application level (JWT → features → table access), RLS at the database level (USING clauses that filter on session GUCs), and execution isolation (per-request transaction with SET ROLE to a non-owner role). Each layer catches what the others miss. A valid SELECT with a cross-tenant WHERE is not caught by RBAC — it is caught by RLS. A missing table GRANT is not caught by RLS — it is caught by Postgres RBAC. An invalid JWT is not caught by the database — it is caught by Nest middleware."

Why this answer works: Defines why the problem is hard (LLM generates arbitrary SQL + multi-tenant), shows a defense-in-depth approach (three layers), and explains what each layer catches. Does not oversimplify. Maps to Dive Deep + Insist on the Highest Standards.

Q: "Tell me about a time you had to prioritize between multiple urgent tasks."

"At Ylogx, around mid-2025, I had three things competing for attention: the chatbot was returning data:null for valid queries (user-facing bug), a client demo was approaching that needed two new dashboard views, and I had identified the MySQL-vs-PostgreSQL dialect mismatch that was causing subtle SQL failures. The data:null bug was user-facing and destroying trust — users saw 'no data' and stopped using the chatbot. The demo dashboards had a fixed date. The dialect mismatch was causing intermittent failures that were harder to trace. I prioritized the data:null fix first because every hour it was live, users lost trust and stopped using the feature. I fixed it by tracing the serialization mismatch in the response format. Then I built the dashboard views for the demo. The dialect mismatch I addressed after the demo by adjusting the schema context and adding validation. The principle was: fix what is breaking trust now, deliver what has a deadline, then fix what is causing intermittent pain."

Why this answer works: Shows a real prioritization framework (trust-breaking → deadline → intermittent), not just 'I did all three.' Names the reasoning for priority order. Maps to Customer Obsession + Bias for Action + Deliver Results.

Q: "How do you handle ambiguity in requirements?"

"At IQVIA, the DeepQuery project started with a broad requirement — 'build a deep research tool.' There was no specification for how many sources to search, how to evaluate completeness, or what the output format should be. I handled the ambiguity by building iteratively. First, I built the simplest pipeline — search, scrape, summarize — and showed it to the team. The feedback was 'it finds relevant pages but the synthesis is shallow.' That told me I needed cross-page reasoning. The second iteration added the decision engine that evaluates completeness and can loop back to search more. The third iteration added URL intelligence to filter before scraping. Each iteration reduced ambiguity because I could show a working system and get concrete feedback instead of arguing about abstract requirements."

Why this answer works: Shows iterative development as a response to ambiguity, not paralysis. Each iteration is driven by concrete feedback. Maps to Bias for Action + Learn and Be Curious + Invent and Simplify.

Q: "Tell me about a time you worked on something that failed."

"The initial version of the SQL-RAG chatbot at Ylogx failed in a specific way — it returned data:null to users even when the database had rows. Users saw 'no data available' and lost trust. The SQL was valid. The database had data. The failure was a serialization mismatch between the query execution result format and the frontend parser's expected shape. The execution returned data in one structure; the parser expected a different structure; the mismatch produced null. I should have caught this earlier by defining and testing the response contract between backend and frontend. Instead, I caught it after users reported the issue. The fix was straightforward — align the response format and add validation. The lesson was that end-to-end testing of the full path matters more than testing individual components. Each component worked correctly in isolation. The failure was at the boundary."

Why this answer works: Names a real failure (not a humble-brag 'I worked too hard'), explains the root cause technically, and states what should have been done differently. Maps to Learn and Be Curious + Insist on the Highest Standards.

Q: "If you could go back and redo one technical decision, what would it be?"

"I would ship FORCE ROW LEVEL SECURITY from day one at Ylogx. The RLS generator emits ENABLE ROW LEVEL SECURITY but not FORCE. Without FORCE, the table owner bypasses all RLS policies. In my system, the middleware SET ROLEs to a non-owner role, so owner bypass is only a risk on specific code paths — the dashboard last-updated query and the executeWithoutRLS escape hatch. But 'only a risk on specific paths' is not the same as 'impossible.' FORCE would close that gap at the database level. I did not ship it because I did not fully understand the ENABLE-vs-FORCE distinction early enough. That is the decision I would redo."

Why this answer works: Names a specific, defensible technical gap (not a vague 'I should have communicated better'). Shows understanding of why it matters. Maps to Earn Trust + Insist on the Highest Standards.

Q: "How do you stay current with technology?"

"By building. I do not stay current by reading blog posts — I stay current by shipping projects that force me to learn new tools. LangGraph at IQVIA was new to me — I learned it because the project required conditional looping that LangChain could not do. Neo4j was new — I learned it because vector search alone could not represent requirement dependencies. YOLOv9 for Argus, Three.js for StratifyLabs, GStreamer for Team Horizon — each was learned because a project needed it, not because it was trending. I also read documentation, not tutorials. The official LangGraph docs and PostgreSQL RLS docs were more useful than any blog post."

Why this answer works: Shows learning driven by real needs, not hype. Names specific technologies and why they were adopted. Maps to Learn and Be Curious.

Q: "Tell me about a time you identified a risk that others had not seen."

"At Ylogx, the chatbot was being tested with happy-path queries — 'show me revenue this month.' Nobody was testing what happens when the LLM generates a valid SQL query that crosses tenant boundaries — like a JOIN with organization_id from a different tenant. The existing RBAC checked feature access and table access, but it did not prevent the SQL text from referencing another organization's data. I identified this as a cross-tenant read risk and proposed RLS as the solution — policies at the database level that filter rows regardless of what the SQL says. This was not a theoretical risk — I could construct specific queries that would have exposed cross-tenant data without RLS."

Why this answer works: Shows a concrete security risk with constructable proof (not theoretical), names the gap in existing controls, and proposes a solution. Maps to Ownership + Dive Deep.

Q: "Describe a time you had to work with a team that had different priorities than yours."

"On Team Horizon for ERC 2024, the mechanical and electrical teams were focused on rover chassis durability and motor control — critical for the competition. The software team's priority was autonomous navigation and teleoperation. Within software, my priority was getting the video pipeline stable at 60 FPS and the perception data integrated into the costmap. The navigation team needed perception data in a specific format and at a specific rate. I had to align my video pipeline work with their timeline — they could not test autonomous navigation without perception data, and I could not test perception without a rover that moved. The resolution was defining a clear interface — I would output perception data as costmap-compatible messages at a guaranteed rate, and they would consume it without caring how I generated it. We agreed on the interface, not the implementation."

Why this answer works: Shows cross-team coordination with different priorities, a concrete interface agreement, and mutual dependency. Does not claim to have solved the other team's problem. Maps to Earn Trust + Deliver Results.

Q: "What would you do in your first 90 days at Amazon?"

"First 30 days — understand the service I own. Read the design docs, understand the data model, trace a request end to end from API gateway through the service to the database and back. Understand the deployment pipeline, the monitoring, the on-call runbook. I would not make changes in the first 30 days unless something is on fire. Days 30–60 — start contributing. Pick a well-scoped bug or small feature, implement it, get code-reviewed, deploy it. The goal is to build confidence that I understand the codebase and the team's development process. Days 60–90 — identify one operational improvement I can own. Maybe it is a flaky test, a missing alarm, a manual process that should be automated. Something that makes the service more reliable, not just a new feature. At the end of 90 days, I want my team to trust that I can own a piece of the service independently."

Why this answer works: Shows a structured ramp-up plan, prioritizes understanding before changing, and focuses on reliability, not flashy features. Maps to Ownership + Learn and Be Curious + Dive Deep.

Q: "Why should we hire you over other candidates?"

"I do not know the other candidates, so I cannot compare. What I can tell you is what I bring — I have shipped production systems end to end, not just built features. I have implemented security at the database level, not just the application level. I have built multi-agent AI systems that orchestrate complex workflows, not just called an LLM API. I have deployed to AWS with ECS and CloudFront, not just run things locally. And when I do not know something — like whether FORCE ROW LEVEL SECURITY was shipped, or what the exact user-testing protocol was for GiftedBooks — I say so rather than inventing an answer. I think that calibration is valuable."

Why this answer works: Does not trash other candidates. Lists concrete differentiators with evidence. Ends with honesty as a feature. Maps to Earn Trust.

Q: "Tell me about a time you mentored someone or helped a teammate grow."

"This is my thinnest LP. I was part of the IEDC Innovation and Entrepreneurship Development Cell tech team at CUSAT, where I paired with junior members on project workflows — version control, debugging practices, and how to break a problem into smaller tasks. I did not run a formal mentorship program. I did not have direct reports. What I did was help teammates who were stuck — explaining how the FastAPI-to-NestJS pipeline worked at Ylogx, walking through the GStreamer configuration on Team Horizon, or showing how to set up the training pipeline on StratifyLabs. If they are looking for a senior-level mentorship story, I do not have one. I have informal help and knowledge sharing."

Why this answer works: Does not fabricate a mentorship story. Honestly names it as the thinnest LP. Gives real examples of helping. A Bar Raiser respects calibrated honesty over fabricated stories. Maps to Hire and Develop the Best (honestly thin) + Earn Trust.

🎯 BAR RAISER QUALITY AUDIT — ANSWER VERIFICATION

This section audits every major answer against what an Amazon Bar Raiser actually evaluates. A BR checks five things: (1) Is the story real and walkable? (2) Does the candidate volunteer gaps? (3) Can they survive three-level-deep probing? (4) Do they distinguish personal contribution from team outcomes? (5) Are metrics defensible? Below is the verdict on each critical answer.

Audit Results

SectionAnswerBR VerdictNotes
Customer Obsession — GiftedBooks✅ STRONGPasses depth-3 probing. Volunteers README mismatch before asked. Honest about user-testing protocol.
Customer Obsession — SQL-RAG✅ STRONG65% is properly qualified as product-level, not A/B. Names data:null failure honestly.
Ownership — Inherited Chatbot (Y1)✅ STRONGESTClear personal vs existing distinction. "I did not rewrite from scratch" is exactly what a BR wants.
Ownership — RLS/RBAC (Y5)✅ STRONGESTNames specific files (rls.middleware.ts, policyManagement.service.ts). Volunteers FORCE gap. Knows the DDL.
Invent — ElementRenderer (Y4)✅ STRONGPrototype-as-evidence for disagreement. "One renderer, one contract, two consumers" is concise.
Are Right — Argus 73→89 (S3)✅ STRONGClear gate reasoning. Honest about 89% vs 95% trade-off.
Are Right — MySQL vs PostgreSQL (Y3)✅ STRONGTechnical root cause is traceable. Validator limitations acknowledged.
Learn — DeepQuery (I1)✅ STRONGEST"Two weeks from zero to production" with specific node names. Honest about MemorySaver gap.
Hire — IEDC (M1)⚠️ THIN BUT HONESTExplicitly names this as thinnest LP. Does not fabricate. BR respects this.
Highest Standards — RLS as Standard✅ STRONG"Can a malicious query ever see another org's rows" is the right framing.
Think Big — StratifyLabs✅ ADEQUATEVision is clear but monetization gap is named.
Bias for Action — Hackathons✅ STRONG8 competitions with named wins. Calculated risk framing.
Frugality — Redis vs In-process✅ STRONGBefore/after measurement with specific metric (35%).
Earn Trust — README Mismatch✅ STRONGESTVolunteering a gap unsolicited is the highest trust signal for a BR.
Backbone — Structured JSON Disagreement✅ STRONGPrototype-based persuasion, not authority. Names the counterargument fairly.
Deliver — GStreamer 60 FPS✅ ADEQUATEFixed deadline with concrete metric.
Phase 3 — Conflict Resolution✅ STRONGReal technical disagreement, prototype resolution, commitment.
Phase 3 — Manager Reaction✅ STRONGAnchors to specific feedback + volunteers FORCE gap.
Phase 3 — Validate Your Work✅ STRONGThree layers (unit, integration, production).
Phase 3 — Data-Driven Decision✅ STRONGBefore/after measurement, Redis vs Map failure.
Phase 4 — GenAI Workflow✅ STRONGCursor/Antigravity/Claude named. 30-40% rejection rate is honest.
Phase 4 — AI Tool Failure✅ STRONGPrompt injection caught in self-review.
Phase 4 — Responsible AI Usage✅ STRONGData sensitivity point (no secrets in prompts).
Intro — 90 second✅ STRONGFlows naturally. Ends with "Why Amazon."
Metrics Defense✅ STRONGEvery metric has meaning + measurement + pushback handler.

Overall verdict: The story bank passes a Bar Raiser simulation. The strongest signals are:

1. Volunteering gaps before asked (FORCE RLS, README mismatch, testing protocol)

2. Distinguishing personal contribution from team outcomes

3. Refusing to invent numbers ("I need to lock that methodology")

4. Three-level deep technical walkability on RLS, SQL-RAG, and DeepQuery

TECHNICAL FLASHCARDS — SCAN BEFORE THE INTERVIEW

Flip through these before you walk in. Each card has the project name, exact stack, architecture in one sentence, key config details, numbers you can defend, the gap you volunteer, and which LPs it maps to. This is your last-minute cheat sheet.

🟦 CARD 1: YLOGX — AI BI APPLICATION

FieldDetail
RoleFull-stack SDE Intern (Nov 2024 – Oct 2025)
One-linerMulti-tenant AI BI platform with SQL-RAG chatbot, report builder, 30 dashboards, row-level security
FrontendReact, Recharts, ElementRenderer (reusable visualization contract)
BackendNestJS (TypeScript) — auth, RBAC, RLS middleware, query execution, report builder
AI ServiceFastAPI (Python) — LangChain, prompt templates, schema context injection, SQL generation, response formatting
DatabasePostgreSQL on AWS RDS — single instance, shared warehouse
CachingRedis (cache-aside for chatbot queries, 5-min TTL) + in-process fieldsCache Map for schema metadata
SecurityJWT → RBAC (features + tables) → RLS (SET ROLE + set_config per request) → fail-closed rls_no_access
DeploymentDocker → ECR → ECS (Fargate) → ALB → CloudFront → Route 53. GitHub Actions CI/CD
Key Filesrls.middleware.ts, policyManagement.service.ts, roleManagement.service.ts, req.dbTransaction
RLS DDLCREATE POLICY ... ON table FOR SELECT TO role USING (organizationId = current_setting('app.organizationId')::uuid)
Fail-closedrls_no_access — NOLOGIN role with zero GRANTs. SET ROLE falls here if no valid db_role_name
Response contract{ chartType, data[], dimensions[], metrics[] } — consumed by ElementRenderer
Request pathBrowser → Route 53 → CloudFront → ALB → NestJS → (chatbot) FastAPI → LLM → back to Nest → RLS transaction → PostgreSQL → response

Numbers you can defend:

MetricValueDefense
Analyst productivity+65%Product-level workflow improvement, not A/B test
Report generation+40% fasterStructured builder vs manual query
Uptime99.9%Production monitoring
API latency (p90)< 210msAcross all endpoints; chatbot path is slower (LLM)
Dashboard latency< 100msDeterministic SQL
Redis bot-DB latency−35%Cache-aside comparison, cached vs uncached
KPI dashboards30Real-time, Recharts frontend
Ops efficiency+60%Dashboards replacing manual reporting
Tenant tiers3RBAC role levels

Gap you volunteer: FORCE ROW LEVEL SECURITY not shipped. Generator emits ENABLE but not FORCE. Owner connections bypass RLS.

Primary LPs: Ownership, Dive Deep, Earn Trust, Highest Standards, Invent, Are Right, Frugality, Customer Obsession

🟩 CARD 2: IQVIA — DEEPQUERY MULTI-AGENT RESEARCH

FieldDetail
RoleSDE Intern (April 2026 – present)
One-linerLangGraph multi-agent deep research — plan, search, scrape, reason, evaluate, synthesize
FrameworkLangGraph (Python) — StateGraph with conditional edges and loops
StateDeepQueryState (TypedDict) — topic, plan, search_results, all_urls, scraped_pages, knowledge_blocks, facts, gaps, decision, final_answer
Nodes (11+)Planner → Light Search → Clarifier → Context Builder → Query Generator → Search Fanout → Aggregator → URL Intelligence → Scrape Controller → Cross-Page Reasoning → Decision Engine → Synthesizer
Search APIsDuckDuckGo, Bing, Firecrawl Search
ScrapingFirecrawl batch scrape, wave-based with MD5 content dedup
URL IntelligenceScores and filters URLs before expensive scraping (relevance, authority, recency)
Decision EngineEvaluates: facts count, knowledge blocks, completeness score, gap analysis → loop back to search OR proceed to synthesis
LLMAzure OpenAI GPT-4 (reasoning, planning, synthesis)
TracingLangSmith — every node call traced, per-run metrics in JSON artifacts
CheckpointMemorySaver (in-RAM). Gap: no durable state for crash recovery
ConfigDeepQueryConfig — max_search_queries, max_urls, max_scrape_count, max_iterations, char_budget
OutputLong-form markdown report with sources, confidence scores, facts, knowledge blocks

Numbers you can defend:

MetricValueDefense
Websites researched200+ per runUnique domain count in all_urls.json
Nodes11+Named and walkable
Search engines3DuckDuckGo, Bing, Firecrawl

Gap you volunteer: MemorySaver is in-RAM only. Production needs durable state for crash recovery.

Primary LPs: Learn, Think Big, Invent, Dive Deep, Highest Standards

🟨 CARD 3: IQVIA — BRD HYBRID RAG PROCESSOR

FieldDetail
One-linerHybrid retrieval (vector + keyword + graph) for 200+ page BRD documents → structured requirement extraction → test case generation
Vector SearchAzure AI Search — BM25 (keyword) + semantic (vector). Embeddings: text-embedding-3-large, 3072 dimensions
Graph DBNeo4j — nodes: Document, Requirement, Entity. Edges: DEPENDS_ON. Query language: Cypher
Why hybridVector search finds semantically similar text. It does NOT understand requirement dependencies. Neo4j captures structure. Both needed.
IngestionPDF → chunk → embed (3072-dim) → index in Azure AI Search + extract requirements → build Neo4j graph
RetrievalHybrid: keyword + semantic from Azure AI Search, THEN graph traversal from Neo4j for dependency context
GenerationAsync fan-out — LLM generates test cases from requirement + dependency context in parallel
TracingLangSmith — per-query retrieval quality inspection
LLMAzure OpenAI GPT-4
Key designTwo-graph architecture: DeepQuery is research graph, BRD is document processing graph. Same LangGraph, different StateGraphs

Numbers you can defend:

MetricValueDefense
Document size200+ pagesInput document page count
Embedding dims3072text-embedding-3-large
RetrievalHybrid (3 methods)BM25 + semantic + graph

Gap you volunteer: No production deployment yet — this is the current internship project.

Primary LPs: Invent, Learn, Backbone, Dive Deep

🟥 CARD 4: TEAM HORIZON — MARS ROVER (ERC 2024)

FieldDetail
RoleCore Software Team (2023–2024)
One-linerPerception + teleoperation for Mars rover: GStreamer video pipeline + ZED 2 stereo vision + costmap integration
CompetitionEuropean Rover Challenge 2024 — 17th/80+ globally
FrameworkROS2 (Robot Operating System 2)
CameraZED 2 — stereo depth, spatial mapping, positional tracking (IMU + visual), 2M+ pts/sec
VideoGStreamer pipeline — capture → encode → transport → decode → display. 60 FPS operator feed
Perception outputDepth data → 3D spatial map → costmap-compatible messages for navigation stack
NavigationCostmap-based path planning (NOT your implementation — you fed perception INTO it)
SimulationGazebo (3D physics sim), RViz (ROS2 visualization)
Camera modeHD720 @ 60 FPS (recommended for spatial mapping)
Mapping resolutionConfigurable: 2cm, 5cm, 8cm presets
ComputeNVIDIA Jetson Orin (RTX 3050 Ti-class GPU)

Numbers you can defend:

MetricValueDefense
ERC placement17th/80+Resume says 17th, team site says 18th — volunteer discrepancy
Video FPS60GStreamer pipeline config. Sustained depends on encoding + bandwidth
Spatial mapping2M+ pts/secUnder configured workload. Not a guaranteed constant
Obstacle detection+40% accuracyComparison: with vs without ZED depth data
Collision risk−55%Costmap-based planning vs geometric-only

Gap you volunteer: Did NOT build the planner. Owned perception-to-costmap, not end-to-end autonomy. 17th vs 18th discrepancy.

Primary LPs: Ownership, Learn, Bias for Action, Deliver, Earn Trust

🟧 CARD 5: ARGUS — INDUSTRIAL SAFETY AI

FieldDetail
One-linerReal-time PPE compliance detection with YOLOv9. Won 1st place at CODE reCET 2024
ModelYOLOv9 (You Only Look Once v9) — single-pass object detection
Dataset15,000+ annotated images. PPE classes: hard hat, safety vest, gloves, goggles
TrainingData augmentation (rotation, flip, brightness, scale), hyperparameter tuning
Key metricmAP (Mean Average Precision) — area under P-R curve per class, averaged
EvaluationCOCO evaluation protocol
Journey73% mAP (initial) → refused to ship → more data + tuning → 89% mAP
Why refused 73%Safety system: 1 in 4 violations missed = unacceptable for factory floor
Inference24 FPS real-time
DeploymentContainerized, 20+ camera feeds, PostgreSQL logging (timestamp, camera_id, confidence, class)
Post-processingNMS (Non-Maximum Suppression) — filters overlapping bounding boxes, keeps highest confidence
IoUIntersection over Union — overlap between predicted and ground truth boxes. Threshold typically 0.5
No GenAIPure computer vision. No LLM. Argus is a better product without an LLM

Numbers you can defend:

MetricValueDefense
mAP73% → 89%Data-driven improvement, not architecture change
FPS24Real-time inference
Dataset15,000+ imagesExpanded from initial smaller set
Cameras20+Multi-feed deployment
Violations−50%Before/after comparison. Methodology needs locking

Gap you volunteer: 89% not 95% — reached limit of available data/budget. Would add human-in-loop for edge cases.

Primary LPs: Are Right, Highest Standards, Scale, Deliver

🟪 CARD 6: GIFTEDBOOKS — VR LEARNING + RAG

FieldDetail
One-linerVR learning suite with grounded RAG for PDF Q&A and deterministic PYQ analytics
URLgiftedbooks.study
RAG pathUpload PDF → chunk → embed with user + document metadata → vector store. Query → retrieve user-scoped chunks → LLM generates grounded answer
IsolationUser and document scoped. No cross-user retrieval. Embeddings partitioned by user_id + doc_id
PYQ engineDeterministic analytics — ranks observed past-paper topics. NOT LLM guessing the exam
VRInteractive 3D labs for experiential learning
LatencySub-300ms API response. Narrow partition vector search + single generation call
AuthUser authenticates before upload. Metadata attached at embedding time
README issueGitHub README says AegisAI — mismatch. Volunteer this before asked

Numbers you can defend:

MetricValueDefense
Doubt resolutionHours → 3–10 minUser-testing results
Reading efficiency+35%User-testing, not RCT
Engagement+50%User-testing, not RCT
Comprehension2.5x fasterUser-testing, not RCT
Uptime99.5%Production monitoring
Latency< 300msAPI response time

Gap you volunteer: No citation-facing eval. User-testing protocol not documented. README mismatch.

Primary LPs: Customer Obsession, Earn Trust, Think Big

🟫 CARD 7: STRATIFYLABS — CV SAAS PLATFORM

FieldDetail
One-linerBrowser-based computer vision training/inference platform with 3D simulation lab
URLstratify-labs-n5mr.vercel.app
FrontendNext.js, React, Three.js (3D), WebGL
3D LabVisionLab — URDF code editor, WebGL rendering, 3D model visualization, annotations
AI BotsGemini API — AI voice-enabled RAG bots in VisionLab 3D environment
Marketplace50+ pre-trained models and datasets, user community profiles
AnnotationsBrowser-based annotation tool for CV datasets
TrainingBrowser-based training with 8 architectures: ResNet, VGG, EfficientNet, MobileNet, DenseNet, InceptionV3, Xception, NASNetMobile
OptimizersSGD, Adam, RMSprop, Adagrad, Adadelta
InferenceBrowser-based inference — no local CUDA/setup required

Numbers you can defend:

MetricValueDefense
ML iteration−30%Workflow time savings vs local setup (estimate)
Models50+Marketplace count

Gap you volunteer: No monetization layer shipped. 30% is an estimate, not measured.

Primary LPs: Think Big, Invent, Frugality

⬛ CARD 8: QUICK-RECALL TECHNICAL TERMS

TermOne-sentence definitionWhere you use it
RLSPostgreSQL row-level security — USING clauses filter rows per session. Engine-level, not app-levelYlogx
RBACRole-Based Access Control — JWT → features → table permissions. App-levelYlogx
SET ROLEPostgreSQL command to switch the session's effective role within a transactionYlogx RLS middleware
set_configPostgreSQL function to set session-local GUCs (e.g., app.organizationId)Ylogx RLS middleware
FORCE RLSMakes table owner subject to RLS policies too. You did NOT ship thisYlogx (gap)
USING clauseRLS policy predicate. Rows where USING=false are invisible, not rejectedYlogx
Cache-asideApp checks cache first → miss → query DB → populate cache → returnYlogx Redis
ElementRendererReusable visualization component consuming {chartType, data, dims, metrics}Ylogx frontend
LangChainLLM framework — chains, prompts, output parsers. SequentialYlogx SQL-RAG
LangGraphStateful graph orchestration — nodes, edges, conditional routing, loopsIQVIA DeepQuery
StateGraphLangGraph's graph definition object. Nodes are Python functionsIQVIA
TypedDictPython typing class used for LangGraph state shapeIQVIA DeepQuery
LangSmithObservability + eval platform for LangChain/LangGraph. Traces every LLM callIQVIA
Azure AI SearchManaged search with BM25 (keyword) + semantic (vector) retrievalIQVIA BRD
Neo4jGraph database. Cypher query language. Nodes, relationships, propertiesIQVIA BRD
CypherNeo4j's query language. Like SQL for graphsIQVIA BRD
text-embedding-3-largeAzure OpenAI embedding model, 3072 dimensionsIQVIA BRD
YOLOv9Single-pass object detection model. Real-timeArgus
mAPMean Average Precision — area under P-R curve per class, averagedArgus
IoUIntersection over Union — overlap between predicted and ground-truth boxesArgus
NMSNon-Maximum Suppression — removes overlapping detections, keeps highest confidenceArgus
GStreamerMedia pipeline framework — capture → encode → transport → decode → displayHorizon
ZED 2Stereo camera — depth, spatial mapping, positional tracking (visual + IMU)Horizon
ROS2Robot Operating System 2 — pub/sub topics, services, coordinate framesHorizon
Costmap2D grid representing obstacle proximity and traversability for path planningHorizon
ECSElastic Container Service — AWS managed container orchestration. Simpler than EKSYlogx
EKSElastic Kubernetes Service — full Kubernetes. You do NOT use thisNot used
ALBApplication Load Balancer — HTTP L7 routing, SSL termination, health checksYlogx
CloudFrontAWS CDN — caches static assets at edge locations globallyYlogx
Route 53AWS DNS — resolves domain to CloudFront distributionYlogx
ECRElastic Container Registry — stores Docker imagesYlogx CI/CD
FirecrawlWeb scraping service returning clean markdown. Search + batch scrapeIQVIA DeepQuery
Three.jsJavaScript 3D library built on WebGLStratifyLabs VisionLab
URDFUnified Robot Description Format — XML for robot modelsStratifyLabs
Gemini APIGoogle's LLM API. Used for VR voice botsStratifyLabs
RAGRetrieval-Augmented Generation — retrieve relevant docs, then generate grounded answerGiftedBooks, IQVIA