Moody developer with a penchant for making cutting remarks. Interested in the marvels of the universe #Ravenclaw #Tech #SJSU

Joined June 2014
Ashutosh retweeted
Iโ€™ve Read 20+ Books on Agentic AI - Here Are My Top 5 Recommendations for 2026 buff.ly/OcUxP6v
3
5
43
4,629
๐—–# ๐Ÿญ๐Ÿฐ ๐˜€๐—ต๐—ถ๐—ฝ๐—ฝ๐—ฒ๐—ฑ ๐˜„๐—ถ๐˜๐—ต ๐—ฒ๐—ถ๐—ด๐—ต๐˜ ๐—ฟ๐—ฒ๐—ฎ๐—น ๐—น๐—ฎ๐—ป๐—ด๐˜‚๐—ฎ๐—ด๐—ฒ ๐—ฐ๐—ต๐—ฎ๐—ป๐—ด๐—ฒ๐˜€. Runs on .NET 10, available now in Visual Studio 2026 or the .NET 10 SDK. Here's the full list: ๐—˜๐˜…๐˜๐—ฒ๐—ป๐˜€๐—ถ๐—ผ๐—ป ๐—บ๐—ฒ๐—บ๐—ฏ๐—ฒ๐—ฟ๐˜€ โ†’ Declare extension properties, static extension members, and operators, not just methods ๐—ง๐—ต๐—ฒ ๐—ณ๐—ถ๐—ฒ๐—น๐—ฑ ๐—ธ๐—ฒ๐˜†๐˜„๐—ผ๐—ฟ๐—ฑ โ†’ Reference a compiler-synthesized backing field right inside a property accessor; no manual field needed ๐—ก๐˜‚๐—น๐—น-๐—ฐ๐—ผ๐—ป๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป๐—ฎ๐—น ๐—ฎ๐˜€๐˜€๐—ถ๐—ด๐—ป๐—บ๐—ฒ๐—ป๐˜ โ†’ ?. and ?[] now work on the left side of an assignment; the right side never evaluates when the target is null ๐—ป๐—ฎ๐—บ๐—ฒ๐—ผ๐—ณ ๐˜„๐—ถ๐˜๐—ต ๐˜‚๐—ป๐—ฏ๐—ผ๐˜‚๐—ป๐—ฑ ๐—ด๐—ฒ๐—ป๐—ฒ๐—ฟ๐—ถ๐—ฐ๐˜€ โ†’ nameof(List<>) works directly, no more picking a throwaway type argument just to get the name ๐—œ๐—บ๐—ฝ๐—น๐—ถ๐—ฐ๐—ถ๐˜ ๐˜€๐—ฝ๐—ฎ๐—ป ๐—ฐ๐—ผ๐—ป๐˜ƒ๐—ฒ๐—ฟ๐˜€๐—ถ๐—ผ๐—ป๐˜€ โ†’ T[], Span, and ReadOnlySpan convert into each other automatically, including through extension method receivers ๐—Ÿ๐—ฎ๐—บ๐—ฏ๐—ฑ๐—ฎ ๐—ฝ๐—ฎ๐—ฟ๐—ฎ๐—บ๐—ฒ๐˜๐—ฒ๐—ฟ ๐—บ๐—ผ๐—ฑ๐—ถ๐—ณ๐—ถ๐—ฒ๐—ฟ๐˜€ โ†’ Add ref, out, in, or scoped to a lambda parameter without typing the whole parameter list ๐— ๐—ผ๐—ฟ๐—ฒ ๐—ฝ๐—ฎ๐—ฟ๐˜๐—ถ๐—ฎ๐—น ๐—บ๐—ฒ๐—บ๐—ฏ๐—ฒ๐—ฟ๐˜€ โ†’ Constructors and events can now split into a defining declaration and an implementing declaration, same as partial methods ๐—จ๐˜€๐—ฒ๐—ฟ-๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ๐—ฑ ๐—ฐ๐—ผ๐—บ๐—ฝ๐—ผ๐˜‚๐—ป๐—ฑ ๐—ฎ๐˜€๐˜€๐—ถ๐—ด๐—ป๐—บ๐—ฒ๐—ป๐˜ โ†’ Override += and friends to mutate a value in place, instead of always going through operator+ and allocating a new instance ๐Ÿ“Œ If you found it helpful, then you should join my weekly .NET newsletter with 10k+ engineers. Subscribe here โ†’ mwaseemzakir.com Repost โ™ป๏ธ would be appreciated #csharp #dotnet #dotnetcore #csharp14 #programming
1
19
79
2,264
๐—ช๐—ต๐—ฎ๐˜ ๐—”๐—ฟ๐—ฒ ๐——๐—ถ๐˜€๐˜๐—ฟ๐—ถ๐—ฏ๐˜‚๐˜๐—ฒ๐—ฑ ๐— ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต๐˜€? When we talk about monoliths over the past few years, we hear they are bad and have a negative connotation. One of the main reasons for this is that those monoliths are connected with legacy systems. The phrase "๐—บ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต" can suggest that the software for a whole system or application is contained in a container made to house several subsystems. Most or all the subsystems of an entire application or system are stored in the monolith container. It is referred to as ๐˜€๐—ฒ๐—น๐—ณ-๐—ฐ๐—ผ๐—ป๐˜๐—ฎ๐—ถ๐—ป๐—ฒ๐—ฑ ๐˜€๐—ถ๐—ป๐—ฐ๐—ฒ ๐—ฒ๐˜ƒ๐—ฒ๐—ฟ๐˜† ๐—ฐ๐—ผ๐—บ๐—ฝ๐—ผ๐—ป๐—ฒ๐—ป๐˜ ๐—ผ๐—ณ ๐˜๐—ต๐—ฒ ๐˜€๐˜†๐˜€๐˜๐—ฒ๐—บ ๐—ถ๐˜€ ๐—ต๐—ผ๐˜‚๐˜€๐—ฒ๐—ฑ ๐—ถ๐—ป ๐—ฎ ๐˜€๐—ถ๐—ป๐—ด๐—น๐—ฒ ๐—ฐ๐—ผ๐—ป๐˜๐—ฎ๐—ถ๐—ป๐—ฒ๐—ฟ. ๐—”๐—ฟ๐—ฒ ๐—บ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต๐˜€ ๐—ฏ๐—ฎ๐—ฑ? They are not. What is bad is their internal state during development over a long time usually. We can have architected monoliths that will fulfill all our use cases and request architecture attributes in the system without dealing with the complexity of microservice architecture. ๐—ง๐—ต๐—ฒ ๐—ฏ๐—ฒ๐˜€๐˜ ๐—ฒ๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ ๐—ผ๐—ณ ๐˜๐—ต๐—ถ๐˜€ ๐—ถ๐˜€ ๐—ฆ๐—ต๐—ผ๐—ฝ๐—ถ๐—ณ๐˜†, with over 3 million lines of code one of the largest monoliths in the world. Instead of rewriting its entire monolith as microservices, Shopify chose modularization as the solution. Also, monoliths can scale, they served 117 million requests per minute on app servers during Black Friday in 2025. There are three types of monoliths: ๐Ÿญ. ๐—ง๐—ฟ๐—ฎ๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป๐—ฎ๐—น ๐—บ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต๐˜€ These are the most common monolith types, where everything is bundled together. Usually, we have some user interface, business logic, and data access layers in a single tier and deployment. There are no clear boundaries between domains, and the code will have shared libraries. ๐Ÿฎ. ๐— ๐—ผ๐—ฑ๐˜‚๐—น๐—ฎ๐—ฟ ๐—บ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต๐˜€ With modular monoliths, we have defined clear functional slices and dependencies, meaning each module can be independent of the others. Yet, there will still be a single deployment unit and a single database. ๐Ÿฏ. ๐——๐—ถ๐˜€๐˜๐—ฟ๐—ถ๐—ฏ๐˜‚๐˜๐—ฒ๐—ฑ ๐—บ๐—ผ๐—ป๐—ผ๐—น๐—ถ๐˜๐—ต๐˜€ Here, we have one modern monolith variant (antipattern), where our system is deployed like a microservice architecture but built with monolith principles in mind. We usually get to this point while attempting to build a microservice architecture without considering some architectural and process changes needed. We know we have a distributed monolith when some services cannot be deployed separately, are chatty, cannot scale, and share the same data source.
19
14
86
4,580
System design is how large-scale applications get planned before theyโ€™re built. And in this course, youโ€™ll learn how to design scalable, reliable systems step by step. It covers APIs, databases, caching, and real-world architecture patterns. freecodecamp.org/news/learn-โ€ฆ
12
214
1
1,392
52,436
MCP just went stateless. And it makes so much sense.
13
34
248
13,861
Ashutosh retweeted
Different companies test different patterns. ๐Ÿ“Œ Use this company-wise DSA cheat sheet to focus on what actually matters for your target company. Need help mastering those topics? Here are the best free resources: Learn DSA โ€ข Striver A2Z takeuforward.org/strivers-a2โ€ฆ โ€ข NeetCode Roadmap neetcode.io/roadmap โ€ข CP-Algorithms cp-algorithms.com/ Visualize Algorithms โ€ข VisuAlgo visualgo.net/ โ€ข USFCA Algorithm Visualizer cs.usfca.edu/~galles/visualiโ€ฆ Practice โ€ข LeetCode leetcode.com/ โ€ข Codeforces codeforces.com/ โ€ข AtCoder atcoder.jp/ โ€ข CodeChef codechef.com/ Mock Interviews โ€ข Pramp pramp.com/ โ€ข Interviewing.io interviewing.io/ Patterns & Complexity โ€ข Big-O Cheat Sheet bigocheatsheet.com/ โ€ข AlgoMonster Flowchart algo.monster/flowchart Revision โ€ข Tech Interview Handbook techinterviewhandbook.org/ Study company-wise. Practice pattern-wise. Interview with confidence. Bookmark this.
8
43
2,253
this is f*cking gold a guy spent 6 weeks with no sleep building a personal AI agent from scratch, then wrote down all 100 things he learned not a chatbot wrapper. an assistant that manages tasks, tracks deals, reads emails, and flags things before you even ask. if I had this before I built my first agent, I would've skipped a month of trial and error in the right hands, this changes everything: โ†’ separate hard rules from guidelines โ†’ give your agent a name, a voice, a role โ†’ build a Capability and a Component Map โ†’ write a Constitution, not a system prompt And that's tip 5 out of 100. (All tips are dropped in the comments below) then read the full article below: โ†“
28
120
4
1,080
271,967
RIP toy projects. If your portfolio doesnโ€™t touch real business problems, youโ€™ll get filtered out. Here are 300+ real ML system case studies from top companies (free).
3
117
2
803
31,842
Many engineers miss critical real-world system design concepts, most notably idempotency, cache stampedes, and failure domains. Focusing only on high-level architecture means forgetting the messy operational edges where systems actually break down. Idempotency : Repeating a network request (like a payment click) should not repeat the side effect, but many APIs fail to use unique request tokens or tracking IDs. blog.bytebytego.com/p/masterโ€ฆ oneuptime.com/blog/post/2026โ€ฆ Stampede: When a popular cache key expires, a thousand concurrent requests miss the memory layer and slam the primary database all at once. medium.com/@rachoork/criticaโ€ฆ vergecloud.com/blog/what-is-โ€ฆ Failure Domains: People group servers or databases into separate logical units while keeping them in the exact same physical rack or availability zone power supply. github.com/keyvanakbary/learโ€ฆ Graceful Degradation: Designing what happens when a third-party microservice completely dies instead of letting the main application thread hang indefinitely. sreschool.com/blog/comprehenโ€ฆ
17
1
108
3,023
Traditional SDLC vs Agentic SDLC
9
40
1
160
15,556
System Desing- Event Driven Architecture & Messaging โ€“ Day 41 Why Message Queues? The Problem with Synchronous Communication Your application has grown into multiple microservices. A customer places an order. Your Order Service immediately calls: - Payment Service - Inventory Service - Email Service - Notification Service - Analytics Service Everything happens synchronously. Client โ”‚ Order Service โ”œโ”€โ”€โ–บ Payment โ”œโ”€โ”€โ–บ Inventory โ”œโ”€โ”€โ–บ Email โ”œโ”€โ”€โ–บ Notification โ””โ”€โ”€โ–บ Analytics Looks fine... Until one service becomes slow. Suppose the Email Service takes 5 seconds to respond. Now this happens: Order Service โ”‚ Waiting... โ”‚ Email Service The customer keeps waiting. Even though the payment was successful. One slow service delays the entire request. Now imagine the Email Service goes down. Order Service โ”‚ Email Service โœ– Should the customer be unable to place an order just because an email couldn't be sent? Of course not. This is where Message Queues come in. Instead of calling every service directly... The Order Service publishes a message. Order Created โ”‚ โ–ผ Message Queue Other services consume it independently. Message Queue / | \ โ–ผ โ–ผ โ–ผ Email Inventory Analytics Now: โœ” Customer receives a response immediately. โœ” Email can be sent later. โœ” Analytics can process independently. โœ” Inventory updates asynchronously. Why Message Queues? 1. Decoupling Services no longer depend on each other's response time. 2. Better Performance The client doesn't wait for every downstream operation. 3. Better Reliability If Email is temporarily unavailable: The message stays in the queue. It can be processed later. 4. Better Scalability Need more throughput? Add more consumers. Queue โ”‚ โ”œโ”€โ”€โ–บ Worker 1 โ”œโ”€โ”€โ–บ Worker 2 โ”œโ”€โ”€โ–บ Worker 3 Real Example When you order on Amazon: You immediately receive: "Order Placed Successfully" But behind the scenes... - Payment processing - Inventory updates - Shipping - Invoice generation - Recommendation updates - Email notifications don't all happen in a single synchronous request. Many of these tasks are handled asynchronously. Synchronous vs Queue-Based Synchronous Order โ”‚ Payment โ”‚ Inventory โ”‚ Email โ”‚ Notification One slow service affects the entire chain. Queue-Based Order โ”‚ Queue โ”œโ”€โ”€โ–บ Payment โ”œโ”€โ”€โ–บ Inventory โ”œโ”€โ”€โ–บ Email โ””โ”€โ”€โ–บ Analytics Each consumer works independently. Key Takeaway Message queues don't make systems faster by themselves. They make systems more resilient, scalable, and loosely coupled. Instead of waiting for every task to finish... Applications can acknowledge the request quickly and process non-critical work asynchronously. That's why almost every large-scale distributed system relies on messaging. Tomorrow we will compare the three most popular messaging systems: Kafka vs RabbitMQ vs ActiveMQ
5
30
189
5,539
The AI protocol stack in one list โ–ช๏ธ MCP โ–ช๏ธ A2A โ–ช๏ธ ACP โ–ช๏ธ AG-UI โ–ช๏ธ ANP โ–ช๏ธ LSP โ–ช๏ธ OpenAPI โ–ช๏ธ OAuth 2.0 โ–ช๏ธ OpenTelemetry AI โ–ช๏ธ JSON Schema โ–ช๏ธ JSON-RPC 2.0 Bookmark the list to keep it handy! Here is also a practical guide explaining all these protocols - what each one does, where it fits, and when to use it. Check it out โ†’ turingpost.com/p/ai-protocolโ€ฆ
11
151
6
687
29,288
Kubernetes Components explanation: ๐Ÿ“ฆ Pods โ†’ Where your application runs ๐Ÿ–ฅ๏ธ Nodes โ†’ Machines that host Pods ๐ŸŒ Cluster โ†’ Collection of Nodes managed together ๐Ÿ”„ Deployment โ†’ Ensures your application stays updated and available ๐Ÿ‘ฅ ReplicaSet โ†’ Maintains the desired number of Pods ๐Ÿ’พ StatefulSet โ†’ Designed for databases and stateful applications โš™๏ธ DaemonSet โ†’ Runs one Pod on every Node (great for monitoring/logging agents) โœ… Job & CronJob โ†’ One-time and scheduled tasks ๐ŸŒ Service โ†’ Gives Pods a stable network identity ๐Ÿšช Ingress โ†’ Routes external traffic to your applications ๐Ÿ” ConfigMap & Secret โ†’ Manage configuration and sensitive data securely ๐Ÿ’ฝ PV & PVC โ†’ Persistent storage for applications ๐Ÿท๏ธ Namespace โ†’ Organize workloads across teams or environments ๐Ÿค– Kubelet โ†’ Agent running on every Node ๐Ÿ”€ Kube-Proxy โ†’ Handles networking between services and Pods ๐ŸŽฏ Scheduler โ†’ Decides where Pods should run ๐Ÿง  API Server โ†’ The heart of Kubernetes communication โšก Controller Manager โ†’ Continuously keeps the cluster in its desired state ๐Ÿ’ก Think of Kubernetes like a city: ๐Ÿ™๏ธ Cluster = City ๐Ÿข Nodes = Buildings ๐Ÿ  Pods = Apartments ๐Ÿ‘จโ€๐Ÿ’ผ Deployment = Property Manager ๐Ÿšฆ Service = Reception Desk ๐Ÿ›ฃ๏ธ Ingress = Main Entrance Gate ๐Ÿ“ฆ PV/PVC = Storage Room
14
39
212
5,430
Backend Roadmap (Part 1/11): API Design ๐Ÿ“Œ APIs are the backbone of every modern application. Wrong API choice -> performance bottlenecks, scaling nightmares, unhappy developers. In this post, I covered: โ€ข REST - Simple, stateless, uses HTTP methods. The industry standard for public APIs. โ€ข GraphQL - Client asks exactly what it needs. No more over-fetching or under-fetching. โ€ขgRPC - Binary + HTTP/2 = blazing fast. Built for high-performance microservices. The real skill isn't knowing all three - it's knowing when to use which: - REST -> Public APIs, simple CRUD, easy caching - GraphQL -> Complex queries, multiple clients (mobile + web) - gRPC -> Internal services, real-time streaming, low latency Don't just memorize definitions. Understand the trade-offs.
As a backend developer in 2026, these are the 11 skills that will keep you relevant in today's job market: 1) API Design -> REST, GraphQL, gRPC 2) Authentication & Authorization -> OAuth 2.0, JWT, OpenID Connect, Passkeys 3) Databases -> SQL, NoSQL, indexing, query optimization, sharding 4) Caching -> Redis, CDNs, edge caching strategies 5) Event-Driven Systems -> Kafka, Pulsar, streaming pipelines 6) Concurrency & Async Programming -> Async I/O, reactive programming, structured concurrency 7) Distributed Systems -> Microservices, service mesh, eventual consistency 8) Security -> HTTPS, encryption, Zero Trust, OWASP Top 10 9) Observability -> Logging, metrics, tracing, OpenTelemetry 10) Cloud & Deployment -> Docker, Kubernetes, serverless, GitOps 11) AI Engineering -> LLM APIs, MCP, AI agents, vector databases, RAG Stop jumping from one programming language to another. Master the fundamentals that actually make you a better backend engineer.
45
18
134
5,025
Anthropic engineer: "You're not supposed to prompt Claude. You're supposed to build a system that prompts itself." In 45 minutes, she breaks down how Anthropic builds agents that remember, learn from their mistakes, and get smarter with every run. Worth more than any paid course you'll find on building agents. Watch this and bookmark
13
27
187
102,004
๐Ÿšจ Harvard just made its AI course free. No tuition. No application. Just world-class AI education. Harvard University just released 6 high-quality lectures on AI + Prompt Engineeringโ€” and anyone can access them. If you're serious about AI in 2026, start here: ๐ŸŽ“ Harvard University LECTURES 1. Introduction to Generative AI A step-by-step guide to how GenAI actually works. Link: lnkd.in/e9rWNjBE 2. Prompt Engineering Real tips for improving output quality from any LLM. Link: lnkd.in/e5nekvS2 3. Beyond Chatbots: System Prompts, RAG Move past surface use cases into scalable applications. Link: lnkd.in/exsX5tP7 4. Generative AI in Teaching & Learning How educators can adapt and lead with AI. Playlist: lnkd.in/erdwPRvu 5. Teaching with AI in the Classroom Frameworks for trainers and educators. Link: lnkd.in/eWXskwWG 6. The Basics of Generative AI No jargon. Just clarity. Link: lnkd.in/eSCJ62Bi BONUS ๐ŸŸฉ CS50x 2025 โ€“ Artificial Intelligence Lecture LLMs, neural nets, and real-world use cases Link: lnkd.in/eYg6vdCr ๐ŸŸฉ CS50 Extension โ€“ AI / Prompt Engineering Design prompts that think with you Link: lnkd.in/eJH4DWQR ๐ŸŸฉ GPT-4: How it works + how to build with it Behind the curtain on GPT-4 Video: lnkd.in/eeh7QXUM ๐ŸŸฉ LLMs and the End of Programming Why prompting is the new coding Video: lnkd.in/e3JbSFi7 --- ๐Ÿ’ก REALITY CHECK โœ… Harvard-level AI knowledge is now free โœ… Prompting = career acceleration โœ… 2 lectures can put you ahead of 90% of professionals โœ… The future belongs to people who can โ€œtalk to machinesโ€ strategically Donโ€™t just consume AI. Learn how to control it. ๐Ÿ‘‡ Which lecture are you starting with? โ™ป๏ธ Repost to help others learn AI ๐Ÿ”– Save this (youโ€™ll need it later) ๐Ÿ”” Follow @JayBisen473370 for more AI insights
61
101
2
311
39,934
Ashutosh retweeted
This paper is f*cking brilliant A computer science paper proves that graph engineering is the missing layer for production AI systems The result: developers build stateful workflows using typed state, explicit nodes, conditional routing edges, and durable checkpointers The crazy part is how graph engineering strips control flow completely away from prompt text Graph nodes execute deterministic tools, edge functions evaluate execution state, and checkpointers preserve workflow memory across server restarts Most teams try to enforce agent behavior inside long prompts This framework constructs an inspectable control graph in pure python Read the complete paper + article below Bookmark it for future reference
35
179
13
1,377
196,797
What is the Dependency Rule in Clean Architecture? This rule states that source code dependencies can only point inwards. By following this rule, you create a system in which your application's core business logic is independent of external dependencies. The main idea behind the Dependency Rule is controlling coupling. Our domain entities and business rules are at the center of the system. They don't depend on anything, which is valuable because it makes them stable. Things around the Domain can change, but that shouldn't affect the domain entities or business rules. Let's illustrate this with a use case for registering a user: โ€ข The Domain layer contains the entity and doesn't have any other references โ€ข The Application layer contains the use case and defines an interface for data access. It references the Domain layer so it can access the domain entity. โ€ข The Infrastructure layer implements the repository interface. So, it has to reference the Application layer. โ€ข The Presentation layer exposes the API endpoint. It references the Application layer to access the use case. But it also references the Infrastructure layer to wire up DI. If you want to see a practical example of implementing Clean Architecture, check out this: milanjovanovic.tech/pragmatiโ€ฆ
4
22
89
3,396
System design has no right answers, only trade-offs. Here are 15 of the most common ones every engineer should know: 1. Scalability vs performance (handle more work vs do each task faster) 2. Vertical vs horizontal scaling (more powerful hardware vs more servers) 3. Latency vs throughput (fast individual responses vs more tasks over time) 4. Monolith vs microservices (a single unified application vs many small independent services) 5. Stateful vs stateless architecture (remember user sessions vs treat each request as independent) 6. Synchronous vs asynchronous processing (wait for each task to finish vs move on and handle results later) 7. Batch vs stream processing (process data in chunks vs handle it as it arrives) 8. SQL vs NoSQL (structured data and strict schemas vs flexibility for varied data) 9. Normalization vs denormalization (no duplicated data vs faster reads with some redundancy) 10. Consistency vs availability (up-to-date data everywhere vs a system that's always up) 11. Strong vs eventual consistency (immediate accuracy on all nodes vs a short delay in exchange for availability) 12. Read-through vs write-through cache (cache data when it's requested vs write to cache and database together) 13. TCP vs UDP (reliable and ordered delivery vs faster but possibly unordered) 14. Long polling vs WebSockets (a request that waits for data vs a continuous two-way connection) 15. REST vs GraphQL (standard HTTP methods vs querying exactly what you need) The real skill isn't picking a side. It's knowing exactly what you're giving up with every choice. Which trade-off are you struggling with the most right now?
5
21
1
147
7,740
Ashutosh retweeted
The problem with distributed Sagas is that they at least double your work. I loved service decomposition from day one; it was so close to divide-and-conquer that it felt like the logical next step. Then I started learning the hidden complexities; that beautiful atomic DB transaction won't save me anymore. Now, for each write operation, you also need compensation, so you can revert if anything goes wrong at any step. Let's take a look at the standard e-commerce flow: Create order -> Charge payment -> Initiate shipping How about if any of these steps fail? What if the shipping service is down after payment succeeds? Now you need to reverse every step that happens before. Refund the payment <- Cancel the order <- Log failure and notify support And just like that, you have 6 operations; half for success, half for recovery. Mathematically speaking, if your system has n distributed actions, you have to design for 2n: Total operations = n forward + n compensating Success is only half the equation. Thoughts?
8
15
82
5,261