<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[DomainAnalysis.io]]></title><description><![CDATA[Indu's take on analyzing the complexity of any given domain using structured approaches, such as Systems Thinking, Domain-Driven Design, and other methods that stem from the Service Design world, like Service Blueprints.]]></description><link>https://domainanalysis.io</link><image><url>https://substackcdn.com/image/fetch/$s_!gmqS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8de053d-3bef-442a-9180-303fb1a0ec2e_1024x1024.png</url><title>DomainAnalysis.io</title><link>https://domainanalysis.io</link></image><generator>Substack</generator><lastBuildDate>Sun, 19 Apr 2026 12:13:37 GMT</lastBuildDate><atom:link href="https://domainanalysis.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Indu Alagarsamy]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[indualagarsamy@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[indualagarsamy@substack.com]]></itunes:email><itunes:name><![CDATA[Indu Alagarsamy]]></itunes:name></itunes:owner><itunes:author><![CDATA[Indu Alagarsamy]]></itunes:author><googleplay:owner><![CDATA[indualagarsamy@substack.com]]></googleplay:owner><googleplay:email><![CDATA[indualagarsamy@substack.com]]></googleplay:email><googleplay:author><![CDATA[Indu Alagarsamy]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Architecture Modernization Execution: When did estimates turn into deadlines? ]]></title><description><![CDATA[Tip: In complex software modernization projects treat estimates as guidelines, not deadlines.]]></description><link>https://domainanalysis.io/p/architecture-modernization-execution</link><guid isPermaLink="false">https://domainanalysis.io/p/architecture-modernization-execution</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Tue, 19 Nov 2024 15:17:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-Ljf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Can I please return to my vacation days in early October?&nbsp;</strong></p><p>After my unforgettable and fun vacation in <a href="https://english.visitseoul.net">Seoul</a> and <a href="https://nomadicsamuel.com/city-guides/sokcho-travel-guide">Sokcho</a>, my original plan was to write about Systems Thinking and the book I read, "<a href="https://www.amazon.com/dp/0060839872">Zen and the Art of Motorcycle Maintenance</a>" by Robert Pirsig. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Ljf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Ljf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 424w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 848w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 1272w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Ljf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic" width="1290" height="1526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1526,&quot;width&quot;:1290,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:390657,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Ljf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 424w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 848w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 1272w, https://substackcdn.com/image/fetch/$s_!-Ljf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F567f5889-d0b7-4149-8ed4-d225e33674dc_1290x1526.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Great Buddha at Seoraksan National Park, South Korea</figcaption></figure></div><p>But all it takes is a moment, which has lasted more than two weeks, and I feel my life has turned upside down. The last two weeks have been quite literally a car wreck.&nbsp;</p><ul><li><p>First, the Sunday before the US elections, while pulling over for a paramedic, I got rear-ended by a monster pickup truck. I am fine, thankfully, but my car still is not.&nbsp;</p></li><li><p>Second, I really believed that the company I work for, the New York Times, would avoid the ULP strike by the tech workers by agreeing to a fair contract before the US elections. That did not happen. And I don't want to discuss the US election results because that hurt will not go away anytime soon. Meanwhile, my colleagues and I went on an 8-day ULP strike. Since the company refused to bargain with us while we were on strike, we decided to end the strike and return to work earlier this week. We would like to get the contract we deserve soon.</p></li><li><p>I am trying very hard to return back to functioning, I must be succeeding because here I am, able to write some words!&nbsp;</p></li></ul><p><strong>Estimates - Is it an Art or Science?&nbsp;</strong></p><p>My car has been in the auto body repair shop for the past two weeks, and I am still trying to get an estimate of its damages. I am learning that it's an interesting domain:&nbsp;</p><ul><li><p>First, the insurance adjuster submits what they think is the damage to the car to the repair shop. Let's say this is $15000</p></li><li><p>Next, the repair shop submits what they think is the damage back to the insurance company. Let's say it's $18000, and the shop estimates it would take 30 days to fix it.&nbsp;</p></li><li><p>Eventually, the insurance adjuster and the repair shop expert meet to assess the damage together. Let's say the insurance adjuster approves this new estimate from the repair shop. The repair shop then starts with the repair process. At least this is my understanding so far.&nbsp;</p></li></ul><p><strong>Unforeseen Issues</strong></p><p>But what if there is damage that can't be seen yet? Let's say the repair shop is in the process of doing the repairs they notice additional damage. Or they put the car on the frame machine to see if there is damage to the frame. In a unibody frame, it's not just the point of impact of the frame; some of the effects can also transfer to the back of the frame. So they'll have to inspect it to assess the full damage. They might start unassembling the car and notice more damage that was not originally on the estimate. Now what?&nbsp;</p><p><strong>Emergent Solutions&nbsp;</strong></p><p>Let's say, based on the new findings, it's going to cost an additional $20,000. They now need the approval of the insurance company to proceed. So they write up the new findings with the new cost and send a supplemental repair for approval. The insurance company will determine whether, at this point, it still makes sense to proceed with the repair or call it a total loss. And, of course, there are guidelines and rules to determine that. Let's assume it's not a total loss. The insurance company then approves the additional cost of repair.&nbsp;</p><p><strong>Real Talk or Crazy Talk?</strong></p><p>Can you imagine if the insurance company started arguing with the repair shop, asking them&#8212;no&#8212;telling them that they would only pay the $18,000 and not the additional $20,000 because that was the original estimate? Does that sound ridiculous to you? It does to me, too. Thank heavens, reality does not operate like this.&nbsp;</p><p><strong>Isn't Complex Software Architecture Modernization the same?&nbsp;</strong></p><p>When you are in the process of modernizing legacy software, you are in the realm of complex software. When you look at it from the outside, you see some obvious things, and based on experience and expertise, you come up with an initial estimate. This is the repair shop's original estimate of $18,000</p><p>As you are in the process, you start uncovering additional complexity. This complexity could be similar to some hidden damages the repair shop discovered after un-assembling the parts, or this could be significant frame damage that the repair shop discovered. What do you do? You need additional approvals to proceed at this point.&nbsp;</p><p><strong>Good Leaders Ask the Right Questions</strong></p><p>The right questions are asked if you are in a healthy software development environment when you bubble these problems up. How complex is this problem? What are the different ways of solving this? What are the tradeoffs? Are there workarounds or alternate solutions to this?&nbsp;</p><p>Suppose the questions start leading to how you did not see this complexity, how you missed this, why it is taking so long, and you are beholden to the original estimated dates? May the force be with you and your team to give you the strength to see this through. Hopefully, your modernization journey will be a short and successful one.&nbsp;</p><p><strong>To Proceed or call it a Total Loss?</strong></p><p>I have been involved in both types of modernization projects. Cases where the supplemental cost gets approved, and work proceeds until the next step,&nbsp; rinse and repeat until the project has come to completion. I've also seen total loss, i.e.&nbsp; the project got canned because it was too expensive to proceed, and it would cost more than it was worth. It's not easy deciding this, and there are frameworks and decision workshops to try and choose the direction.&nbsp;</p><p><strong>Is this a complex context or a complicated context?</strong></p><p>I urge you to read the excellent article from David J Snowden and Mary E Boone on,<a href="https://hbr.org/2007/11/a-leaders-framework-for-decision-making"> &#8220;A Leaders Framework for Decision Making&#8221;</a>. Using the Cynefin framework, motorcycle maintenance or auto repair might fall under the complicated context. In order to fix the car, the expert technician, after having listened to how the collision happened, also has to analyze and test multiple factors, such as unseen damage, frame damage, etc., to determine the best course of action for the car.&nbsp;</p><p>However, in a complex context, you can only decide whether or not it is right or wrong in hindsight, i.e. after you've tried the thing. Does this jive more and more with complex legacy modernization software projects? I.e. you try something and learn that the integration you thought would work doesn&#8217;t work or you uncover a completely new behavior you never knew existed and you now have to account for it?&nbsp; </p><p>There is no fixed path when modernizing a complex legacy system. There is no rulebook to follow. You try, experiment, discover, solve, and move on to the next piece until you're done.&nbsp;</p><p><strong>Denial - Anger - Bargaining - Depression - Acceptance??</strong></p><p>When modernizing applications, if we understand that this effort falls somewhere between Complex and Complicated Contexts, we can implement the right sort of gauges to see how to proceed and determine success. Applying the process of estimates for a complex context is wrong. It&#8217;s like trying to use a hammer as a solution for every screw or a lug nut!&nbsp;Sometimes you need a screwdriver and sometimes you need a wrench!</p><p>Curveballs in modernization projects are just a reality. You can't foresee every outcome ahead of time. No amount of upfront analysis would lead you to a perfect data model. There will be new learnings almost every step of the way. Data Models will have to change based on the complexity you have uncovered. So it's a matter of when, not if, for curveballs. When a curveball hits and the estimate changes, take a step forward instead of getting angry or blaming folks or trying to do a what-if analysis on how best to bring the schedule in. </p><p>When you&#8217;re dealing with curveballs, which <a href="https://continuousdelivery.com/implementing/culture/">Ron Westrum&#8217;s defined model of culture</a> does your organization adopt? Power-Oriented where messengers who inform about the curveballs are shot and failure leads to&nbsp; scapegoated, Rule-Oriented where the messengers who inform about the curveballs are ignored and failure leads to justice or Performance- Oriented where the messengers who inform about the curveballs are trained and failure leads to enquiry?&nbsp;</p><p>As long as the problem you're trying to solve is still relevant and still meets the business needs, take it one step at a time. Ultimately the software you are trying to modernize is for users.&nbsp;</p><p><strong>Tip for Leaders Leading Modernization Initiatives</strong></p><p>To quote from the same <a href="https://hbr.org/2007/11/a-leaders-framework-for-decision-making">article</a>, "Leaders who don't recognize that a complex domain requires a more experimental mode of management may become impatient when they don't seem to be achieving the results they were aiming for. They may also find it difficult to tolerate failure, an essential aspect of experimental understanding. If they try to overcontrol the organization, they will preempt the opportunity for informative patterns to emerge. Leaders who try to impose order in a complex context will fail. Still, those who set the stage, step back a bit, allow patterns to emerge, and determine which ones are desirable will succeed".&nbsp;</p><p><strong>A New Hope</strong></p><p>Either way I will be ok, whether the repair company is able to fix my car or the insurance company deems it a total loss. The system works. I wish I could say the same for modernization projects and the awful industry practice about how much ceremony we attribute to estimates, completely forgetting that an estimate means an approximate of the actual. I hope more and more software companies and leadership use the proper framework for measuring success. I hope this leaves you with some ideas on implementing changes or at least questioning the practices if they seem wrong.&nbsp;</p><p><em>"I've wondered why it took us so long to catch on. We saw it, and yet we didn't see it. Or rather we were trained not to see it. Conned perhaps into thinking that the real action was metropolitan and all this was just boring hinterland. It was a puzzling thing. The truth knocks on the door and you say, "Go away. I'm looking for the truth." And so it goes away. Puzzling."</em></p><p><em>&#8213; Robert Pirsig</em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A little deep dive into APIs and breaking changes and lessons learned!]]></title><description><![CDATA[A few months back, Matthew Reinbold asked me if I was interested in being a guest writer for his August newsletter for API Notes.]]></description><link>https://domainanalysis.io/p/a-little-deep-dive-into-apis-and</link><guid isPermaLink="false">https://domainanalysis.io/p/a-little-deep-dive-into-apis-and</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Tue, 27 Aug 2024 19:20:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gmqS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8de053d-3bef-442a-9180-303fb1a0ec2e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months back, <a href="https://matthewreinbold.com/about/">Matthew Reinbold</a> asked me if I was interested in being a guest writer for his August newsletter for API Notes. I was thrilled! </p><p>Matthew contributes significantly to software development, sharing his many decades of learning as an API developer, architect, and product manager to the community through his newsletters. So, when Matthew asked me sometime in May, it was a resounding yes! of course! </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I started to think about what article I wanted to write for API Notes. I decided to write about APIs and backward compatibility, a topic near and dear to my heart. </p><p>Here's the published article: </p><p><a href="https://netapinotes.com/surviving-api-breakage-lessons-from-modernizing-legacy-systems/">Surviving API Breakage: Lessons from Modernizing Legacy Systems</a></p><p>Thank you, Matthew, for your patience with me, your regular check-ins, and your support in this writing process. </p><p>Thanks to my dear friends <a href="https://github.com/simoncropp">Simon Cropp</a> and <a href="https://microservices.io">Chris Richardson</a> for helping me make this article awesome. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Document your product and software architecture decisions. ]]></title><description><![CDATA[Hint: If you document your decisions, your future self will thank you!]]></description><link>https://domainanalysis.io/p/document-your-product-and-software</link><guid isPermaLink="false">https://domainanalysis.io/p/document-your-product-and-software</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Sun, 16 Jun 2024 02:02:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e3xZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the past two years, I have been working on an interesting application modernization project. It involves moving a line of business from a decades-old monolith into a more modern SaaS application. As part of this journey, we had to make a <em><strong>lot</strong></em> of decisions! Do we need this particular feature? Solving this feature could be done in multiple ways, so which way is the right way? I knew that somewhere along the line, there would be questions about why we made this choice.</p><h2>Why should we even attempt to document decisions?</h2><p>Whether building new services or changing existing ones, we are constantly making choices in software development. Often, our choices are guided by what we know about the business, such as its complexity or our understanding of it when making the decision.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>George Box said, "All models are wrong, but some are useful." Our models and designs become incorrect when we have a new understanding of the problem or uncover a different facet of the problem. Fast-forward six months or a few years. No one knows why the software behaves a certain way or why someone made this particular choice.</p><p>Are you having a moment of Deja Vu? When working on a project, look at a design or code and think, "Why did they do this? Why did they not consider option X?" I have been there. Decision Records shine here not just as a documentation tool but also to preserve the context of our design choices and why they were made.</p><p>It's not the destination; it's all about the journey. Decision Records are all about documenting the journey rather than just the decision. What question was trying to be answered? What choices were considered? Were there any known constraints to the chosen approach? Documenting these facets gives much more insight into the decision-making process. When a vital complexity is uncovered later, we can revisit our choice and see if the decision needs to be altered, given the new data.</p><p>I wanted to be kind to my future self, so I started tracking the decisions in my project.&nbsp;</p><h2>How I started</h2><p>My design friends at the Times had an awesome one-pager template for pitching an idea or a potential project. <a href="https://heyitsolivia.com">Olivia Cheng</a> introduced this to me. This one-pager frames the problem and the initial discussions that have turned ideas into potential projects. The goal is to orient the team, leadership, and stakeholders. The elements of this one-pager are:</p><ul><li><p>What is the Problem? Here, you describe the problem you are trying to solve and the critical implications.</p></li><li><p>What is the Opportunity? What does solving this problem unlock for the business?</p></li><li><p>List of your goals</p></li><li><p>Success Metrics. How do you measure this?</p></li><li><p>What are the Challenges? A brief description of each challenge.</p></li><li><p>Team and Stakeholders impacted.</p></li></ul><p>I knew the real intent of this template was for when you pitch an idea, but it has many of the correct elements of what I was looking for.</p><h2>My first iteration of documenting decisions</h2><p>Patterns and Pattern Language have taught me that a solution for any problem always has a context. So, I modified this template to contain the following elements. This was a free flowing document with Headings for each of these elements. </p><p><strong>Context:</strong> I started with the context in a paragraph. The context describes the specific area applicable to the problem or dilemma we must solve.</p><p><strong>Problem:</strong> What are we trying to solve specifically? I try to be as specific as possible here. Since people have read the context, they can now understand the questions much better.</p><p><strong>Opportunity:</strong> Here, I describe why solving this problem is essential and how it improves things for the business or the user.&nbsp;&nbsp;</p><p><strong>Success Metrics:</strong> How do we measure this? What are some of the things we can measure?</p><p><strong>Impacted Teams:</strong> Who are the folks going to be affected by this decision?</p><p><strong>Known Challenges and Constraints:</strong> Do we know of any specific issues or things we will have to live with by making this decision? I document any important callouts here.</p><p><strong>Open Questions:</strong> Initially, when attempting to solve the problem and looking at solutions, there could be many open questions that arise that we need to find answers to. I documented them in this section.</p><p><strong>Recommended Decision:</strong> After deliberating and reviewing the findings, I use this section to document the agreed-upon decision.</p><p><strong>Appendix:</strong> If I had several options that got evaluated as a result of answering this question, I documented each option as an Appendix along with its pros and cons.&nbsp;&nbsp;</p><h2>Toooooo Long!</h2><p>I created a lot of my initial decision records in this fashion. It was highly informative. I have some of these documents from more than a year ago, and my present self is so thankful to my past self for doing this. But as I started to create <strong>more</strong> decision records using this template, I ran into these issues:</p><p><strong>Too verbose:</strong> It had a lot of information. I didn't need to document things to the extent I was attempting to.</p><p><strong>What&#8217;s the Status!?:</strong> Seeing the current standing on this decision by opening the document and scrolling to the end is too much time and effort. It's a decision document; we need to be able to see this quickly!</p><p><strong>Adoption:</strong> I was the only one using and creating this. My colleague, <a href="https://www.linkedin.com/in/alexinbrooklyn/">Alex Silverman</a>, who is a product manager gave me feedback that it needed to be easier to read and less verbose.</p><p>Although it was a fantastic start, after trying this approach for several months, I knew I had to evolve it. After all, if no one else is adopting this, then it's a big fail.</p><h2>Iterating on the approach</h2><p>Documenting Decisions is not new; it's a solved problem. I wanted to see how others in my space are doing this. I researched and read several takes on decision records. The one I found particularly interesting was <a href="https://www.linkedin.com/in/andrewharmellaw/">Andrew Harmel-Law</a>'s: "<a href="https://martinfowler.com/articles/scaling-architecture-conversationally.html">Scaling the Practice of Architecture, Conversationally</a>." In this article, among other important things, he talks about Decision Records as a thinking and recording tool. I was glad to find a lot of commonality in what I was doing and what he was describing. I loved the idea of the "Status". This would most definitely solve one of my problems I encountered. </p><p>I also remembered my Design Team's Research Plan document. The information was presented in a visually pleasing way, grouping the right information in a table and it was so easy to read and get to the right information points immediately! And this solved my other problem.  Also, it wasn&#8217;t just a boring table, it was a visually pleasing table. </p><p>Once I made the changes, I immediately chatted with Alex, who had given me the initial feedback. He loved it. He and I reviewed and tweaked the document to group the related information. <em>Spoiler Alert: The iteration described below is heavily used in my project. We have a template for it. And most importantly, I am not the only one creating these decision records. </em> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e3xZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e3xZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 424w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 848w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 1272w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e3xZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png" width="1456" height="1510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1510,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259738,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e3xZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 424w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 848w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 1272w, https://substackcdn.com/image/fetch/$s_!e3xZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d8826ee-210d-45f4-ac38-6784fdc0aad7_1558x1616.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Elements of my Decision Record</h2><h3>Status</h3><p>When looking at the decision record, you must be able to immediately tell the decision's status. I took Andrew's suggested status but kept it to four values: Draft / Proposed / Adopted / Retired.</p><p>You can start the decision record when you only know the problem you are trying to solve. The status in this case is Draft. As you begin exploring the issue, you can start to document the other parts of the decision record, such as the Options Considered. When you're ready to recommend a choice, you can change the status to "Proposed ." and fill in the "Recommended Decision" section. You then circulate the decision record with the stakeholders/decision makers and have a meeting if that's how things are decided in your organization. Once you get their sign-off, you can change the status to "Accepted." When you have to revisit any accepted decision in light of new information, you can start a new ADR and mark this one as "Retired."</p><h3>Action Items</h3><p>Sometimes, you need to chat with other people. So, I added a list of checkboxes as a list of to-dos. This checkbox list reminds you of what you must do to move this decision forward.&nbsp;&nbsp;</p><h3>Question to decide on and Context</h3><p><strong>Question to decide on:</strong> Describe in a sentence what question you are trying to answer.</p><p><strong>Context:</strong> Describe the context in which this question or problem applies. Anyone new to this problem or a new team member should be able to read the context and understand the question that is trying to be answered.</p><h3>Recommended Decision, Supporting Arguments, and Consequences / Constraints</h3><p><strong>Recommended Decision:</strong> When starting with the decision record in the "Draft" status and you haven't explored all the choices, it is okay to leave this section blank. However, once you have considered all the options and your decision record is in the "Proposed" state, you can write down the decision you recommend.</p><p><strong>Supporting Arguments:</strong> You note down why this option was favored amongst the other options.</p><p><strong>Consequences / Constraints:</strong>&nbsp;&nbsp;If there are any potential ramifications to this decision, whether positive or negative, document them here.&nbsp;&nbsp;</p><h3>Other Options Considered, Impacted Stakeholders, and References</h3><p><strong>Other Options Considered:</strong> When your decision record is in the "Draft" status, this is where you will be working most. As you explore each option, give it a name and start documenting the pros and cons.</p><p><strong>Impacted Stakeholders:</strong> You can list the impacted stakeholders even when your decision record is in "Draft" mode. When you eventually propose the recommended option, i.e., and it is accepted, you can make a note of the specific people who have signed off on this decision.</p><p><strong>Related References:</strong> Include any relevant artifacts in this section, such as meeting notes, documents, miro boards / figjam boards, and Slack threads, that are relevant to this decision-making.</p><h2>What do you do with this decision record?&nbsp;&nbsp;</h2><p>You can create a markdown version or an Asciidoc template and check it in your source code repo. Alternatively, store the decision record as a Google doc in a folder designated for your team's relevant project.</p><h2>Neurodivergent Friendly!</h2><p>When I look back at the original iteration I had, my brain was struggling to quickly grasp all of the important points. When Alex, who also happens to be neurodivergent was feeling the same way, I knew I had to make changes. Not just to the parts of what goes into the decision record, but also how it is being presented. On a side note, when you accommodate the needs of neurodivergent folks, you end up making the whole thing better for <strong>everyone</strong>!  The presentation and how the information is laid out makes a huge difference. Perhaps this is the reason for its successful adoption. </p><h2>Additional References</h2><ul><li><p>Andrew Harmel-Law&#8217;s, <a href="https://martinfowler.com/articles/scaling-architecture-conversationally.html">&#8220;Scaling the practice of Architecture, Conversationally&#8221;</a></p></li><li><p><a href="https://adr.github.io">adr.github.io</a> - There&#8217;s a wealth of information documented here including Michael Nygard&#8217;s gold standard of what should a light weight ADR contain. </p></li><li><p><a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/welcome.html">AWS Prescriptive Guidance</a> - Using Architectural Decision Records to streamline technical decision-making for a software development project</p></li></ul><h2>Start documenting your decisions today!</h2><p>Here's a link to the Google document that I now use as a template if you want to use this as well:</p><p><a href="https://docs.google.com/document/d/1icTe5zcz-Xivxm4gzb4mWCCsfb2Ff1RrfadZAxeq6K0/edit#heading=h.gjdgxs">Product / Architecture Decision Record</a></p><p><strong>Trust me, your future self will thank your past self! Do this now!</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Different ways to understand the current state of your system]]></title><description><![CDATA[Hint: Big picture Eventstorming doesn't have to be your Mj&#246;lnir]]></description><link>https://domainanalysis.io/p/different-ways-to-understanding-the</link><guid isPermaLink="false">https://domainanalysis.io/p/different-ways-to-understanding-the</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Fri, 26 Apr 2024 04:16:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gmqS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8de053d-3bef-442a-9180-303fb1a0ec2e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When people talk about Domain-Driven Design(DDD), they associate Eventstorming with DDD. In their minds, if you're not doing eventstorming, you're not doing DDD. That's like wanting to use a hammer to solve every problem. Not every problem is a nail. And let's face it&#8212;you and I are not the god of thunder, Thor. If only we had the Mj&#246;lnir!&nbsp;</p><p>DDD is more than just a set of principles; it's a practical approach that empowers you to delve into the complexities of a domain. By understanding the business rules and problem space, you can design software that's functional and aligned with your business needs. It's about more than just writing code; it's about creating solutions that make a real difference for your business.&nbsp;</p><h3>There&#8217;s more than one way to solve a problem!</h3><p>When I was in high school, I always loved math and, in particular, Algebra. I don't know about you, but the amount of time I spent memorizing the formula for solving quadratic equations was such that if you wake me up in the middle of the night and ask me the formula today, which is almost thirty years later, I can recite it in a blink of a second. I impressed my high school kid with this scary memory recall when teaching him Quadratics! However, there are multiple ways to solve a quadratic equation; the formula is just one way. If I've now made you curious about quadratic equations and the <a href="https://www.khanacademy.org/test-prep/v2-sat-math/x0fcc98a58ba3bea7:advanced-math-easier/x0fcc98a58ba3bea7:solving-quadratic-equations-easier/a/v2-sat-lesson-solving-quadratic-equations">other different ways of solving them, here's Khan Academy</a> to your rescue.  Working in software, we pride ourselves to be very logical beings and yet succumb to strong opinions strongly held. If we remind ourselves that there are more ways and more perspectives to look at a problem more deeply, we might become more curious instead of being dogmatic. In that process, we are then nicer to each other and become better collaborators.&nbsp;</p><p>When trying to understand the current system and how it works, There is a system. This system may comprise several services and components or be just one giant monolith with different surface areas. The primary reason the system exists today is that it is still bringing in revenue. And that's because the system is still helpful and serves the users' needs for which it was initially built.&nbsp;</p><h3>My challenges with the Big Picture Eventstorming</h3><p>When I joined the NYTimes almost two and a half years ago, I had to quickly understand the domain of subscriptions and newspaper delivery. I had to learn how it works today and the pain points to help identify the pathways to modernizing the system.&nbsp;</p><h4>Challenge 1: Assembling a large group</h4><p>Like any DDD enthusiast, I started with Big Picture Eventstorming. My initial hurdle was assembling a diverse group of domain experts, product owners, and other stakeholders for the meeting. Coordinating everyone's schedules, especially in the remote work environment, was a challenge.&nbsp;</p><h4>Challenge 2: Asking business folks to imagine the system as domain events</h4><p>The next challenge I immediately encountered was asking everyone to imagine the system as a series of domain events. First, you need to explain what domain events are: significant things to the business, essential happenings that have changed state. Then, you tell them the semantics of it, i.e., you have to name these domain events in the past tense because events are statements of facts that have already happened. Naming things takes work! Remember these famous words? </p><p>"<em>There are only two hard things in Computer Science: cache invalidation and naming things." - Phil Karlton</em></p><p>Yet we asked everyone to do this within the small time frame of the remote meeting, which proved difficult. The business folks thought this was very techie, and I agree. Instead of speaking in their language, we were dictating the terms of language and communication.&nbsp;</p><h4>Challenge 3: Cleaning up the duplicate events and the timeline</h4><p>Then comes the cleaning up of the duplicate events and arranging them in the timeline because the first part of brainstorming all of the events is just that: lots of sticky notes in Figjam or Miro. You can get to this step after a few hours, but I didn't have the luxury of setting up four-hour or all-day workshops.&nbsp;</p><h4>Challenge 4: No clear understanding what services and components are part of the current state</h4><p>I made some progress, but I needed to understand how subscribers were getting their paper delivered! I wanted to understand the different components and services that were part of this user journey and how they interact with each other. Big Picture Eventstorming did not help me with that. That may not be the intention of Big Picture Eventstorming, and I may have tried to use it incorrectly.&nbsp;</p><h3><strong>Exit Big Picture Eventstorming. Enter Service Blueprints!</strong></h3><p>At this point, I wanted to try a different technique, Value Stream Mapping, which is an excellent way to document business processes but not user experience. This is when my good friend <a href="https://heyitsolivia.com">Olivia Cheng</a> asked, why not try Service Blueprints? She pointed me to an article from nngroup.com on Service Blueprints, and I was immediately intrigued. This was a research method that helped in designing service experiences that delighted the user. And I was interested in trying a new way. Little did I know back then how useful it would be.&nbsp;</p><p>When designing a system, it's crucial to understand how the user experiences it and what they feel.&nbsp;A Customer Journey Map is a visual tool that&nbsp;can help with this. Similarly, a Service Blueprint provides a holistic view of how all the different parts of the system work together to meet a user's need. By extending this technique to the software design field, we can visualize how all the different architectural elements work together to meet the user's needs, fostering a more user-centric approach to software design.&nbsp;</p><h4><strong>What&#8217;s Next? </strong></h4><p>Stay tuned. I will continue to write about how I've managed to evolve the Service Blueprints from the design world and hack them into the Software Design world to document current state and gain insights to make the experience better. I have the wholesome approval of my friends in the Design space, who were kind enough to share how I'm using them in their community of practice!&nbsp;If you cannot contain your curiosity and are itching to read about Service Blueprints, my good friend Chris Richardson wrote a <a href="https://microservices.io/post/architecture/documentation/2023/11/07/understanding-your-architecture-with-service-blueprints.html">few articles on the topic</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalysis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Application and Architecture Modernization - Where do we Start?]]></title><description><![CDATA[Hint: Start with the user and the user needs]]></description><link>https://domainanalysis.io/p/application-and-architecture-modernization</link><guid isPermaLink="false">https://domainanalysis.io/p/application-and-architecture-modernization</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Sun, 14 Apr 2024 20:15:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gmqS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8de053d-3bef-442a-9180-303fb1a0ec2e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Having dedicated a significant portion of my career to application and architecture modernization projects, I've experienced the full spectrum of outcomes. Some projects have been triumphs, while others have been monumental failures. As a Principal Engineer at the NY Times, I'm immersed in one of the most exhilarating and demanding modernization projects, a journey I'm most eager to complete. </p><p>Sometimes, when the problem is so complex, it can be overwhelming. And it doesn't matter at what point you start looking at the problem space&#8212;whether you were there when the company first decided its strategy on how to modernize it and where to spend the dollars or if you are looking at the problem space after the strategy is already set in place. </p><p>Reflecting on my past work in the application and architecture modernization arena, I've discerned a recurring theme. Projects that prioritized understanding the users and their needs from the outset had a significantly higher success rate than those that treated user needs as an afterthought during testing. </p><p>Often, it takes more work to focus on the architectural complexity alone. As Architects, we like to take comfort in familiar things. We've spent many years studying software design and architecture and still learning daily. Domain-Driven Design, Loose Coupling, Cohesion, and what style of architecture must we use for the given problem context: Layered Architecture, Vertical Slice Architecture, Micro Services? What are the different communication styles between these components and services: RPC, and Messaging? And what about the cloud: Azure, AWS, GCP? The list goes on and on. When we start looking at the System, we see services, components, databases, and all of the technical and infrastructure parts. These parts make sense for us, the techies. </p><p>One of my favorite Systems Thinkers, Dr. Russ Ackoff, said this, and it's stuck with me: "<strong>It is much better to do the right thing wronger than the wrong thing righter.</strong>"</p><p>If we focus all our efforts only on these technological aspects of modernization, we could lose sight of why we are building or modernizing the System in the first place. What's the point of spending months and months creating all these services and components if the users who use the System are still stuck with the same problems? Can we call it modernization if we have replaced all of the legacy parts with new shiny things built with the technology of today if the users don't see any benefits in the behavior of the System? </p><p>We can take a systematic approach to modernization by first understanding the System's users and their needs. Once we have determined this, we can see how today's System fulfills those user needs. What are the components and services involved? Do these belong to the same team or different teams? What are the pain points from both the user perspective and architectural perspective? A visual approach works best to do this well and bring about a shared understanding of all parties involved. </p><p>I've learned and used many diagrams to describe the System: Data Flow Diagrams, UML, C4 Modeling, State Flow Diagrams, Sequence Diagrams, etc. These diagrams represent the parts of the System in a very techy, component-specific way. And then there are the arrows! In some of these diagrams, you have arrows that crisscross boxes and more arrows pointing to more boxes, which gives my brain a headache! But how do we connect these to the actual user using our System? I've learned that you can do both! We can be very intentional in the techy parts of the architecture while still starting with the user needs. </p><p>All the stars in the universe aligned for me and brought me to work closely with <a href="https://heyitsolivia.com">Olivia Cheng</a> on the same modernization project briefly at the Times, and I was introduced to new ways of thinking from the realm of design about how to think about the user and user needs. My first introduction to Service Blueprints. Since then, I've been experimenting with the Service Blueprints approach for the past two years by tweaking the original concept from the design world and adding some architectural elements to the mix that help understand how the existing components work together to fulfill a user's need. So far, it has proven invaluable to my modernization work in understanding the System's current state of how a specific user need is being fulfilled.</p><p>Does this sound interesting? Come join my hands-on workshop at <a href="https://ncrafts.io/agenda">New Crafts</a> on May 16th if you're in Paris. If not, stay tuned&#8212;I plan on writing a whole lot more on this topic in byte sizes!</p><p>A huge thanks to my dear friends <a href="https://chrisrichardson.net">Chris Richardson</a>, without whom there probably wouldn't be a domainanalysis.io, and my dear friend <a href="https://montalion.com">Diana Montalion</a>, who've been both constantly nudging, encouraging and nurturing my writing habit! </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading DomainAnalyis.io! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Welcome to DomainAnalysis.io]]></title><description><![CDATA[Of all the articles and newsletters available on the internet, I am thrilled that you are choosing to subscribe to this one!]]></description><link>https://domainanalysis.io/p/coming-soon</link><guid isPermaLink="false">https://domainanalysis.io/p/coming-soon</guid><dc:creator><![CDATA[Indu Alagarsamy]]></dc:creator><pubDate>Sat, 30 Mar 2024 22:25:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gmqS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8de053d-3bef-442a-9180-303fb1a0ec2e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Of all the articles and newsletters available on the internet, I am thrilled that you are choosing to subscribe to this one! Thank you! </p><p>Someone said this, and it stuck with me: "You don't need to post every day or even every week to have a blog that matters."  I won't inundate your mailbox with articles, but when I do write and publish, it's something I have been eager to share, however agonizingly slow I am in publishing it. </p><p>These articles are my take on analyzing the complexity of any given domain using structured approaches, such as Systems Thinking, Domain-Driven Design, and other methods that stem from the Service Design world, like Service Blueprints, I&#8217;ve learned along the way.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://domainanalysis.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://domainanalysis.io/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>