<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.1.0">Jekyll</generator><link href="https://b-deepak.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://b-deepak.github.io/" rel="alternate" type="text/html" /><updated>2020-07-12T11:48:05-07:00</updated><id>https://b-deepak.github.io/feed.xml</id><title type="html">dejavudesi</title><subtitle>Random musings on architecture and some fun stuff.</subtitle><entry><title type="html">O’Reilly Training: The Hard Parts of Architecture</title><link href="https://b-deepak.github.io/2020/07/11/the-hard-parts-of-architecture.html" rel="alternate" type="text/html" title="O'Reilly Training: The Hard Parts of Architecture" /><published>2020-07-11T20:20:00-07:00</published><updated>2020-07-11T20:20:00-07:00</updated><id>https://b-deepak.github.io/2020/07/11/the-hard-parts-of-architecture</id><content type="html" xml:base="https://b-deepak.github.io/2020/07/11/the-hard-parts-of-architecture.html">&lt;h2 id=&quot;goal&quot;&gt;Goal&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://b-deepak.github.io/assets/architecture_hard_parts_summary.jpg&quot; alt=&quot;architecture hard parts summary&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;decisions&quot;&gt;Decisions&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;It Depends. Decisions are a trade-off!&lt;/li&gt;
  &lt;li&gt;Why &amp;gt; How&lt;/li&gt;
  &lt;li&gt;Use Architectural Decision Record (ADR)
    &lt;ul&gt;
      &lt;li&gt;Title&lt;/li&gt;
      &lt;li&gt;Status&lt;/li&gt;
      &lt;li&gt;Context&lt;/li&gt;
      &lt;li&gt;Decision - &lt;strong&gt;Justification (Technical and Business)&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Consequences - &lt;strong&gt;Trade-offs&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Example:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Title
----
Single consolidated payment service

Context
----
A customer can use any payment type combination (credit card, paypal, store credit, and gift cards) when placing an order.

Payment is required when pacing an order (synchronous activity). The payment logic can be either a single consolidated service or a separately deployed service for each payment type.

Decision
----
We will use a single consolidated payment service for all payment types.

Separating the services would require orchestration, which incurs both network and security latency. A single payment service will be more responsive since it does not require orchestration of each payment, therefore improving customer satisfaction when placing orders.

Consequences
----
The tradeoff of this decision is that maintenance, testing, and deployment will be impacted when changes are made to any of the payment types or another payment type is added. Testing scope is increased, requiring more time for complete testing. Deployment risk is increased as deploying a single service requires deployment of all payment types. Error handling and transactions are maintained in a single consolidated service, improving overall data integrity, data consistency, and performance when errors occur. This also improves overall customer satisfaction when placing orders.

The maintenance impact tradeoff was accepted by the business stakeholders in favor of better performance and data consistency when customers
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;architecture-characteristics&quot;&gt;Architecture Characteristics&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Synergistic&lt;/li&gt;
  &lt;li&gt;Ill-defined&lt;/li&gt;
  &lt;li&gt;Numerous Categories&lt;/li&gt;
  &lt;li&gt;Voluminous&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;the-9s-of-availability&quot;&gt;The 9’s of Availability&lt;/h2&gt;

