<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Sanjeev Srithevan</title><link href="https://sanj.ninja/" rel="alternate"/><link href="https://sanj.ninja/feeds/all.atom.xml" rel="self"/><id>https://sanj.ninja/</id><updated>2026-05-25T00:00:00+01:00</updated><entry><title>I am Sanjeev: How I Went From Picking Up Shrapnels to Picking Up Coding</title><link href="https://sanj.ninja/blog/i-am-sanjeev/" rel="alternate"/><published>2026-05-25T00:00:00+01:00</published><updated>2026-05-25T00:00:00+01:00</updated><author><name>Sanjeev Srithevan</name></author><id>tag:sanj.ninja,2026-05-25:/blog/i-am-sanjeev/</id><summary type="html">&lt;p&gt;This is my first blog post on my newly built personal website. I'll talk a bit about myself and what's to come.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Yes, you're seeing a picture of me with a bunny as the cover image of this post 😄. His name is &lt;strong&gt;Mochi&lt;/strong&gt;. He is very destructive and currently lives in Manchester. As we speak, he is probably trying to eat my friend's shoes or causing some other form of chaos.&lt;/p&gt;
&lt;p&gt;He isn't actually mine. Mochi lives with one of my friends, who has two bunnies: &lt;strong&gt;Mochi&lt;/strong&gt; and &lt;strong&gt;Poffin&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I don't have many photos of myself, nor do I really use social media. I'm a very private person. The few pictures I do have are usually of me standing in front of a Formula car, holding a bow and arrows, or hanging out with Mochi.&lt;/p&gt;
&lt;h2 id="a-bit-about-myself-why-did-i-spin-up-a-personal-website"&gt;A Bit About Myself: Why Did I Spin Up a Personal Website?&lt;a class="headerlink" href="#a-bit-about-myself-why-did-i-spin-up-a-personal-website" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At this stage in my career, and in life, everywhere I go, people ask for my socials and want to know a bit more about me. I will never be on social media, but I do have LinkedIn, which I share when people ask.&lt;/p&gt;
&lt;p&gt;I needed a way to make myself publicly available, and I finally feel ready to do so. I feel that what I have to share can help a lot of people, or at least I hope it does. Over the years, I've received feedback from colleagues, friends, and even complete strangers about how my story, achievements, and advice have helped them. Some of them are doing really well in life now, partly because of that spark they got from me, combined with their own hard work and determination.&lt;/p&gt;
&lt;p&gt;I thought a personal website would allow me to control the content and make myself publicly available in my own way. For example, I can share my photography work when people ask for my Instagram, which I don't have, after meeting me on road trips or seeing me out with my cameras. I can use it to network within my field, document my journey, and keep a diary of sorts where I can publish whatever I want in a format I'm happy with.&lt;/p&gt;
&lt;p&gt;As you know by now, my name is &lt;strong&gt;Sanjeev&lt;/strong&gt;. You can learn a bit more about me by exploring the home page.&lt;/p&gt;
&lt;p&gt;I was born in Sri Lanka and arrived at London Heathrow Airport in 2011. I've now been in the UK for around 15 years. My family came to the UK after fleeing the Sri Lankan Civil War, specifically during its final stages. Like many others, we were looking for safety and the opportunity to build a new life. Looking back, it was a life-changing journey that shaped who I am today.&lt;/p&gt;
&lt;h3 id="sri-lankan-civil-war-life-in-sri-lanka"&gt;Sri Lankan Civil War / Life in Sri Lanka&lt;a class="headerlink" href="#sri-lankan-civil-war-life-in-sri-lanka" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I spent most of my childhood in Sri Lanka running into bunkers, hearing bombs drop, collecting shrapnel, and getting up to other interesting things that I won't share here, as that could be a separate post in itself.&lt;/p&gt;
&lt;p&gt;I wasn't really in school until I came to the UK around Year 5 or 6, so when I was about 9 or 10 years old. The war disrupted education for many of us, and even when I did attend school in Sri Lanka, we would often end up being sent into bunkers anyway.&lt;/p&gt;
&lt;p&gt;Not truly being in school was quite fun &lt;em&gt;I think&lt;/em&gt;. To be honest, I wouldn't know any different, as we were never formally educated for much of that period.&lt;/p&gt;
&lt;p&gt;Getting visas to come to the UK was a long process. Literally long, as the queues and waiting times were endless, and long from a paperwork perspective too. Thankfully, through a combination of hope, faith, and a bit of luck, we eventually got our visas after spending a year or two in another part of Sri Lanka where my people were not always particularly welcome at the time. There was a significant divide back then, and to some extent, there still is today.&lt;/p&gt;
&lt;p&gt;Those years before coming to the UK were eye-opening. I had grown up in a heavily segregated environment where schools were often divided by language, ethnicity, and religion.&lt;/p&gt;
&lt;p&gt;I ended up attending a Christian (or possibly Catholic) Tamil boys' school, I honestly can't remember which now. They were quite open to accepting anyone, provided you spoke Tamil. It was a strict school, and it taught me a lot of discipline, although the punishments could be brutal 🙃.&lt;/p&gt;
&lt;p&gt;I spent my final years there before moving to the UK in 2011.&lt;/p&gt;
&lt;h3 id="coming-to-the-uk"&gt;Coming to the UK&lt;a class="headerlink" href="#coming-to-the-uk" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Coming to the UK was a privilege, and in many ways it was similar to how it was portrayed in some of the films I had watched in Sri Lanka. Back then, the military had significant control over what you could watch, and if you were caught with certain films, the consequences could be quite harsh.&lt;/p&gt;
&lt;p&gt;The UK felt like a completely different world. The roads weren't bombed to pieces. There were no bombs dropping from the sky. Everywhere seemed clean compared to what I was used to. There was no shrapnel to collect, no soldiers carrying AK-47s, and people seemed to be living in peace. Most importantly, people seemed happy.&lt;/p&gt;
&lt;p&gt;Then there was the whole debacle of living in Croydon, which was a life-changing experience in itself.&lt;/p&gt;
&lt;p&gt;From the day we arrived in the UK, the one thing my parents, especially my mum, drilled into my head was the importance of education. If I didn't get 100%, I was apparently a failure.&lt;/p&gt;
&lt;p&gt;Looking back, I think she was terrified that I might end up going down the wrong path. In her mind, that meant getting involved in gangs, selling drugs, getting kicked out of school, or ending up in prison.&lt;/p&gt;
&lt;p&gt;I was a rebel, and to some extent, I still am. The difference is that I chose to go my own way in a positive sense.&lt;/p&gt;
&lt;p&gt;I suppose I didn't quite fulfil my mum's dream of becoming a doctor or a lawyer 😆. To this day, she doesn't think typing away on a computer all day counts as a real job, so there's that.&lt;/p&gt;
&lt;p&gt;That said, I don't think she worries about me anymore. I must be doing something right.&lt;/p&gt;
&lt;h3 id="skipping-to-the-nice-parts"&gt;Skipping to the Nice Parts&lt;a class="headerlink" href="#skipping-to-the-nice-parts" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Now, skipping past the wars, coming to the UK, life in Croydon (which was heaven for me compared to a war zone, regardless of what people think of Croydon, it's really not that bad, people; don't believe everything you see in the news), adapting to the culture, and integrating into the western world...&lt;/p&gt;
&lt;p&gt;Let's skip ahead to how I ended up in the world of coding and software engineering, the very reason you're on this website.&lt;/p&gt;
&lt;h3 id="pilot"&gt;Pilot&lt;a class="headerlink" href="#pilot" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I always wanted to become a pilot and fly planes. Growing up in Sri Lanka, I was getting bombed by fighter jets, and seeing one in the sky was a big deal. The same went for drones.&lt;/p&gt;
&lt;p&gt;As kids, we would sneak out to nearby military bases. Many of them were positioned in large open fields, making it possible to spot drones and, occasionally, fighter jets. Our parents hated this. Whenever we heard the sound of aircraft, we were supposed to be running into bunkers, not trying to get a better view of them.&lt;/p&gt;
&lt;p&gt;I became fascinated with fighter jets and always dreamed of flying one myself. If I had told my parents that back then, they probably would have locked me in a bunker (there were different types, open and closed bunkers 😅). The irony was that those same fighter jets had caused immense suffering within our community.&lt;/p&gt;
&lt;p&gt;My mum nearly died because of one. A bunker-buster bomb landed at her workplace. Thankfully, it failed to detonate, but it still collapsed the bunker she was sheltering in. The workers had to be dug out afterwards.&lt;/p&gt;
&lt;p&gt;Becoming a pilot was an expensive career path in the UK back then and, for the most part, it still is today, although there are now some fully funded commercial airline pilot programmes available.&lt;/p&gt;
&lt;p&gt;When I was in secondary school, however, you largely had to fund it yourself. Neither my family nor I had £100,000 lying around. Many aspiring pilots ended up remortgaging their homes or taking out significant loans to pay for flight training.&lt;/p&gt;
&lt;p&gt;My parents are successful in business and are financially comfortable now. They could probably fund whatever my little brother wants to do with his life (assuming he can eventually get off TikTok for five minutes), but that simply wasn't an option for me back then.&lt;/p&gt;
&lt;p&gt;So I switched my focus to the next area that had always fascinated me: technology.&lt;/p&gt;
&lt;p&gt;The house we lived in while I was growing up in Sri Lanka didn't even have electricity. We fetched water from a well, our neighbour's cow provided milk, much of our food came from local farms, and we grew some of our own fruit and vegetables.&lt;/p&gt;
&lt;p&gt;We rarely went into the city because it wasn't particularly safe. Technology wasn't really part of everyday life where we lived. The wealthier households had electricity, a television, and perhaps a landline telephone. For everyone else, life was much simpler.&lt;/p&gt;
&lt;h3 id="poking-around-with-computers-like-a-caveman-discovering-fire"&gt;Poking Around With Computers Like a Caveman Discovering Fire&lt;a class="headerlink" href="#poking-around-with-computers-like-a-caveman-discovering-fire" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;It all started in primary school in the UK, where I got used to using computers, both laptops and desktops.&lt;/li&gt;
&lt;li&gt;Google Translate was incredibly useful back then because I didn't know any English.&lt;/li&gt;
&lt;li&gt;I learnt most of my English with the help of other kids at school who spoke Tamil and various other languages.&lt;/li&gt;
&lt;li&gt;At first, I wasn't particularly fascinated by computers. I was far more excited about watching cartoons on TV, which was amazing considering we didn't even have a television in our house in Sri Lanka because we had no electricity. I did manage to watch some cartoons at our wealthy neighbour's house though, as they were quite fond of me.&lt;/li&gt;
&lt;li&gt;At some point in Year 6, my class was taken to Whitgift School, a rather fancy private school with its own zoo and everything. We learnt Scratch there and built little games as a class. Looking back, there were only a handful of us who were genuinely excited about doing some form of &lt;em&gt;programming&lt;/em&gt;, if you can even call it that, and I was definitely one of them.&lt;/li&gt;
&lt;li&gt;What really got me excited wasn't Scratch itself. It was seeing one of the teachers remotely controlling all the computers in the classroom. You could see the mouse moving on its own, applications opening, windows changing, and all sorts of things happening across the machines. It completely blew my mind. Looking back, that's probably what sparked my interest in technology and computers more than building games in Scratch ever did.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-the-computer-science-coding-journey-started"&gt;How the Computer Science &amp;amp; Coding Journey Started&lt;a class="headerlink" href="#how-the-computer-science-coding-journey-started" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The pilot dream was shattered, so I put it in my backlog. I'm alive and well, and there are plenty of other things I can do in this great country.&lt;/li&gt;
&lt;li&gt;Secondary school was a struggle, which could easily be another blog post or an entire book in itself. I'll spare you the details for now.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="gcses"&gt;GCSEs&lt;a class="headerlink" href="#gcses" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I picked Computer Science for my GCSEs, thanks largely to the influence of someone who is now one of my closest friends.&lt;/li&gt;
&lt;li&gt;He's also a software engineer who is doing really well in his career. He loves &lt;strong&gt;Next.js&lt;/strong&gt; and &lt;strong&gt;Vercel&lt;/strong&gt; 50% of the time and hates them the other 50%, yet he'll never move away from them. He's also the sort of opinionated developer who hates everything and constantly threatens to build his own version of whatever he dislikes...&lt;/li&gt;
&lt;li&gt;I think that's when I first truly came across Vercel. He recommended that I follow the Next.js documentation because, according to him, it was the &lt;strong&gt;best documentation he had ever seen&lt;/strong&gt;. Given that he hates and nitpicks absolutely everything, him genuinely liking something was a strong endorsement. To be fair, the &lt;strong&gt;Vercel and Next.js documentation is undeniably excellent&lt;/strong&gt;. &lt;strong&gt;Stripe might take second place&lt;/strong&gt; on that list.&lt;/li&gt;
&lt;li&gt;Fast forward a few years and I came away with some decent GCSE grades.&lt;/li&gt;
&lt;li&gt;I was coding in Python and building all sorts of command-line applications, from ATM simulators to whatever random idea I found interesting at the time.&lt;/li&gt;
&lt;li&gt;I loved learning from &lt;strong&gt;Tech With Tim&lt;/strong&gt; and &lt;strong&gt;Corey Schafer&lt;/strong&gt;. I probably owe many of my early opportunities in technology to them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="a-levels"&gt;A-Levels&lt;a class="headerlink" href="#a-levels" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I picked Computer Science at A-Level.&lt;/li&gt;
&lt;li&gt;I was still coding in Python and started experimenting with Tkinter, Kivy, Selenium, and a few other technologies.&lt;/li&gt;
&lt;li&gt;I also tried to learn Django and failed catastrophically. &lt;strong&gt;I was trying to learn to fly before I could even walk...&lt;/strong&gt; That experience destroyed my confidence so badly that I started telling my friends I was going to become a marine biologist instead 🤣. The only thing I knew about marine biology at the time was that they studied fish or something. Yes, I was in a very low place after Django defeated me.&lt;/li&gt;
&lt;li&gt;Looking back, it's quite funny. These days I specialise in the Python ecosystem, particularly Python, Flask, Django, and Wagtail. I've spent enough time with them now that I'd comfortably consider myself an expert.&lt;/li&gt;
&lt;li&gt;A-Levels during COVID were &lt;em&gt;interesting&lt;/em&gt;. It wasn't too bad for me because I was incredibly introverted during my secondary school years, so staying indoors wasn't exactly a challenge. That said, my eyesight definitely got worse.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="university-of-portsmouth-yes-its-not-cambridge-oxford-stanford-or-harvard"&gt;University of Portsmouth (Yes, It's Not Cambridge, Oxford, Stanford, or Harvard)&lt;a class="headerlink" href="#university-of-portsmouth-yes-its-not-cambridge-oxford-stanford-or-harvard" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If you're looking for a Cambridge, Oxford, Stanford, Harvard, or MIT graduate, that's not me. To be honest, I don't think my way of working, mentality, or attitude would have been the right fit for those universities. They work for some people; they probably wouldn't have worked for me.&lt;/li&gt;
&lt;li&gt;My only connection to those highly regarded universities is that I've interviewed and reviewed applications from graduates of Cambridge, Oxford, and other prestigious institutions while hiring for software engineering roles. Some applications were fantastic, while others looked almost identical, lacking evidence of passion, curiosity, side projects, or genuine effort. The strongest candidates I've seen came from all sorts of backgrounds, top universities, other universities, and some who never went to university at all. The people we hired have gone on to do exceptionally well.&lt;/li&gt;
&lt;li&gt;One thing I really like about software engineering is that, for the most part, the barriers to entry are relatively low. If you're willing to learn, build things, and put in the effort, there are opportunities available.&lt;/li&gt;
&lt;li&gt;I chose the Software Engineering course at the University of Portsmouth rather than Computer Science. The Software Engineering course had less theory, more hands on projects, and modules focused on JavaScript and web development, which I desperately wanted to learn after being defeated by Django.&lt;/li&gt;
&lt;li&gt;I spent a lot of time working with JavaScript, HTML, CSS, and a bit of Express.js. It was mostly vanilla web development, which gave me a solid understanding of how things actually worked under the hood. Looking back, that depth helped me later when working with larger frameworks.&lt;/li&gt;
&lt;li&gt;For the first time, I genuinely enjoyed education. The Software Engineering course was highly practical, which suited me perfectly. Building projects and being assessed on them felt far more rewarding than traditional exams. University was a breath of fresh air after school.&lt;/li&gt;
&lt;li&gt;Because I was constantly going above and beyond the course requirements, I found much of the university content relatively straightforward. I spent most of my time coding, building projects, experimenting with new technologies, and generally having fun.&lt;/li&gt;
&lt;li&gt;And yes, I finally learnt Django and defeated the Django demon. Thanks, &lt;strong&gt;Corey Schafer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="work-experience-during-university"&gt;Work Experience During University&lt;a class="headerlink" href="#work-experience-during-university" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I secured an internship at JPMorgan Chase &amp;amp; Co. To say I learnt a lot there would be an understatement. Around that time, opportunities seemed to be appearing everywhere.&lt;/li&gt;
&lt;li&gt;Alongside that, I worked part-time in various roles for the university, including marketing, campaigns, student engagement, and a variety of other odd jobs.&lt;/li&gt;
&lt;li&gt;In many ways, those work experiences developed me more than the university course itself, &lt;strong&gt;because I was slowly breaking out of my introverted shell&lt;/strong&gt;. When you're giving talks, leading campus tours, answering questions from prospective students and parents, keeping groups of 15-20 people engaged, making jokes, and doing it all dozens of times a day, it can be exhausting as an introvert. Over time, though, you learn how to manage the situation mentally and become more comfortable in your own skin.&lt;/li&gt;
&lt;li&gt;I deliberately kept taking on jobs that required me to be out in public and interacting with people. I wanted to overcome my anxieties and fears around speaking to strangers and putting myself out there.&lt;/li&gt;
&lt;li&gt;For a period, I worked in a sales-focused role at the university. Had I been a permanent member of staff, the bonus I generated on one particular day would have exceeded two weeks' worth of salary. At that point, I was getting very close to defeating my anxious self.&lt;/li&gt;
&lt;li&gt;Surprisingly, I started to love sales as my confidence grew. I wasn't doing it for the money; I was doing it for the experience. By then, I was already working as a junior software engineer and earning a decent salary. I actually took annual leave from my engineering job so I could continue doing the sales role because I enjoyed it that much.&lt;/li&gt;
&lt;li&gt;Most of the time, I was selling graduation-related items and clothing. We each had a sales counter tracking our performance, and I regularly ended up near the top of the leaderboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My fastest and biggest sale happened within about five seconds of meeting a customer. I sold over £500 worth of items almost instantly, and by pure coincidence, my manager, had taught me most of what I knew about sales, was standing right there watching. He was completely shocked. By that point, I had a carefully refined script running in my head. I was so practised that I almost felt like a robot. I wasn't even being myself anymore; I was operating in some strange trance-like flow state.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Looking back, these seemingly unrelated odd jobs helped build my confidence more than anything else. They shaped me into a person I never thought I could become. As valuable as my internship at JPMorgan and my role at the ONS have been, I don't think either would have given me that same personal growth. I genuinely don't think I'd be where I am today without those experiences.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="internships-industrial-placements"&gt;Internships &amp;amp; Industrial Placements&lt;a class="headerlink" href="#internships-industrial-placements" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If you're interested in the details, have a look at my home page and scroll through my experience section.&lt;/li&gt;
&lt;li&gt;During university, I received three industrial placement offers: one from the &lt;strong&gt;Office for National Statistics (ONS), Civil Service&lt;/strong&gt;, and two from startups.&lt;/li&gt;
&lt;li&gt;At the time, the ONS offered the lowest salary at around £22-23k. These days, placement students and interns can earn around £27-30k at the ONS, which is pretty competitive.&lt;/li&gt;
&lt;li&gt;One of the startups offered around £24k.&lt;/li&gt;
&lt;li&gt;Another startup reached out to me directly. They didn't normally take placement students, but they liked my LinkedIn profile and, more importantly, my Django projects. They offered mentorship and a salary of up to £55k, which was a huge amount of money to me at the time, and still is to many people today.&lt;/li&gt;
&lt;li&gt;In the end, I received offers from both the ONS and the startup offering £55k. The startup was incredibly tempting.&lt;/li&gt;
&lt;li&gt;Despite that, I chose the lowest paying role and signed with the ONS. After doing my research and speaking to people who worked there, I felt it would give me the best opportunity to grow as an engineer. Looking back, it was &lt;strong&gt;one of the best career decisions I've ever made&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I know people who accepted offers from some of the other companies I was considering, and many of them have gone on to have successful careers too. However, for me personally, choosing growth over salary at that stage of my career paid off enormously.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Money isn't everything, especially when you're early in your career and have the opportunity to trade short term earnings for long-term growth, learning, and experience.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="graduation-i-didnt-go-to-it"&gt;Graduation (I Didn't Go to It)&lt;a class="headerlink" href="#graduation-i-didnt-go-to-it" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I decided not to attend my graduation ceremony. At the time, I saw it as a waste of time. By then, I was constantly working, learning, and building things. There were periods where I'd spend days coding, experimenting with neural networks, and generally being obsessed with technology, sometimes 2-3 days without no sleep (was working on a project related to ML/ NN).&lt;/li&gt;
&lt;li&gt;Instead, during graduation week, I worked on running the graduation events. It was paid work, but like many of the jobs I took during university, I did it more for the experience than the money. I was still focused on evolving beyond my introverted personality.&lt;/li&gt;
&lt;li&gt;Having worked behind the scenes from start to finish, I wasn't particularly fond of the heat, the long days, or the overall process. &lt;em&gt;And yes, I know I'm from Sri Lanka, but 40°C in Sri Lanka feels better than 30°C in the UK with humidity.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Rather than attending my own graduation, I spent that time running a successful community session at work for more than 60 engineers. It was either a JavaScript or Python session, I genuinely can't remember now, as I ran quite a few of both. We covered frameworks, industry trends, template repositories, and other topics. Looking back, those community sessions became an important part of my career development.&lt;/li&gt;
&lt;li&gt;I'm not against celebrating achievements or attending your well earned graduation. It just wasn't really my thing, and I had other priorities that week.&lt;/li&gt;
&lt;li&gt;What I did enjoy was seeing the excitement on the faces of students and their families. Helping people collect their graduation attire, showing them how to wear it properly, guiding them through the event, and helping reduce some of their anxiety was genuinely rewarding.&lt;/li&gt;
&lt;li&gt;The amount of work that goes on behind the scenes to run an event of that scale was also an incredible learning experience. We were often starting work at 7 a.m., five days a week throughout the graduation period.&lt;/li&gt;
&lt;li&gt;Me attending a graduation ceremony like that? &lt;strong&gt;BIG NO.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Me helping run the graduation ceremony and making sure everyone else had one of the best days of their lives? &lt;strong&gt;HUGE YES.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="my-career-trajectory-so-far"&gt;My Career Trajectory So Far&lt;a class="headerlink" href="#my-career-trajectory-so-far" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you'd like more detail, have a look at my CV or scroll through the home page.&lt;/li&gt;
&lt;li&gt;Since joining the ONS, I've tried to take every opportunity available to me.&lt;/li&gt;
&lt;li&gt;My career progression has been relatively rapid, which came with its own challenges. The progression framework wasn't really designed for someone moving through it at the pace I was.&lt;/li&gt;
&lt;li&gt;It didn't start with big projects or leadership opportunities. It started the same way it does for most engineers: picking up tickets, writing code, asking lots of questions, and dealing with imposter syndrome.&lt;/li&gt;
&lt;li&gt;While my technical skills grew significantly, I don't think technical ability alone explains my progression. What helped most were the non-technical skills, saying yes to opportunities, volunteering for things outside my comfort zone, and getting involved wherever I could.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Where there is stress, there is growth and evolution.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You don't grow in comfort.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You either get worse or get better; you don't stay the same.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Many of the people who taught and mentored me early in my career were incredibly supportive. They often commented on the level of drive and curiosity I brought to my work. While they hadn't seen many people approach things the way I did, I've since met and worked alongside plenty of highly motivated individuals who inspire me just as much.&lt;/li&gt;
&lt;li&gt;People often asked me where my motivation came from. My answer was always the same: &lt;strong&gt;"You have to do your best work when you're the least motivated."&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;My flexi-hours balance ballooned. My annual leave entitlement effectively grew from around 25 days to over 65 days because I was apparently working too much. Personally, I didn't see it that way. &lt;strong&gt;I was learning, growing, and evolving. I was genuinely happy.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;This was also where all those seemingly unrelated odd jobs started to pay dividends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Within a few months, I was building proof-of-concepts, taking initiative, creating technical and non-technical presentations, pitching ideas to stakeholders, securing buy-in, and helping turn ideas into production systems. At the same time, I was mentoring my first placement student while still being a placement student myself.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I spent a huge amount of time public speaking, delivering presentations, contributing to innovation initiatives, volunteering for projects outside my day job, and working with various communities, steering groups, and working groups across the organisation.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I was invited to contribute to the Technical Advisory Group (TAG), the Software Engineering Community of Practice (CoP), and later helped found the Community Tech Exchange initiative through the Innovation Team.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I was often the youngest person in those meetings, which was slightly terrifying considering many of the engineers around the table had decades of experience and held roles such as Technical Lead, Principal Engineer, or Architect.&lt;/li&gt;
&lt;li&gt;For more information, have a look at the &lt;strong&gt;Beyond the Code&lt;/strong&gt; section on my home page.&lt;/li&gt;
&lt;li&gt;One of the highlights of my career so far was presenting to &lt;strong&gt;Alison Pritchard&lt;/strong&gt;, Deputy National Statistician at the ONS. It was incredibly nerve-racking, but all those years of public speaking, sales work, presentations, and community involvement led up to moments like that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None of this would have been possible without the mentors, teams, friends, and support networks that helped me along the way.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At the end of the day, good people, strong networks, and genuine friendships are what take you far in life.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Within the Software Engineering community at the ONS, I became one of the fastest-progressing engineers in the organisation. Ironically, the second fastest is my tech lead. Naturally, that means my next goal is to beat his record too.&lt;/li&gt;
&lt;li&gt;Today, I'm a Senior Software Engineer operating at a lead-engineer level in many areas of my work, soon to progress to the next level once again (again there are challenges are the progression framework isn't designed for a person like me, but the org looks after me well by now). As I write this blog post, my tech lead is off for a few weeks using some of the mountain of leave he's accumulated, while I'm stepping into the technical lead role temporarily. We can't both be off at the same time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-am-i-doing-with-my-life-now"&gt;What Am I Doing With My Life Now?&lt;a class="headerlink" href="#what-am-i-doing-with-my-life-now" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Chasing dreams, finding opportunities, and seeking experiences that help me grow whether that's in my career, mentally, physically, or spiritually.&lt;/li&gt;
&lt;li&gt;This means reading all kinds of books, from spirituality and business to self-improvement and strategy. It also means spending time in nature, meditating, travelling, and learning new skills whenever I get the chance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remember when I said I wanted to be a pilot?&lt;/strong&gt; I've started taking the early steps towards making that happen. Not because I want to become a commercial airline pilot, but because I'd love to earn my pilot's licence and fly for the sheer enjoyment of it and take friends along for the ride.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I'm a competitive recurve archer&lt;/strong&gt;, currently being coached by one of the finest coaches in the UK, whose own coach was an Olympian.&lt;/li&gt;
&lt;li&gt;After an assessment and consultation, he agreed to take me on as a student, which was a huge honour. I shoot an &lt;strong&gt;Olympic recurve bow&lt;/strong&gt;, and I've recently started competing.&lt;/li&gt;
&lt;li&gt;My goal is to shoot two to three times per week, alongside a coached session and regular competitions. Archery is one of the most complicated, stressful, frustrating, and rewarding things I've ever done. Recurve archery, especially at a competitive level, is largely a battle of mental management. Ironically, I hated archery when I first started, which is exactly why I stuck with it. That's where growth happens. &lt;strong&gt;There is no growth without discomfort.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I have serious goals within archery and hope to compete at a national level one day. We'll see how that journey unfolds.&lt;/li&gt;
&lt;li&gt;Thankfully, my coach thinks I'm on the right track.&lt;/li&gt;
&lt;li&gt;I'm also naturally quite good at &lt;strong&gt;running&lt;/strong&gt;, so I figured I might as well start entering races. It still isn't fun, though. Running still sucks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You can find my upcoming races at the bottom of my home page.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I love &lt;strong&gt;go-karting&lt;/strong&gt;, and a while ago I completed a &lt;strong&gt;Formula car experience at Silverstone&lt;/strong&gt;. My next step will probably be outdoor karting at around 70 mph. After driving a Formula car around Silverstone, though, 70 mph somehow feels a lot less intimidating. I may do a few more simulator sessions before heading back to Silverstone again.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Photography&lt;/strong&gt; is another hobby I've been exploring recently. I picked up a film camera and have been having a lot of fun with it. Once I've had my latest rolls developed, I'll start uploading some of the photos to the photography section of this website assuming I actually get around to enabling that page.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="why-a-static-site"&gt;Why a Static Site?&lt;a class="headerlink" href="#why-a-static-site" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I decided to build this personal website as a static site. &lt;strong&gt;&lt;a href="https://sanj.ninja/blog/yet-another-front-end-rendering-strategies-article/"&gt;See my article on SSG, SSR, CSR, and ISR&lt;/a&gt;&lt;/strong&gt; if you'd like a deeper dive into those concepts (I mostly wrote that article to re-learn them myself).&lt;/p&gt;
&lt;p&gt;I've always preferred starting projects with the most vanilla, bare-bones solution possible and then evolving them over time.&lt;/p&gt;
&lt;p&gt;Even now, I can already see valid use cases for introducing technologies such as &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;Vercel&lt;/strong&gt;, and other modern tooling. With &lt;strong&gt;v0&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, and a headless CMS such as &lt;strong&gt;Contentful&lt;/strong&gt;, which I've previously integrated into a production Python Flask application, I could migrate this website fairly quickly if I wanted to.&lt;/p&gt;
&lt;p&gt;As the website grows and the requirements become more complex, I expect the tech stack to evolve with it.&lt;/p&gt;
&lt;p&gt;The funny thing is that I already know many of the functional and non-functional requirements I'd eventually want to support. However, I genuinely enjoy building things in the simplest possible way first and then upgrading them later. It makes you appreciate the benefits and trade-offs of those upgrades much more.&lt;/p&gt;
&lt;p&gt;The same applies to technologies such as &lt;strong&gt;Contentful&lt;/strong&gt;, &lt;strong&gt;Next.js&lt;/strong&gt;, and other frameworks. If you've never built something without them, it's difficult to fully appreciate what they're solving.&lt;/p&gt;
&lt;p&gt;One thing I've noticed throughout my career is that many people jump straight into large frameworks and complex architectures without first understanding the fundamentals. In my opinion, that often comes at the expense of depth. Building things from scratch, or at least in a more vanilla way, forces you to understand how everything fits together underneath the abstractions.&lt;/p&gt;
&lt;p&gt;That's one of the reasons I often build the same type of project multiple times using different technologies. For example, I've built blog applications in both Flask and Django (see my GitHub repositories) simply to understand the differences properly rather than relying on assumptions.&lt;/p&gt;
&lt;p&gt;In many ways, this personal website is another experiment in that philosophy.&lt;/p&gt;
&lt;h2 id="special-shout-out-to-name-classified-for-now"&gt;Special Shout Out To [NAME CLASSIFIED FOR NOW]&lt;a class="headerlink" href="#special-shout-out-to-name-classified-for-now" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This person asked me a simple question, and it ignited something in me that resulted in &lt;strong&gt;deploying this website to both Netlify and Vercel at the same time&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The question was something along the lines of: &lt;strong&gt;"I wonder what this would look like deployed on Vercel?"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;My response was simple: &lt;strong&gt;"Only one way to find out."&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;While I was experimenting, I ended up fully building out the website, replacing all the placeholder content, and turning it into something real.&lt;/li&gt;
&lt;li&gt;It's a good reminder that you need people around you who ask interesting questions, challenge your assumptions, and spark your curiosity.&lt;/li&gt;
&lt;li&gt;Yes, &lt;strong&gt;this website was auto-deploying to both Netlify and Vercel simultaneously&lt;/strong&gt; 😅. I wanted to see how the platforms differed in practice rather than relying on marketing material or opinions from the internet.&lt;/li&gt;
&lt;li&gt;After spending time with both platforms, I found myself &lt;strong&gt;gravitating heavily towards Vercel's ecosystem, developer experience, tooling, and overall product vision&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Over the past year, I've spent a lot of time researching Vercel and, naturally, that meant researching many of its competitors too.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I could probably write an entire blog post comparing Vercel, Netlify, Railway, Render, Fly.io and other modern deployment platforms, explaining why each exists and where they shine. Maybe I will one day.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In the end, I &lt;strong&gt;shut down the Netlify deployment and moved to a paid Vercel account&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I also have plans to build a CRM and CMS-powered platform for multiple archery clubs, and at the moment Vercel, Next.js, v0, and the surrounding ecosystem are very high on my list of technologies to use.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Whether you like Vercel, dislike Vercel, or have never used it, I think most developers would agree on one thing: they care deeply about developer experience.&lt;/li&gt;
&lt;li&gt;The documentation is excellent, the onboarding experience is polished, and the platform generally stays out of your way so you can focus on building things.&lt;/li&gt;
&lt;li&gt;Coming from a very opinionated Python ecosystem, I don't say that lightly. My contractor friend with the love-hate relationship with Vercel was right: the documentation really is that good.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="this-websites-tech-stack"&gt;This Website's Tech Stack&lt;a class="headerlink" href="#this-websites-tech-stack" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python, Pelican, HTML, CSS, Jinja2, Tailwind CSS, Astral tooling (uv, Ruff, etc.), and Vercel.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tech-stack-as-this-website-evolves"&gt;Tech Stack as This Website Evolves&lt;a class="headerlink" href="#tech-stack-as-this-website-evolves" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vercel products, Next.js, Contentful, and whatever else makes sense as the requirements evolve.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="whats-my-plan-for-this-site"&gt;What's My Plan for This Site?&lt;a class="headerlink" href="#whats-my-plan-for-this-site" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I want to write a lot more technical blog posts, particularly around Python, Django, and Wagtail.&lt;/li&gt;
&lt;li&gt;I've had the privilege of learning from some of the best Django and Wagtail engineers in the world at Torchbox (TBX), and over the years I've developed a fairly deep understanding of these frameworks and their internals.&lt;/li&gt;
&lt;li&gt;I've also started getting more involved in the Wagtail open-source community.&lt;/li&gt;
&lt;li&gt;I want to share my experiences with JavaScript, React, and some of the technologies I'm currently learning and experimenting with, such as Next.js and the Vercel ecosystem.&lt;/li&gt;
&lt;li&gt;Beyond software engineering, I want to use this website to document my journey and achievements. There will be dedicated sections covering archery, photography, racing and go-karting, running, and whatever other adventures I end up getting myself into.&lt;/li&gt;
&lt;li&gt;I already have designs and code prepared for many of these sections. They'll be enabled and made public gradually as the site evolves.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you'd like to follow along, there's an &lt;a href="/feeds/all.atom.xml" rel="noopener noreferrer" target="_blank"&gt;Atom feed&lt;/a&gt; - no newsletter, no tracking, no marketing emails, just good old RSS.&lt;/p&gt;
&lt;h2 id="follow-me-on"&gt;Follow Me On&lt;a class="headerlink" href="#follow-me-on" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linkedin.com/in/sanjeev-srithevan-526718196" rel="noopener noreferrer" target="_blank"&gt;https://linkedin.com/in/sanjeev-srithevan-526718196&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sanjeevz3009" rel="noopener noreferrer" target="_blank"&gt;https://github.com/sanjeevz3009&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="General"/></entry><entry><title>Yet a Another Front-end Rendering Strategies Article: Beginners Guide to SSR, CSR, SSG, &amp; ISR</title><link href="https://sanj.ninja/blog/yet-another-front-end-rendering-strategies-article/" rel="alternate"/><published>2026-05-25T00:00:00+01:00</published><updated>2026-05-25T00:00:00+01:00</updated><author><name>Sanjeev Srithevan</name></author><id>tag:sanj.ninja,2026-05-25:/blog/yet-another-front-end-rendering-strategies-article/</id><summary type="html">&lt;p&gt;A practical beginner-friendly guide that demystifies modern front-end rendering strategies including SSR, CSR, SSG, ISR, and Partial Prerendering (PPR). The article explores how each rendering approach works, their real-world use cases, performance and SEO trade-offs, and why modern web applications increasingly rely on hybrid rendering architectures. Written from the perspective of a Python-focused engineer revisiting the React and Next.js ecosystem.&lt;/p&gt;</summary><content type="html">&lt;h2 id="why-am-i-writing-yet-another-article-on-this-topic"&gt;Why Am I Writing Yet Another Article On This Topic?&lt;a class="headerlink" href="#why-am-i-writing-yet-another-article-on-this-topic" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;If you don't care about my personal context.&lt;/strong&gt; Skip to &lt;a href="#lets-demystify-ssr-csr-ssg-isr"&gt;Let's Demystify SSR, CSR, SSG &amp;amp; ISR&lt;/a&gt; &lt;!-- markdownlint-disable-line MD051 --&gt;&lt;/p&gt;
&lt;p&gt;I decided to write this article on SSR, CSR, SSG, and ISR because I recently found myself in a room with one of the senior directors of a very prominent tech company.&lt;/p&gt;
&lt;p&gt;One of the reasons my personal website actually got fully built, deployed across multiple platforms at one point, and eventually took off was because of him, or more specifically, the inspiration, advice, and perspective I gained from speaking with him and researching his work online.&lt;/p&gt;
&lt;p&gt;We had a genuinely great conversation, although the details will stay private. You can probably tell from my website homepage and my first blog post &lt;a href="https://sanj.ninja/blog/i-am-sanjeev/"&gt;I am Sanjeev: How I Went From Picking Up Shrapnels to Picking Up Coding&lt;/a&gt; that I have some experience within the JavaScript and React ecosystem, but I am by no means a front-end expert.&lt;/p&gt;
&lt;p&gt;At work, I’ve mainly been learning from our front-end engineer while also delegating a lot of the heavier front-end work to our front-end engineer from Torchbox (TBX) 🙃.&lt;/p&gt;
&lt;p&gt;During the conversation, we ended up discussing SSR, CSR, SSG, and ISR. I had studied these rendering strategies before, but they are not concepts I actively think about day-to-day because my primary specialisation is in the Python ecosystem, particularly with Flask, Django, and Wagtail.&lt;/p&gt;
&lt;p&gt;I do have experience with JavaScript, TypeScript, and React from personal projects and from a short period of working on React-based projects at the ONS. But somehow, every time I end up near a JS/TS + React codebase, the natural laws of the universe seem to pull me straight back into Python 🥲.&lt;/p&gt;
&lt;p&gt;At one point during the discussion, both of us realised that my knowledge of SSR, CSR, SSG, and ISR was not exactly sitting in RAM anymore, it was stored away on an old HDD somewhere. The concepts were still there, but it took me a little while to spin the disk back up and bring them back to life.&lt;/p&gt;
&lt;p&gt;So I decided to properly refresh my understanding and share what I learned along the way. This article is partly for anyone trying to understand modern front-end rendering strategies, but also partly a refresher for my future self.&lt;/p&gt;
&lt;h2 id="who-will-benefit-from-this-article"&gt;Who Will Benefit From This Article?&lt;a class="headerlink" href="#who-will-benefit-from-this-article" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You are a front-end engineer looking for a refresher, or just want to criticise me. Unfortunately for you, I do not have a comments section yet...&lt;/li&gt;
&lt;li&gt;You come from a different ecosystem, such as the Python stack, and work in web development but are not too familiar with modern front-end rendering strategies.&lt;/li&gt;
&lt;li&gt;You are trying to break into the JS/TS + React/Next.js ecosystem.&lt;/li&gt;
&lt;li&gt;You could not care less about front-end rendering strategies because your area of software engineering has absolutely no concern for these topics, but you are naturally curious like I am.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lets-demystify-ssr-csr-ssg-isr"&gt;Let's Demystify SSR, CSR, SSG &amp;amp; ISR&lt;a class="headerlink" href="#lets-demystify-ssr-csr-ssg-isr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="why-should-we-care-about-front-end-rendering-strategies-in-the-first-place"&gt;Why should we care about front-end rendering strategies in the first place?&lt;a class="headerlink" href="#why-should-we-care-about-front-end-rendering-strategies-in-the-first-place" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you are trying to build a highly performant web application where page load speed matters, then understanding front-end rendering strategies becomes extremely important.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Metrics&lt;/strong&gt; such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First Contentful Paint (FCP)&lt;/li&gt;
&lt;li&gt;Largest Contentful Paint (LCP)&lt;/li&gt;
&lt;li&gt;Interaction to Next Paint (INP)&lt;/li&gt;
&lt;li&gt;First Input Delay (FID)&lt;/li&gt;
&lt;li&gt;Time to First Byte (TTFB)&lt;/li&gt;
&lt;li&gt;Time to Interactive (TTI)&lt;/li&gt;
&lt;li&gt;Total Blocking Time (TBT)&lt;/li&gt;
&lt;li&gt;Cumulative Layout Shift (CLS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along with overall Core Web Vitals and SEO performance, are all heavily influenced by how your application is rendered and delivered to the browser.&lt;/p&gt;
&lt;p&gt;Failing to properly understand rendering strategies can absolutely cost you in terms of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;web performance&lt;/li&gt;
&lt;li&gt;user experience&lt;/li&gt;
&lt;li&gt;SEO rankings&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;and even infrastructure costs in some cases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to go deeper into Core Web Vitals and metrics such as FCP, LCP, INP, FID, TTFB, TTI, TBT, and CLS, &lt;strong&gt;I have included references further below&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And ultimately, poor performance costs users.&lt;/p&gt;
&lt;p&gt;Which then turns into lost engagement, lost conversions, lost revenue, unhappy clients, angry stakeholders, and engineers getting pulled into “why is the site slow?” meetings nobody wants to attend.&lt;/p&gt;
&lt;p&gt;So let’s avoid that and continue with the article.&lt;/p&gt;
&lt;p&gt;There is also a reason we are going through these rendering strategies in this specific order. It will make much more sense by the time we reach the end of the article.&lt;/p&gt;
&lt;h3 id="lets-start-with-server-side-rendering-ssr"&gt;Let's start with Server-side Rendering (SSR)&lt;a class="headerlink" href="#lets-start-with-server-side-rendering-ssr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Server-side Rendering (SSR) works by rendering the page on the server before it is sent to the browser.&lt;/p&gt;
&lt;p&gt;When a user requests a page, the server fetches the necessary data, generates the HTML content on the server itself, and then sends a fully rendered page back to the client for the user to view.&lt;/p&gt;
&lt;p&gt;Frameworks such as Django and Next.js provide built-in server-side rendering capabilities out of the box.&lt;/p&gt;
&lt;p&gt;With traditional Django applications, SSR is effectively the default behaviour through Django Templates. In the React ecosystem, frameworks such as Next.js introduced SSR to solve many of the SEO and performance limitations associated with purely client-rendered applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use cases for SSR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SSR is commonly used in applications where content needs to be fresh, dynamic, and easily discoverable by search engines.&lt;/p&gt;
&lt;p&gt;Examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-time dashboards and analytics platforms&lt;/li&gt;
&lt;li&gt;Financial trading platforms showing live market data&lt;/li&gt;
&lt;li&gt;Social media feeds and activity timelines&lt;/li&gt;
&lt;li&gt;E-commerce product pages with live pricing and stock availability&lt;/li&gt;
&lt;li&gt;Personalised user dashboards&lt;/li&gt;
&lt;li&gt;News platforms with constantly updating content&lt;/li&gt;
&lt;li&gt;SaaS platforms with authenticated, user-specific data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Where SSR shines&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSR serves fresh and up-to-date content on every request&lt;/li&gt;
&lt;li&gt;Search engines receive fully rendered HTML immediately, which is excellent for SEO&lt;/li&gt;
&lt;li&gt;Better SEO compared to purely client-side rendered applications&lt;/li&gt;
&lt;li&gt;Faster initial content visibility for users compared to CSR&lt;/li&gt;
&lt;li&gt;Works well for dynamic and personalised experiences&lt;/li&gt;
&lt;li&gt;Improves social media link previews and metadata rendering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things to keep in mind with SSR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SSR is powerful, but it does come with trade-offs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every request requires server-side rendering and often data fetching, which increases server load&lt;/li&gt;
&lt;li&gt;Under high traffic, SSR applications can become expensive to scale without caching layers&lt;/li&gt;
&lt;li&gt;Time to First Byte (TTFB) can sometimes suffer because the server must finish rendering before responding&lt;/li&gt;
&lt;li&gt;Pages may visually appear quickly, but JavaScript still needs to hydrate on the client before the page becomes fully interactive&lt;/li&gt;
&lt;li&gt;Rendering complex pages repeatedly on the server can increase infrastructure costs&lt;/li&gt;
&lt;li&gt;Poorly optimised SSR applications can still end up shipping large JavaScript bundles to the browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One important thing to understand is that SSR improves the initial render experience, but it does not magically remove the cost of JavaScript running in the browser afterwards. The client still needs to hydrate the application and attach interactivity to the rendered HTML.&lt;/p&gt;
&lt;h3 id="lets-navigate-to-client-side-rendering-csr"&gt;Let's navigate to Client-side Rendering (CSR)&lt;a class="headerlink" href="#lets-navigate-to-client-side-rendering-csr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Client-side Rendering (CSR) relies heavily on JavaScript to render content directly within the browser on the user's device. It enables highly interactive and responsive user experiences, but it comes with trade-offs around initial load performance and SEO.&lt;/p&gt;
&lt;p&gt;In modern applications, CSR is often layered on top of SSR, SSG, or ISR to add interactivity and dynamic client-side behaviour.&lt;/p&gt;
&lt;p&gt;The way CSR works is relatively straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A lightweight HTML shell is initially sent to the browser&lt;/li&gt;
&lt;li&gt;JavaScript bundles are then downloaded and executed&lt;/li&gt;
&lt;li&gt;The application fetches data from APIs&lt;/li&gt;
&lt;li&gt;The browser renders and updates the UI dynamically on the client side without requiring full page reloads&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this model, the browser effectively becomes responsible for controlling much of the application's rendering and state management.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use cases for CSR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CSR works particularly well for highly interactive applications where responsiveness matters more than initial page load speed or SEO.&lt;/p&gt;
&lt;p&gt;Examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interactive admin dashboards&lt;/li&gt;
&lt;li&gt;Real-time analytics platforms&lt;/li&gt;
&lt;li&gt;Project management tools&lt;/li&gt;
&lt;li&gt;Chat and messaging applications&lt;/li&gt;
&lt;li&gt;Collaborative applications such as online editors&lt;/li&gt;
&lt;li&gt;Internal enterprise tools&lt;/li&gt;
&lt;li&gt;Highly interactive SaaS products&lt;/li&gt;
&lt;li&gt;Applications with frequent UI updates and client-side state changes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A common example is when users interact with filters, charts, forms, or live-updating components where waiting for a full server roundtrip would feel slow and clunky.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where CSR shines&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript powers rich interactivity and smooth, app-like experiences&lt;/li&gt;
&lt;li&gt;Reduces repeated rendering work on the server&lt;/li&gt;
&lt;li&gt;Seamless transitions between pages and application states&lt;/li&gt;
&lt;li&gt;Excellent for highly dynamic interfaces&lt;/li&gt;
&lt;li&gt;Works very well for real-time interactions and live-updating data&lt;/li&gt;
&lt;li&gt;Enables sophisticated client-side state management and UI behaviour&lt;/li&gt;
&lt;li&gt;After the initial load, navigation can feel extremely fast&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things to keep in mind with CSR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CSR also comes with several important trade-offs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The initial page load can be slower because JavaScript bundles must download, parse, and execute before meaningful content appears&lt;/li&gt;
&lt;li&gt;Optimising Core Web Vitals can become more challenging&lt;/li&gt;
&lt;li&gt;Large JavaScript bundles can significantly impact performance on slower devices&lt;/li&gt;
&lt;li&gt;SEO can become problematic because content is rendered dynamically in the browser&lt;/li&gt;
&lt;li&gt;Search engines have improved at rendering JavaScript, but SSR and SSG are still generally more SEO-friendly&lt;/li&gt;
&lt;li&gt;Applications often require more complex client-side state management&lt;/li&gt;
&lt;li&gt;Users on poor network connections may experience blank screens while waiting for JavaScript to load&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the biggest criticisms of poorly optimised CSR applications is the infamous “loading spinner experience”, where users stare at a blank page while the browser downloads and executes a massive JavaScript bundle before anything useful becomes visible.&lt;/p&gt;
&lt;h3 id="lets-now-make-a-pit-stop-at-static-site-generation-ssg"&gt;Let's now make a pit stop at Static Site Generation (SSG)&lt;a class="headerlink" href="#lets-now-make-a-pit-stop-at-static-site-generation-ssg" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Static Site Generation (SSG): SSG prerenders pages at build time, resulting in static HTML files that can be cached at the edge and served quickly and efficiently.&lt;/p&gt;
&lt;p&gt;With SSG, HTML is generated build time, not at request time. This way, the server doesn't do the rendering; it simply serves the pre-built files.&lt;/p&gt;
&lt;p&gt;The way SSG works is HTML for all pages is generated in advance and usually stored on a Content Delivery Network (CDN).&lt;/p&gt;
&lt;p&gt;When users request a page, it's delivered instantly from the nearest CDN.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use cases for SSG&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Any page with content that changes very infrequently&lt;/li&gt;
&lt;li&gt;Site layouts&lt;/li&gt;
&lt;li&gt;Performance-critical marketing pages&lt;/li&gt;
&lt;li&gt;Documentation or other sites that quickly rebuild&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Where SSG shines&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ultra fast load times since the content is pre-rendered, it lads nearly instantly.&lt;/li&gt;
&lt;li&gt;SEO friendly as search engines like the fully rendered pages served directly from a CDN.&lt;/li&gt;
&lt;li&gt;Low server costs with no on the fly rendering, server handles less load.&lt;/li&gt;
&lt;li&gt;Fastest possible page loads&lt;/li&gt;
&lt;li&gt;Excellent SEO performance&lt;/li&gt;
&lt;li&gt;Reduced server load&lt;/li&gt;
&lt;li&gt;Lowest infrastructure costs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things to keep in mind with SSG&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increased build times for sites with a large number of pages&lt;/li&gt;
&lt;li&gt;Content updates require a new build and deployment&lt;/li&gt;
&lt;li&gt;Can be combined with client-side data fetching for dynamic elements, but this is slower than server-side fetching since each data request initiates a new roundtrip to the server&lt;/li&gt;
&lt;li&gt;Content is static, so it doesn't change until the next build.&lt;/li&gt;
&lt;li&gt;Slow builds for large sites, as the number of pages grows, builds can become time-consuming&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fancy-incremental-static-regeneration-isr"&gt;Fancy Incremental Static Regeneration (ISR)&lt;a class="headerlink" href="#fancy-incremental-static-regeneration-isr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Incremental Static Regeneration (ISR) allows you to update specific pages after your site has already been built, meaning you do not need to rebuild the entire application every time content changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In many ways, ISR combines the speed of Static Site Generation (SSG) with some of the flexibility of SSR.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The core idea behind ISR is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pages are generated statically at build time&lt;/li&gt;
&lt;li&gt;Those pages are cached and served extremely quickly&lt;/li&gt;
&lt;li&gt;After a configured revalidation period, the next incoming request triggers a background regeneration of the page&lt;/li&gt;
&lt;li&gt;Users continue receiving the previously cached version while the new version is generated&lt;/li&gt;
&lt;li&gt;Once regeneration completes, the cache is updated with the fresh page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach allows applications to scale to extremely large numbers of pages without suffering from painfully long full-site rebuilds.&lt;/p&gt;
&lt;p&gt;Frameworks such as &lt;strong&gt;Next.js popularised ISR&lt;/strong&gt; by introducing built-in revalidation capabilities directly into the framework.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How ISR works&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A simple way to think about ISR is:&lt;/p&gt;
&lt;p&gt;"&lt;em&gt;Generate pages statically, cache them aggressively, and refresh them in the background only when needed.&lt;/em&gt;"&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compared to traditional SSG:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;build times are significantly faster for large applications&lt;/li&gt;
&lt;li&gt;not every page needs to regenerate during deployment&lt;/li&gt;
&lt;li&gt;content can update automatically without requiring a full rebuild&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ISR can also support:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;timed revalidation&lt;/li&gt;
&lt;li&gt;on-demand revalidation&lt;/li&gt;
&lt;li&gt;webhook-triggered regeneration&lt;/li&gt;
&lt;li&gt;CMS-driven cache invalidation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Which becomes incredibly useful for modern content-heavy platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use cases for ISR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ISR is particularly useful when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you want SSG-level performance&lt;/li&gt;
&lt;li&gt;but your content changes too frequently for full static builds to remain practical&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Common examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E-commerce product pages&lt;/li&gt;
&lt;li&gt;News and publishing websites&lt;/li&gt;
&lt;li&gt;Documentation platforms&lt;/li&gt;
&lt;li&gt;Marketing sites with CMS-managed content&lt;/li&gt;
&lt;li&gt;Large-scale blogs&lt;/li&gt;
&lt;li&gt;Marketplace platforms&lt;/li&gt;
&lt;li&gt;Applications with thousands or even millions of pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ISR becomes especially valuable when traditional SSG build times start becoming unmanageable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where ISR shines&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You get performance that is very close to SSG&lt;/li&gt;
&lt;li&gt;Pages remain SEO-friendly because static HTML is still served to search engines&lt;/li&gt;
&lt;li&gt;Content can update automatically without requiring a full rebuild&lt;/li&gt;
&lt;li&gt;Maintains extremely fast page loads through caching&lt;/li&gt;
&lt;li&gt;Scales efficiently to very large numbers of pages&lt;/li&gt;
&lt;li&gt;Reduces deployment bottlenecks caused by massive static builds&lt;/li&gt;
&lt;li&gt;Can be more infrastructure-efficient than SSR in some scenarios&lt;/li&gt;
&lt;li&gt;Supports modern CMS-driven workflows very well&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the reasons ISR became so popular is because it helps solve the classic trade-off between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fast static websites&lt;/li&gt;
&lt;li&gt;and frequently changing dynamic content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things to keep in mind with ISR&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have to be mindful of cache invalidation strategies/ approaches&lt;/li&gt;
&lt;li&gt;Understand how ISR differs from cache control headers&lt;/li&gt;
&lt;li&gt;There can be still a lag between data updates and page regeneration&lt;/li&gt;
&lt;li&gt;ISR introduces additional complexity especially for large-scale applications&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-ssr-csr-ssg-or-isr"&gt;When to Use SSR, CSR, SSG or ISR?&lt;a class="headerlink" href="#when-to-use-ssr-csr-ssg-or-isr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By this point, you have probably realised something important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is no single “best” rendering strategy.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each approach exists because different applications have different requirements around:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;SEO&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;infrastructure cost&lt;/li&gt;
&lt;li&gt;freshness of data&lt;/li&gt;
&lt;li&gt;and user experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choosing the wrong rendering strategy can lead to unnecessary complexity, poor performance, expensive infrastructure bills, or terrible SEO.&lt;/p&gt;
&lt;p&gt;The real engineering skill is understanding the trade-offs.&lt;/p&gt;
&lt;p&gt;Here are some general rules of thumb.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use SSR when...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use SSR when content needs to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dynamic&lt;/li&gt;
&lt;li&gt;personalised&lt;/li&gt;
&lt;li&gt;frequently updated&lt;/li&gt;
&lt;li&gt;or request-specific&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Social media feeds&lt;/li&gt;
&lt;li&gt;Financial dashboards&lt;/li&gt;
&lt;li&gt;SaaS applications&lt;/li&gt;
&lt;li&gt;User-specific dashboards&lt;/li&gt;
&lt;li&gt;E-commerce checkout flows&lt;/li&gt;
&lt;li&gt;Live sports scoreboards&lt;/li&gt;
&lt;li&gt;Real-time analytics platforms&lt;/li&gt;
&lt;li&gt;Applications with authentication-heavy workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SSR is often the right choice when freshness matters more than absolute rendering speed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use CSR when...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use CSR when your application behaves more like a desktop application running in the browser.&lt;/p&gt;
&lt;p&gt;Good examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Admin dashboards&lt;/li&gt;
&lt;li&gt;Internal enterprise tools&lt;/li&gt;
&lt;li&gt;Chat applications&lt;/li&gt;
&lt;li&gt;Kanban/project management platforms&lt;/li&gt;
&lt;li&gt;Real-time collaborative editors&lt;/li&gt;
&lt;li&gt;Interactive visualisation tools&lt;/li&gt;
&lt;li&gt;Applications with heavy client-side interactions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CSR works best when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SEO is less important&lt;/li&gt;
&lt;li&gt;interactivity is extremely important&lt;/li&gt;
&lt;li&gt;and users spend long periods interacting with the application after the initial load&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of modern SaaS products lean heavily into CSR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use SSG when...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use SSG when content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;changes rarely&lt;/li&gt;
&lt;li&gt;is mostly static&lt;/li&gt;
&lt;li&gt;and benefits heavily from speed and SEO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blogs&lt;/li&gt;
&lt;li&gt;Documentation websites&lt;/li&gt;
&lt;li&gt;Marketing websites&lt;/li&gt;
&lt;li&gt;Portfolio websites&lt;/li&gt;
&lt;li&gt;Landing pages&lt;/li&gt;
&lt;li&gt;Company information pages&lt;/li&gt;
&lt;li&gt;Developer documentation platforms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SSG is fantastic for performance because pages are pre-built ahead of time and can be served directly from a CDN extremely quickly.&lt;/p&gt;
&lt;p&gt;This is why many modern documentation platforms feel almost instant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use ISR when...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use ISR when you want the speed of static generation, but your content changes too often for full rebuilds to remain practical.&lt;/p&gt;
&lt;p&gt;Good examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Large e-commerce platforms&lt;/li&gt;
&lt;li&gt;News websites&lt;/li&gt;
&lt;li&gt;CMS-driven content platforms&lt;/li&gt;
&lt;li&gt;Marketplace listings&lt;/li&gt;
&lt;li&gt;Large-scale blogs&lt;/li&gt;
&lt;li&gt;Documentation platforms with frequent updates&lt;/li&gt;
&lt;li&gt;Sites with thousands or millions of pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ISR is effectively the middle ground between SSG and SSR.&lt;/p&gt;
&lt;p&gt;You still get static performance characteristics, but with the ability to refresh content incrementally over time.&lt;/p&gt;
&lt;h2 id="hybrid-strategies"&gt;Hybrid Strategies&lt;a class="headerlink" href="#hybrid-strategies" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here is the important part:&lt;/p&gt;
&lt;p&gt;Modern applications &lt;strong&gt;rarely use just one rendering strategy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Most real-world applications are hybrids&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A single application might use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSR for authenticated dashboards&lt;/li&gt;
&lt;li&gt;SSG for marketing pages&lt;/li&gt;
&lt;li&gt;ISR for blog content&lt;/li&gt;
&lt;li&gt;and CSR for interactive components on the page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is actually how many large-scale modern applications are architected today.&lt;/p&gt;
&lt;p&gt;For example, an e-commerce platform could use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Homepage - SSG&lt;/li&gt;
&lt;li&gt;Product pages - ISR&lt;/li&gt;
&lt;li&gt;User dashboard - SSR&lt;/li&gt;
&lt;li&gt;Shopping cart interactions - CSR&lt;/li&gt;
&lt;li&gt;Live stock indicators - CSR&lt;/li&gt;
&lt;li&gt;Checkout flow - SSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The modern &lt;strong&gt;React ecosystem&lt;/strong&gt;, particularly frameworks such as &lt;strong&gt;Next.js&lt;/strong&gt;, has heavily embraced this hybrid rendering model.&lt;/p&gt;
&lt;p&gt;Even traditional server-rendered frameworks such as &lt;strong&gt;Django&lt;/strong&gt; often use hybrid approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Django Templates for SSR&lt;/li&gt;
&lt;li&gt;HTMX or Alpine.js for partial interactivity&lt;/li&gt;
&lt;li&gt;React components for highly dynamic sections&lt;/li&gt;
&lt;li&gt;CDN caching for static assets&lt;/li&gt;
&lt;li&gt;API-driven front-end enhancements where needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The important thing is not blindly choosing a trendy rendering strategy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The important thing is understanding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what problem you are solving&lt;/li&gt;
&lt;li&gt;where performance matters&lt;/li&gt;
&lt;li&gt;where SEO matters&lt;/li&gt;
&lt;li&gt;where interactivity matters&lt;/li&gt;
&lt;li&gt;and where complexity starts becoming unnecessary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because at the end of the day, engineering is all about trade-offs.&lt;/p&gt;
&lt;h2 id="bonus-partial-prerendering-ppr"&gt;Bonus: Partial Prerendering (PPR)&lt;a class="headerlink" href="#bonus-partial-prerendering-ppr" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;If you made it this far into the article, good news, I have some bonus content for you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One of the newer concepts emerging in the modern React and Next.js ecosystem is Partial Prerendering (PPR).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PPR is essentially an enhancement layered on top of existing rendering strategies rather than being a completely separate rendering model on its own.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The goal of PPR is to combine:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the instant loading experience of SSG&lt;/li&gt;
&lt;li&gt;the dynamic flexibility of SSR&lt;/li&gt;
&lt;li&gt;and the streaming capabilities introduced through modern React Server Components and Suspense boundaries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In simple terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Serve a fast static shell immediately, then progressively stream dynamic content into the page as it becomes ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This helps eliminate the traditional trade-off between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;static performance&lt;/li&gt;
&lt;li&gt;and dynamic server-rendered experiences&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why PPR is interesting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Historically, developers often had to choose between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fast static pages&lt;/li&gt;
&lt;li&gt;or fully dynamic pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PPR attempts to blur that line.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With PPR:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the static parts of the page can be prerendered and cached at the edge
while dynamic sections stream in separately without blocking the initial render&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means users can start seeing meaningful content almost instantly while slower dynamic sections continue loading in the background.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Potential benefits of PPR&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instant initial page loads similar to SSG&lt;/li&gt;
&lt;li&gt;Dynamic content can stream progressively into the page&lt;/li&gt;
&lt;li&gt;Better perceived performance for users&lt;/li&gt;
&lt;li&gt;Reduced blocking during rendering&lt;/li&gt;
&lt;li&gt;More efficient use of server rendering&lt;/li&gt;
&lt;li&gt;Potentially improved Core Web Vitals&lt;/li&gt;
&lt;li&gt;Less need to fully choose between “static” and “dynamic” architectures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In many ways, PPR represents where modern rendering architectures seem to be heading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Current considerations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PPR is still evolving and should still be considered relatively experimental.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things to keep in mind:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some applications may require architectural refactoring to adopt it properly&lt;/li&gt;
&lt;li&gt;Proper Suspense boundary design becomes extremely important&lt;/li&gt;
&lt;li&gt;Separating static and dynamic content cleanly takes planning&lt;/li&gt;
&lt;li&gt;Debugging streaming behaviour can introduce additional complexity&lt;/li&gt;
&lt;li&gt;The ecosystem around PPR is still maturing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="closing-thoughts"&gt;Closing Thoughts&lt;a class="headerlink" href="#closing-thoughts" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you made it all the way to the end of this article, congratulations, you now probably understand front-end rendering strategies better than I did when I walked into that conversation with the senior director 😅.&lt;/p&gt;
&lt;p&gt;Hopefully this article helped demystify SSR, CSR, SSG, ISR, and even some of the newer ideas such as Partial Prerendering (PPR), without making them feel overly academic or unnecessarily complicated.&lt;/p&gt;
&lt;p&gt;One of the biggest things I realised while revisiting these concepts is that modern web engineering is increasingly becoming about choosing the right rendering strategy for the right problem rather than blindly committing to a single approach.&lt;/p&gt;
&lt;p&gt;The reality is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modern applications are hybrid&lt;/li&gt;
&lt;li&gt;trade-offs are everywhere&lt;/li&gt;
&lt;li&gt;performance matters&lt;/li&gt;
&lt;li&gt;SEO matters&lt;/li&gt;
&lt;li&gt;user experience matters&lt;/li&gt;
&lt;li&gt;and JavaScript bundles somehow still end up being 4MB regardless 🙃&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As someone whose background primarily lives within the Python ecosystem, particularly Flask, Django, and Wagtail, revisiting these concepts was genuinely refreshing. It also reminded me how much modern front-end engineering has evolved over the last few years.&lt;/p&gt;
&lt;p&gt;We have gone from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“everything server-rendered”&lt;/li&gt;
&lt;li&gt;to “everything client-rendered”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now towards intelligent hybrid architectures combining:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSR&lt;/li&gt;
&lt;li&gt;SSG&lt;/li&gt;
&lt;li&gt;ISR&lt;/li&gt;
&lt;li&gt;streaming&lt;/li&gt;
&lt;li&gt;edge rendering&lt;/li&gt;
&lt;li&gt;Suspense boundaries&lt;/li&gt;
&lt;li&gt;and selective hydration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...all within the same application.&lt;/p&gt;
&lt;p&gt;Which is both incredibly exciting and overwhelming at the same time.&lt;/p&gt;
&lt;p&gt;Anyway, thank you for reading my “Yet Another Front-end Rendering Strategies Article”.&lt;/p&gt;
&lt;p&gt;Now go optimise your Core Web Vitals, reduce your JavaScript bundle sizes, and try not to accidentally turn your homepage into a distributed systems research paper.&lt;/p&gt;
&lt;p&gt;Good luck!&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;a class="headerlink" href="#references" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vercel.com/blog/how-to-choose-the-best-rendering-strategy-for-your-app" rel="noopener noreferrer" target="_blank"&gt;Vercel: How to Choose the Best Rendering Strategy for Your App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/blog/how-core-web-vitals-affect-seo" rel="noopener noreferrer" target="_blank"&gt;Vercel: How Core Web Vitals Affect SEO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/resources/how-vercel-improves-your-websites-search-engine-ranking#network-response-time-to-first-byte-(ttfb)" rel="noopener noreferrer" target="_blank"&gt;Vercel: How Vercel Improves Your Website's Search Engine Ranking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/blog/the-user-experience-of-the-frontend-cloud" rel="noopener noreferrer" target="_blank"&gt;Vercel: The User Experience of the Frontend Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/blog/nextjs-seo-playbook" rel="noopener noreferrer" target="_blank"&gt;Vercel: Next.js SEO Playbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.dev/articles/optimize-lcp" rel="noopener noreferrer" target="_blank"&gt;Optimise LCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.dev/articles/optimize-cls" rel="noopener noreferrer" target="_blank"&gt;Optimise CLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.dev/articles/optimize-inp" rel="noopener noreferrer" target="_blank"&gt;Optimise INP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Frontend Engineering"/><category term="SSR"/><category term="CSR"/><category term="SSG"/><category term="ISR"/><category term="React"/><category term="Next.js"/><category term="SEO"/><category term="Core Web Vitals"/><category term="Rendering"/></entry></feed>