[{"data":1,"prerenderedAt":766},["ShallowReactive",2],{"blog-guide-to-cdn":3,"blog-all-for-related":300},{"id":4,"title":5,"author":6,"body":7,"cardAlt":5,"categories":285,"description":287,"draft":288,"extension":289,"headerImage":290,"keywords":291,"meta":292,"name":293,"navigation":294,"path":295,"seo":296,"series":6,"stem":297,"updated":6,"year":298,"__hash__":299},"blog\u002Fblog\u002Fguide-to-cdn.md","Guide to Content Delivery Network",null,{"type":8,"value":9,"toc":270},"minimark",[10,19,30,42],[11,12,13,14,18],"p",{},"Remember the last time when you were reading blogs like this, watching videos or scrolling through shopping sites. Each time you were using CDN indirectly. CDN is one of the ",[15,16,17],"strong",{},"backbone of modern world internet infrastructure"," and solves an important problem of latency. Static assets like images and videos are now almost on every website, larger the files -> higher is the bandwidth required to serve these assets. CDN solves this exact problem by distributing assets on servers throughout the network.",[11,20,21,22,29],{},"This article is a part of ",[23,24,28],"a",{"href":25,"rel":26},"https:\u002F\u002Fwww.mohitkhare.com\u002Fcategories\u002Fsystem%20design",[27],"nofollow","System design series",". In this article, I'll explain about CDN and how it works. We will also cover the benefits of CDN and when to avoid CDNs. Also, this is a common component of system design interviews that you don't want to skip. Let's learn CDNs.",[31,32,33],"blockquote",{},[11,34,35,36,41],{},"Preparing for Interviews? I highly recommend ",[23,37,40],{"href":38,"rel":39},"https:\u002F\u002Fwww.educative.io\u002Fcourses\u002Fgrokking-the-system-design-interview?aff=K3zN",[27],"Mastering System Design"," course on Educative.",[43,44,45,48,53,64,71,74,83,90,92,96,103,112,125,127,131,134,139,142,147,151,154,159,161,165,193,197,208,210,214,237,253,256,265],"ads",{},[46,47],"hr",{},[49,50,52],"h2",{"id":51},"introduction-to-cdn","Introduction to CDN",[11,54,55,56,59,60,63],{},"In simple terms, A ",[15,57,58],{},"content delivery network"," (CDN) is a network of group of servers that are geographically distributed. These group of servers work together to provide faster delivery of assets. As the name suggests, CDN ensures ",[15,61,62],{},"faster transfer of assets"," needed for the Internet including images, videos, HTML pages, etc. At core, CDNs responsibility is to ensure the content is delivered throughout the globe efficiently. Over half of all traffic is already being served by CDNs. That's how important is CDN to internet.",[11,65,66],{},[67,68],"img",{"alt":69,"src":70},"CDN Overview","https:\u002F\u002Fwww.mohitkhare.com\u002Fimages\u002Fblog\u002Fguide-to-cdn\u002Fcdn-overview.png",[11,72,73],{},"For example - I own the next social media website that is serving customers throughout the world. But since I'm serving this website from some server in India, a visitor accessing from US would face higher load times and bandwidth due to large distance.",[11,75,76,77,82],{},"To avoid the confusion, a CDN doesn't host content rather it helps in caching content at the ",[23,78,81],{"href":79,"rel":80},"https:\u002F\u002Fwww.fortinet.com\u002Fresources\u002Fcyberglossary\u002Fnetwork-edge",[27],"network edge",". With the help of global network of servers, CDN virtually shortens the physical distance between customer and origin servers, resulting in better site load times and performance.",[11,84,85,86,89],{},"Today, a lot of cloud services provide CDN. Some of the popular ones are ",[15,87,88],{},"Cloudflare CDN, AWS Cloudfront",", GCP Cloud CDN and Azure CDN. Do check them out if you want to use CDN in your websites.",[46,91],{},[49,93,95],{"id":94},"how-does-cdn-works","How does CDN works?",[11,97,98,99,102],{},"CDN is a network of servers linked together with the goal of delivering content as ",[15,100,101],{},"quickly, cheaply, reliably, and securely"," as possible. In order to improve speed and connectivity, a CDN will place servers at the exchange points between different networks.",[11,104,105,106,111],{},"CDN uses ",[23,107,110],{"href":108,"rel":109},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternet_exchange_point",[27],"Internet exchange points aka IXP"," that help in exchanging data between ISPs across network. By having a connection to these high speed and highly interconnected locations, a CDN provider is able to reduce costs and transit times in high speed data delivery.",[11,113,114,115,118,119,124],{},"To minimize the distance between the visitors and your website’s server, a CDN stores a ",[15,116,117],{},"cached version"," of its content in multiple geographical locations. Each location (IXPs) contains a number of ",[23,120,123],{"href":121,"rel":122},"https:\u002F\u002Fwww.imperva.com\u002Flearn\u002Fperformance\u002Fbrowser-caching\u002F",[27],"caching"," servers responsible for content delivery to visitors within its proximity.",[46,126],{},[49,128,130],{"id":129},"types-of-cdn","Types of CDN",[11,132,133],{},"There are two types of CDN that are used based on how data is transferred between CDN and origin server.",[135,136,138],"h3",{"id":137},"push-based-cdn","Push based CDN",[11,140,141],{},"In this type, the website owners need to push new data to CDN. CDN then propogates the new data across it's network of servers. Push CDNs require more maintainance effort since you have to push new changes to CDN.",[11,143,144],{},[67,145],{"alt":138,"src":146},"https:\u002F\u002Fwww.mohitkhare.com\u002Fimages\u002Fblog\u002Fguide-to-cdn\u002Fpush-based-cdn.png",[135,148,150],{"id":149},"pull-based-cdn","Pull based CDN",[11,152,153],{},"In this type, CDN checks if a file is present. If not, then it fetches the asset from origin server, cache the new data and then send it to user. One problem in Pull based CDN is invalidated cache. If CDN already has a cache, it won't fetch file from origin server even if it has a newer version of that file. But, this can be solved with invalidating cache after a certain threshold of time.",[11,155,156],{},[67,157],{"alt":150,"src":158},"https:\u002F\u002Fwww.mohitkhare.com\u002Fimages\u002Fblog\u002Fguide-to-cdn\u002Fpull-based-cdn.png",[46,160],{},[49,162,164],{"id":163},"benefits-of-cdn","Benefits of CDN",[166,167,168,176,183,190],"ul",{},[169,170,171,172,175],"li",{},"CDN helps in distributing data closer to the customers that helps in ",[15,173,174],{},"reducing website load times",". Without CDN the client request needs to be served by the origin server. Thus CDN can reduce bounce rates and increase the amount of time that people spend on the site.",[169,177,178,179,182],{},"CDN can handle more traffic and withstand hardware failure better than many origin servers. If if one of the server of CDN goes down, the distributed network ensures that the request is served efficiently. Thus, CDN ensuring ",[15,180,181],{},"high availablilty"," for services.",[169,184,185,186,189],{},"Since it lies on the edge of the network, CDN helps in ",[15,187,188],{},"improving security"," by mitigating against DDOS and other security vulnerabilities on your applications.",[169,191,192],{},"CDN can store reduced file size version using file compression that can help in improving load times. This results in serving different file sizes based on bandwidth.",[135,194,196],{"id":195},"when-to-not-use-a-cdn","When to not use a CDN",[11,198,199,200,203,204,207],{},"if you are running a strictly localized website or your customers lie in a ",[15,201,202],{},"specific geographical location",". Then, serving them by hosting server in that region should a fair choice. There is no need to use CDN and ",[15,205,206],{},"add additional network hop"," for no benefit. Conversely this can rather impact your website performance. Also CDN is not the best choice when your data is quite dynamic because the cache needs to be updated quickly.",[46,209],{},[49,211,213],{"id":212},"resources","Resources",[166,215,216,223,230],{},[169,217,218],{},[23,219,222],{"href":220,"rel":221},"https:\u002F\u002Fwww.cloudflare.com\u002Fen-in\u002Flearning\u002Fcdn\u002Fwhat-is-a-cdn\u002F",[27],"What is a CDN",[169,224,225],{},[23,226,229],{"href":227,"rel":228},"https:\u002F\u002Fwww.imperva.com\u002Flearn\u002Fperformance\u002Fwhat-is-cdn-how-it-works\u002F",[27],"In depth guide to CDN",[169,231,232],{},[23,233,236],{"href":234,"rel":235},"https:\u002F\u002Famzn.to\u002F3An9Y5e",[27],"Book: Content Delivery Networks",[31,238,239],{},[11,240,241,242,247,248,252],{},"Do explore articles on ",[23,243,246],{"href":244,"rel":245},"https:\u002F\u002Fwww.mohitkhare.com\u002Fcategories\u002Fgolang",[27],"Golang"," and ",[23,249,251],{"href":25,"rel":250},[27],"System Design",". You'll learn something new 💡",[11,254,255],{},"I hope you learned something new. Feel free to suggest improvements ✅",[11,257,258,259,264],{},"I share regular updates and resources on ",[23,260,263],{"href":261,"rel":262},"https:\u002F\u002Ftwitter.com\u002Fmkfeuhrer",[27],"Twitter",". Let’s connect!",[11,266,267],{},[15,268,269],{},"Keep exploring 🔎 Keep learning 🚀",{"title":271,"searchDepth":272,"depth":272,"links":273},"",2,[274,275,276,281,284],{"id":51,"depth":272,"text":52},{"id":94,"depth":272,"text":95},{"id":129,"depth":272,"text":130,"children":277},[278,280],{"id":137,"depth":279,"text":138},3,{"id":149,"depth":279,"text":150},{"id":163,"depth":272,"text":164,"children":282},[283],{"id":195,"depth":279,"text":196},{"id":212,"depth":272,"text":213},[251,286],"Programming","CDN is one of the backbone of modern world internet infrastructure. Learn about Content Delivery Network, it's working, types and benefits.",false,"md","blog\u002Fguide-to-cdn\u002Fguide-to-cdn-card.webp","content delivery network, cdn, system design",{},"guide-to-cdn",true,"\u002Fblog\u002Fguide-to-cdn",{"title":5,"description":287},"blog\u002Fguide-to-cdn","2022-01-23","vocRuEsTovSuBxY1GgW1K7BRvUP7q3ybBP5jmShUMxA",[301,308,314,322,331,337,344,351,357,363,369,375,381,391,397,404,410,416,422,428,434,440,446,452,459,466,472,474,480,486,492,498,504,510,516,522,528,534,540,547,553,559,565,572,578,584,591,598,604,611,617,624,630,637,643,649,655,661,667,673,679,685,691,697,703,709,716,722,729,735,741,747,754,760],{"path":302,"title":303,"description":304,"categories":305,"draft":294,"year":307,"series":6},"\u002Fblog\u002Fai-assisted-workstation","Building an AI-Assisted Personal Workstation","How I built a personal AI workstation: markdown knowledge base, portable agent skills, handoff-driven sessions. What worked, what broke, what I would change.",[306,286],"Productivity","2026-08-26",{"path":309,"title":310,"description":311,"categories":312,"draft":288,"year":313,"series":6},"\u002Fblog\u002Faws-s3-golang","Uploading images to AWS S3 in Golang","In this tutorial I cover how to upload, fetch and manage other operations for objects on AWS S3 in Golang",[246,286],"2020-01-12",{"path":315,"title":316,"description":317,"categories":318,"draft":288,"year":321,"series":6},"\u002Fblog\u002Fbooks-for-engineers","Best Books for Software Engineers","Best Books to help you build you software engineering career - ranging from fundamentats, interview prep to productivity.",[319,320],"Books","Life","2021-12-26",{"path":323,"title":324,"description":325,"categories":326,"draft":288,"year":330,"series":6},"\u002Fblog\u002Fbuilding-acrons","Building Acrons 🚀","Building Acrons, a one-stop tool to decode everyday acronyms like DIY, FOMO, and BRB without losing your flow.",[327,328,329],"Side Projects","Web","Tools","2020-05-26",{"path":332,"title":333,"description":334,"categories":335,"draft":288,"year":336,"series":6},"\u002Fblog\u002Fcap-theorem","CAP Theorem Explained","Learn the concept and misconceptions around popular CAP theorem in system design.",[251,286],"2021-07-26",{"path":338,"title":339,"description":340,"categories":341,"draft":288,"year":343,"series":6},"\u002Fblog\u002Fcode-reviews","Code Review Checklist","Why code reviews matter, and best practices that catch bugs early and keep code quality high before merge.",[342],"Engineering Principles","2020-07-20",{"path":345,"title":346,"description":347,"categories":348,"draft":288,"year":350,"series":6},"\u002Fblog\u002Fdark-mode","Add Dark mode to websites","Dark mode is ❤️️ Add it to your websites with little CSS and JS",[349,328],"Javascript","2020-07-04",{"path":352,"title":353,"description":354,"categories":355,"draft":288,"year":356,"series":6},"\u002Fblog\u002Fdate-time-golang","Working with Date and Time in Go","Learn how to use time in Golang - Multiple formats, locations and using date.",[246,286],"2020-10-09",{"path":358,"title":359,"description":360,"categories":361,"draft":288,"year":362,"series":6},"\u002Fblog\u002Fdefer-in-golang","Understanding Defer In Golang","Learn about defer keyword in golang and how it can help you avoid panics due to bugs.",[246,286],"2021-05-05",{"path":364,"title":365,"description":366,"categories":367,"draft":288,"year":368,"series":6},"\u002Fblog\u002Fenums-golang","Implementing Enums in Golang","Enums are a way to defined set of constant values. Learn how to implement enums in Go using iota with examples.",[246,286],"2021-12-18",{"path":370,"title":371,"description":372,"categories":373,"draft":288,"year":374,"series":6},"\u002Fblog\u002Fenvironment-variable-golang","Guide to Environment variables in Go","Learn what are environment variables and how to use them in Go",[246,286],"2020-08-14",{"path":376,"title":377,"description":378,"categories":379,"draft":288,"year":380,"series":6},"\u002Fblog\u002Ferror-handling-golang","Handle errors the right way — Golang","How to handle errors in golang to make your life easy",[246,286],"2020-01-30",{"path":382,"title":383,"description":384,"categories":385,"draft":288,"year":307,"series":388},"\u002Fblog\u002Ffile-attack-field-guide","How File-Based Attacks Land: A Detection Engineer's Field Guide","A practical taxonomy of how malware and phishing arrive as files, why classic controls miss them, and how detection should think.",[386,387],"Security","Systems",{"name":389,"part":390},"File Attack Deep Dives",1,{"path":392,"title":393,"description":394,"categories":395,"draft":288,"year":396,"series":6},"\u002Fblog\u002Ffile-upload-golang","Uploading Files in Golang with Multipart Request","Learn how to upload files from your client to server as a multipart request in Golang.",[246,286],"2021-03-13",{"path":398,"title":399,"description":400,"categories":401,"draft":288,"year":403,"series":6},"\u002Fblog\u002Fgit-branch","Git Branch 101","Branching is a new path of development that makes it a lot easier to build features. Learn why and how to use branching in git.",[402,286],"Git","2022-03-20",{"path":405,"title":406,"description":407,"categories":408,"draft":288,"year":409,"series":6},"\u002Fblog\u002Fgit-pull-request-template","Guide to Pull Request Templates","Improve collaboration and code reviews with pull request templates. Blog include PR template and how to create one on github\u002Fgitlab",[402,286],"2023-08-24",{"path":411,"title":412,"description":413,"categories":414,"draft":288,"year":415,"series":6},"\u002Fblog\u002Fgit-remove-sensitive-info","Securing Git: Remove Sensitive Information","Protect your code from security breaches by using BFG tool to remove sensitive information from Git history. Learn how to do it in this comprehensive guide.",[402,286],"2023-10-16",{"path":417,"title":418,"description":419,"categories":420,"draft":288,"year":421,"series":6},"\u002Fblog\u002Fgit-tags-explained","Git tags : Explained","What Git tags are, why and when to use them, and how to start tagging releases in your own projects.",[402,286],"2020-06-18",{"path":423,"title":424,"description":425,"categories":426,"draft":288,"year":427,"series":6},"\u002Fblog\u002Fgo-dependency-injection","Dependency Injection in Go using Wire","Learn about dependency injection, its benefits and how to implement it in Go services using wire",[246,286],"2022-11-26",{"path":429,"title":430,"description":431,"categories":432,"draft":288,"year":433,"series":6},"\u002Fblog\u002Fgo-generics","Introduction to Generics in Go","Learn about generics in Golang, it's benefits and how to implement it in applications.",[246,286],"2022-11-27",{"path":435,"title":436,"description":437,"categories":438,"draft":288,"year":439,"series":6},"\u002Fblog\u002Fgo-in-memory-cache","Building In-Memory Cache in Go","Learn about in-memory caching in Golang, it's benefits and how to implement it with and without generics with a TTL(expiry).",[246,286],"2024-03-28",{"path":441,"title":442,"description":443,"categories":444,"draft":288,"year":445,"series":6},"\u002Fblog\u002Fgo-makefile","Ultimate Makefile for Golang","Boost your productivity and save time with ultimate Makefile for Golang projects.",[246,286],"2024-06-10",{"path":447,"title":448,"description":449,"categories":450,"draft":288,"year":451,"series":6},"\u002Fblog\u002Fgo-middleware","Mastering Middlewares in Golang","Learn about middlewares, their use cases and how to implement them in Golang applications",[246,286],"2022-03-13",{"path":453,"title":454,"description":455,"categories":456,"draft":288,"year":458,"series":6},"\u002Fblog\u002Fgo-naming-conventions","Naming Conventions in Golang","Why naming conventions matter in Go, with best practices and practical examples for clear, readable, maintainable code.",[246,286,457],"Code Quality","2023-05-19",{"path":460,"title":461,"description":462,"categories":463,"draft":288,"year":465,"series":6},"\u002Fblog\u002Fgo-with-redis","Go with Redis","A practical introduction to using Redis with Golang to make your applications faster with in-memory data storage.",[246,464,286],"Database","2020-05-03",{"path":467,"title":468,"description":469,"categories":470,"draft":288,"year":471,"series":6},"\u002Fblog\u002Fgolang-maps","Learn Maps in Golang (with examples)","A complete guide to maps in Golang: creating maps, adding and removing items, iterating, and how map equality works.",[246,286],"2020-09-10",{"path":295,"title":5,"description":287,"categories":473,"draft":288,"year":298,"series":6},[251,286],{"path":475,"title":476,"description":477,"categories":478,"draft":288,"year":479,"series":6},"\u002Fblog\u002Fguide-to-rule-engines","Guide to Rule Engines","Rule Engines help in solving changing business requirements with ease. Learn all about Rule engines, it's working, benefits and how to implement one in Golang",[246,286],"2022-09-12",{"path":481,"title":482,"description":483,"categories":484,"draft":288,"year":485,"series":6},"\u002Fblog\u002Fhexagonal-architecture","Guide to Hexagonal Architecture","Learn how to design efficient application with hexagonal architecture with practical example",[251,286],"2020-12-13",{"path":487,"title":488,"description":489,"categories":490,"draft":288,"year":491,"series":6},"\u002Fblog\u002Fhttp-status-codes","Learn HTTP Status Codes","A tour of HTTP response status codes, what each class means, and when to use which code in your applications.",[328,286],"2020-07-30",{"path":493,"title":494,"description":495,"categories":496,"draft":288,"year":497,"series":6},"\u002Fblog\u002Fintroduction-to-goroutines","Introduction to Goroutines","Understand the basics of concurrency and learn how to work with Goroutines in golang.",[246,286],"2021-04-10",{"path":499,"title":500,"description":501,"categories":502,"draft":288,"year":503,"series":6},"\u002Fblog\u002Fjson-in-postgres-with-golang","Storing JSON in Postgres with Golang","Learn how to store JSON objects in Postgres and how to implement it in Golang.",[286,464,246],"2021-02-13",{"path":505,"title":506,"description":507,"categories":508,"draft":288,"year":509,"series":6},"\u002Fblog\u002Fjson-web-token","Complete Guide to JWT","JSON Web Tokens are a very compact way to carry information. Learn about JWTs in depth, from its structure to when to use it.",[286,328],"2021-11-20",{"path":511,"title":512,"description":513,"categories":514,"draft":288,"year":515,"series":6},"\u002Fblog\u002Flearn-to-say-no","Learning to say No","Learn why it's important to say 'NO'. How it helps in increasing productivity and explore strategies for saying No",[320,319],"2022-04-09",{"path":517,"title":518,"description":519,"categories":520,"draft":288,"year":521,"series":6},"\u002Fblog\u002Flearn-unlearn-relearn","Learn - Unlearn - Relearn","Unlearning things to learn new is the way to grow. Discover how to do that!",[306,320],"2020-09-25",{"path":523,"title":524,"description":525,"categories":526,"draft":288,"year":527,"series":6},"\u002Fblog\u002Flinting-in-golang","Introduction to Linting in Go","Introduction to improving code quality using linting. Learn how to add linting in your Go projects.",[246,286],"2021-07-07",{"path":529,"title":530,"description":531,"categories":532,"draft":288,"year":533,"series":6},"\u002Fblog\u002Fload-balancing","Load Balancing 101","Complete guide on load balancers explaining the internal working and how does it help in making applications efficient.",[251,286],"2021-05-29",{"path":535,"title":536,"description":537,"categories":538,"draft":288,"year":539,"series":6},"\u002Fblog\u002Fmaking-decisions-the-right-way","Making Decisions: The right way","Decisions are hard! Learn how to make the right decisions always",[306,320],"2020-06-07",{"path":541,"title":542,"description":543,"categories":544,"draft":288,"year":546,"series":6},"\u002Fblog\u002Fmanage-logs-with-logrotate","Using Logrotate to manage logs","Learn how to use logrotate system utility to manage logs with example",[545,286],"Linux","2020-09-08",{"path":548,"title":549,"description":550,"categories":551,"draft":288,"year":552,"series":6},"\u002Fblog\u002Fmarshal-structs-golang","Marshal structs the right way: Golang","Why Golang marshals empty structs into your JSON instead of null, and how to marshal structs the right way.",[246,286],"2020-03-31",{"path":554,"title":555,"description":556,"categories":557,"draft":288,"year":558,"series":6},"\u002Fblog\u002Fnotes-almanack-naval","Book Notes : Almanack of Naval Ravikant","My notes\u002Fhighlights from Almanack of Naval Ravikant book by Eric Jorgenson",[319,320],"2020-10-17",{"path":560,"title":561,"description":562,"categories":563,"draft":288,"year":564,"series":6},"\u002Fblog\u002Fnotes-anything-you-want","Book Notes : Anything you want","My notes\u002Fhighlights from Anything you want book by Derek Sivers",[319,320],"2021-09-25",{"path":566,"title":567,"description":568,"categories":569,"draft":288,"year":571,"series":6},"\u002Fblog\u002Fnotes-getting-real","Book Notes : Getting Real","My notes and highlights from Getting Real by Jason Fried and David Heinemeier Hansson on building web applications.",[319,570],"Startups","2020-11-03",{"path":573,"title":574,"description":575,"categories":576,"draft":288,"year":577,"series":6},"\u002Fblog\u002Fnotes-hell-yeah-or-no","Book Notes : Hell Yeah or No","My notes\u002Fhighlights from Hell Yeah or No book by Derek Sivers",[319,320],"2020-09-16",{"path":579,"title":580,"description":581,"categories":582,"draft":288,"year":583,"series":6},"\u002Fblog\u002Fnotes-how-to-be-a-capitalist","Book Notes : How to Be a Capitalist Without Any Capital","My notes\u002Fhighlights from How to Be a Capitalist Without Any Capital by Nathan Latka",[319,570],"2020-01-07",{"path":585,"title":586,"description":587,"categories":588,"draft":288,"year":590,"series":6},"\u002Fblog\u002Fnotes-lean-b2b","Book Notes : Lean B2B","My notes and highlights from Lean B2B by Étienne Garbugli on assessing markets, building MVPs, and selling to businesses.",[319,589],"Entrepreneurship","2022-07-02",{"path":592,"title":593,"description":594,"categories":595,"draft":288,"year":597,"series":6},"\u002Fblog\u002Fnotes-lets-talk-money","Book Notes : Let's Talk Money","My notes and highlights from Let's Talk Money by Monica Halan on managing personal finances and savings.",[319,596],"Personal Finance","2021-02-26",{"path":599,"title":600,"description":601,"categories":602,"draft":288,"year":603,"series":6},"\u002Fblog\u002Fnotes-obviously-awesome","Book Notes : Obviously Awesome","My notes and highlights from Obviously Awesome by April Dunford on product positioning and marketing strategy.",[319,570],"2020-04-26",{"path":605,"title":606,"description":607,"categories":608,"draft":288,"year":610,"series":6},"\u002Fblog\u002Fnotes-refactoring-ui","Book Notes: Refactoring UI","My notes and highlights from Refactoring UI by Adam Wathan and Steve Schoger, full of practical design tips for engineers.",[319,609],"Design","2020-05-09",{"path":612,"title":613,"description":614,"categories":615,"draft":288,"year":616,"series":6},"\u002Fblog\u002Fnotes-rework","Book Notes: Rework","My notes and highlights from Rework by Jason Fried and David Heinemeier Hansson on a better way to succeed in business.",[319,570],"2021-04-14",{"path":618,"title":619,"description":620,"categories":621,"draft":288,"year":623,"series":6},"\u002Fblog\u002Fone-on-one-meetings","Guide to Effective 1:1 Meetings","One on One meetings are important for your personal & professional growth. Learn how to master 1:1s with your manager and peers.",[622,306],"Career","2023-03-05",{"path":625,"title":626,"description":627,"categories":628,"draft":288,"year":629,"series":6},"\u002Fblog\u002Fpersonal-okrs","Personal OKRs for Success","Why one should set personal OKRs and how to achieve success with them",[306,320],"2020-06-27",{"path":631,"title":632,"description":633,"categories":634,"draft":288,"year":636,"series":6},"\u002Fblog\u002Fpoker-tips","Poker Tips: Johns Hopkins Poker Class","Notes from Johns Hopkins poker course. This guide will help you improve in Poker and win some large pots.",[320,635],"Poker","2020-06-13",{"path":638,"title":639,"description":640,"categories":641,"draft":288,"year":642,"series":6},"\u002Fblog\u002Fpomodoro","Get work done: The Pomo Way","Learn to focus and get productive by following the Pomodoro Technique",[306],"2020-10-24",{"path":644,"title":645,"description":646,"categories":647,"draft":288,"year":648,"series":6},"\u002Fblog\u002Fpostgres-constraints","Postgres Constraints","Constraints are line of defense for database. Explore various types of constrainsts in postgres",[464,286],"2020-11-07",{"path":650,"title":651,"description":652,"categories":653,"draft":288,"year":654,"series":6},"\u002Fblog\u002Fppf-explained","PPF Explained","Learn basics about Public Provident Fund and why you should invest",[320,596],"2020-12-24",{"path":656,"title":657,"description":658,"categories":659,"draft":288,"year":660,"series":6},"\u002Fblog\u002Fproductivity-chrome-extensions","Boost Productivity with Chrome Extensions","Utitizing chrome extensions to boost your productivity!",[306,329,328],"2020-04-24",{"path":662,"title":663,"description":664,"categories":665,"draft":288,"year":666,"series":6},"\u002Fblog\u002Fproductivity-in-vscode","Improve your productivity with VS Code","Key VS Code features like the integrated terminal, shortcuts, and extensions that improved my everyday productivity.",[306,286],"2020-03-12",{"path":668,"title":669,"description":670,"categories":671,"draft":288,"year":672,"series":6},"\u002Fblog\u002Freading-101","Improving Reading 101","Why reading matters, how to build a reading habit, and what to read next - from my own journey into books.",[319,320],"2020-04-04",{"path":674,"title":675,"description":676,"categories":677,"draft":288,"year":678,"series":6},"\u002Fblog\u002Freverse-proxy","Understanding Reverse Proxy","Learn about reverse proxy, how it is different from forward proxy and explore advantages of using it in system design.",[251,286],"2021-10-03",{"path":680,"title":681,"description":682,"categories":683,"draft":288,"year":684,"series":6},"\u002Fblog\u002Frunning-periodic-background-task-golang","Running periodic background tasks in Golang","How to run periodic background tasks in Golang by combining cron-style scheduling with background execution.",[246,286],"2019-11-21",{"path":686,"title":687,"description":688,"categories":689,"draft":288,"year":690,"series":6},"\u002Fblog\u002Fsessions-in-golang","Sessions using Golang and Redis","How cookies and sessions work, and how to implement persistent login sessions in Golang using Redis.",[246,464,286],"2020-02-25",{"path":692,"title":693,"description":694,"categories":695,"draft":288,"year":696,"series":6},"\u002Fblog\u002Fsolid-dry-kiss-yagni","Solid Dry Kiss Yagni","An introduction to the SOLID, DRY, KISS, and YAGNI principles and how they help you write cleaner, robust code.",[342],"2020-07-17",{"path":698,"title":699,"description":700,"categories":701,"draft":288,"year":702,"series":6},"\u002Fblog\u002Fstack-in-golang","Implement Stack in Golang","Learn how to implement stack data structure in Golang (Full code)",[246,286],"2020-09-14",{"path":704,"title":705,"description":706,"categories":707,"draft":288,"year":708,"series":6},"\u002Fblog\u002Fstart-oss-today","Start your Open Source journey today","Start your OSS journey with intro to GIT. Participate in Hacktoberfest!",[402,286],"2020-09-19",{"path":710,"title":711,"description":712,"categories":713,"draft":288,"year":715,"series":6},"\u002Fblog\u002Fsticky-social-bar","Sticky social share component in HTML","Learn how to build a social media sharing component in HTML and add it to your website.",[286,714],"Frontend","2021-02-05",{"path":717,"title":718,"description":719,"categories":720,"draft":288,"year":721,"series":6},"\u002Fblog\u002Fterm-insurance","Term insurance Simplified","Everything you need to know before you buy a term insurance.",[320,596],"2020-11-29",{"path":723,"title":724,"description":725,"categories":726,"draft":288,"year":728,"series":6},"\u002Fblog\u002Fterminal-output-with-redirection","Handling terminal outputs with Redirection","Learn how to handle terminal outputs with Redirection and saving it to files",[545,727,286],"Terminal","2020-09-06",{"path":730,"title":731,"description":732,"categories":733,"draft":288,"year":734,"series":6},"\u002Fblog\u002Fthink-and-grow-rich","Book Notes: Think and Grow Rich","My notes and highlights from Think and Grow Rich by Napoleon Hill, covering its process for building wealth.",[319,320],"2020-05-19",{"path":736,"title":737,"description":738,"categories":739,"draft":288,"year":740,"series":6},"\u002Fblog\u002Ftransactions-postgres-golang","Transactions on Postgres with Golang","Performing Postgres database operations in Golang with GORM, from basic queries to full transaction support.",[246,464,286],"2020-03-18",{"path":742,"title":743,"description":744,"categories":745,"draft":288,"year":746,"series":6},"\u002Fblog\u002Fwaitgroups-in-golang","WaitGroups in Golang","Learn about WaitGroups in golang and how to use them to perform concurrent operations without blocking the main thread.",[246,286],"2022-05-31",{"path":748,"title":749,"description":750,"categories":751,"draft":288,"year":753,"series":6},"\u002Fblog\u002Fwhat-i-use","What I Use: Products and Softwares","List of what I use in my day to day life ranging from terminal, editors, softwares, devices to accessories",[320,752],"Tech","2024-06-01",{"path":755,"title":756,"description":757,"categories":758,"draft":288,"year":759,"series":6},"\u002Fblog\u002Fyear-in-review-2020","Year in Review: 2020","It's a wrap! 2020 was a crazy year, See how my year went!",[320],"2020-12-31",{"path":761,"title":762,"description":763,"categories":764,"draft":288,"year":765,"series":6},"\u002Fblog\u002Fyear-in-review-2021","Year in Review: 2021","It's a wrap! 2021 was a mixed bag, full of ups and downs. Key Goal for 2022: Start now!",[320],"2021-12-31",1788114952142]