&lt;p&gt;Availability is usually expressed as a percentage of uptime in a given year.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Availability %&lt;/th&gt;
      &lt;th&gt;Downtime per year&lt;/th&gt;
      &lt;th&gt;Downtime per month&lt;/th&gt;
      &lt;th&gt;Downtime per day&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;90% (“one nine”)&lt;/td&gt;
      &lt;td&gt;36.53 days&lt;/td&gt;
      &lt;td&gt;73.05 hours&lt;/td&gt;
      &lt;td&gt;2.40 hours&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;99% (“two nines”)&lt;/td&gt;
      &lt;td&gt;3.65 days&lt;/td&gt;
      &lt;td&gt;7.31 hours&lt;/td&gt;
      &lt;td&gt;14.40 minutes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;99.9% (“three nines”)&lt;/td&gt;
      &lt;td&gt;8.77 hours&lt;/td&gt;
      &lt;td&gt;43.83 minutes&lt;/td&gt;
      &lt;td&gt;1.44 minutes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;99.99% (“four nines”)&lt;/td&gt;
      &lt;td&gt;52.60 minutes&lt;/td&gt;
      &lt;td&gt;4.38 minutes&lt;/td&gt;
      &lt;td&gt;8.64 seconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;99.999% (“five nines”)&lt;/td&gt;
      &lt;td&gt;5.26 minutes&lt;/td&gt;
      &lt;td&gt;26.30 seconds&lt;/td&gt;
      &lt;td&gt;864.00 milliseconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;99.9999% (“six nines”)&lt;/td&gt;
      &lt;td&gt;31.56 seconds&lt;/td&gt;
      &lt;td&gt;2.63 seconds&lt;/td&gt;
      &lt;td&gt;86.40 milliseconds&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h1 id=&quot;connascence--coupling&quot;&gt;Connascence / Coupling&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://connascence.io/&quot;&gt;Connascence&lt;/a&gt; is a software quality metric &amp;amp; a taxonomy for different types of coupling.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Types:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Static&lt;/strong&gt; - name, type, meaning, position, algorithm&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dynamic&lt;/strong&gt; - execution, timing, value, identity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Axes of Measure:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Strength&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Degree&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Locality&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;architectural-quantum&quot;&gt;Architectural Quantum&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;An architectural quantum is an independently deployable component with high functional cohesion and synchronous dynamic quantum connascence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;choosing-an-architecture&quot;&gt;Choosing an Architecture&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://b-deepak.github.io/assets/choosing_an_architecture.jpg&quot; alt=&quot;choosing an architecture&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;service-granularity&quot;&gt;Service Granularity&lt;/h2&gt;

&lt;p&gt;Get granularity right by iteration!&lt;/p&gt;

&lt;h3 id=&quot;drivers&quot;&gt;Drivers&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;When should I consider breaking apart a service?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Functionality or Domain&lt;/li&gt;
  &lt;li&gt;Code Volatility&lt;/li&gt;
  &lt;li&gt;Scalability and Throughput&lt;/li&gt;
  &lt;li&gt;Fault Tolerance&lt;/li&gt;
  &lt;li&gt;Data Security&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;factors&quot;&gt;Factors&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;What factors influence service granularity?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Database Transactions&lt;/li&gt;
  &lt;li&gt;Data Dependencies&lt;/li&gt;
  &lt;li&gt;Communication Pattern i.e. Orchestration (Workflow) vs Choreography&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;evolutionary-architecture&quot;&gt;Evolutionary Architecture&lt;/h2&gt;

&lt;p&gt;An evolutionary architecture supports &lt;strong&gt;guided, incremental change&lt;/strong&gt; across multiple dimensions.&lt;/p&gt;

&lt;h3 id=&quot;fitness-functions&quot;&gt;Fitness Functions&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Any mechanism that provides an objective integrity assessment of some architectural characteristic(s).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Cyclic Dependency Function in Code Quality Tools&lt;/li&gt;
  &lt;li&gt;Zero Day Security Check Function in Build Pipeline&lt;/li&gt;
  &lt;li&gt;Contract Fitness Function using &lt;a href=&quot;https://www.martinfowler.com/articles/consumerDrivenContracts.html&quot;&gt;Consumer Driven Contracts&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Tool: &lt;a href=&quot;https://docs.pact.io/&quot;&gt;Pact&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architecture Governance Tools:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Java - &lt;a href=&quot;https://www.archunit.org/&quot;&gt;ArchUnit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;.NET - &lt;a href=&quot;https://github.com/BenMorris/NetArchTest&quot;&gt;NetArchTest&lt;/a&gt;, &lt;a href=&quot;https://www.sonarqube.org/&quot;&gt;SonarQube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;coupling&quot;&gt;Coupling&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Aim for &lt;strong&gt;High Semantic Coupling&lt;/strong&gt; &amp;amp; &lt;strong&gt;Low Syntactic Coupling&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Contract Types and Trade-offs&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Strict Contracts&lt;/th&gt;
      &lt;th&gt;Value Based Contracts&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Method Signatures. Ex. SOAP, gRPC etc.&lt;/td&gt;
      &lt;td&gt;Name-Value Pairs. Ex. JSON&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;better control of exact parameter passing&lt;/td&gt;
      &lt;td&gt;requires fitness functions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;brittle architecture coupling&lt;/td&gt;
      &lt;td&gt;requires documentation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;better documentation via type signatures&lt;/td&gt;
      &lt;td&gt;extremely loose coupling&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;managing-data-in-a-distributed-system&quot;&gt;Managing Data in a Distributed System&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Inter-Service Communication&lt;/li&gt;
  &lt;li&gt;Data Replication&lt;/li&gt;
  &lt;li&gt;In-Memory Replicated Cache&lt;/li&gt;
  &lt;li&gt;Data Domains (Shared Tables)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;achieving-scalability-and-elasticity&quot;&gt;Achieving Scalability and Elasticity&lt;/h2&gt;

