My Blogs

Life & Learning

A Mentor, A Friend, A Tech Lead

Over the last two years, I have grown tremendously as an engineer, and much of that growth can be traced back to one person: Jonathan. When I joined one of my projects, I had the opportunity to work closely with him. As the Frontend Tech Lead, he carried a tremendous amount of responsibility, backed by more than 15 years of experience. To be honest, I was a little intimidated at first. However, it didn’t take long for that feeling to disappear. Jonathan’s calm and composed nature, thoughtful decision-making, and clear communication made a lasting impression on me. More important thing, he showed me what great technical leadership looks like in practice. Watching how he handled challenges, shared feedback, and guided the team became a learning experience in itself. Over time, he became more than just a lead. He was a mentor and a friend. Beyond work, we discussed games, music, memes, and all kinds of random topics. He was always approachable, and conversations with him never felt difficult or forced. One of my favorite memories is from code reviews. No matter how confident I felt about a pull request, Jonathan always managed to find something I had missed, usually something funny 😂 Perhaps the biggest impact Jonathan had on me was helping me realize the kind of engineer I want to become. Seeing him operate as a product-focused frontend leader made me realize that this is the path I want to pursue in my own career. For that, I will always be grateful. And on a lighter note, he’s also responsible for introducing me to Dominion, a card game I still enjoy whenever I get the chance 😇 source: wikipedia Thank you, Jonathan, for the guidance, the lessons, and the fun. It was a pleasure working with you.

A Mentor, A Friend, A Tech Lead Read Post »

Tech & Work

Frontend HLD: Understanding Different Types of Applications

Modern frontend applications are no longer limited to simple webpages and forms. Nowadays, they handle large datasets, complex user interactions, and intensive computations, all inside a single browser. And I believe it is a good idea to understand the basic types of applications and their nature, so that whenever you start working on an application, a problem, or even a feature, you already have some foundational understanding in place. This helps guide your intuition and enables you to architect better, more scalable applications. So, Let’s learn these types: Data Heavy Applications These are the applications that deals with massive datasets and presentation of the data in different kinds of visualizations such as charts and tables. Example: Finance trading and banking dashboards Social media feeds such as facebook, instagram, reddit and even dev.to Analytics dashboards and Log processing systems Ecommerce platforms such as Amazon, Flipkart, EBay Common problems: performance issue due to large lists of data rendering a large number of DOM elements can be time-consuming and resource-intensive for browser UI freezing issues Complexity of data structure and data management and state Common solutions: Our goal is to reduce the memory usage and page load times while keeping the UI responsive pagination infinite scroll or lazy loading for on demand data. windowing: Windowing is rendering only the visible portion of a list to the screen. react window or react-virtualized are two libraries used in react to achieve this. web workers: Offloading heavy data processing or sorting tasks to a background thread to prevent the UI from freezing Compute heavy applications Applications that require intensive data processing, calculations and heavy rendering, comes under compute heavy applications category. These are often CPU and GPU heavy. Example: video rendering: Youtube, photo editors, video editors Google Maps 3D Modeling tools such as AutoCAD web Scientific simulations apps AI/ML apps running inference with TensorFlow.js Browser games Common Problems: The primary bottleneck is often the single-threaded nature of JavaScript as it is handling both rendering and business logic Main thread blocking (intensive computations run on same thread as UI rendering) Frame drops and slow rendering DOM overload, Memory leaks due to unreleased listeners Browser and device variabilities Common Solutions: Using web workers to offload heavy computations to background thread to keep UI free Windowing Throttle and debounce Memoization of expensive functions and calculations Realtime Application Applications that process inputs and outputs instantaneously within a strict time frame and with minimum latency. Example: Chat apps like whatsapp, telegram Video conferencing apps like zoom, google meet Online games and IoT apps Transportation and logistics like Uber, Swiggy etc. Common problems: Latency issues: delay between an action and its result High CPU and memory usage due to always-on nature of realtime apps Ordering of events and state synchronization Security risks Common solutions: Optimistic updates: updating UI immediately assuming server request will succeed Using centralized state to maintain a single source of truth Throttle and debounce Web workers to offload data to background thread Content Driven Applications These are not typical applications that focus on high interactivity. Instead, these apps focus on fast delivery of content and readability of information. These employ strategies such as Static Site Generation (SSG) or Server-Side Rendering (SSR) for fast loading and SEO. Examples: Blogs and new websites and web apps E-Commerce and Product catalog apps Documentations Marketing apps, Video streaming apps (youtube), etc. Common Problems: SEO + Web Vitals for increased visibility on search engines Asset heavy nature forces you to deal with large images, videos and unoptimized media. Managing third party scripts and large frameworks, making sure you don’t choke the browser and cause slow interactivity Rendering optimizations to support display of thousands of items Unpredictable traffic, Responsive design, Accessibility, and data managements are crucial things that you need to keep in check. Common Solutions: Performance: Lazy loading for images, code splitting for reduced bundle size and use of modern formats for both images and videos such as Webp and avif. Utilizing rendering strategies such as SSG and SSR Virtualization and caching for large data sets rendering Using headless CMS and frontend application to decouple data management layer and presentation layer. Transactional applications Applications such as payment gateways, booking and banking systems are covered in this category. These require high security, robust state management and realtime updates. Example: Payment gateways like stripe, paypal, razorpay Booking systems Online banking systems Common Problems: High security and dealing with sensitive data + compliance requirements (PCI Compliance) Robust state management to maintain consistency Error handling and safe retry logics Race conditions and duplicate submissions Common Solutions: Tokenization: Instead of sending raw credit card numbers, frontends use tokens provided by the gateway. This secures the data and limits compliance scope. use of SSL and HTTPS Introducing strict validations on both Frontend and Backend Implement Idempotency Keys: Ensure the frontend sends a unique key for each transaction to prevent double-charging in case of retries. CRUD heavy applications CRUD heavy applications focus on data management through Create, Read, Update and Delete operations. They require robust form handling, data tables, validations and filtering options. Example: Admin panels and dashboards Inventory management systems, and CMS (e.g. Wordpress) Helpdesk portals, CRMs Task management and project management tools like Jira, Trello Common Problems: Rendering massive datasets in the form of grids and tables Overfetching and underfetching of data Complex form states and overall state management Validations and sanitization of form data Filtering, sorting and search requirements across app Common Solutions: Virtualization and pagination of data Debounce and throttle for search bars and inputs Using optimistic UI updates Decoupling UI and Data structures Consistency in both form validation and feedback when handling data Event Driven Applications Applications that rely on event based models such as notification systems, IoT modules, Microservices, comes under this category. Events are constantly produces and consumed in these kinds of applications and they use Pub/Sub Pattern to communicate Example: Realtime order tracking Collaborative editors like Google Docs, Figma IoT control panels Stocks and trading platforms Notification systems in social media platforms

