<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by anurag sharma on Medium]]></title>
        <description><![CDATA[Stories by anurag sharma on Medium]]></description>
        <link>https://medium.com/@as870?source=rss-3638c45af84b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*Gv4Q-ICyCwL16Cm84YchRQ.jpeg</url>
            <title>Stories by anurag sharma on Medium</title>
            <link>https://medium.com/@as870?source=rss-3638c45af84b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 23:37:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@as870/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Best Engineering Blogs/Articles/Videos for System Design]]></title>
            <link>https://as870.medium.com/best-engineering-blogs-articles-videos-for-system-design-3677d6013a1a?source=rss-3638c45af84b------2</link>
            <guid isPermaLink="false">https://medium.com/p/3677d6013a1a</guid>
            <dc:creator><![CDATA[anurag sharma]]></dc:creator>
            <pubDate>Thu, 04 Apr 2024 16:57:56 GMT</pubDate>
            <atom:updated>2024-04-10T17:19:27.522Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xTGRig_czygueMK-1zPC4A.jpeg" /></figure><p>Following Engineering Blogs is one of the best ways to understand how the engineering teams at top tech companies function and how they build scalable systems.</p><p>It also helps in preparing for System Design Interviews as you get to understand the trade-offs that these companies took in making their architecture scalable based on their requirements.</p><p>I have curated a list of the top engineering blogs and have also added the recommended articles from each of them to help you learn more about their architecture and prepare for System Design (HLD) Interviews.</p><p>I would highly suggest you go through 1–2 articles/videos every day. It would hardly take 30 mins/day. Consistency is key.</p><p>You do not need to understand everything completely. Just a brief idea about what’s happening is good enough. Things will start making sense once you’ve read many articles. If you find something interesting and want to learn more, then Google for more information.</p><h3>Netflix TechBlog</h3><p>Link: <a href="https://netflixtechblog.com/">Netflix TechBlog</a></p><p>Netflix has one of the best tech blogs in the industry. They have written a lot about their learnings and practices across a bunch of different areas. Their blog and open source infra have helped a lot of companies scale and adopt Netflix’s engineering practices. They have also been pioneers in the adoption of microservices architecture across the industry.</p><p>Recommended Links:</p><p>Overview</p><ul><li><a href="https://www.youtube.com/watch?v=CZ3wIuvmHeM">Mastering Chaos — A Netflix Guide to Microservices</a></li><li><a href="https://www.youtube.com/watch?v=57UK46qfBLY">Microservices at Netflix Scale: Principles, Tradeoffs &amp; Lessons Learned</a></li><li><a href="https://medium.com/refraction-tech-everything/how-netflix-works-the-hugely-simplified-complex-stuff-that-happens-every-time-you-hit-play-3a40c9be254b">How Netflix works: the (hugely simplified) complex stuff that happens every time you hit Play</a></li></ul><p>Microservices</p><ul><li><a href="https://netflixtechblog.com/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40">Netflix Conductor: A microservices orchestrator</a></li><li><a href="https://netflixtechblog.com/evolution-of-netflix-conductor-16600be36bca">Evolution of Netflix Conductor: v2.0 and beyond</a></li><li><a href="https://netflixtechblog.com/engineering-trade-offs-and-the-netflix-api-re-architecture-64f122b277dd">Engineering Trade-Offs and The Netflix API Re-Architecture</a></li></ul><p>Fault Tolerance and Resiliency</p><ul><li><a href="https://netflixtechblog.com/fault-tolerance-in-a-high-volume-distributed-system-91ab4faae74a">Fault Tolerance in a High Volume, Distributed System</a></li><li><a href="https://netflixtechblog.com/keeping-netflix-reliable-using-prioritized-load-shedding-6cc827b02f94">Keeping Netflix Reliable Using Prioritized Load Shedding</a></li><li><a href="https://netflixtechblog.com/making-the-netflix-api-more-resilient-a8ec62159c2d">Making the Netflix API More Resilient</a></li></ul><p>Chaos Engineering</p><ul><li><a href="https://netflixtechblog.com/the-netflix-simian-army-16e57fbab116">The Netflix Simian Army</a></li><li><a href="https://netflixtechblog.com/netflix-chaos-monkey-upgraded-1d679429be5d">Netflix Chaos Monkey Upgraded</a></li><li><a href="https://netflixtechblog.com/chaos-engineering-upgraded-878d341f15fa">Chaos Engineering Upgraded: Chaos Kong</a></li></ul><p>Streaming</p><ul><li><a href="https://netflixtechblog.com/content-popularity-for-open-connect-b86d56f613b">Content Popularity for Open Connect</a></li><li><a href="https://netflixtechblog.com/distributing-content-to-open-connect-3e3e391d4dc9">Distributing Content to Open Connect</a></li><li><a href="https://netflixtechblog.com/scaling-event-sourcing-for-netflix-downloads-episode-1-6bc1595c5595">Scaling Event Sourcing for Netflix Downloads, Episode 1</a></li><li><a href="https://netflixtechblog.com/scaling-event-sourcing-for-netflix-downloads-episode-2-ce1b54d46eec">Scaling Event Sourcing for Netflix Downloads, Episode 2</a></li><li><a href="https://netflixtechblog.com/high-quality-video-encoding-at-scale-d159db052746">High Quality Video Encoding at Scale</a></li><li><a href="https://netflixtechblog.com/scaling-time-series-data-storage-part-i-ec2b6d44ba39">Scaling Time Series Data Storage — Part I</a></li><li><a href="https://netflixtechblog.com/scaling-time-series-data-storage-part-ii-d67939655586">Scaling Time Series Data Storage — Part II</a></li><li><a href="https://netflixtechblog.com/data-compression-for-large-scale-streaming-experimentation-c20bfab8b9ce">Data Compression for Large-Scale Streaming Experimentation</a></li></ul><p>Architecuture of other products</p><ul><li><a href="https://netflixtechblog.com/the-netflix-media-database-nmdb-9bf8e6d0944d">The Netflix Media Database</a></li><li><a href="https://netflixtechblog.com/modernizing-the-web-playback-ui-1ad2f184a5a0">Modernizing the Web Playback UI</a></li><li><a href="https://netflixtechblog.com/building-a-cross-platform-in-app-messaging-orchestration-service-86ba614f92d8">Building a Cross-platform In-app Messaging Orchestration Service</a></li><li><a href="https://netflixtechblog.com/building-a-rule-based-platform-to-manage-netflix-membership-skus-at-scale-e3c0f82aa7bc">Building a Rule-Based Platform to Manage Netflix Membership SKUs at Scale</a></li><li><a href="https://netflixtechblog.com/growth-engineering-at-netflix-creating-a-scalable-offers-platform-69330136dd87">Creating a Scalable Offers Platform</a></li></ul><p>Common Infrastructure</p><ul><li><a href="https://netflixtechblog.com/edge-authentication-and-token-agnostic-identity-propagation-514e47e0b602">Netflix Edge Authentication &amp; Identity</a></li><li><a href="https://netflixtechblog.com/keystone-real-time-stream-processing-platform-a3ee651812a">Keystone Real-time Stream Processing Platform</a></li><li><a href="https://netflixtechblog.com/netflix-edge-load-balancing-695308b5548c">Rethinking Netflix’s Edge Load Balancing</a></li><li><a href="https://netflixtechblog.com/caching-for-a-global-netflix-7bcc457012f1">Caching for a Global Netflix</a></li><li><a href="https://netflixtechblog.com/cache-warming-agility-for-a-stateful-service-2d3b1da82642">Cache warming: Agility for a stateful service</a></li><li><a href="https://netflixtechblog.com/distributed-delay-queues-based-on-dynomite-6b31eca37fbc">Distributed delay queues based on Dynomite</a></li><li><a href="https://netflixtechblog.com/scalable-logging-and-tracking-882bde0ddca2">Scalable Logging and Tracking</a></li></ul><p>Recommendation Engine</p><ul><li><a href="https://netflixtechblog.com/recommending-for-the-world-8da8cbcf051b">Recommending for the World. #AlgorithmsEverywhere</a></li><li><a href="https://netflixtechblog.com/netflix-recommendations-beyond-the-5-stars-part-1-55838468f429">Netflix Recommendations: Beyond the 5 stars (Part 1)</a></li><li><a href="https://netflixtechblog.com/netflix-recommendations-beyond-the-5-stars-part-2-d9b96aa399f5">Netflix Recommendations: Beyond the 5 stars (Part 2)</a></li><li><a href="https://netflixtechblog.com/learning-a-personalized-homepage-aa8ec670359a">Learning a Personalized Homepage</a></li><li><a href="https://netflixtechblog.com/artwork-personalization-c589f074ad76">Artwork Personalization at Netflix</a></li><li><a href="https://netflixtechblog.com/extracting-image-metadata-at-scale-c89c60a2b9d2">Extracting image metadata at scale</a></li></ul><h3>Uber Engineering Blog</h3><p>Link: <a href="https://eng.uber.com/">Uber Engineering Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://eng.uber.com/new-rider-app-architecture/">Engineering the Architecture Behind Uber’s New Rider App</a></li><li><a href="https://eng.uber.com/real-time-push-platform/">Uber’s Real-Time Push Platform</a></li><li><a href="https://eng.uber.com/payments-platform/">Engineering Uber’s Next-Gen Payments Platform</a></li><li><a href="https://eng.uber.com/service-oriented-architecture/">Service-Oriented Architecture</a></li><li><a href="https://eng.uber.com/building-tincup-microservice-implementation/">Rewriting Uber Engineering: The Opportunities Microservices Provide</a></li><li><a href="https://eng.uber.com/multitenancy-microservice-architecture/">Why We Leverage Multi-tenancy in Uber’s Microservice Architecture</a></li><li><a href="https://eng.uber.com/microservice-architecture/">Introducing Domain-Oriented Microservice Architecture</a></li><li><a href="https://eng.uber.com/architecture-api-gateway/">The Architecture of Uber’s API gateway</a></li></ul><h3>Airbnb Engineering Blog</h3><p>Link: <a href="https://medium.com/airbnb-engineering/airbnb-engineering-infrastructure/home">Infrastructure at Airbnb</a></p><p>Recommended Links:</p><ul><li><a href="https://medium.com/airbnb-engineering/building-services-at-airbnb-part-1-c4c1d8fa811b">Building Services at Airbnb, Part 1</a></li><li><a href="https://medium.com/airbnb-engineering/building-services-at-airbnb-part-2-142be1c5d506">Building Services at Airbnb, Part 2</a></li><li><a href="https://medium.com/airbnb-engineering/building-services-at-airbnb-part-3-ac6d4972fc2d">Building Services at Airbnb, Part 3</a></li><li><a href="https://medium.com/airbnb-engineering/building-services-at-airbnb-part-4-23c95e428064">Building Services at Airbnb, Part 4</a></li><li><a href="https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bb">Avoiding Double Payments in a Distributed Payments System</a></li><li><a href="https://medium.com/airbnb-engineering/measuring-transactional-integrity-in-airbnbs-distributed-payment-ecosystem-a670d6926d22">Measuring Transactional Integrity in Airbnb’s Distributed Payment Ecosystem</a></li><li><a href="https://medium.com/airbnb-engineering/airbnbs-promotions-and-communications-platform-6266f1ffe2bd">Airbnb’s Promotions and Communications Platform</a></li><li><a href="https://medium.com/airbnb-engineering/himeji-a-scalable-centralized-system-for-authorization-at-airbnb-341664924574">Himeji: a scalable centralized system for authorization at Airbnb</a></li><li><a href="https://medium.com/airbnb-engineering/dynein-building-a-distributed-delayed-job-queueing-system-93ab10f05f99">Dynein: Building an Open-source Distributed Delayed Job Queueing System</a></li><li><a href="https://medium.com/airbnb-engineering/scaling-knowledge-access-and-retrieval-at-airbnb-665b6ba21e95">Scaling Knowledge Access and Retrieval at Airbnb</a></li></ul><h3>Hotstar Tech Blog</h3><p>Hotstar has one of the top tech blogs in India.</p><p>Link: <a href="https://blog.hotstar.com/">Hotstar Tech Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://blog.hotstar.com/scaling-the-hotstar-platform-for-50m-a7f96a019add">Scaling the Hotstar Platform for 50M</a></li><li><a href="https://blog.hotstar.com/re-architecting-apps-for-scale-d4639b91e0c3">Re-Architecting Apps For Scale</a></li><li><a href="https://blog.hotstar.com/monitoring-at-scale-2021-d508cf0c4da8">Service Monitoring Patterns</a></li><li><a href="https://blog.hotstar.com/capturing-a-billion-emojis-62114cc0b440">Capturing A Billion Emo(j)i-ons</a></li><li><a href="https://blog.hotstar.com/scaling-subscriptions-cache-for-cash-4c5836bd6a6f">Scaling Subscriptions : Cache for Cash</a></li><li><a href="https://blog.hotstar.com/millons-scale-simulations-1602befe1ce5">“Millons scale” simulations</a></li><li><a href="https://blog.hotstar.com/t-for-tsunami-dealing-with-traffic-spikes-c22443bcdd3e">T For Tsunami : Dealing with traffic spikes</a></li><li><a href="https://blog.hotstar.com/ingesting-data-at-bharat-scale-36615cbb4294">Ingesting data at “Bharat” Scale</a></li><li><a href="https://blog.hotstar.com/data-democratisation-hotstar-93ebfb1e688d">Data Democratisation @ Hotstar</a></li><li><a href="https://blog.hotstar.com/building-pubsub-for-50m-concurrent-socket-connections-5506e3c3dabf">Building Pubsub for 50M concurrent socket connections</a></li><li><a href="https://blog.hotstar.com/artwork-personalised-5c9cdd5cf42b">Read about our experiments with localised and personalised artwork.</a></li><li><a href="https://www.youtube.com/watch?v=OKl6MnJkrDc">Engineering for 1,000,000 requests per second using Golang</a></li><li><a href="https://www.youtube.com/watch?v=yeNTdAYdfzI">Building a scalable data platform at Hotstar</a></li></ul><h3>Myntra Engineering Blog</h3><p>Myntra has been at the forefront of innovation in the e-commerce space in India. Their engineering blog provides a lot of insights regarding the same.</p><p>Link: <a href="https://medium.com/myntra-engineering">Myntra Engineering</a></p><p>Recommended Links:</p><ul><li><a href="https://medium.com/myntra-engineering/how-to-build-a-technology-platform-5d0b0fc92af1">How to build a technology platform</a></li><li><a href="https://medium.com/myntra-engineering/decoding-user-search-queries-398aeac7d01d">Decoding user queries in E-Commerce</a></li><li><a href="https://medium.com/myntra-engineering/adaptive-throttling-of-indexing-for-improved-query-responsiveness-b3ac949e76c9">Adaptive Throttling of Indexing for Improved Query Responsiveness</a></li><li><a href="https://medium.com/myntra-engineering/real-time-context-based-smart-type-ahead-suggestions-316ac7a25107">Real-time context-based smart type-ahead suggestions</a></li><li><a href="https://medium.com/myntra-engineering/semantic-search-innovation-at-scale-c77ed4412567">Semantic Search — Innovation at scale!</a></li><li><a href="https://medium.com/myntra-engineering/discount-offers-using-dynamic-programming-ba383098c628">Discount offers using Dynamic Programming?</a></li><li><a href="https://medium.com/myntra-engineering/vulcan-inventory-redistribution-at-myntra-e8b6c9131bee">Vulcan: Inventory Redistribution at Myntra</a></li><li><a href="https://medium.com/myntra-engineering/myntra-scheduler-service-a0153a04526c">Myntra Scheduler Service -Fault-tolerant, horizontally scalable managed scheduler service</a></li><li><a href="https://medium.com/myntra-engineering/meterial-b442f539de33">Realtime Big Data Ingestion with Meterial</a></li></ul><h3>Swiggy Tech Blog</h3><p>Link: <a href="https://bytes.swiggy.com/">Swiggy Bytes</a></p><p>Recommended Links:</p><ul><li><a href="https://bytes.swiggy.com/engineering-challenges-at-swiggy-430dea6c86a3">A brief introduction to Engineering challenges at Swiggy</a></li><li><a href="https://bytes.swiggy.com/re-architecting-swiggys-logistics-systems-ddf301a29fa0">Re-Architecting Swiggy’s logistics systems</a></li><li><a href="https://bytes.swiggy.com/what-serviceability-means-at-swiggy-c94c1aad352a">What Serviceability means at Swiggy?</a></li><li><a href="https://bytes.swiggy.com/the-swiggy-delivery-challenge-part-one-6a2abb4f82f6">The Swiggy Delivery Challenge (Part One)</a></li><li><a href="https://bytes.swiggy.com/the-swiggy-delivery-challenge-part-two-f095930816e3">The Swiggy Delivery Challenge (Part Two)</a></li><li><a href="https://bytes.swiggy.com/designing-the-serviceability-platform-at-swiggy-for-high-scale-part-1-751a631f0379">Designing the Serviceability Platform at Swiggy for High Scale — Part 1</a></li><li><a href="https://bytes.swiggy.com/building-blocks-of-swiggy-stores-from-food-delivery-to-a-hyper-local-marketplace-brief-tech-b8c40b1f4509">Building Blocks of Swiggy Stores — From Food Delivery to a Hyper-Local Marketplace</a></li><li><a href="https://bytes.swiggy.com/swiggy-distance-service-9868dcf613f4">Swiggy Distance Service</a></li><li><a href="https://bytes.swiggy.com/kabootar-swiggys-communication-platform-e5a43cc25629">Kabootar — Swiggy’s Communication Platform</a></li><li><a href="https://bytes.swiggy.com/swiggylytics-5046978965dc">Swiggylytics: Swiggy’s real-time Analytics SDK</a></li><li><a href="https://bytes.swiggy.com/evolution-of-and-experiments-with-feed-ranking-at-swiggy-17204769e79f">Evolution of and experiments with feed ranking at Swiggy</a></li><li><a href="https://bytes.swiggy.com/chatbots-at-swiggy-6299116f9e69">Chatbots at Swiggy</a></li><li><a href="https://bytes.swiggy.com/how-to-identify-and-quantify-consumer-love-to-drive-business-outcomes-b82a844634c7">How to identify and quantify ‘Consumer Love’ to drive business outcomes?</a></li><li><a href="https://bytes.swiggy.com/personalizing-swiggy-pop-recommendations-d434b6f555f9">Personalizing Swiggy POP Recommendations</a></li><li><a href="https://bytes.swiggy.com/running-geo-queries-at-scale-adea70f5af45">Running Geo Queries At Scale</a></li></ul><h3>Flipkart Tech Blog</h3><p>Link: <a href="https://tech.flipkart.com/">Flipkart Tech Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://www.youtube.com/watch?v=wCZHnITtdEo">Scaling and building platform resilience</a></li><li><a href="https://vimeo.com/71766587">Latency and Fault tolerance in OLTP @ 1.5 billion/day service calls</a></li><li><a href="https://hasgeek.com/fifthelephant/2018/sub/scaling-write-heavy-oltp-systems-with-strong-data-HtFnXZaYhVYxoJmQrh6DMR">Scaling write-heavy OLTP systems with strong data guarantees</a></li><li><a href="https://blog.flipkart.tech/lego-building-blocks-to-model-supply-chain-workflows-slashn-2018-f55f4e39d84">Lego Building Blocks To Model Supply Chain Workflows</a></li><li><a href="https://blog.flipkart.tech/overview-of-flipkart-data-platform-20c6d3e9a196">Flipkart Data Platform — India’s largest eCommerce Big Data Platform</a></li><li><a href="https://blog.flipkart.tech/services-fulfilment-cockpit-why-passengers-within-flipkarts-airport-never-miss-a-flight-693855697f45">Services Fulfilment Cockpit</a></li><li><a href="https://blog.flipkart.tech/foxtrot-event-analytics-at-scale-bdcdc75402dc">Foxtrot — Event Analytics At Scale</a></li><li><a href="https://blog.flipkart.tech/proxies-for-resilience-and-fault-tolerance-in-distributed-soa-8a849bcf4873">Proxies for resilience and fault tolerance in distributed SOA</a></li><li><a href="https://blog.flipkart.tech/making-deliveries-faster-the-flipkart-cache-cluster-953659c06a3a">Making deliveries faster — The Flipkart Cache Cluster</a></li><li><a href="https://blog.flipkart.tech/choosing-a-datastore-for-the-flipkart-user-engagement-platform-f9a00c54593b">Choosing a datastore for the Flipkart User Engagement Platform</a></li><li><a href="https://blog.flipkart.tech/predicting-your-next-query-even-before-you-type-83487a34109d">Predicting your next query even before you type!</a></li><li><a href="https://blog.flipkart.tech/building-personalized-autosuggestion-9e705d5bf5f8">Building Personalized Autosuggestion in Flipkart</a></li><li><a href="https://blog.flipkart.tech/whats-in-a-query-slashn-2018-31bd171ed47f">What’s in a Query?</a></li><li><a href="https://blog.flipkart.tech/adapting-search-to-indian-phonetics-cdbe65259686">Adapting Search to Indian Phonetics</a></li><li><a href="https://blog.flipkart.tech/just-in-time-personalization-slasnn-2018-56c57e909107">Just in Time Personalization</a></li><li><a href="https://blog.flipkart.tech/introducing-aspect-ratings-reviews-93875da9481a">Aspect Ratings &amp; Reviews</a></li><li><a href="https://blog.flipkart.tech/the-future-of-voice-powered-shopping-in-the-land-of-language-db50c99edd77">Conversational Assistant Platform- changing the way India shops online</a></li></ul><h3>Gojek Tech Blog</h3><p>Link: <a href="https://www.gojek.io/blog">Gojek Tech Blog</a></p><p>Recommended Link:</p><ul><li><a href="https://www.gojek.io/blog/how-we-define-speed-execution-and-scale">How we define speed, execution and scale</a></li><li><a href="https://www.gojek.io/blog/why-we-swear-by-the-rca">Why We Swear by the RCA</a></li><li><a href="https://www.gojek.io/blog/resiliency-in-distributed-systems">Resiliency in Distributed Systems</a></li><li><a href="https://www.gojek.io/blog/how-to-build-resilience-in-large-scale-distributed-systems">How to build Resilience in large scale Distributed Systems</a></li><li><a href="https://www.gojek.io/blog/how-go-jek-handles-microservices-communication-at-scale">How GO-JEK handles microservices communication at scale</a></li><li><a href="https://www.gojek.io/blog/applying-the-single-responsibility-principle-to-microservices">Applying the Single Responsibility Principle to Microservices</a></li><li><a href="https://www.gojek.io/blog/reducing-latency-with-sidecar">Reducing Latency with Sidecar</a></li><li><a href="https://www.gojek.io/blog/data-infrastructure-at-go-jek">Data infrastructure at GO-JEK</a></li><li><a href="https://www.gojek.io/blog/the-journey-to-our-new-authentication-system">The Journey to Our New Authentication System</a></li><li><a href="https://www.gojek.io/blog/how-we-manage-a-million-push-notifications-an-hour">How We Manage a Million Push Notifications an Hour</a></li><li><a href="https://www.gojek.io/blog/on-concurrency-control-in-databases">On Concurrency Control in Databases</a></li><li><a href="https://www.gojek.io/blog/how-we-built-barito-to-enhance-logging">How we built ‘BARITO’ to enhance logging</a></li><li><a href="https://www.gojek.io/blog/fronting-an-armoured-car-for-kafka-ingestion">Fronting : An Armoured Car for Kafka Ingestion</a></li><li><a href="https://www.gojek.io/blog/how-to-unlock-the-full-potential-of-kafka-producers">How to Unlock the Full Potential of Kafka Producers</a></li><li><a href="https://www.gojek.io/blog/how-we-built-global-search-to-improve-discovery">How we built ‘Global Search’ to improve discovery</a></li><li><a href="https://www.gojek.io/blog/hospital-our-automated-solution-for-system-failures">Hospital — Our Automated Solution for System Failures</a></li><li><a href="https://www.gojek.io/blog/how-we-supercharged-chat">How We Supercharged Chat</a></li><li><a href="https://www.gojek.io/blog/introducing-go-jeks-card-personalization-engine-project-shuffle">Introducing GO-JEK’s card personalization engine: Project shuffle</a></li><li><a href="https://www.gojek.io/blog/how-we-built-a-matchmaking-algorithm-to-cross-sell-products">How We Built a Matchmaking Algorithm to Cross-Sell Products</a></li></ul><h3>Grab Tech Blog</h3><p>Link: <a href="https://engineering.grab.com/">Grab Tech</a></p><p>Recommended Links:</p><ul><li><a href="https://engineering.grab.com/designing-resilient-systems-part-1">Designing Resilient Systems: Circuit Breakers or Retries? (Part 1)</a></li><li><a href="https://engineering.grab.com/designing-resilient-systems-part-2">Designing Resilient Systems: Circuit Breakers or Retries? (Part 2)</a></li><li><a href="https://engineering.grab.com/beyond-retries-part-1">Designing Resilient Systems Beyond Retries (Part 1): Rate-Limiting</a></li><li><a href="https://engineering.grab.com/beyond-retries-part-2">Designing Resilient Systems Beyond Retries (Part 2): Bulkheading, Load Balancing, and Fallbacks</a></li><li><a href="https://engineering.grab.com/beyond-retries-part-3">Designing Resilient Systems Beyond Retries (Part 3): Architecture Patterns and Chaos Engineering</a></li><li><a href="https://engineering.grab.com/preventing-app-performance-degradation-due-to-sudden-ride-demand-spikes">How We Prevented App Performance Degradation from Sudden Ride Demand Spikes</a></li><li><a href="https://engineering.grab.com/how-we-scaled-our-cache-and-got-a-good-nights-sleep">How We Scaled Our Cache and Got a Good Night’s Sleep</a></li><li><a href="https://engineering.grab.com/scaling-like-a-boss-with-presto">Scaling Like a Boss with Presto</a></li><li><a href="https://engineering.grab.com/mirror-cache-blog">Serving Driver-partners Data at Scale Using Mirror Cache</a></li><li><a href="https://engineering.grab.com/pharos-searching-nearby-drivers-on-road-network-at-scale">Pharos — Searching Nearby Drivers on Road Network at Scale</a></li><li><a href="https://engineering.grab.com/customer-support-workforce-routing">Customer Support Workforce Routing</a></li><li><a href="https://engineering.grab.com/how-we-built-our-in-house-chat-platform-for-the-web">How We Built Our In-house Chat Platform for the Web</a></li><li><a href="https://engineering.grab.com/data-first-sla-always">Data First, SLA Always</a></li><li><a href="https://engineering.grab.com/data-ingestion-transformation-product-insights">How We Simplified Our Data Ingestion &amp; Transformation Process</a></li><li><a href="https://engineering.grab.com/trident-real-time-event-processing-at-scale">Trident — Real-time Event Processing at Scale</a></li><li><a href="https://engineering.grab.com/experimentation-platform-data-pipeline">A Lean and Scalable Data Pipeline to Capture Large Scale Events and Support Experimentation Platform</a></li><li><a href="https://engineering.grab.com/how-built-logging-stack">How We Built a Logging Stack at Grab Problem</a></li><li><a href="https://engineering.grab.com/structured-logging">Structured Logging: The Best Friend You’ll Want When Things Go Wrong</a></li><li><a href="https://engineering.grab.com/optimally-scaling-kafka-consumer-applications">Optimally Scaling Kafka Consumer Applications</a></li><li><a href="https://engineering.grab.com/plumbing-at-scale">Plumbing At Scale</a></li><li><a href="https://engineering.grab.com/griffin">Griffin, an Anti-fraud Risk Rule Engine Making Billions of Predictions Daily</a></li><li><a href="https://engineering.grab.com/building-grab-s-experimentation-platform">Building Grab’s Experimentation Platform</a></li><li><a href="https://engineering.grab.com/feature-toggles-ab-testing">Reliable and Scalable Feature Toggles and A/B Testing SDK at Grab</a></li><li><a href="https://engineering.grab.com/chaos-engineering">Orchestrating Chaos Using Grab’s Experimentation Platform</a></li><li><a href="https://engineering.grab.com/round-robin-in-distributed-systems">Round-robin in Distributed Systems</a></li><li><a href="https://engineering.grab.com/grab-you-some-post-mortem-reports">Grab You Some Post-Mortem Reports</a></li><li><a href="https://engineering.grab.com/introducing-grab-kit">Introducing Grab-Kit: Distributed Service Design at Grab</a></li></ul><h3>Discord Engineering Blog</h3><p>Link: <a href="https://blog.discord.com/engineering-posts/home">Discord Engineering Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://blog.discord.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7">How Discord Stores Billions of Messages</a></li><li><a href="https://blog.discord.com/how-discord-indexes-billions-of-messages-e3d5e9be866f">How Discord Indexes Billions of Messages</a></li><li><a href="https://blog.discord.com/how-discord-handles-two-and-half-million-concurrent-voice-users-using-webrtc-ce01c3187429">How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC</a></li><li><a href="https://blog.discord.com/scaling-elixir-f9b8e1e7c29b">How Discord Scaled Elixir to 5,000,000 Concurrent Users</a></li><li><a href="https://blog.discord.com/how-discord-resizes-150-million-images-every-day-with-go-and-c-c9e98731c65d">How Discord Resizes 150 Million Images Every Day with Go and C++</a></li><li><a href="https://blog.discord.com/how-discord-handles-push-request-bursts-of-over-a-million-per-minute-with-elixirs-genstage-8f899f0221b4">How Discord handles push request bursts of over a million per minute with Elixir’s GenStage</a></li></ul><h3>Twitter Engineering Blog</h3><p>Recommended Links:</p><ul><li><a href="https://www.youtube.com/watch?v=z8LU0Cj6BOU">Operations at Twitter: Scaling Beyond 100 Million Users</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2017/the-infrastructure-behind-twitter-scale.html">Twitter The Infrastructure Behind Twitter: Scale</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2016/the-infrastructure-behind-twitter-efficiency-and-optimization.html">The infrastructure behind Twitter: efficiency and optimization</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/expand-the-edge.html">#ExpandTheEdge: Making Twitter Faster</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/rebuild_twitter_public_api_2020.html">Rebuilding Twitter’s public API</a></li><li><a href="https://blog.twitter.com/engineering/en_us/a/2013/new-tweets-per-second-record-and-how.html">Twitter: New Tweets per second record, and how!</a></li><li><a href="https://github.com/twitter-archive/snowflake/blob/b3f6a3c6ca8e1b6847baa6ff42bf72201e2c2231/README.mkd">Snowflake — Unique UUID</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/building-twitters-ad-platform-architecture-for-the-future.html">Building Twitter’s ad platform architecture for the future</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/how_we_fortified_twitters_real_time_ad_spend_architecture.html">How we fortified Twitter’s real time ad spend architecture</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2021/storing-and-retrieving-millions-of-ad-impressions-per-second.html">Storing and retrieving millions of ad impressions per second at Twitter</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2021/sharding-simplification-and-twitters-ads-serving-platform.html">Sharding, simplification, and Twitter’s ads serving platform</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/streaming-logging-pipeline-of-home-timeline-prediction-system.html">Twitter: Streaming logging pipeline of Home timeline prediction system</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/daperture-load-balancer.html">Deterministic Aperture: A distributed, load balancing algorithm</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/metricsdb.html">Twitter MetricsDB: TimeSeries Database for storing metrics at Twitter</a></li><li><a href="https://blog.twitter.com/engineering/en_us/a/2010/introducing-flockdb.html">“Introducing FlockDB | Twitter Blogs.” Introducing FlockDB</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/insights/2018/twitters-kafka-adoption-story.html">Twitter’s Kafka adoption story</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/kafka-as-a-storage-system.html">Kafka as a storage system (blog.twitter.com)</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/dynamic-configuration-at-twitter.html">Dynamic configuration at Twitter</a></li><li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2015/building-distributedlog-twitter-s-high-performance-replicated-log-servic.html">Building DistributedLog: High-performance replicated log service</a></li></ul><h3>Instagram Engineering Blog</h3><p>Link: <a href="https://instagram-engineering.com/">Instagram Engineering</a></p><p>Recommended Links:</p><ul><li><a href="https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2ad">What Powers Instagram: Hundreds of Instances, Dozens of Technologies</a></li><li><a href="https://instagram-engineering.com/making-instagram-com-faster-part-1-62cc0c327538">Making Instagram.com faster: Part 1</a></li><li><a href="https://instagram-engineering.com/making-instagram-com-faster-part-2-f350c8fba0d4">Making Instagram.com faster: Part 2</a></li><li><a href="https://instagram-engineering.com/making-instagram-com-faster-part-3-cache-first-6f3f130b9669">Making Instagram.com faster: Part 3 — cache first</a></li><li><a href="https://instagram-engineering.com/making-instagram-com-faster-code-size-and-execution-optimizations-part-4-57668be796a8">Making instagram.com faster: Code size and execution optimizations (Part 4)</a></li><li><a href="https://instagram-engineering.com/search-architecture-eeb34a936d3a">Search Architecture at Instagram</a></li><li><a href="https://instagram-engineering.com/improving-instagrams-music-audio-quality-284e555102e9">Improving Instagram’s Music Audio Quality</a></li><li><a href="https://instagram-engineering.com/making-direct-messages-reliable-and-fast-a152bdfd697f">Making Direct Messages Reliable and Fast | by Tommy Crush</a></li><li><a href="https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c">Sharding &amp; IDs at Instagram</a></li><li><a href="https://instagram-engineering.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c">Instagram: Storing hundreds of millions of simple key-value pairs in Redis</a></li></ul><h3>Facebook, Whatsapp and YouTube</h3><p>Recommended Links:</p><ul><li><a href="https://youtu.be/UH7wkvcf0ys">Facebook and memcached — Mark Zuckerberg</a></li><li><a href="https://youtu.be/cSNGGAKJqwk">The Storage Technologies Behind Facebook Messages</a></li><li><a href="https://youtu.be/5hUmdoMOrpo">Messaging architecture at Facebook</a></li><li><a href="https://youtu.be/ODkEWsO5I30">Building Real Time Infrastructure at Facebook</a></li><li><a href="https://vimeo.com/44312354">Scaling to Millions of Simultaneous Connections</a></li><li><a href="https://developers.facebook.com/videos/f8-2016/a-look-at-whatsapp-engineering-for-success-at-scale/">A Look at WhatsApp: Engineering for Success at Scale</a></li><li><a href="https://developers.facebook.com/videos/f8-2017/how-whatsapp-reduced-spam-for-over-1-billion-people/">How WhatsApp Reduced Spam for Over 1 Billion People</a></li><li><a href="https://www.youtube.com/watch?v=ZW5_eEKEC28">YouTube Scalability</a></li></ul><h3>LinkedIn Engineering Blog</h3><p>Link: <a href="https://engineering.linkedin.com/blog/">LinkedIn Engineering Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://engineering.linkedin.com/blog/2019/an-inside-look-at-linkedins-data-pipeline-monitoring-system-">An inside look at LinkedIn’s data pipeline monitoring system</a></li><li><a href="https://engineering.linkedin.com/blog/2020/introducing-insearch">Related story InSearch: LinkedIn’s new message search platform</a></li><li><a href="https://engineering.linkedin.com/blog/2020/designing-our-new-messaging-system">Rebuilding messaging: How we designed our new system</a></li><li><a href="https://engineering.linkedin.com/blog/2020/bootstrapping-our-new-messaging-platform">Rebuilding messaging: How we bootstrapped our platform</a></li><li><a href="https://engineering.linkedin.com/blog/2020/building-for-extensibility">Rebuilding messaging: How we built for extensibility</a></li><li><a href="https://engineering.linkedin.com/blog/2021/building-a-more-intuitive-and-streamlined-search-experience">Building a more intuitive and streamlined search experience</a></li></ul><h3>Pinterest Engineering Blog</h3><p>Link: <a href="https://medium.com/pinterest-engineering">Pinterest Engineering Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://www.youtube.com/watch?v=dSk-SWLJ2g0">Scaling Pinterest</a></li><li><a href="https://medium.com/pinterest-engineering/building-a-smarter-home-feed-ad1918fdfbe3">Building a smarter home feed</a></li><li><a href="https://medium.com/pinterest-engineering/building-a-scalable-and-available-home-feed-6a343766bb6">Building a scalable and available home feed</a></li><li><a href="https://medium.com/pinterest-engineering/geo-blocking-media-content-at-pinterest-ea11c8f8c2b7">Geo-blocking media content on Pinterest</a></li><li><a href="https://medium.com/pinterest-engineering/optimizing-video-playback-performance-caf55ce310d1">Optimizing video playback performance</a></li><li><a href="https://medium.com/pinterest-engineering/rebuilding-the-user-typeahead-9c5bf9723173">Rebuilding the user typeahead</a></li><li><a href="https://medium.com/pinterest-engineering/improving-search-relevance-and-engagement-with-text-attributes-452047853967">Improving search relevance and engagement with text attributes</a></li><li><a href="https://medium.com/pinterest-engineering/manas-a-high-performing-customized-search-system-cf189f6ca40f">Manas: A high performing customized search system</a></li><li><a href="https://medium.com/pinterest-engineering/manas-realtime-enabling-changes-to-be-searchable-in-a-blink-of-an-eye-36acc3506843">Manas Realtime — Enabling changes to be searchable in a blink of an eye</a></li><li><a href="https://medium.com/pinterest-engineering/building-a-real-time-user-action-counting-system-for-ads-88a60d9c9a">Building a real-time user action counting system for ads</a></li><li><a href="https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be">How Pinterest runs Kafka at scale</a></li><li><a href="https://medium.com/pinterest-engineering/optimizing-kafka-for-the-cloud-4e936643fde0">Optimizing Kafka for the cloud. By Ambud Sharma | Software Engineer…</a></li><li><a href="https://medium.com/pinterest-engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754">Scalable and reliable data ingestion at Pinterest</a></li><li><a href="https://medium.com/pinterest-engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f">Sharding Pinterest: How we scaled our MySQL fleet</a></li><li><a href="https://medium.com/pinterest-engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181">Goku: Building a scalable and high performant time-series database system</a></li><li><a href="https://medium.com/pinterest-engineering/building-pinalytics-pinterests-data-analytics-engine-e14c651780ca">Building Pinalytics: Pinterest’s data analytics engine</a></li><li><a href="https://medium.com/pinterest-engineering/real-time-analytics-at-pinterest-1ef11fdb1099">Real-time analytics at Pinterest</a></li></ul><h3>Dropbox Engineering Blog</h3><p>Link: <a href="https://dropbox.tech/infrastructure">Infrastructure — Dropbox</a></p><p>Recommended Links:</p><ul><li><a href="https://www.youtube.com/watch?v=PE4gwstWhmc">How We’ve Scaled Dropbox</a></li><li><a href="https://dropbox.tech/infrastructure/streaming-file-synchronization">Streaming File Synchronization</a></li><li><a href="https://dropbox.tech/infrastructure/video-processing-at-dropbox">Video Processing at Dropbox</a></li><li><a href="https://dropbox.tech/infrastructure/firefly-instant-full-text-search-engine">Instant, Full-Text Search Engine for Dropbox</a></li><li><a href="https://dropbox.tech/infrastructure/improving-the-performance-of-full-text-search">Improving the performance of full-text search</a></li><li><a href="https://dropbox.tech/infrastructure/optimizing-web-servers-for-high-throughput-and-low-latency">Optimizing web servers for high throughput and low latency</a></li><li><a href="https://dropbox.tech/infrastructure/retrieving-thumbnails">Improving Dropbox Performance: Retrieving Thumbnails</a></li><li><a href="https://dropbox.tech/infrastructure/cross-shard-transactions-at-10-million-requests-per-second">Cross shard transactions at 10 million requests per second</a></li><li><a href="https://dropbox.tech/infrastructure/infrastructure-update-pushing-the-edges-of-our-global-performance">Pushing the edges of our global performance</a></li><li><a href="https://dropbox.tech/infrastructure/evolution-of-dropboxs-edge-network">Evolution of Dropbox’s Edge Network</a></li><li><a href="https://dropbox.tech/infrastructure/infrastructure-update-evolution-of-the-dropbox-backbone-network">Evolution of the Dropbox backbone network</a></li><li><a href="https://dropbox.tech/infrastructure/dropbox-traffic-infrastructure-edge-network">Dropbox traffic infrastructure: Edge network</a></li><li><a href="https://dropbox.tech/infrastructure/intelligent-dns-based-load-balancing-at-dropbox">Intelligent DNS based load balancing at Dropbox</a></li></ul><h3>Stripe Engineering Blog</h3><p>Link: <a href="https://stripe.com/blog/engineering">Stripe Engineering Blog</a></p><p>Recommended Links:</p><ul><li><a href="https://stripe.com/blog/idempotency">Designing robust and predictable APIs with idempotency</a></li><li><a href="https://stripe.com/blog/rate-limiters">Scaling your API with rate limiters</a></li><li><a href="https://stripe.com/blog/api-versioning">APIs as infrastructure: future-proofing Stripe with versioning</a></li></ul><h3>Other Engineering Blog</h3><p><a href="https://callistaenterprise.se/blogg/teknik/2020/09/19/multi-tenancy-with-spring-boot-part1/">Multi-tenancy with spring boot</a></p><p>I hope that you found this article to be extremely insightful. If you feel that I’ve missed some blog/article/video then do ping me.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3677d6013a1a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding Java Optional]]></title>
            <link>https://medium.com/whatfix-techblog/understanding-java-optional-12b3736c88ae?source=rss-3638c45af84b------2</link>
            <guid isPermaLink="false">https://medium.com/p/12b3736c88ae</guid>
            <category><![CDATA[clean-code]]></category>
            <category><![CDATA[optionals]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[design-patterns]]></category>
            <category><![CDATA[java]]></category>
            <dc:creator><![CDATA[anurag sharma]]></dc:creator>
            <pubDate>Sat, 19 Dec 2020 10:26:36 GMT</pubDate>
            <atom:updated>2020-12-21T07:11:09.726Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*dYOx4aFuzb50vJuv" /><figcaption>Photo by <a href="https://unsplash.com/@arnelhasanovic?utm_source=medium&amp;utm_medium=referral">Arnel Hasanovic</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Optional introduced in Java in version 8 is often misused. <strong>Eliminating nulls isn’t a goal of Optional.</strong></p><p>The primary design goal for Optional is to be used as the <strong>library method return value</strong> of functions when a return value might be absent. The intent is that the caller immediately checks the Optional and extract the actual value if it is present. If the value is absent, the caller can substitute a default value, throw an exception, or apply some other policy. This is typically done by chaining fluent method calls off the end of a stream pipeline (or other methods) that return Optional values.</p><p>Let us discuss where not to use optional:</p><h3>Places Not to Use Optional</h3><h4>Avoid using Optional in method parameters</h4><p>With an Optional parameter, you go from having 2 possible inputs: null and not-null, to three: null, non-null-without-value, and non-null-with-value. Add to that the fact that overloading has long been available to convey that some parameters are optional, and there&#39;s really no reason to have Optional parameters. Code analysis tools such as <a href="https://www.sonarqube.org/"><strong>SonarQube</strong></a><strong> and IntelliJ </strong>flag Optional in method parameters as a <strong>major code smell</strong>(<a href="https://rules.sonarsource.com/java/RSPEC-3553">RSPEC-3553</a>).</p><h4>Since the main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See <a href="http://mail.openjdk.java.net/pipermail/lambda-dev/2012-September/005952.html">this discussion</a>. This allows the caller to continue a chain of fluent method calls.</h4><p>Passing an optional argument to a method, this could be made to work, but it’s rather clumsy. Suppose you have a method that takes a string followed by an optional second string. Accepting an Optional as the second arg would result in code like this:</p><pre>foo(&quot;bar&quot;, Optional.of(&quot;baz&quot;));<br>foo(&quot;bar&quot;, Optional.empty());</pre><p>Even accepting null is nicer:</p><pre>foo(&quot;bar&quot;, &quot;baz&quot;);<br>foo(&quot;bar&quot;, null);</pre><p>Probably the best is to have an overloaded method that accepts a single string argument and provides a default for the second:</p><pre>foo(&quot;bar&quot;, &quot;baz&quot;);<br>foo(&quot;bar&quot;);</pre><p>This does have limitations, but it’s much nicer than either of the above.</p><h4>Avoid using Optional in fields</h4><p>Java Optional is also not recommended to be used as fields in POJOs. Java Optional is not serializable and if you really have a requirement of the optional field you can <strong>use nullable fields with getter returning Optional.</strong></p><h4>Avoid using Optional in collections</h4><p>Sometimes people want to put Optional into collections, like List&lt;Optional&lt;X&gt;&gt; or Map&lt;Key,Optional&lt;Value&gt;&gt;. This too is usually a bad idea. This may seem required to distinguish between the absence of the record and null record. It&#39;s often better to replace these usages of Optional with <a href="http://en.wikipedia.org/wiki/Null_Object_pattern">Null-Object</a> values (not actual null references), or simply to omit these entries from the collection entirely.</p><h3>Memory Footprint</h3><p>Optional is a box and consumes extra 16 bytes since it also adds one level of reference redirection it potentially adds to GC pressure and cache misses.</p><h3>Adapting Between Null and Optional</h3><p>Sometimes you need to adapt Optional-using code to code that wants null, <br>or vice-versa</p><p>• If you have a nullable reference and you need an Optional</p><pre>Optional&lt;T&gt; opt = Optional.ofNullable(ref)</pre><p>• If you have an Optional and you need a nullable reference</p><pre>opt.orElse(null)</pre><h3>Optional is not serializable</h3><p>Even though <a href="https://guava.dev/releases/23.0/api/docs/com/google/common/base/Optional.html">Guava Optional</a> is serializable, Java optional is not serializable by <a href="http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-September/003274.html">design</a>.</p><h3>Usage at Whatfix</h3><p>At <a href="https://whatfix.com/">Whatfix</a>, we use Optional as the <strong>library method return value</strong> of functions when a return value might be absent.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=12b3736c88ae" width="1" height="1" alt=""><hr><p><a href="https://medium.com/whatfix-techblog/understanding-java-optional-12b3736c88ae">Understanding Java Optional</a> was originally published in <a href="https://medium.com/whatfix-techblog">WhatfixEngineeringBlog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Generic Enterprise Application Integration Pipeline]]></title>
            <link>https://medium.com/whatfix-techblog/building-a-generic-enterprise-application-integration-pipeline-74f2e9a2aa80?source=rss-3638c45af84b------2</link>
            <guid isPermaLink="false">https://medium.com/p/74f2e9a2aa80</guid>
            <category><![CDATA[integration]]></category>
            <category><![CDATA[streaming]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[enterprise-application]]></category>
            <dc:creator><![CDATA[anurag sharma]]></dc:creator>
            <pubDate>Wed, 08 Apr 2020 18:46:22 GMT</pubDate>
            <atom:updated>2020-04-26T06:37:55.974Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/938/1*LI1hS6e6PL6AVUTe7z47CQ.jpeg" /><figcaption>One pipeline to rule them all</figcaption></figure><p>At <a href="https://whatfix.com/">Whatfix</a>, one of our solutions is to show context-aware and personalized help as an overlay on enterprise applications. Integrations with enterprise applications allow us to efficiently contextualize content for our users. Based on these integrations we are able to target information based on:</p><ul><li>User roles</li><li>Survey responses</li><li>User cohorts, etc.</li></ul><p>In this post, we will discuss the high-level design and the mental-model of our generic integration pipeline to connect to enterprise applications to support a variety of use cases including paginated APIs and asynchronous APIs etc.</p><h3>Integration Pipeline and Steps</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/711/1*4GRL8mIL0Mg03Qjt41y42A.png" /><figcaption>Simple integration pipeline</figcaption></figure><p>Each integration pipeline can have multiple steps. Integration steps are of two types:</p><ol><li><strong>REST Connector: </strong>to call REST APIs of a system. Typical configurations for this step are URL to call, the HTTP request method, authentication details, request payload etc.</li><li><strong>Transformation: </strong>to convert the response object of one generic REST connector into the request object of another generic REST connector using JavaScript.</li></ol><h3><strong>Complexities of the Real World</strong></h3><p>There are many use cases which may not be as simple as the three-step pipeline and require more steps.</p><h4>1. Pagination</h4><p>Real-world APIs may be paginated. Pagination itself can be of many types, such as:</p><ul><li><strong>Cursor based</strong></li><li><strong>Offset based</strong></li></ul><p>For more details of the pagination, you can read <a href="https://slack.engineering/evolving-api-pagination-at-slack-1c1f644f8e12">the evolution of pagination at slack</a>.</p><h4>2. Asynchronous APIs</h4><p>Systems with a large amount of data may optimize storage and compute by exposing APIs that may not return data instantaneously but the response contains a URL to poll for the status of the background job to fetch data. Once the job is complete, the job status call response contains the URL to be finally called to get data.</p><h4>3. APIs returning links to be called further</h4><p>Certain APIs return a list of URL links to be further called to get required data. In such cases, we need to iterate over the list of URLs and make calls to get the required data.</p><h3>Supporting Pagination, Async APIs and URL links in the Integration Pipeline</h3><p>To satisfy a wide variety of use cases with similar UX as of simple generic pipeline, we turbocharged our transformation step of the pipeline.</p><p>We defined two keywords <strong>nextLinks</strong> (a JavaScript array of objects) and<strong> data </strong>(a JavaScript object), which could be set in the transformation step.</p><p>We pick the <strong>nextLinks</strong> and run the previous REST Connector step again by taking the <strong>nextLinks</strong> as URL parameters. And <strong>data</strong> is always passed down further steps for processing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/643/1*SSikgqBQi5IXXV4GvBlBdg.png" /><figcaption>Turbocharged transformation step</figcaption></figure><p>The condition to break looping from the transformation step would be when <strong>nextLinks </strong>is null.</p><p>For Async APIs, the transformation step could look as follows:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/508/1*Ic5jGT1suX4sGApNBqi-dw.png" /></figure><h3>Next Steps</h3><p>Now that we are done with building a generic integration pipeline we are working to build specific connectors for different enterprise applications.</p><p><em>This is the work of the Data Integration team at Whatfix. Thanks to the Data Integration team and </em><a href="https://www.linkedin.com/in/nibu-thomas/"><em>Nibu Thomas</em></a><em> for the review.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=74f2e9a2aa80" width="1" height="1" alt=""><hr><p><a href="https://medium.com/whatfix-techblog/building-a-generic-enterprise-application-integration-pipeline-74f2e9a2aa80">Building a Generic Enterprise Application Integration Pipeline</a> was originally published in <a href="https://medium.com/whatfix-techblog">WhatfixEngineeringBlog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>