&lt;p&gt;Patterns to leverage in Microservices:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Cache&lt;/li&gt;
  &lt;li&gt;Sidecar Containers with Service Mesh&lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><summary type="html">Goal</summary></entry><entry><title type="html">Raising Financially Responsible Children</title><link href="https://b-deepak.github.io/2020/07/03/raising-financially-responsible-children.html" rel="alternate" type="text/html" title="Raising Financially Responsible Children" /><published>2020-07-03T09:18:00-07:00</published><updated>2020-07-03T09:18:00-07:00</updated><id>https://b-deepak.github.io/2020/07/03/raising-financially-responsible-children</id><content type="html" xml:base="https://b-deepak.github.io/2020/07/03/raising-financially-responsible-children.html">&lt;p&gt;This are some of the golden nuggets from an excellent financial independence podcast by &lt;a href=&quot;https://html5-player.libsyn.com/embed/episode/id/7539545/height/90/theme/custom/autoplay/no/autonext/no/thumbnail/yes/preload/no/no_addthis/no/direction/backward/render-playlist/no/custom-color/87A93A/&quot;&gt;JL Collins, Jane Collins, and Doug Nordman&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;grocery-matters&quot;&gt;Grocery Matters&lt;/h2&gt;

&lt;p&gt;Once in a while, let your kids pay for grocery in cash to make them understand how money exchange works.&lt;/p&gt;

&lt;h2 id=&quot;allowance&quot;&gt;Allowance:&lt;/h2&gt;

&lt;p&gt;Give your kids allowance and “advise” them to save at least 50% in savings. The older they grow the more they would appreciate their savings balance. Carefully monitor the other 50% spent to determine the type of expenses and don’t step on their freedom entirely.&lt;/p&gt;

&lt;h2 id=&quot;nature-vs-nurture&quot;&gt;Nature vs Nurture&lt;/h2&gt;

&lt;p&gt;Put faith and trust your kids. Lectures do not work, trust does!&lt;/p&gt;

&lt;h2 id=&quot;need-vs-want&quot;&gt;Need vs Want&lt;/h2&gt;

&lt;p&gt;When buying something, question whether it is a need or a want? Make them understand the difference and why frugality always pays off in the longer run.&lt;/p&gt;

&lt;h2 id=&quot;pseudo-401k-for-kids&quot;&gt;Pseudo-401k for Kids&lt;/h2&gt;

&lt;p&gt;Match up their savings contribution every month just like a regular 401k. This will plant the importance of retirement savings when they start earning.&lt;/p&gt;

&lt;p&gt;This also teaches the power of Compound Interest at an early age. For example, telling your 6 year kid to save for 10 years allows him/her to pay for their car at 16, is mind-blowing to them.&lt;/p&gt;

&lt;h2 id=&quot;more-tips&quot;&gt;More Tips&lt;/h2&gt;

&lt;p&gt;Model your own behavior, kids copy their parents for 90% of learnings. Conversations will matter only 10%.&lt;/p&gt;

&lt;p&gt;Let them make mistakes. Let them learn from failing at home (a safer place) with their money.&lt;/p&gt;

&lt;p&gt;For a paid subscription model to monitor expenses, checkout famzoo.com. (&lt;em&gt;Disclaimer: I am not a customer and have not personally used this app&lt;/em&gt;)&lt;/p&gt;