Frontend HLD: Understanding Different Types of Applications Read Post »

Tech & Work

Checklist for Engineers Joining a New Project

Goal: A quick-reference checklist of dos and don’ts when you’re new to a team or project – technical, cultural, and strategic. Bookmark this for future reference Mindset Listen and absorb as much as you can from discussions, meetings and conversations. Ask a lot of questions from different people in your team such as engineers, PMs, QA, designers. Do not limit yourself to just your domain. Clear assumptions: It’s good to clarify your assumptions even if they are obvious. Focus on “why X is like that” instead of “why we are not doing Y instead of X”. Understanding the context matters more than proposing alternatives early on. Start small: Ship a tiny fix or feature to learn the end to end flow. Take notes where required to have a reference for next time. Ramp up smartly Learn ✅ How to build, run, test and debug the project locally. ✅ Where docs live (internal wikis, Notion, READMEs, Slack pins) ✅ What is the API setup, data flow, and connection between frontend and backend ✅ Project structure, conventions, auth, permissions, and environment variables Release process Understand the release process — what happens after you push code? How can you verify your changes? Is there a post-deployment checklist or test plan you need to follow? This helps you build confidence in the full development lifecycle. Get familiar with GitHub workflow (branches, PRs, reviews) Jira / PM tool workflow (tickets, estimations, priorities) Know the Business + Team Culture Understanding the “why” behind decisions and the way your team works helps you navigate smarter and contribute meaningfully. This helps you get the bigger picture. What business value does the tech serve? Which business goals are driving the current direction? Why not switching tech is often a conscious, valid choice Understand legacy: it exists for a reason, even if it looks messy Learn the team’s communication norms, review style, meeting rituals Expectations Over Time Have realistic expectations for yourself based on the project’s size and complexity. A project is a marathon, not a sprint. Ramp-up: 3–6 months to be confident, especially in large/legacy projects Efficiency: 1–2 years to become fast and intuitive Proficiency: 3–5 years to develop deep technical and domain depth Final Tips Take your time learning — there’s no rush to “prove yourself.” Ship something small, build confidence. Have fun and bring your unique value to the team.

Checklist for Engineers Joining a New Project Read Post »

Tech & Work

A React Starter Template for the Impatient Developer

