<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ravi Vats</title>
    <link>https://ravivats.github.io/</link>
    <description>Recent content on Ravi Vats</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 09 Aug 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://ravivats.github.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Thoughtworks</title>
      <link>https://ravivats.github.io/work/thoughtworks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/thoughtworks/</guid>
      <description>Lead Data Scientist. Building production AI/ML systems — RAG pipelines, LLM fine-tuning, and data platforms for enterprise clients.</description>
      <content:encoded><![CDATA[<p>Lead Data Scientist at Thoughtworks, Singapore.</p>
<!-- TODO: add detail — key engagements, technologies, outcomes.
     Add more companies as separate files in content/work/, ordered by `weight`. -->
]]></content:encoded>
    </item>
    <item>
      <title>Grab</title>
      <link>https://ravivats.github.io/work/grab/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/grab/</guid>
      <description>Software Engineer, then Senior Software Engineer in the Deliveries organization — microservices handling 2M&#43; food and express delivery orders per day.</description>
      <content:encoded><![CDATA[<p>I worked at Grab in Singapore, first in the GrabFood division and later across the wider Deliveries organization.</p>
<h3 id="senior-software-engineer-2021--2025">Senior Software Engineer (2021 – 2025)</h3>
<ul>
<li>Worked in the Deliveries organization on creating and enhancing gRPC and REST APIs and microservices that manage food and general delivery (express) orders from creation to completion, at a scale of more than 2 million orders per day.</li>
<li>Built a Python automation that analyzed AWS infrastructure spending patterns and used ML algorithms to highlight services with anomalous cost increases, then tuned the infrastructure of those services — reducing AWS infra cost across 7 microservices in my team by 30%.</li>
</ul>
<h3 id="software-engineer-2019--2021">Software Engineer (2019 – 2021)</h3>
<ul>
<li>Designed and implemented a partner-wise food-order-data streaming and collection pipeline used to share food-order data with big partners across all countries on a daily basis (Kafka, SQS, REST APIs).</li>
<li>Recognized twice as an employee who went &ldquo;Above and Beyond&rdquo; to deliver value to the firm (Feb 2020, Nov 2020).</li>
</ul>
<p><strong>Tech stack</strong>: GoLang, gRPC, Protobuf, Redis, Apache Kafka, Apache Flink, Terraform, GoMock, Testify, AWS (CloudFront, S3, Route 53, Lambda, Lambda@Edge, SQS)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Morgan Stanley</title>
      <link>https://ravivats.github.io/work/morgan-stanley/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/morgan-stanley/</guid>
      <description>Technology Analyst, then Technology Associate in the Institutional Securities Tech division — data engineering pipelines for post-trade reporting on Apache Spark.</description>
      <content:encoded><![CDATA[<p>After graduation I joined Morgan Stanley full-time, first as a Technology Analyst and then as a Technology Associate, in the Internal Trade Report Applications team of the Institutional Securities Tech (IST) division.</p>
<h3 id="technology-associate">Technology Associate</h3>
<ul>
<li>Implemented data engineering pipelines fetching high-volume (~500 million rows/day) financial-trade data from files, streams, and databases onto Apache Spark, and ran data quality rules on it to generate post-trade reports.</li>
<li>Felicitated with the <strong>Rookie Award</strong> for being the best newcomer in the Institutional Securities Tech division (Apr 2019).</li>
</ul>
<h3 id="technology-analyst">Technology Analyst</h3>
<ul>
<li>Completed the Technology Analyst Program (TAP) by Mallon Associates — covering operating systems, DBMS, data science, NLP, C++, Java, Scala, and financial-domain training (stocks, bonds, derivatives, markets).</li>
<li>Built a web-based dashboard collecting Securities Reference Data from multiple sources with visualizations on top (Angular 6, Java 8, Mocha, JUnit).</li>
</ul>
<p><strong>Tech stack</strong>: Apache Spark, Scala, Java 8, Angular 6, JUnit</p>
]]></content:encoded>
    </item>
    <item>
      <title>Morgan Stanley (Internship)</title>
      <link>https://ravivats.github.io/work/morgan-stanley-intern/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/morgan-stanley-intern/</guid>
      <description>Software Development Intern — real-time message pipelines for data-quality checks on financial orders.</description>
      <content:encoded><![CDATA[<p>I interned at Morgan Stanley during my seventh semester in college, in the same division and team I later joined full-time.</p>
<ul>
<li>Worked in data engineering, creating real-time message pipelines to perform real-time data quality checks on financial orders using business rules.</li>
</ul>
<p><strong>Tech stack</strong>: Apache Kafka, Java 8, Spring, JBoss Drools (rule engine), JUnit</p>
]]></content:encoded>
    </item>
    <item>
      <title>Robert Bosch</title>
      <link>https://ravivats.github.io/work/bosch/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/bosch/</guid>
      <description>Research Intern — home automation with MQTT/XMPP smart switches, AWS cloud, and embedded programming on Node MCU and Raspberry Pi.</description>
      <content:encoded><![CDATA[<p>I worked at Robert Bosch Engineering &amp; Business Solutions as a Research Intern after my sixth semester in college.</p>
<ul>
<li>Worked on communication protocols like MQTT and XMPP to enable home automation by creating smart switches.</li>
<li>Worked on AWS cloud and developed an Android application through which users control IEDs (Intelligent Electronic Devices).</li>
<li>Wrote Lua programs for Node MCU and Raspberry Pi devices that receive instructions from the Android application and map them to IED actions.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Yoska Technologies</title>
      <link>https://ravivats.github.io/work/yoska/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/yoska/</guid>
      <description>Mobile App Development Intern — built features for the &amp;#39;Yoska Coach&amp;#39; Android app connecting coaches and athletes.</description>
      <content:encoded><![CDATA[<p>I worked at Yoska as a Mobile App Development Intern after my fourth semester in college, on the company&rsquo;s Android app <strong>Yoska Coach</strong> — a medium for coaches to monitor and train their athletes while seamlessly interacting with them.</p>
<p>Areas I worked on:</p>
<ol>
<li>Image downloading and caching</li>
<li>Profile activities for coach and athlete</li>
<li>Call and message functionality</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>ICUCS, Ramaiah Institute of Technology</title>
      <link>https://ravivats.github.io/work/icucs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/work/icucs/</guid>
      <description>Mobile &amp;amp; Web Application Developer — built the &amp;#39;Tally Report Genie&amp;#39; app surfacing live Tally ERP accounts data to business owners.</description>
      <content:encoded><![CDATA[<p>I worked at the Incubation and Consultancy Unit (ICUCS) of Ramaiah Institute of Technology as a Mobile and Web Application Developer during college.</p>
<p>I worked on <strong>Tally Reports</strong>, which automatically fetches a company&rsquo;s accounts data from Tally ERP on any change and displays it to the company owner in a mobile app.</p>
<p>Areas I worked on:</p>
<ol>
<li>Report retrieval from Tally ERP</li>
<li>Data retrieval from the server</li>
<li>UI/UX — populating charts, ListViews, and CardViews of the &ldquo;Tally Report Genie&rdquo; app</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>PyCon Australia 2026 — talk details TBA</title>
      <link>https://ravivats.github.io/talks/pycon-australia-2026/</link>
      <pubDate>Sun, 09 Aug 2026 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/talks/pycon-australia-2026/</guid>
      <description>Upcoming talk at PyCon Australia. Title, abstract, and slides will be added once confirmed.</description>
      <content:encoded><![CDATA[<p>Details to be announced. Slides and recording will be linked here after the talk.</p>
<!-- TODO: update title, date, abstract, slides link, and recording link. -->
]]></content:encoded>
    </item>
    <item>
      <title>Thoughtworks XConf Vietnam — talk details TBA</title>
      <link>https://ravivats.github.io/talks/xconf-vietnam-2026/</link>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/talks/xconf-vietnam-2026/</guid>
      <description>Upcoming talk at Thoughtworks XConf Vietnam. Title, abstract, and slides will be added once confirmed.</description>
      <content:encoded><![CDATA[<p>Details to be announced. Slides and recording will be linked here after the talk.</p>
<!-- TODO: update title, date, abstract, slides link, and recording link. -->
]]></content:encoded>
    </item>
    <item>
      <title>HeadStart System Design — Part 2 — My AWS Certified Solutions Architect Associate Journey</title>
      <link>https://ravivats.github.io/blog/headstart-system-design-p02-aws-solution-architect-design/</link>
      <pubDate>Fri, 25 Dec 2020 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/blog/headstart-system-design-p02-aws-solution-architect-design/</guid>
      <description>How to prepare for the exam and the things learned through it.</description>
      <content:encoded><![CDATA[<p><img alt="headstart-system-design" loading="lazy" src="/images/headstart-system-design.png#center"></p>
<p>AWS offers various certification programs aimed towards Software Development, Solution Architecture, Machine Learning Engineering, Cyber Security, etc.</p>
<p>Taking these certifications is a good idea if:</p>
<ol>
<li>You are someone who has been using AWS services as a part of the solution in the tech stack you are working on for more than a year</li>
<li>Or, you are someone who wants to learn more about cloud tech and the services offered and how to use them for your working domain (ML, Cyber Security, Solution Architecture, etc.)</li>
</ol>
<p>Since I checked both of the above points, I decided to sign up for the certification and cleared it in Dec 2020.</p>
<h2 id="how-i-prepared-for-my-aws-certifications">How I prepared for my AWS certifications</h2>
<p>There are many different paths available.</p>
<p><em><strong>1. You can head to the AWS <a href="https://aws.amazon.com/certification/certification-prep">certification page</a> and choose the exam that you want to prepare for. Preparation included:</strong></em></p>
<p><img alt="headstart-system-cert-prep-homepage" loading="lazy" src="/images/2020-12-25/aws-certification-prep.png#center"></p>
<p>Source: <a href="https://aws.amazon.com/certification/certification-prep">AWS Certification Prep Homepage</a></p>
<p>a. Reading standard white-papers illustrating solutions for a given type of business problem.</p>
<blockquote>
<p>This gives an idea about general patterns of solutions you are expected to come up with during the examination.</p>
</blockquote>
<p>b. Reading up about common services using AWS Documentation (more about it in point 2).</p>
<p>c. Solving sample questions, previous exam questions, and taking a practice exam.</p>
<p>d. You can take AWS Certification online training given by their experts also.</p>
<p><em><strong>2. For the various services offered by AWS for your domain, browsing into AWS documentation for those services, to understand things like:</strong></em></p>
<p><img alt="headstart-system-cert-prep-homepage" loading="lazy" src="/images/2020-12-25/aws-cloudfront-docs.png#center"></p>
<p>Source: <a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html">AWS CloudFront Documentation</a></p>
<ul>
<li>
<p>How is this service priced? What are the different types of variants of the service available?</p>
</li>
<li>
<p>Is this service auto-scalable? Is this service serverless?</p>
</li>
<li>
<p><em><strong>Hands-on labs</strong></em> -&gt; Setting up the service in your developer account (in free tier) and trying out requests and checking the responses from the service.</p>
</li>
<li>
<p>Comparing the service to its alternative offerings. I.e. RDS for MySQL vs. Aurora for MySQL -&gt; Which service should be used when? What are the pros and cons of the service when compared to its alternatives?</p>
</li>
<li>
<p>Understanding where does this service fits in the whole flow. I.e.</p>
<ul>
<li>AWS Cloudfront fits in the flow whenever some content needs to be available to the public at low latencies.</li>
<li>AWS DynamoDB and DAX (DynamoDB Accelerator) fits in the flow whenever highly scalable E-commerce, web applications need a highly scalable DB for micro-second latencies.</li>
</ul>
</li>
</ul>
<p><em><strong>3. You can also choose to go through a comprehensive certificate preparation course with all of the above-mentioned things (documentation, white-papers, general patterns, sample questions, hands-on labs, etc.) collected in one place.</strong></em></p>
<p>Some good courses are (in my case, for AWS Solutions Architect Associate Certification):</p>
<ol>
<li><a href="https://acloudguru.com/course/aws-certified-solutions-architect-associate-saa-c02">A Cloud Guru Solutions Architect Associate</a></li>
<li><a href="https://www.pluralsight.com/courses/aws-certified-solutions-architect-associate">Pluralsight: AWS Certified Solutions Architect — Associate</a></li>
<li><a href="https://www.udemy.com/course/aws-certified-solutions-architect-associate-saa-c02">Ultimate AWS Certified Solutions Architect Associate 2021</a> by <a href="https://twitter.com/stephanemaarek">Stéphane Maarek</a></li>
</ol>
<ul>
<li>(In addition to the official AWS websites, I purchased and used this one to prepare)</li>
<li>Instead of watching the videos. I went through the slides provided for all the videos in this course.</li>
<li>After completing the slides for one section (i.e. EC2), I would solve the quiz provided for the section.</li>
<li>After completing going through all slides and quizzes, I would go through sample solution architectures in the course and on the AWS website.</li>
<li>At last, I solved a full practice paper with 65 questions and a 130-minute time limit, like in the real exam for practice.</li>
</ul>
<h2 id="things-i-learned-from-the-certification">Things I learned from the certification</h2>
<p>Apart from learning in detail about the AWS services when doing the certification prep, one also learns a lot about system design and how to come up with solution architectures for various business needs.</p>
<p>Most of these concepts are cloud-platform agnostic and help build a foundational understanding of system design, things to consider while designing a new solution, or suite of microservices, or any other web/cloud components talking to one another.</p>
<p><strong>These concepts are wrapped around general cloud platform agnostic (is for any cloud provider Like AWS, Azure, Google Cloud , etc.) questions. For example:</strong></p>
<ol>
<li>What is meant by scalability? (i.e. Horizontal scalability vs vertical scalability, What is auto-scaling, on which metrics can we scale in or out (CPU %, Network in, Network out, etc.)</li>
<li>What are the different ways of storing data? Structured (SQL), semi-structured (NoSQL, JSON), unstructured (Files in NFS, tapes, etc.)</li>
<li>What is load balancing? Different types like Load Balancing on Application layer vs. Network Layer?</li>
<li>What is rate-limiting? And why it is important? What are its different levels (Rate limit on the gateway vs. Rate limit per microservice vs. Rate limit per instance vs. Rate limit per client)</li>
<li>What is a firewall? Why is it necessary? How does it prevent internal services from DDoS attacks, etc.?</li>
<li>What are the common ports used on different protocols and applications? I.e. Port 22 is for SSH, Port 80 is for HTTP, Port 443 is for HTTPS, Port 3306 is for MySQL, etc.</li>
<li>What is caching? Why it is important for performance and saving compute? How to optimally do cache invalidation?</li>
<li>Write-through vs. Write-back for writing cache values to DB.</li>
<li>Why are CDNs important? How does caching work in CDNs? How does having servers at the edge helpful in reducing latencies to serve consumers?</li>
<li>What is serverless architecture? Why is it so popular nowadays? What is a typical serverless alternative to a 3 tier normal cloud architecture having a Gateway, Load Balancer, Scaling Group, Computer Instances, and DB Instances?</li>
<li>When to use pub-sub mechanism vs. when to use queues? How these two messaging channels can be used to decouple systems from one another? What is the fan-out architecture?</li>
<li>What is the difference between OLTP DB (like Aurora) vs. OLAP DB (like Redshift)? Why are OLAP DBs having columnar storage, unlike OLTP DBs which are row based?</li>
<li>How are graph DBs (i.e. Neptune) different from OLTP, OLAP, or NoSQL DBs and when should they be used?</li>
<li>How being multi-region or multi-availability helps in being highly available and DR (i.e Disaster recovery) compatible? How does failover happen when one region goes down? (Hint: Based on health checks of the instances)</li>
<li>For DBs, how does having read-replicas help in increasing DB performance? Can we couple read replicas and caching for a DB?</li>
<li>What is encryption at rest vs. encryption in transit? What is symmetric vs. asymmetric encryption? What is server-side vs. client-side encryption?</li>
<li>What is authentication and how it is different from authorization? Why is the least needed privilege ideal for authorization? How to scale authorization using entities like users, groups, roles, and policies? What are the common standards for auth like the OAuth API flow? What is MFA and why is it recommended nowadays days?</li>
<li>What is the difference between SDK, framework, and library? And when to provide which of these to the clients?</li>
<li>What is whitelisting? What is inbound IP vs. outbound IP whitelisting?</li>
</ol>
<p>Thanks for reading till the last bit! Wishing you the best with your cloud certification journey!</p>
]]></content:encoded>
    </item>
    <item>
      <title>HeadStart ML — Part 2 — Statistics and Probability FAANG interview questions</title>
      <link>https://ravivats.github.io/blog/headstart-ml-p02-stats-interview-questions/</link>
      <pubDate>Sun, 06 Sep 2020 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/blog/headstart-ml-p02-stats-interview-questions/</guid>
      <description>Some statistics and probability questions asked for SDE and Data Science roles, and their solutions.</description>
      <content:encoded><![CDATA[<p><img alt="headstart-ml" loading="lazy" src="/images/headstart-ml.png#center"></p>
<p>As the world moves from compute-intensive system architectures to data-intensive system architectures,
new technology roles like Product Analysts, Data Analysts, Data Engineers, ML Engineers, and Data Scientist have come up.</p>
<p>So, statistics &amp; probability become important concepts and hence, candidates interviewing for these new roles are generally asked questions to test these concepts.</p>
<p>Even if you are not in these roles, and in the core Software Engineering domain instead, still statistics, probability, and SQL remain the core concepts for beginning to understand any dataset and derive any meaning or predictions out of it, or write any computer logic around it.</p>
<p>Let us look at some of interesting questions that were asked in FAANG interviews for these roles:</p>
<ol>
<li>
<p>Amy and Brad take turns in rolling a fair six-sided die. Whoever rolls a &ldquo;6&rdquo; first wins the game. Amy has the first turn. What is the probability that Amy wins?</p>
<p><strong>Solution</strong>: The flow of the game is that the die is rolled multiple times till a &ldquo;6&rdquo; is rolled.</p>
<p>So, Amy can win on the first roll, third roll, fifth roll, and so on.</p>
<p>Probability of Amy winning in the first roll = P(six rolled by her) = 1/6</p>
<p>Probability of Amy winning in the third roll = P(six NOT rolled by her in first try) * P(six NOT rolled by Brad in first try) * P(six rolled by her in 2nd try) = (5/6) * (5/6) * (1/6) = 1/6 * (5/6)^2</p>
<p>Similarly, the probability of Amy winning in the fifth roll = (1/6) * (5/6)^4</p>
<p>Similarly, the probability of Amy winning in the seventh roll = (1/6) * (5/6)^6</p>
<p>Hence, total probability of Amy winning = Sum of all such events = (1/6) + (1/6 * (5/6)^2) + (1/6 * (5/6)^4) + (1/6 * (5/6)^6) + and so on..</p>
<p>This series of events is an infinite geometric progression i.e. GP with a = 1/6, and r = (5/6)^2 = 25/36.</p>
<p>The sum of such infinite GP series is = a/(1-r) = (1/6) / (1 - 25/36) = (1/6) / (11/36) = 6/11</p>
<p>Hence, probability of Amy winning in any of her turns = 6/11.</p>
<blockquote>
<p><strong>Note</strong>: This also means that probability of Brad winning in any of his turns = 1 - P(Amy winning) = 5/11</p>
</blockquote>
<blockquote>
<p><strong>Intuition</strong>: This shows you that in each board game, the probability of winning for the player that takes the first turn is always slightly greater than his opponent.
Intuition is that, yes that should happen right? It makes sense because player one always gets the first chance of making a potential right move in 1st turn, 3rd turn, 5th turn, and so on, while player two gets this chance afterward in this series with 2nd turn, 4th turn, 6th turn, and so on.</p>
</blockquote>
</li>
<li>
<p>In a village in India, the authorities were alarmed about a weird family planning custom &amp; started investigating the issue. They found out that in that village, couples were told that if they have a girl child, they should try again for a boy child, and stop only when they have a boy child born. And if they have a boy child born as a firstborn, they should stop planning for more children. Authorities were very worried that this ritual may create gender ratio imbalance. So they hired you, to verify using statistics and probability, if this problem will occur. Calculate the impact of this ritual on gender ratio.</p>
<p><strong>Solution:</strong></p>
<p><em><strong>Long way to solution</strong></em>: Let us take an example case study, suppose 50 couples in the village are fit to have children.</p>
<p>So, given that every couple will give birth to one child approx. (not considering twins as a case because they are rare), and the probability of a girl or boy being born for an individual birth is 50% each approximately, and that they follow the custom, we can chart down the sequence of births, which is:</p>
<p><img alt="long-solution" loading="lazy" src="/images/2020-09-06/q2-long-solution.jpg#center"></p>
<p>As the gender ratio remains approx. 50% as the no. of couples becomes larger and larger than 50. We can conclude that this practice doesn&rsquo;t have an impact on it.</p>
<blockquote>
<p><em><strong>Intuition/Short way to solution</strong></em>: The ratio would still be 50% because the probability of a boy or a girl being born is just related to the couple themselves and it is not related to (in other words, is <strong>disjoint</strong> to) any separate external event of weird rules being followed in society.
In other words, the birth of a boy or a girl to any couple is an <strong>independent</strong> event each time it occurs.
<em><strong>Explanation</strong></em>: <em>the probability of a girl or a boy being born to a couple doesn&rsquo;t get influenced by whether the couple had &lsquo;x&rsquo; number of boy or girl child before that. Hence, it always stays approximately equal, at 50% for both the genders.</em>
The only way in which gender ratio can be externally influenced, is when someone starts taking away babies of a given gender away from the village, which is not reported in the problem.</p>
</blockquote>
</li>
<li>
<p>Four people A, B, C &amp; D get in a lift on the ground floor. Each of them has a choice of getting down on floors 1,2,3 &amp; 4. What is the probability that all of them come out on different floors?</p>
<p><strong>Solution</strong>: Total no. of choices of getting out for each person = 4</p>
<p>Hence, total number of ways people can get out = 4 * 4 * 4 * 4 = 256</p>
<p>Now, total number of ways in which people can get out on different floors = ABCD, BACD, &hellip;, etc = 4P1 = 24.</p>
<p>Therefore, probability P(E) =  24/256 = 3/32.</p>
</li>
<li>
<p>Imagine a deck of 500 cards numbered from 1 to 5000. If all the cards are shuffled randomly and you are asked to pick 3 cards, one at a time, what is the probability of each subsequent card being larger than the previously drawn card?</p>
<p><strong>Solution</strong>: Let us assume that the 3 drawn cards have numbers A, B, C, where A &lt; B &lt; C.</p>
<p>They can be pulled in the sequence of ABC, BAC, &hellip; etc.</p>
<p>Hence, the total numbers of sequences they can be pulled out = 3P1 = 6</p>
<p>In those 6 sequences, only in ABC sequence, each subsequent card being larger than the previously drawn card.</p>
<p>Hence, no. of favorable sequences: 1</p>
<p>Therefore, probability P(E) = 1/6.</p>
</li>
</ol>
<p>Thanks for reading till the last bit! Cheers to learning! :)</p>
]]></content:encoded>
    </item>
    <item>
      <title>HeadStart System Design — Part 1 — Design Pattern Intuitions</title>
      <link>https://ravivats.github.io/blog/headstart-system-design-p01-design-pattern-intuitions/</link>
      <pubDate>Sun, 16 Aug 2020 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/blog/headstart-system-design-p01-design-pattern-intuitions/</guid>
      <description>Intuitions about which design pattern to use based on the input you provide and the state and functionality you want.</description>
      <content:encoded><![CDATA[<p><img alt="headstart-system-design" loading="lazy" src="/images/headstart-system-design.png#center"></p>
<p>The other day, a friend asked me on how I go about choosing a design pattern in a given scenario, because it was not always very clear.</p>
<p>Some design patterns are similar in terms of functionality (i.e. factory vs. builder)</p>
<p>I presented my intuitions via chat, and at the end of the discussion we both realized that with these intuitions for some of the design patterns in mind, choosing next time among them will be easier.</p>
<p>Hence, I thought of documenting and sharing it with everyone.</p>
<h2 id="factory"><a href="https://en.wikipedia.org/wiki/Factory_method_pattern">Factory</a></h2>
<p>Say that you are shopping from a factory outlet of a clothing company. You will only get t-shirts based on the size grades i.e. S, M, L, XL etc.</p>
<p>Hence, single input from our side i.e. S, M, L, XL etc. will define the whole t-shirt.</p>
<blockquote>
<p>Similarly, when you want to specify a single input argument like a keyword or an <strong><em>ENum</em></strong>, and get a variation of the main <strong><em>abstract class/interface TShirt</em></strong> created for you like <strong><em>SmallSizeTShirt</em></strong>, then you should go with <strong><em>Factory</em></strong> pattern.</p>
</blockquote>
<p>Similar example is covered here, with <strong><em>abstract class/interface Person</em></strong> and its custom variations <strong><em>Villager</em></strong> and <strong><em>CityPerson</em></strong> created for use that are created on the basic of a single input, the <strong><em>enum PersonType</em></strong>.</p>
<p><img alt="headstart-system-design-factory-design-pattern-example" loading="lazy" src="/images/2020-08-16/factory-design-pattern.png#center"></p>
<p>Factory Design Pattern in C#. Source: <a href="https://en.wikipedia.org/wiki/Factory_method_pattern">Wikipedia</a></p>
<h2 id="builder"><a href="https://en.wikipedia.org/wiki/Builder_pattern">Builder</a></h2>
<p>Now say that instead of going to a factory outlet, you want to have something that fits you better, so you went to a tailor for custom tailored shirt.</p>
<p>Now, the tailor will take note of various other inputs like your chest size, your arm length, your shoulder length etc.</p>
<p>Hence, you can see that the tailor doesn’t have grades based on only one input like size, instead he has a number of input parameters and is makes unique shirts for each customer based on the input values for each of them.</p>
<p>Here, tailor is synonymous with a <strong><em>builder</em></strong>.</p>
<blockquote>
<p>Hence, when there are multiple inputs from your side to construct a variation of the main <strong><em>abstract class/interface Shirt</em></strong>, use <strong><em>ShirtBuilder</em></strong> to return a <strong><em>CustomShirt</em></strong> for you based on various inputs.</p>
</blockquote>
<p>Similar example is covered here, with ICarBuilder using various inputs like <strong><em>NumDoors</em></strong>, <strong><em>Colour</em></strong>, <strong><em>BrandName</em></strong> and <strong><em>ModelName</em></strong> and some code logic to construct a Ferrari 488 Spider Car.</p>
<p><img alt="headstart-system-design-builder-design-pattern-example" loading="lazy" src="/images/2020-08-16/builder-design-pattern.png#center"></p>
<p>Builder Design Pattern in C#. Source: <a href="https://en.wikipedia.org/wiki/Builder_pattern">Wikipedia</a></p>
<h2 id="singleton"><a href="https://en.wikipedia.org/wiki/Singleton_pattern">Singleton</a></h2>
<p>Suppose, you have a DB connection to initialize, and you want this DB connection to be established with your DB, and then every time you want to query for some data in a function, you get the <strong><em>same Connection object in establishedConnection state</em></strong> returned, to quickly query data.</p>
<blockquote>
<p>In such scenarios where, not only do you want the same type of object to be returned, but you also want it to have a given state always, and for it to be a <strong><em>static method call</em></strong> to get that object, then you use the <strong><em>Singleton</em></strong> pattern.</p>
</blockquote>
<blockquote>
<p><strong><em>Additional feature</em></strong>: <em>A thread safe singleton can be created so that singleton property is maintained even in multi-threaded environment.</em>
<em>To make a singleton class thread-safe,</em> <strong><em>getInstance()</em></strong> <em>method is made synchronized so that one one thread can access it at a time.</em></p>
</blockquote>
<p><img alt="headstart-system-design-singleton-design-pattern-example" loading="lazy" src="/images/2020-08-16/singleton-design-pattern.png#center"></p>
<p>Singleton Design Pattern supporting multi-threading in Java. Source: <a href="https://en.wikipedia.org/wiki/Singleton_pattern">Wikipedia</a></p>
<h2 id="mixins"><a href="https://en.wikipedia.org/wiki/Mixin">Mixins</a></h2>
<p>Suppose you are being told to make a system to accept pizza orders for a restaurant.</p>
<p>Here, <strong><em>class Pizza</em></strong> itself has many variations like <strong><em>ThinCrust</em></strong>, <strong><em>ThickCrust</em></strong>, <strong><em>ExtraCheese</em></strong> etc.</p>
<p>And, on-top of pizza you have a extra class like <strong><em>class Topping</em></strong> which has variations like <strong><em>Mushroom</em></strong>, <strong><em>BlackOlives</em></strong>, <strong><em>Pineapple</em></strong> etc.</p>
<p>Here, any <strong><em>Topping</em></strong> can go with any <strong><em>Pizza</em></strong> and vice versa.</p>
<blockquote>
<p>Hence, for this kind of multiple inheritance requirement where:</p>
<ol>
<li>You want to provide a lot of optional features for a class.</li>
<li>You want to use one particular feature in a lot of different classes.</li>
</ol>
<p>For cases like these, you can use the <strong><em>Mixin</em></strong> pattern.</p>
<p><strong>Note</strong>: <em>Mixins only exist in languages that support multiple-inheritance. You can’t do a mixin in Java or C#.</em></p>
</blockquote>
<p><img alt="headstart-system-design-mixin-design-pattern-example" loading="lazy" src="/images/2020-08-16/mixin-design-pattern.png#center"></p>
<p>Mixin Design Pattern (Pizza-Topping Example) in Python</p>
<p><img alt="headstart-system-design-mixin-design-pattern-example-output" loading="lazy" src="/images/2020-08-16/mixin-design-pattern-output.png#center"></p>
<p>Output for above example</p>
<h2 id="adapter"><a href="https://en.wikipedia.org/wiki/Adapter_pattern">Adapter</a></h2>
<p>Suppose that you have to build an app interface for users to orders food from different restaurants. Here, menu shown to the user on your app is same for every restaurant, but the order information that each restaurant gets in slightly different.</p>
<blockquote>
<p>In cases like these, where one common input has to be mapped to different kinds to input or actions taken we should use the <strong><em>Adapter</em></strong> Pattern.</p>
<p><strong><em>Intuition</em></strong> is that adapters like charging adapter in real world do exactly the same thing. They send normal AC current coming at a fixed voltage-current range from the main socket into different charger pins for different devices like camera, phone, usb charger pin etc., all with their own voltage-current range.</p>
</blockquote>
<p>Similar example is covered here, where different charging styles for <strong><em>LightningPhone</em></strong> and <strong><em>MicroUsbPhone</em></strong> are defined via interfaces.</p>
<p>Class <strong><em>IPhone</em></strong> implements only <strong><em>LightningPhone</em></strong> interface (it can only be charged via Lightning) and class <strong><em>Android</em></strong> implements only <strong><em>MicroUsbPhone</em></strong> interface (it can only be charged via Micro USB).</p>
<p>Now, the class <strong><em>LightningToMicroUsbAdapter</em></strong> helps to implement <strong><em>MicroUsbPhone</em></strong> interface and helps charge class <strong><em>Android</em></strong> with that, which otherwise was not possible.</p>
<p><img alt="headstart-system-design-adapter-design-pattern-example" loading="lazy" src="/images/2020-08-16/adapter-design-pattern.png#center"></p>
<p>Adapter Design Pattern in Java. Source: <a href="https://en.wikipedia.org/wiki/Adapter_pattern">Wikipedia</a></p>
<h2 id="reference-links">Reference Links</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Factory_method_pattern">Factory pattern</a></li>
<li><a href="https://en.wikipedia.org/wiki/Builder_pattern">Builder pattern</a></li>
<li><a href="https://en.wikipedia.org/wiki/Singleton_pattern">Singleton pattern</a></li>
<li><a href="https://en.wikipedia.org/wiki/Mixin">Mixin Pattern</a>: <a href="https://stackoverflow.com/questions/533631/what-is-a-mixin-and-why-are-they-useful">Forum Discussion</a>, <a href="https://www.residentmar.io/2019/07/07/python-mixins.html">Blog</a></li>
<li><a href="https://en.wikipedia.org/wiki/Adapter_pattern">Adapter Pattern</a></li>
<li>Other design patterns and their categories:
<ul>
<li><a href="https://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional-ebook/dp/B000SEIBB8">GangOfFour</a> (Classical book on Design Patterns)</li>
<li><a href="https://refactoring.guru/design-patterns/catalog">Blog</a></li>
</ul>
</li>
</ul>
<p>Thanks for reading till the last bit! Cheers to learning! :)</p>
]]></content:encoded>
    </item>
    <item>
      <title>HeadStart ML — Part 1 — Distilled Summary of ML</title>
      <link>https://ravivats.github.io/blog/headstart-ml-p01-state-of-ml/</link>
      <pubDate>Mon, 30 Mar 2020 00:00:00 +0800</pubDate>
      <guid>https://ravivats.github.io/blog/headstart-ml-p01-state-of-ml/</guid>
      <description>Introduction to the current state of ML and all its important concepts.</description>
      <content:encoded><![CDATA[<p><img alt="headstart-ml" loading="lazy" src="/images/headstart-ml.png#center"></p>
<h2 id="how-is-ml-different-from-traditional-programming">How is ML different from Traditional Programming?</h2>
<p>Traditional Programming involves the manual or scaffolded (<em>i.e.</em> already written previously and hence cloned/repeated) logical process of writing a way to convert a certain input into desired output according to certain predefined constraints. So in short:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Traditional Programming:
</span></span><span class="line"><span class="cl">Input + Program (by coder) = Output
</span></span></code></pre></div><p>Machine Learning (ML) and its related fields, in contrast, automate this manual process of coming up with the logical program by seeing a big set of correct inputs and their corresponding correct outputs, and “learning” this mapping of input to output called as <strong><em>model</em></strong>.</p>
<p>And then use this generated <strong><em>model</em></strong> with a new set of inputs to predict a new set of outputs. So in short:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Machine Learning:
</span></span><span class="line"><span class="cl">a.) Input + Output = Model
</span></span><span class="line"><span class="cl">b.) Model + new Input = new predicted Output
</span></span></code></pre></div><h3 id="how-does-this-learning-happen">How does this “learning” happen?</h3>
<p>“Learning” happens in the training phase when a huge set of correct inputs and their corresponding correct outputs are assembled and used in training to get a model which can then be used to make predictions on new input values.</p>
<blockquote>
<p>This huge set of correct input and output together is called the training set.</p>
</blockquote>
<p>Finally, when the model is done training, we can then predict the outputs for a new set of input values.</p>
<blockquote>
<p>This set is known as the test set on which we test the accuracy of the network.</p>
</blockquote>
<h2 id="history">History</h2>
<p>If we look at the world of tech in the last 10 years (2010–2019), one field of study which has made humongous progress is ML.</p>
<p>Before this decade, due to the absence of compute resources supporting heavy parallelization of tasks required for ML algorithms, these algorithms were only used in small pockets of <em>E-Commerce</em> and <em>Digital Marketplace</em> websites to serve recommendations.</p>
<p>At the beginning of the decade, when GPUs started trending and heavy parallelization of calculations was a reality, this field and sub-fields like Deep Learning, other related fields like Computer Vision saw rapid advancements with new State-of-the-Art models released every 3 to 6 months, performing better from the predecessor models in terms of one or more measures like <strong><em>accuracy</em></strong>, <strong><em>generalization</em></strong>, <strong><em>robustness</em></strong>, <strong><em>ease-in-training</em></strong>, and <strong><em>explainability</em></strong>.</p>
<h2 id="what-does-each-of-these-terms-mean">What does each of these terms mean?</h2>
<p><strong><em>Accuracy</em></strong> <em>refers to the degree to which the ML model was able to predict the correct output. This output can be a categorical variable (i.e. a yes or a no answer) or a number (i.e. price of certain company’s stock).</em></p>
<p><strong><em>Generalization</em></strong> <em>means how an ML model is able to predict for a domain of tasks after being “trained” to make predictions for a similar domain of tasks.</em></p>
<p><em>i.e. Can a model trained to distinguish between cats and dogs also be extended to other animals, like a human and a chimp?</em></p>
<p><strong><em>Robustness</em></strong> <em>means how an ML model can deal with “weird edge-cases” of input. i.e. Can a model being trained to distinguish between human and dog also distinguish them when the human is wearing a dog-suit and the dog is wearing a t-shirt?</em></p>
<p><strong><em>Ease-of-training</em></strong> <em>measures to how much compute resources and training time (i.e. time taken for a model to “learn” to predict correct output given was spent to train a model to reach a given accuracy measure on a varied set of test inputs. i.e. If a model A requires 4 hours of training time to distinguish between a human and a dog with 80% accuracy and a model B does the same in 12 hours of training with same accuracy when tested on 1000 new images of humans and dogs, then model A is better because it takes less time to train and re-train.</em></p>
<p><strong>Note</strong>: Apart from training time, inference time (i.e, time taken for a model to give out prediction for a given input) of different models can also be different, but generally this time is much smaller than the training time, and hence is not that much of an issue unless input supplied is enormously huge.</p>
<blockquote>
<p>Notice how similar it is to traditional programming where to solve a task A and give correct output if one piece of code A does it in O(n) linear time complexity, and another piece of code B does it in O(n^2) polynomial time complexity, then the first piece of code A will be considered better because it will perform immensely faster for a huge input.</p>
</blockquote>
<p><strong><em>Explainability</em></strong> <em>refers to the ease with which what the model is learning at each step of training, and what small results it is predicting at each phase of inference can clearly be demonstrated to any person having no prior introduction to ML, who just understands the domain of the problem for which the model was built.</em></p>
<p><em>i.e. If a model is used to decide when to sell or buy stocks of a given company. Explaining what factors does the trained model take into consideration after being trained to get to the results to an experienced Technical Stock Analyst by a ML engineer counts as its</em> <strong><em>explainability</em></strong>.</p>
<blockquote>
<p>There has been huge push after 2017–2018 for models to be more explainable to domain stakeholders so that questioned like whether it is biased towards a certain type of input, or it treating all input fairly, or is not breaking any rules of the ecosystem can be verified by the domain experts who might not be ML experts.</p>
<p>These advancements garnered much-needed support due to a recent common interest in data protection of consumers and what data points do sophisticated ML algorithms consider for making any decision and do they follow all moral, legal rules while doing so.</p>
</blockquote>
<h2 id="what-are-the-different-types-of-ml-algorithms">What are the different types of ML algorithms?</h2>
<p>On the basis of the training set being given to them, ML algorithms are broadly divided into:</p>
<h3 id="supervised-learning">Supervised Learning</h3>
<p>In <strong><em>supervised</em></strong> learning, both the input (also known as <strong>non-target attributes</strong>) and its correct output (also known as the <strong>target attribute</strong> or <strong>ground truth</strong>) that should be predicted by the model in the best case are provided.</p>
<p>And the task is to learn a function F, that takes the non-target attributes <strong>X</strong> and output a value that approximates the target attribute, <em>i.e.</em> <strong>F(X)≈y</strong>. The target attribute y serves as a teacher to guide the learning task since it provides a benchmark on the results of learning. Hence, the task is called supervised learning.</p>
<blockquote>
<p>i.e. In the Iris data set, the category of iris flower can serve as a target attribute. The data with a target attribute is often called “<strong>labeled</strong>” data. Based on the above definition, for the task of predicting the category of iris flower with the labeled data, one can tell that it is supervised learning.</p>
</blockquote>
<h3 id="unsupervised-learning">Unsupervised Learning</h3>
<p>Different from supervised learning, we do not have the ground truth in an unsupervised learning task. One is expected to learn the underlying patterns or rules from the data, without having the predefined ground truth as the benchmark.</p>
<p><a href="https://developers.google.com/machine-learning/clustering/clustering-algorithms">Clustering algorithms</a> are one of the examples of unsupervised learning.</p>
<h3 id="semi-supervised-learning">Semi-supervised Learning</h3>
<p>In a scenario where the data set is massive but the labeled samples are few, one might find the application of both supervised and unsupervised learning. We can call this task as <strong><em>semi-supervised learning</em></strong>.</p>
<blockquote>
<p>i.e. If one would like to predict the label of images, but only 10% of the images are labeled. By applying supervised learning, we train a model with the labeled data, then we apply the model to predict the unlabeled data. It would be hard to convince ourselves that the model would be general enough, after all, we learned from only the minority of data set. A better strategy could be to first cluster the images into groups (unsupervised learning), and then apply the supervised learning algorithm on each of the groups individually.</p>
<p>The unsupervised learning in the first stage could help us to narrow down the scope of learning so that the supervised learning in the second stage could obtain better accuracy.</p>
</blockquote>
<p>On the basis of the type of predictions the ML algorithms are making, ML algorithms are broadly divided into:</p>
<h3 id="regression-algorithms">Regression algorithms</h3>
<p>The algorithms that predict a continuous number value, like temperature prediction in a day, or stock price for a given stock at a particular time are called regression algorithms.
Examples of regression algorithms are <a href="https://en.wikipedia.org/wiki/Linear_regression">Linear Regression</a>, <a href="https://brilliant.org/wiki/multivariate-regression/">Multi-variate Regression</a>, etc.</p>
<h3 id="classification-algorithms">Classification algorithms</h3>
<p>The algorithms that predict a discrete categorical value, like the prediction of whether someone has COVID-19 or not based on the chest X-Ray (true or false), or whether the given image has a cat, dog, or human in it (cat or dog or human) are called Classification algorithms.</p>
<p>One example of classification algorithms is <a href="https://en.wikipedia.org/wiki/Logistic_regression">Logistic Regression</a>.</p>
<h2 id="what-are-the-common-issues-with-predictions-made-with-ml-models">What are the common issues with predictions made with ML models?</h2>
<p>Although there are many issues with the predictions made with ML models, we are going to focus on two broad types:</p>
<p><img alt="headstart-ml-underfit-overfit-example" loading="lazy" src="/images/headstart-ml-underfit-overfit-example.png#center"></p>
<p>Example of underfitting, just-right fit, and overfitting for a Linear Regression model predicting housing prices.</p>
<p><strong>Source</strong>: Publicly Open MOOC <a href="https://www.coursera.org/learn/machine-learning">Machine Learning by Stanford from Coursera</a></p>
<h3 id="underfitting">Underfitting</h3>
<p>An underfitting model is the one that does not fit well with the training data, <em>i.e.</em> significantly deviated from the training set target variables.</p>
<p>One of the causes of underfitting could be that the model is over-simplified for the data, therefore it is not capable to capture the hidden relationship within the data.</p>
<p>As one can see in the above picture, in part 1, in order to predict the house prices, the almost linear line is not able to predict housing prices correctly and the difference between the predicted price and actual price is too much. Here, a simple linear model (a line) is not capable to “fit” the price curve, which results in significant error is price prediction.</p>
<p>As a countermeasure to avoid the above cause of underfitting, one can choose an alternative algorithm that is capable to generate a more complex model from the training data set.</p>
<p>One can also have a big and diverse training set to avoid the underfitting of the model.</p>
<blockquote>
<p><em>Underfitting is also can be intuitively linked to</em> <a href="https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff">high bias</a>, <em>as here the model is under the high bias of the principle that the prices of the house increase linearly with the area (size) of the house</em>.</p>
</blockquote>
<h3 id="overfitting">Overfitting</h3>
<p>An overfitting model is the one that fits well with the training data, <em>i.e.</em> little or no error, however, it does not generalize well to the unseen data.</p>
<p>Contrary to the case of underfitting, an over-complicated model that is able to fit every bit of the data, would fall into the traps of noises and errors.</p>
<p>As one can see from the above picture, in part 3, the model managed to have mostly zero error for price prediction in the training data, yet it is more likely that it would stumble on the unseen data.</p>
<p>Similar to the underfitting case, to avoid the overfitting, one can try out another algorithm that could generate a simpler model from the training data set.</p>
<p>Alternatively, one stays with the original algorithm that generated the overfitting model, but adds a regularization term to the algorithm, <em>i.e.</em> penalizing the model that is over-complicated so that the algorithm is steered to generate a less complicated model while fitting the data.</p>
<blockquote>
<p><em>Overfitting is also can be intuitively linked to</em> <a href="https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff">high variance</a><em>, as here the model is predicting very specific prices decreasing or increasing suddenly the compared to the area of the house just smaller or higher than the current input area of the house because it has overfitted on the training data.</em></p>
</blockquote>
<blockquote>
<p><em>And hence, proving our intuition, the overfitted model has a</em> <a href="https://en.wikipedia.org/wiki/Variance">high statistical variance</a> <em>for the prices of the house when plotted w.r.t. the independent variable, which is the area (size) of the house</em>.</p>
</blockquote>
<h2 id="resources">Resources</h2>
<p>From here on, you can learn further about the above-presented topics from:</p>
<ul>
<li><a href="https://leetcode.com/explore/learn/card/machine-learning-101/">LeetCode Machine Leaning 101</a></li>
<li><a href="https://developers.google.com/machine-learning/crash-course/ml-intro">Machine Learning Crash Course — Google Developers</a></li>
<li><a href="https://www.coursera.org/learn/machine-learning">Machine Learning by Stanford from Coursera</a></li>
<li><a href="https://www.coursera.org/specializations/deep-learning">Deep Learning Specialization from Coursera</a></li>
<li><a href="https://www.fast.ai/">fast.ai</a>’s Machine Learning and Deep Learning Course</li>
</ul>
<p>Thanks for reading till the last bit! Cheers to learning! :)</p>
]]></content:encoded>
    </item>
    <item>
      <title>About</title>
      <link>https://ravivats.github.io/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ravivats.github.io/about/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Ravi Vats&#34; loading=&#34;lazy&#34; src=&#34;https://ravivats.github.io/images/avatar.png#center&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m &lt;strong&gt;Ravi Vats&lt;/strong&gt;, a Lead Data Scientist at &lt;a href=&#34;https://www.thoughtworks.com/&#34;&gt;Thoughtworks&lt;/a&gt;, based in Singapore.&lt;/p&gt;
&lt;p&gt;I have spent 7+ years building scalable backend services and AI/ML systems — from transformers and reinforcement learning to production-grade LLM applications. Earlier in my career I built high-traffic Go APIs with rate limiting, caching, and performance optimizations. These days I&amp;rsquo;m focused on RAG systems and LLM fine-tuning pipelines.&lt;/p&gt;
&lt;p&gt;I write about the problems I&amp;rsquo;m solving and the patterns I discover along the way.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img alt="Ravi Vats" loading="lazy" src="/images/avatar.png#center"></p>
<p>I&rsquo;m <strong>Ravi Vats</strong>, a Lead Data Scientist at <a href="https://www.thoughtworks.com/">Thoughtworks</a>, based in Singapore.</p>
<p>I have spent 7+ years building scalable backend services and AI/ML systems — from transformers and reinforcement learning to production-grade LLM applications. Earlier in my career I built high-traffic Go APIs with rate limiting, caching, and performance optimizations. These days I&rsquo;m focused on RAG systems and LLM fine-tuning pipelines.</p>
<p>I write about the problems I&rsquo;m solving and the patterns I discover along the way.</p>
<h2 id="previously">Previously</h2>
<p>Before Thoughtworks, I was a <strong>Senior Software Engineer at <a href="https://www.grab.com/sg/">Grab</a></strong> in Singapore, in the Deliveries organization — building Go microservices that handled 2M+ food and express-delivery orders per day. Before that, I worked at <strong><a href="https://www.morganstanley.com/">Morgan Stanley</a></strong> in the Institutional Securities Tech division, doing backend development and big-data engineering on post-trade reporting pipelines. I&rsquo;ve also interned at <strong>Bosch</strong> (research, IoT/home automation) and worked on mobile apps early in my career.</p>
<p>The full history with details is on the <a href="/work/">Work</a> page.</p>
<h2 id="education">Education</h2>
<ul>
<li><strong>Georgia Institute of Technology</strong> — M.S. in Computer Science (2021 – 2024)</li>
<li><strong>Ramaiah Institute of Technology, Bangalore</strong> — B.E. in Computer Science (2014 – 2018)</li>
</ul>
<h2 id="certifications">Certifications</h2>
<ul>
<li>AWS Certified Solutions Architect – Associate</li>
<li>Microsoft Certified: Azure Fundamentals, Azure Data Scientist Associate</li>
</ul>
<h2 id="elsewhere">Elsewhere</h2>
<ul>
<li>GitHub: <a href="https://github.com/ravivats">@ravivats</a></li>
<li>LinkedIn: <a href="https://www.linkedin.com/in/ravi-vats/">ravi-vats</a></li>
<li>X/Twitter: <a href="https://x.com/ravivats_">@ravivats_</a></li>
<li>Email: <a href="mailto:mailravivats@gmail.com">mailravivats@gmail.com</a></li>
</ul>
<!-- TODO: expand with a resume-style experience timeline, education, and publications
     when you're ready. The Work page holds the company list with logos. -->
]]></content:encoded>
    </item>
  </channel>
</rss>