&lt;h2 id=&quot;budgeting-formula&quot;&gt;Budgeting Formula&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;A dollar per week X kid’s age&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$1 X 1 week X 6 year old = $6/week = $24/month

Now help them with their budget:

Spend $12 on their discretionary things like toys, candies, books, videos etc.

Save the other $12 in an interest savings account, match their contribution.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;additional-resources&quot;&gt;Additional Resources&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://vanguardblog.com/2019/05/31/talking-to-your-kids-about-wealth-how-when-to-begin/&quot;&gt;Vanguard’s Age-appropriate Discussions &lt;/a&gt; - Amazing reference based on children’s age and maturity levels.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Learning the basics (ages 5–18)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Focus on heritage and family traditions.&lt;/td&gt;
      &lt;td&gt;Introduce the concept of “spend, save, give.”&lt;/td&gt;
      &lt;td&gt;Assign chores to instill the value of hard work.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Applying concepts (college years)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Provide experiences to understand assets vs. liabilities.&lt;/td&gt;
      &lt;td&gt;Teach budgeting and saving.&lt;/td&gt;
      &lt;td&gt;Understand financial concepts such as investment principles.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Expanding their scope (mid- to late 20s)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Provide deeper education on investing, family businesses, and real estate.&lt;/td&gt;
      &lt;td&gt;Understand charitable giving options such as donor-advised funds and foundations.&lt;/td&gt;
      &lt;td&gt;Begin to hold family meetings to discuss these topics and to assess everyone’s understanding.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Mentoring &amp;amp; understanding the whole picture (30s)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Do a deep dive into concepts such as wills, trusts, and mortgages.&lt;/td&gt;
      &lt;td&gt;Understand the financial institutions involved in the broader family picture.&lt;/td&gt;
      &lt;td&gt;Provide activities to focus on the transfer of leadership from parents to the next generation.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Preparing for leadership transition (40s &amp;amp; beyond)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Discuss the wealth transfer process and wealth purpose for the family.&lt;/td&gt;
      &lt;td&gt;Integrate estate planning discussions with multiple generations.&lt;/td&gt;
      &lt;td&gt;Decide on and communicate future plans, including how assets will be divided (e.g., to family members, charities, or both).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name></name></author><summary type="html">This are some of the golden nuggets from an excellent financial independence podcast by JL Collins, Jane Collins, and Doug Nordman.</summary></entry><entry><title type="html">O’Reilly Training: Software Architect Tips Contd. - Soft Skills</title><link href="https://b-deepak.github.io/2020/06/27/software-architect-tips-contd-soft-skills.html" rel="alternate" type="text/html" title="O'Reilly Training: Software Architect Tips Contd. - Soft Skills" /><published>2020-06-27T15:16:00-07:00</published><updated>2020-06-27T15:16:00-07:00</updated><id>https://b-deepak.github.io/2020/06/27/software-architect-tips-contd-soft-skills</id><content type="html" xml:base="https://b-deepak.github.io/2020/06/27/software-architect-tips-contd-soft-skills.html">&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#meeting-tips&quot;&gt;Meeting Tips&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#leadership-tips&quot;&gt;Leadership Tips&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#team-structure&quot;&gt;Team Structure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#negotiation-skills&quot;&gt;Negotiation Skills&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#architecture-boundaries&quot;&gt;Architecture Boundaries&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#remember-3-cs-of-architecture&quot;&gt;Remember 3 C’s of Architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;meeting-tips&quot;&gt;Meeting Tips&lt;/h1&gt;

&lt;p&gt;Prepare diligently in advance to make your case (esp. for important meetings)&lt;/p&gt;