I recently created a starter template and wanted to share the process behind it. If you’re not interested in the process, here’s the link: paras594/react-starter-template For those who are interested, read ahead. The Problem I like building projects for fun and experimentation, but I always had one main problem: project setup. I’ve become well-versed in it and have no fear of getting started, but it’s inefficient and damn slow. It slows me down that I have to spend a chunk of my time on setup instead of actually building the project. Sometimes I used Next.js for its defaults with routing, data fetching, and optimizations out of the box. Other times I went with custom setups and Vite. In the past I was dabbling with webpack and custom configurations, but with time it all changed and I never finalized one single approach. Even though I always thought of building templates I could reuse, I either didn’t get the time or was too focused on the project that I let the templating part slip—until now. The Solution I found degit out of nowhere. I knew about it but never gave enough thought to it. But this time I understood my goal: have a template setup and add degit to the whole thing. I quickly sat down, used the Vite + React default template, and invested time in a few key decisions on what to include. My Goals with the Template Flexible and extensible – Should adapt to different project needs Reliable folder structure – Something you get familiar with over time Formatting and linting support – Without requiring tons of configuration Styling and components – Easy to get started with What Made the Cut Vite + React – Fast builds and development server TanStack Router – File-based routing with better type safety TanStack Query – Data fetching & server state management Tailwind + DaisyUI – Utility-first styling with ready-to-use components Biome – Linting and formatting TypeScript – Type safety PWA support – Progressive web app features The goal was simple: clone the repo and start building features on day one. Why These Choices? Vite is fast, TanStack Router provides a cleaner approach to handling routing than React Router, TanStack Query takes care of all the boilerplate that comes with data fetching, Tailwind + DaisyUI gives great default components without writing tons of classes, Biome avoids the hassle of keeping ESLint and Prettier updated while eliminating config bloat. How It Evolves I actually use this template for my own projects, which means it stays current with my real-world needs. Dependabot keeps the dependencies updated, and I add or remove things as I encounter them in actual development. I’m also considering branches for different use cases – maybe a minimal version, or branches with specific additions like authentication or database integration. The idea is to have options without bloating the main template. The template is on GitHub: paras594/react-starter-template Follow the steps in README and you are good to go. Final Thoughts This template isn’t revolutionary – it’s just a collection of tools that work well together and let you focus on building features instead of configuration. Feel free to use it if it matches what you usually reach for, or ignore it if your stack is different.

A React Starter Template for the Impatient Developer Read Post »

Life & Learning

What Made Me Start This Blog

Whether you’re learning to read, starting the gym, exploring new activities, or riding bikes—anything that excites you even a little bit has the potential to shape you, teach you something, or lead to unexpected growth. These experiences not only help you grow personally but also support and inspire others who may be going through similar situations. The problem is, we’re not always able to recognize or reflect on those processes and work. How it began? Photo by Dee Doo I recently wrapped up reading Show Your Work by Austin Kleon. It’s been an eye-opener for me – so much so that I created this blog just a few days later and began reflecting on all the things I genuinely love to do. If there’s one thing I want you to take away from this post, it’s this: show your work. Share the drafts, the experiments, the small wins, the failures, the process. That’s where the real value is. That’s where people connect with you. The point is to have a place where you can share your experience. The internet is full of platforms: Instagram, Facebook, blogs, YouTube — anything that allows you to share your work with ease and minimal friction. What matters most is not where you share, but that you share. Start small Photo by Gabriella Clare Marino on Unsplash I had never played Foosball before and, honestly, I was terrible at it. At first, I avoided it altogether—but eventually, I gave it a shot. To get my mind used to it, I began observing others—how they flicked the rods, controlled the ball, and moved with intention. I kept trying and trying. No luck. But then, something clicked. The hand-eye coordination started coming together. I could take better shots, and my timing improved. Finally, I was having fun! Just like that, I had learned a new game — something I now enjoy whenever I get the chance. And the best part was realizing that everyone around me had learned it the same way. Start awkward. Start unsure. But start – and eventually, you’ll figure it out. (See?, Just like that I shared the process of how I got into Foosball) You get more ideas Once the idea of sharing the process and work kicked in, I started noticing inspiration and ideas everywhere. I got so many ideas to write about while reading Show your work and other books. I will be sharing those here on this blog too. I also spotted a few good points from my professional side of work that are very useful for newcomers and beginners. Simple yet important stuff, like: What to focus on when starting a new project Why taking notes matters And yes, the underrated power of keeping a notepad and pen handy Once you start observing ideas, they begin to connect and flow naturally. Discover new people One of my favorite examples is Connor Price —an independent artist originally from Toronto. I absolutely love his music, and I believe I first discovered him on Instagram. His videos were fun, and his Spin the Globe series was genuinely unique. In this series, he challenged himself to collaborate with artists from around the world, spinning a globe, picking a country, and finding someone there to make music with. It was creative, bold, and it worked in his favor. Because he consistently shared his work and process, he allowed people like me to discover him. And he didn’t stop there he also made an effort to discover others and create with them. Now, he has over 4.6 million subscribers on YouTube, and he’s putting out music and content that people around the world truly enjoy. So, where does all this lead? Everything I’ve shared—from small personal wins to stories that inspired me—points to one simple truth: Show Your Work. I hope this post gave you a reason to start sharing your process—however small it may feel. If you’re curious, I highly recommend reading Show Your Work by Austin Kleon . It’s a quick, powerful read that just might push you to start something of your own. All the best—and feel free to use the comments section to ask questions, share your thoughts, or just say hi. I’d love to hear from you.

What Made Me Start This Blog Read Post »

Scroll to Top