&lt;h1 id=&quot;leadership-tips&quot;&gt;Leadership Tips&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Keep it simple, concise and tailor context to the stakeholders&lt;/li&gt;
  &lt;li&gt;For Complex Diagrams - Make a high level and then “peel the onion” by separate the components in separate slide/zoom-in&lt;/li&gt;
  &lt;li&gt;Be pragmatic, yet visionary&lt;/li&gt;
  &lt;li&gt;Aim for success, not perfection&lt;/li&gt;
  &lt;li&gt;Lead by example, not by title. Contribute hands-on but communicate the amount of commitment in advance to business stakeholders. Don’t lose the perception of being an architect.&lt;/li&gt;
  &lt;li&gt;Share the credit&lt;/li&gt;
  &lt;li&gt;Be decisive and justify the decision.&lt;/li&gt;
  &lt;li&gt;Stay positive and get along with people&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;team-structure&quot;&gt;Team Structure&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Make yourself available&lt;/li&gt;
  &lt;li&gt;Conway’s Law&lt;/li&gt;
  &lt;li&gt;Solution:
    &lt;ul&gt;
      &lt;li&gt;Inverse Conway’s Manuever - Create Cross Functional Teams&lt;/li&gt;
      &lt;li&gt;Build products, not projects&lt;/li&gt;
      &lt;li&gt;Leverage &lt;a href=&quot;https://thoughtworks.github.io/pacto/patterns/cdc/&quot;&gt;Consumer Driven Contracts&lt;/a&gt; for internal integrations&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;negotiation-skills&quot;&gt;Negotiation Skills&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Gather as much information from requirements before entering a negotiation&lt;/li&gt;
  &lt;li&gt;If all else fails, pivot to cost and time factors&lt;/li&gt;
  &lt;li&gt;Demonstrate your findings&lt;/li&gt;
  &lt;li&gt;Techniques
    &lt;ul&gt;
      &lt;li&gt;Architectural trade-off based on functional and non-functional requirements&lt;/li&gt;
      &lt;li&gt;Developer Buy-in&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;architecture-boundaries&quot;&gt;Architecture Boundaries&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Define architecture and design principles&lt;/li&gt;
  &lt;li&gt;IMP: &lt;strong&gt;Justify&lt;/strong&gt; your decisions and &lt;strong&gt;Communicate&lt;/strong&gt;!&lt;/li&gt;
  &lt;li&gt;Guide the team. Examples:
    &lt;ul&gt;
      &lt;li&gt;Libraries/Framework choices&lt;/li&gt;
      &lt;li&gt;Pattern Governance&lt;/li&gt;
      &lt;li&gt;Defining Scope&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;remember-3-cs-of-architecture&quot;&gt;Remember 3 C’s of Architecture&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Collaboration&lt;/li&gt;
  &lt;li&gt;Communication&lt;/li&gt;
  &lt;li&gt;Clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;</content><author><name></name></author><summary type="html">Meeting Tips Leadership Tips Team Structure Negotiation Skills Architecture Boundaries Remember 3 C’s of Architecture</summary></entry><entry><title type="html">O’Reilly Training: Software Architecture Tips</title><link href="https://b-deepak.github.io/jekyll/update/2020/06/07/software-arch-tips.html" rel="alternate" type="text/html" title="O'Reilly Training: Software Architecture Tips" /><published>2020-06-07T10:24:24-07:00</published><updated>2020-06-07T10:24:24-07:00</updated><id>https://b-deepak.github.io/jekyll/update/2020/06/07/software-arch-tips</id><content type="html" xml:base="https://b-deepak.github.io/jekyll/update/2020/06/07/software-arch-tips.html">&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“Architecture is about the important stuff. Whatever that is” - Ralph Johnson&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#circle-of-knowledge&quot;&gt;Circle of Knowledge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#build-your-own-radar&quot;&gt;Build Your Own Radar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#leverage-checklists&quot;&gt;Leverage Checklists&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#6-steps-in-refactoring-an-architecture&quot;&gt;6 steps in refactoring an architecture&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#cost-benefit-analysis&quot;&gt;Cost Benefit Analysis&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#architectural-decision-records-adrs&quot;&gt;Architectural Decision Records (ADRs)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;circle-of-knowledge&quot;&gt;Circle of Knowledge&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SYK&lt;/strong&gt;: Stuff You Know&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SYKYDK&lt;/strong&gt;: Stuff You Know You Don’t Know&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SYDKYDK&lt;/strong&gt;: Stuff You Don’t Know You Don’t Know&lt;/li&gt;
&lt;/ul&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.5.2/mermaid.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;mermaid&quot;&gt;
pie title Knowledge &amp;amp; Learning
&quot;SYK&quot; : 25
&quot;SYKYDK&quot; : 25
&quot;SYDKYDK&quot; : 50
&lt;/div&gt;

&lt;h1 id=&quot;build-your-own-radar&quot;&gt;Build Your Own Radar&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://www.thoughtworks.com/radar/how-to-byor&quot;&gt;How to BYOR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/thoughtworks/build-your-own-radar&quot;&gt;Github: BYOR&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;leverage-checklists&quot;&gt;Leverage Checklists&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;List not the obvious but rather what’s not obvious!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id=&quot;6-steps-in-refactoring-an-architecture&quot;&gt;6 steps in refactoring an architecture&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;Root cause analysis&lt;/li&gt;
  &lt;li&gt;Determine changes needed&lt;/li&gt;
  &lt;li&gt;Create business case&lt;/li&gt;
  &lt;li&gt;Build refactoring plan&lt;/li&gt;
  &lt;li&gt;Create timeline and estimates&lt;/li&gt;
  &lt;li&gt;Present to business&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;cost-benefit-analysis&quot;&gt;Cost Benefit Analysis&lt;/h1&gt;

&lt;p&gt;The &lt;a href=&quot;https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=513476&quot;&gt;CBAM&lt;/a&gt; process consists of the following steps:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Choose scenarios and architectural strategies.&lt;/li&gt;
  &lt;li&gt;Assess quality attribute benefits.&lt;/li&gt;
  &lt;li&gt;Quantify the benefits of architectural strategies.&lt;/li&gt;
  &lt;li&gt;Quantify the costs and schedule implications of the
architectural strategies.&lt;/li&gt;
  &lt;li&gt;Calculate the desirability of each option.&lt;/li&gt;
  &lt;li&gt;Make architectural design decisions&lt;/li&gt;
&lt;/ol&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.5.2/mermaid.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;mermaid&quot;&gt;
flowchart LR
A(Business Goals) --&amp;gt;|Define| B(Software Architecture \n-ilities &amp;amp; NFRs)
B --&amp;gt; D(Benefits)
B --&amp;gt; E(Cost)
D --&amp;gt; F{Assess}
E --&amp;gt; F
F --&amp;gt; G(Selection)
&lt;/div&gt;

&lt;h1 id=&quot;architectural-decision-records-adrs&quot;&gt;Architectural Decision Records (ADRs)&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records&quot;&gt;Lightweight Architecture Decision Records&lt;/a&gt; is a technique for capturing important architectural decisions along with their context and consequences.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;ADR (Simple)&lt;/strong&gt;&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Sections:
        &lt;ul&gt;
          &lt;li&gt;Title&lt;/li&gt;
          &lt;li&gt;Context&lt;/li&gt;
          &lt;li&gt;Decision&lt;/li&gt;
          &lt;li&gt;Status&lt;/li&gt;
          &lt;li&gt;Consequences&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/joelparkerhenderson/architecture_decision_record/blob/master/adr_template_by_michael_nygard.md&quot;&gt;Template&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Examples
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/alphagov/govuk-aws/tree/master/doc/architecture/decisions&quot;&gt;here…&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/arachne-framework/architecture&quot;&gt;and here…&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;MADR (Options &amp;amp; Pros/Cons)&lt;/strong&gt;&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Sections:
        &lt;ul&gt;
          &lt;li&gt;Title&lt;/li&gt;
          &lt;li&gt;Context&lt;/li&gt;
          &lt;li&gt;Decision&lt;/li&gt;
          &lt;li&gt;Considered Options&lt;/li&gt;
          &lt;li&gt;Outcome/Consequences&lt;/li&gt;
          &lt;li&gt;Pros/Cons&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/joelparkerhenderson/architecture_decision_record/blob/master/adr_template_madr.md&quot;&gt;Template&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://adr.github.io/madr/template/0000-use-markdown-architectural-decision-records.html&quot;&gt;Example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><summary type="html">“Architecture is about the important stuff. Whatever that is” - Ralph Johnson</summary></entry></feed>