<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Software Craftsperson</title>
    <link>https://www.softwarecraftsperson.com/</link>
    <description>Recent content on Software Craftsperson</description>
    <image>
      <title>Software Craftsperson</title>
      <url>https://www.softwarecraftsperson.com/logos/web/png/Color%20logo%20-%20no%20background.png</url>
      <link>https://www.softwarecraftsperson.com/logos/web/png/Color%20logo%20-%20no%20background.png</link>
    </image>
    <generator>Hugo -- 0.147.1</generator>
    <language>en</language>
    <lastBuildDate>Thu, 08 Oct 2026 00:19:06 +0100</lastBuildDate>
    <atom:link href="https://www.softwarecraftsperson.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Design a Content Delivery Network (CDN)</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/content-delivery-network/design-cdn/</link>
      <pubDate>Sat, 21 Dec 2024 12:16:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/content-delivery-network/design-cdn/</guid>
      <description>Design a highly available CDN from scratch. Learn about edge servers, caching strategies, content propagation, and global content distribution.</description>
    </item>
    <item>
      <title>Design a Distributed Key-Value Store</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/key-value-store/design-kv-store/</link>
      <pubDate>Sat, 21 Dec 2024 12:16:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/key-value-store/design-kv-store/</guid>
      <description>Design a highly available key-value store like DynamoDB or Redis. Learn about consistent hashing, replication, partitioning, and handling failures.</description>
    </item>
    <item>
      <title>Introduction</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-15-k8s-for-non-ops-folks/</link>
      <pubDate>Mon, 15 Jul 2024 20:30:26 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-15-k8s-for-non-ops-folks/</guid>
      <description>A look at the concepts you must know if you are using kubernetes to run applications or a software development team that uses kubernetes</description>
    </item>
    <item>
      <title>Databases Introduction - System Design Fundamentals</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-10-sys-des-db-1/</link>
      <pubDate>Sat, 10 Dec 2022 20:51:37 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-10-sys-des-db-1/</guid>
      <description>What is a database and why do we need it? Learn about database fundamentals, types of databases, SQL vs NoSQL, and when to use each for system design.</description>
    </item>
    <item>
      <title>Load Balancers Explained - Part 1</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/load-balancers/2022-11-25-sys-des-lb/</link>
      <pubDate>Fri, 25 Nov 2022 17:55:38 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/load-balancers/2022-11-25-sys-des-lb/</guid>
      <description>What is a load balancer? Learn about global and local load balancing, load balancing algorithms, health checks, and how to scale distributed systems effectively.</description>
    </item>
    <item>
      <title>System Maintainability - Building Evolvable Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-10/</link>
      <pubDate>Sun, 30 Oct 2022 11:30:09 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-10/</guid>
      <description>What is maintainability in system design? Learn about code quality, documentation, modularity, and building systems that are easy to modify and debug.</description>
    </item>
    <item>
      <title>Abstractions in System Design - Building Modular Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-27-sys-des-det-4/</link>
      <pubDate>Thu, 27 Oct 2022 20:16:27 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-27-sys-des-det-4/</guid>
      <description>What are abstractions and why are they crucial in system design? Learn how abstraction layers simplify complexity and enable scalable architectures.</description>
    </item>
    <item>
      <title>What is a System Design Interview</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-16-sys-des-oview/</link>
      <pubDate>Sun, 16 Oct 2022 12:16:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-16-sys-des-oview/</guid>
      <description>Why do organisations conduct system design interviews? What is expected from the candidate? Learn how to prepare and ace your system design interview.</description>
    </item>
    <item>
      <title>Architecture</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-16-k8s-for-non-ops-folks-0-architecture/</link>
      <pubDate>Tue, 16 Jul 2024 05:53:40 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-16-k8s-for-non-ops-folks-0-architecture/</guid>
      <description>A look at the concepts you must know if you are using kubernetes to run applications or a software development team that uses kubernetes</description>
    </item>
    <item>
      <title>Databases - NoSQL Fundamentals</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-11-sys-des-db-2/</link>
      <pubDate>Sun, 11 Dec 2022 16:06:32 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-11-sys-des-db-2/</guid>
      <description>Understanding NoSQL databases - when to use them, types of NoSQL databases, and how they differ from relational databases for system design.</description>
    </item>
    <item>
      <title>Load Balancers Layer 4 vs Layer 7 - Deep Dive</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/load-balancers/2022-12-05-sys-des-lb-1/</link>
      <pubDate>Mon, 05 Dec 2022 21:27:29 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/load-balancers/2022-12-05-sys-des-lb-1/</guid>
      <description>Understanding Layer 4 and Layer 7 load balancers, OSI model, hardware vs software load balancers, and choosing the right load balancing approach.</description>
    </item>
    <item>
      <title>Fault Tolerance - Designing Resilient Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-11/</link>
      <pubDate>Sun, 30 Oct 2022 13:53:39 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-11/</guid>
      <description>What is fault tolerance in system design? Learn about graceful degradation, redundancy, circuit breakers, and building systems that handle failures.</description>
    </item>
    <item>
      <title>Consistency Models in Distributed Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-27-sys-des-det-5/</link>
      <pubDate>Thu, 27 Oct 2022 20:56:46 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-27-sys-des-det-5/</guid>
      <description>Understanding consistency models from strong consistency to eventual consistency. Learn CAP theorem, consistency trade-offs, and choosing the right model.</description>
    </item>
    <item>
      <title>System Design Interview Preparation - Structured Learning Path</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-22-sys-des-det-1/</link>
      <pubDate>Sat, 22 Oct 2022 14:31:27 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-22-sys-des-det-1/</guid>
      <description>How to prepare for system design interviews with a structured approach. Learn the fundamentals, practice case studies, and master interview techniques.</description>
    </item>
    <item>
      <title>What are Containers</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-17-k8s-for-non-ops-folks-1-containers/</link>
      <pubDate>Wed, 17 Jul 2024 21:02:54 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-17-k8s-for-non-ops-folks-1-containers/</guid>
      <description>A look at the concepts you must know if you are using kubernetes to run applications or a software development team that uses kubernetes</description>
    </item>
    <item>
      <title>Database Resiliency - Replication and Disaster Recovery</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-23-sys-des-db-3/</link>
      <pubDate>Fri, 23 Dec 2022 19:43:01 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/databases/2022-12-23-sys-des-db-3/</guid>
      <description>Learn about database replication strategies, disaster recovery, data redundancy, and ensuring high availability for distributed systems.</description>
    </item>
    <item>
      <title>System Availability - Understanding Uptime and SLAs</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-7/</link>
      <pubDate>Sun, 30 Oct 2022 08:25:15 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-7/</guid>
      <description>What is availability in system design? Learn how to measure availability, understand SLAs, calculate nines (99.9%, 99.99%), and design highly available systems.</description>
    </item>
    <item>
      <title>Failure Models in Distributed Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-30-sys-des-det-6/</link>
      <pubDate>Sun, 30 Oct 2022 06:48:26 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-30-sys-des-det-6/</guid>
      <description>Understanding failure modes in distributed systems. Learn about crash failures, Byzantine failures, network partitions, and the fallacies of distributed computing.</description>
    </item>
    <item>
      <title>What to Do During Your System Design Interview</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-25-sys-des-det-2/</link>
      <pubDate>Tue, 25 Oct 2022 22:48:03 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-25-sys-des-det-2/</guid>
      <description>Ace your system design interview with proven strategies. Learn how to handle stress, ask clarifying questions, communicate effectively, and structure your solution.</description>
    </item>
    <item>
      <title>Database Scalability - Sharding and Partitioning</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/databases/2024-12-13-sys-des-db-4/</link>
      <pubDate>Fri, 13 Dec 2024 19:43:01 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/databases/2024-12-13-sys-des-db-4/</guid>
      <description>Learn database sharding, partitioning strategies, consistent hashing, and how to scale databases horizontally for millions of users.</description>
    </item>
    <item>
      <title>Nodes</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-18-k8s-for-non-ops-folks-2-nodes/</link>
      <pubDate>Thu, 18 Jul 2024 22:11:44 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-07-18-k8s-for-non-ops-folks-2-nodes/</guid>
      <description>A look at the concepts you must know if you are using kubernetes to run applications or a software development team that uses kubernetes</description>
    </item>
    <item>
      <title>Approximate Calculations for System Design Interviews</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-31-sys-des-det-12/</link>
      <pubDate>Mon, 31 Oct 2022 21:06:57 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-10-31-sys-des-det-12/</guid>
      <description>Master back-of-the-envelope calculations for system design. Learn to estimate storage, bandwidth, QPS, and make quick capacity planning decisions.</description>
    </item>
    <item>
      <title>System Reliability - Building Dependable Systems</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-8/</link>
      <pubDate>Sun, 30 Oct 2022 09:54:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-8/</guid>
      <description>What is reliability in system design? Learn how to measure MTBF, MTTR, build fault-tolerant systems, and ensure consistent performance.</description>
    </item>
    <item>
      <title>What is System Design? Understanding the Fundamentals</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-26-sys-des-det-3/</link>
      <pubDate>Wed, 26 Oct 2022 21:12:54 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/introduction/2022-10-26-sys-des-det-3/</guid>
      <description>What is system design and why does it matter? Learn the core concepts, principles, and thinking patterns behind designing scalable distributed systems.</description>
    </item>
    <item>
      <title>Objects and manifests - an introduction</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-08-05-k8s-for-non-ops-folks-3-objects/</link>
      <pubDate>Mon, 05 Aug 2024 22:37:12 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-08-05-k8s-for-non-ops-folks-3-objects/</guid>
      <description>A look at the concepts you must know if you are using kubernetes to run applications or a software development team that uses kubernetes</description>
    </item>
    <item>
      <title>Domain Name System (DNS) Explained</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-11-21-sys-des-dns/</link>
      <pubDate>Mon, 21 Nov 2022 20:25:01 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/foundational-concepts/2022-11-21-sys-des-dns/</guid>
      <description>What is DNS and how does it work? Learn about the internet&amp;#39;s phonebook, DNS architecture, resource records, and how domain names translate to IP addresses.</description>
    </item>
    <item>
      <title>System Scalability - Horizontal and Vertical Scaling</title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-9/</link>
      <pubDate>Sun, 30 Oct 2022 11:07:16 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/non-functional-requirements/2022-10-30-sys-des-det-9/</guid>
      <description>What is scalability in system design? Learn horizontal vs vertical scaling, load balancing, caching strategies, and designing systems for millions of users.</description>
    </item>
    <item>
      <title>The path to become an expert in k8s</title>
      <link>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-12-14-k8s-path-to-expert/</link>
      <pubDate>Fri, 13 Dec 2024 22:37:12 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/intro-k8s/2024-12-14-k8s-path-to-expert/</guid>
      <description>Now that you have seen the basics, how do you become a seasoned professional with k8s</description>
    </item>
    <item>
      <title>What Is an AI Agent? The Loop Behind the Hype</title>
      <link>https://www.softwarecraftsperson.com/posts/what-is-an-ai-agent/</link>
      <pubDate>Thu, 08 Oct 2026 00:19:06 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/what-is-an-ai-agent/</guid>
      <description>An AI agent is a loop: the model proposes, the harness runs tools and feeds results back. How the loop works, how it ends, and why it has no &amp;#39;impossible&amp;#39; exit.</description>
    </item>
    <item>
      <title>1,200 Agents and a Package Cache: What the OpenAI–Hugging Face Incident Teaches Us</title>
      <link>https://www.softwarecraftsperson.com/posts/openai-hugging-face-agent-incident/</link>
      <pubDate>Sat, 03 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/openai-hugging-face-agent-incident/</guid>
      <description>How AI agents in an OpenAI evaluation turned a package cache into a message board, breached Hugging Face, and what engineers should learn from it.</description>
    </item>
    <item>
      <title>Culture Is the Operating System: How Engineering Leaders Build, Scale and Renew Great Teams</title>
      <link>https://www.softwarecraftsperson.com/posts/evolving-organisational-culture-as-you-scale/</link>
      <pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/evolving-organisational-culture-as-you-scale/</guid>
      <description>Why culture is a team&amp;#39;s operating system, and how engineering leaders build, scale and renew it as a company grows from startup to scale-up to maturity.</description>
    </item>
    <item>
      <title>The Art of Estimation in Software Engineering</title>
      <link>https://www.softwarecraftsperson.com/posts/art-of-estimation-software-engineering/</link>
      <pubDate>Tue, 28 Jul 2026 19:18:32 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/art-of-estimation-software-engineering/</guid>
      <description>A practical guide to software estimation: reduce ambiguity, improve confidence, and choose the right sizing units for initiatives, epics, and stories.</description>
    </item>
    <item>
      <title>Accomplishment Amnesia: What It Is and How to Overcome It</title>
      <link>https://www.softwarecraftsperson.com/posts/accomplishment-amnesia-what-it-is-and-how-to-overcome-it/</link>
      <pubDate>Sun, 26 Jul 2026 16:08:48 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/accomplishment-amnesia-what-it-is-and-how-to-overcome-it/</guid>
      <description>Learn why high achievers forget their wins, how accomplishment amnesia fuels self-doubt, and practical habits to rebuild confidence and self-respect.</description>
    </item>
    <item>
      <title>Building High-Agency Software Engineering Teams</title>
      <link>https://www.softwarecraftsperson.com/posts/build-high-agency-teams/</link>
      <pubDate>Sat, 25 Jul 2026 18:03:41 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/build-high-agency-teams/</guid>
      <description>A framework for engineering leaders to foster team autonomy, psychological safety, and ownership culture through hiring, enablement, and accountability systems.</description>
    </item>
    <item>
      <title>From shiny toys to daily workhorse - how we transformed our approach to Generative AI in engineering</title>
      <link>https://www.softwarecraftsperson.com/posts/shiny-toys-to-daily-workhorse-gen-ai/</link>
      <pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/shiny-toys-to-daily-workhorse-gen-ai/</guid>
      <description>How I moved my team&amp;#39;s GenAI use from shiny toys to a daily workhorse: no mandates, just a dedicated space for structured experiments, and what we learnt.</description>
    </item>
    <item>
      <title>Practical GitHub Repository Hardening for a Hugo Site</title>
      <link>https://www.softwarecraftsperson.com/posts/github-repository-hardening-playbook/</link>
      <pubDate>Wed, 01 Apr 2026 09:00:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/github-repository-hardening-playbook/</guid>
      <description>A practical playbook for hardening a Hugo repository with reproducible builds, dependency controls, secret scanning, Semgrep, scorecards, and local guardrails.</description>
    </item>
    <item>
      <title>When Your Workplace Controls Your Personal GitHub Repos: Understanding GitHub Org Policies</title>
      <link>https://www.softwarecraftsperson.com/posts/github-org-policies-affect-personal-repos/</link>
      <pubDate>Wed, 01 Apr 2026 09:00:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/github-org-policies-affect-personal-repos/</guid>
      <description>Joining a GitHub organisation with your personal account can let enterprise policies restrict your private repos. Here&amp;#39;s how GitHub&amp;#39;s permission layers work.</description>
    </item>
    <item>
      <title>Prompting Essentials for Software Engineers: 4 Practical Strategies for Better AI Output</title>
      <link>https://www.softwarecraftsperson.com/posts/prompting-essentials-for-software-engineers/</link>
      <pubDate>Sun, 29 Mar 2026 21:43:23 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/prompting-essentials-for-software-engineers/</guid>
      <description>Four practical prompting strategies software engineers can use with LLMs to gather better requirements, weigh trade-offs and ship higher-quality code.</description>
    </item>
    <item>
      <title>Start Here to Learn Large Language Models: Best Andrej Karpathy Resources</title>
      <link>https://www.softwarecraftsperson.com/posts/learn-large-language-models-karpathy-resources/</link>
      <pubDate>Sat, 07 Mar 2026 21:38:10 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/learn-large-language-models-karpathy-resources/</guid>
      <description>Start your LLM learning journey with Andrej Karpathy&amp;#39;s best talks on pretraining, finetuning, scaling laws, and practical model-building resources.</description>
    </item>
    <item>
      <title>From Concept to Production: Building CalOohPay with AI-Assisted Development</title>
      <link>https://www.softwarecraftsperson.com/posts/2026-01-31-ai-assisted-development-caloohpay-journey/</link>
      <pubDate>Sat, 31 Jan 2026 10:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2026-01-31-ai-assisted-development-caloohpay-journey/</guid>
      <description>How I built CalOohPay, from a CLI tool to a web app, with GitHub Copilot and Claude Sonnet: what AI-assisted coding sped up and why clear constraints mattered.</description>
    </item>
    <item>
      <title>Shift Reliability Left: Use SLOs to Guide Architecture Early</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-12-04-sli-slo-reliability-shift-left/</link>
      <pubDate>Thu, 04 Dec 2025 09:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-12-04-sli-slo-reliability-shift-left/</guid>
      <description>A practical guide to defining SLOs and SLIs early in the SDLC so reliability requirements shape architecture, testing, and release decisions.</description>
    </item>
    <item>
      <title>To Code or Not to Code as an Engineering Manager: Making the Right Choice</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-10-30-engineering-manager-code-or-not/</link>
      <pubDate>Thu, 30 Oct 2025 21:44:57 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-10-30-engineering-manager-code-or-not/</guid>
      <description>Should engineering managers code? My take: your EM archetype, what your organisation expects, staying close to your team&amp;#39;s workflow, and coding outside work.</description>
    </item>
    <item>
      <title>Transactional Outbox Pattern: A Practical Guide to Trade-offs</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-10-08-transactional-outbox-pattern/</link>
      <pubDate>Mon, 08 Sep 2025 21:40:52 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-10-08-transactional-outbox-pattern/</guid>
      <description>How the Transactional Outbox Pattern solves the dual write problem between your database and message broker, with implementation choices and trade-offs.</description>
    </item>
    <item>
      <title>The Honey Badger Management Framework</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-07-29-honey-badger-management-framework/</link>
      <pubDate>Tue, 29 Jul 2025 10:13:49 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-07-29-honey-badger-management-framework/</guid>
      <description>A critical look at the Honey Badger Management Framework: its Guru, Manager and Specialist roles, ESG and AI claims, and how it compares with Scrum.</description>
    </item>
    <item>
      <title>Moving to AWS Amplify from Azure</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-05-26-aws-amplify-hugo/</link>
      <pubDate>Mon, 26 May 2025 08:16:14 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-05-26-aws-amplify-hugo/</guid>
      <description>How I moved a Hugo blog from Azure Front Door to AWS Amplify Hosting: the amplify.yml build spec, a Route 53 hosted zone and a zero-downtime DNS switch.</description>
    </item>
    <item>
      <title>Azure CDN, Front Door and the cost</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-04-25-azure-cdn-front-door/</link>
      <pubDate>Fri, 25 Apr 2025 22:41:59 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-04-25-azure-cdn-front-door/</guid>
      <description>One click on Azure&amp;#39;s prompt to migrate my static blog from Azure CDN to Front Door Standard pushed hosting to £34 a month. What changed and what I did next.</description>
    </item>
    <item>
      <title>How to install an older version of Hugo on MacOs</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-04-12-how-install-older-hugo/</link>
      <pubDate>Sat, 12 Apr 2025 16:26:05 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-04-12-how-install-older-hugo/</guid>
      <description>Hugo 0.146.0 broke PaperMod builds. Here is how to install an older Hugo binary on macOS in a local bin directory and put it first on your PATH.</description>
    </item>
    <item>
      <title>Evolving your Leadership Style as you scale your organisation</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-12-14-scaling-evolving-leadership-style/</link>
      <pubDate>Sat, 14 Dec 2024 22:58:57 +0530</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-12-14-scaling-evolving-leadership-style/</guid>
      <description>What worked when leading one small team stops working as you lead many. Why your leadership style has to evolve as your organisation scales, and how mine did.</description>
    </item>
    <item>
      <title>How and Why should you Sign Git Commits with GPG: A Practical Guide</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-11-12-signing-gpg-commit/</link>
      <pubDate>Thu, 12 Dec 2024 09:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-11-12-signing-gpg-commit/</guid>
      <description>How and why to sign Git commits with GPG: what commit signing proves, how it prevents identity spoofing, and step-by-step setup for macOS, Linux and GitHub.</description>
    </item>
    <item>
      <title>Adding a responsive menu to your Hugo PaperMod blog</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-11-09-responsive-menu/</link>
      <pubDate>Sat, 09 Nov 2024 16:37:36 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-11-09-responsive-menu/</guid>
      <description>Add a responsive hamburger menu to a Hugo PaperMod blog by overriding header.html with custom CSS and JavaScript, so mobile readers can navigate easily.</description>
    </item>
    <item>
      <title>Why your internal developer platform will fail</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-10-31-why-your-idp-will-fail/</link>
      <pubDate>Thu, 31 Oct 2024 21:35:44 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-10-31-why-your-idp-will-fail/</guid>
      <description>Why internal developer platforms fail and how to avoid it: lessons from leading a platform engineering team on giving your IDP a product mindset.</description>
    </item>
    <item>
      <title>Managing life with a new born</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-10-20-managing-a-newborn/</link>
      <pubDate>Sun, 20 Oct 2024 21:04:16 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-10-20-managing-a-newborn/</guid>
      <description>What no one tells you about starting a family while working in tech: preparing for the birth, parental leave, returning to work and the daycare sickness wave.</description>
    </item>
    <item>
      <title>Virtual Private Cloud (VPC): A Practical Guide to Cloud Network Isolation</title>
      <link>https://www.softwarecraftsperson.com/posts/2025-08-21-virtual-private-cloud/</link>
      <pubDate>Wed, 21 Aug 2024 21:44:57 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2025-08-21-virtual-private-cloud/</guid>
      <description>What a VPC is, how subnets and security layers isolate your network in the public cloud, and a step-by-step example of creating one on AWS from scratch.</description>
    </item>
    <item>
      <title>The Hidden Dangers of Unconscious Bias: Understanding and Managing Implicit Prejudices</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-08-15-dangers-of-unconscious-bias/</link>
      <pubDate>Thu, 15 Aug 2024 07:55:18 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-08-15-dangers-of-unconscious-bias/</guid>
      <description>What unconscious bias is, how it quietly shapes our judgements of people, the harm it does to careers and communities, and ways to recognise and manage it.</description>
    </item>
    <item>
      <title>Lack of product thinking - A rant</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-04-01-lack-product-thinking/</link>
      <pubDate>Mon, 01 Apr 2024 22:28:49 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-04-01-lack-product-thinking/</guid>
      <description>A rant on why engineers chase shiny tech over users&amp;#39; real problems: how rewriting a monolith into microservices went wrong, and why product thinking matters.</description>
    </item>
    <item>
      <title>Using Hugo Modules for themes</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-04-01-hugo-modules/</link>
      <pubDate>Mon, 01 Apr 2024 15:29:34 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-04-01-hugo-modules/</guid>
      <description>Switch your Hugo theme from a Git submodule to a Hugo Module, and fix the &amp;#39;module not found&amp;#39; error caused by leaving the theme setting in config.yml.</description>
    </item>
    <item>
      <title>What is Incident Management in Software Engineering?</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-03-02-incident-response-and-management/</link>
      <pubDate>Sat, 02 Mar 2024 07:09:15 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-03-02-incident-response-and-management/</guid>
      <description>Incidents, managing them and the various roles involved in managing them. How do you go about setting up an incident management process for your org?</description>
    </item>
    <item>
      <title>What is my Management Philosophy</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-20-management-philosophy/</link>
      <pubDate>Tue, 20 Feb 2024 21:44:40 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-20-management-philosophy/</guid>
      <description>My engineering management philosophy: psychological safety, trust, a rigorous hiring process, candid feedback, and helping my reports grow beyond me.</description>
    </item>
    <item>
      <title>The journey of an email - from sender to receiver and everything in between</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-18-how-email-works/</link>
      <pubDate>Sun, 18 Feb 2024 18:21:06 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-18-how-email-works/</guid>
      <description>Follow an email from sender to inbox: user agents, mail servers, SMTP, POP3 and IMAP, then how SPF, DKIM and DMARC stop spoofing of your domain.</description>
    </item>
    <item>
      <title>Updating PaperMod to the latest and greatest</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-06-papermod-update/</link>
      <pubDate>Tue, 06 Feb 2024 22:42:57 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-06-papermod-update/</guid>
      <description>Notes from updating the PaperMod theme: why it forced a Hugo upgrade, and swapping an abandoned Hugo GitHub Action for peaceiris/actions-hugo in CI.</description>
    </item>
    <item>
      <title>How I optimised my blog&#39;s search performance</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-05-hugo-optimise-fusejs-search/</link>
      <pubDate>Mon, 05 Feb 2024 00:25:31 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-05-hugo-optimise-fusejs-search/</guid>
      <description>Speed up Hugo PaperMod&amp;#39;s Fuse.js search by debouncing the type-ahead and listening to the input event, so search no longer runs on every keystroke.</description>
    </item>
    <item>
      <title>How to add commenting functionality to your Hugo Blog using Utterances</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-04-blog-comments-using-utterances/</link>
      <pubDate>Sun, 04 Feb 2024 18:36:45 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-04-blog-comments-using-utterances/</guid>
      <description>Add free, open-source comments to a Hugo PaperMod blog with Utterances, which stores each post&amp;#39;s discussion as a GitHub issue. Setup takes minutes.</description>
    </item>
    <item>
      <title>How to create a custom mode for Hugo-PaperMod theme using go template and html</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-03-hugo-papermod-modes/</link>
      <pubDate>Sat, 03 Feb 2024 22:23:40 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-03-hugo-papermod-modes/</guid>
      <description>Creating a custom landing page for Hugo-PaperMod that is a combination of the HomeInfo mode and the profile mode. I call it the Hybrid mode.</description>
    </item>
    <item>
      <title>Style Modifications to Hugo PaperMod</title>
      <link>https://www.softwarecraftsperson.com/posts/2024-02-02-hugo-papermod-mods/</link>
      <pubDate>Fri, 02 Feb 2024 04:00:31 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2024-02-02-hugo-papermod-mods/</guid>
      <description>A quick look at hugo-PaperMod-Mod, a set of community CSS tweaks that add thumbnails, a sidebar table of contents and wider posts to Hugo PaperMod.</description>
    </item>
    <item>
      <title>Hugo Partial for Buy me a coffee button</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-12-26-partial-for-bmc/</link>
      <pubDate>Tue, 26 Dec 2023 21:43:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-12-26-partial-for-bmc/</guid>
      <description>Learn when to use a Hugo partial template instead of a shortcode, and add a Buy Me a Coffee button to every blog post without editing each post.</description>
    </item>
    <item>
      <title>What happens during a TLS handshake?</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-10-22-what-happens-during-tls-handshake/</link>
      <pubDate>Sun, 22 Oct 2023 14:02:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-10-22-what-happens-during-tls-handshake/</guid>
      <description>An illustrated, step-by-step walkthrough of the TLS handshake between a client and server over HTTPS using RSA key exchange, drawn for beginners.</description>
    </item>
    <item>
      <title>Handling conflicts in a high performing team</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-02-19-handling-difficult-questions/</link>
      <pubDate>Sun, 17 Sep 2023 11:04:20 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-02-19-handling-difficult-questions/</guid>
      <description>Why conflict in high-performing teams is healthy, why disagreements turn personal, and how a manager can recognise the problem and coach people to resolve it.</description>
    </item>
    <item>
      <title>Why and When would you use a Serverless approach to solving your problem?</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-06-11-why-when-serverless/</link>
      <pubDate>Sun, 11 Jun 2023 13:02:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-06-11-why-when-serverless/</guid>
      <description>Serverless versus fully orchestrated solutions: cold starts, testing, lock-in, pay-per-use and built-in scaling, and how I answered it in an interview.</description>
    </item>
    <item>
      <title>Why I became an Ethnic Diversity Community Lead</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-04-21-why-i-am-edc-lead/</link>
      <pubDate>Fri, 21 Apr 2023 21:52:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-04-21-why-i-am-edc-lead/</guid>
      <description>Why I volunteered as an Ethnic Diversity Community Lead: facing racism growing up in the UAE, the value of diverse teams, and the challenges ahead.</description>
    </item>
    <item>
      <title>Switching from managing teams to managing managers</title>
      <link>https://www.softwarecraftsperson.com/posts/2023-02-15-managing-managers/</link>
      <pubDate>Wed, 15 Feb 2023 13:04:20 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2023-02-15-managing-managers/</guid>
      <description>What changes when you move from managing engineers to managing other managers: more thinking than doing, driving outcomes, and leading through others.</description>
    </item>
    <item>
      <title>What is Homebrew? How is it useful?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-12-25-homebrew-macos/</link>
      <pubDate>Sun, 25 Dec 2022 20:40:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-12-25-homebrew-macos/</guid>
      <description>What Homebrew is and why every Mac developer installs it, with its vocabulary explained: formulae, bottles, the cellar, kegs, racks and taps.</description>
    </item>
    <item>
      <title>Setting up your Macbook Pro as a developer</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-12-25-macbook-pro-setup/</link>
      <pubDate>Sun, 25 Dec 2022 18:04:20 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-12-25-macbook-pro-setup/</guid>
      <description>How I set up a new MacBook Pro as a developer, from first boot and Apple ID to the App Store, browser and tools, so setting up the next one takes far less time.</description>
    </item>
    <item>
      <title>What did I learn from The Unicorn Project?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-12-24-unicorn-project-summary/</link>
      <pubDate>Sat, 24 Dec 2022 00:16:02 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-12-24-unicorn-project-summary/</guid>
      <description>What I learnt from The Unicorn Project, Gene Kim&amp;#39;s follow-up to The Phoenix Project: a summary of the book and its five ideals, from locality to customer focus.</description>
    </item>
    <item>
      <title>What is a System Design Interview</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-10-16-system-design-overview/</link>
      <pubDate>Sun, 16 Oct 2022 12:16:28 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-10-16-system-design-overview/</guid>
      <description>What a system design interview is, why companies run them and what interviewers expect, with how to prepare and the distributed systems fundamentals to know.</description>
    </item>
    <item>
      <title>Creating a great organisational culture</title>
      <link>https://www.softwarecraftsperson.com/posts/creating-a-great-organisational-culture/</link>
      <pubDate>Fri, 07 Oct 2022 19:38:31 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/creating-a-great-organisational-culture/</guid>
      <description>Learn how to build a positive organisational culture through clear values, thoughtful hiring, strong leadership, career frameworks, and belonging.</description>
    </item>
    <item>
      <title>Psychological Safety: What, how and why?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-08-13-psychological-safety/</link>
      <pubDate>Sat, 13 Aug 2022 13:22:14 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-08-13-psychological-safety/</guid>
      <description>What psychological safety is, why it matters, how it differs from a safety culture, why it matters in software engineering, and the benefits it brings to teams.</description>
    </item>
    <item>
      <title>Invisible Work and how you can tame it in your organisation</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-08-07-invisible-work/</link>
      <pubDate>Sun, 07 Aug 2022 16:25:57 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-08-07-invisible-work/</guid>
      <description>What invisible work is, why it hurts leaders and team members alike, and the true story of how one team made its hidden work visible and got it under control.</description>
    </item>
    <item>
      <title>What is Self Management and why do you need to get better at it?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-06-27-self-management/</link>
      <pubDate>Mon, 27 Jun 2022 23:35:31 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-06-27-self-management/</guid>
      <description>What self-management is and why getting better at it makes you a better leader: self-awareness, motivation, social skills, empathy, accountability, influence.</description>
    </item>
    <item>
      <title>Azure Service Principal Credential Reset</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-04-23-az-sp-credential-reset/</link>
      <pubDate>Sat, 23 Apr 2022 17:21:09 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-04-23-az-sp-credential-reset/</guid>
      <description>My GitHub Actions deploy failed because an Azure service principal&amp;#39;s client secret had expired. How to reset the credential in the Azure portal or with the CLI.</description>
    </item>
    <item>
      <title>Coaching conversations using the GROW Model</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-04-18-coaching-using-grow-model/</link>
      <pubDate>Mon, 18 Apr 2022 16:05:59 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-04-18-coaching-using-grow-model/</guid>
      <description>What the GROW coaching model is, how Goal, Reality, Options and Will structure a coaching conversation, and a worked example of using it with a team member.</description>
    </item>
    <item>
      <title>Leadership, trust and how not to ruin it</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-03-26-trust-leadership-toxic/</link>
      <pubDate>Sat, 26 Mar 2022 11:44:58 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-03-26-trust-leadership-toxic/</guid>
      <description>A manager&amp;#39;s view of trust and leadership in a fast-changing company: respect, favouritism, narcissism, personal boundaries and practising what you preach.</description>
    </item>
    <item>
      <title>What are Git submodules?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-02-19-git-sub-modules/</link>
      <pubDate>Sat, 19 Feb 2022 20:39:46 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-02-19-git-sub-modules/</guid>
      <description>What Git submodules are and how to use them: adding a repository as a submodule, cloning a repo that has submodules, and pulling the submodule&amp;#39;s latest version.</description>
    </item>
    <item>
      <title>What is Agile Scrum?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-02-14-agile-scrum-series/</link>
      <pubDate>Mon, 14 Feb 2022 02:13:20 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-02-14-agile-scrum-series/</guid>
      <description>What is Agile, what is Scrum, and are they the same thing? The Agile values, Scrum&amp;#39;s three pillars of empiricism, its values and its three accountabilities.</description>
    </item>
    <item>
      <title>Building software quality from Day 1 using Lean Quality Assurance</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-01-30-good-quality-assurance/</link>
      <pubDate>Sun, 30 Jan 2022 16:24:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-01-30-good-quality-assurance/</guid>
      <description>How to build quality in from day one with lean QA: teams owning quality, cutting waste in testing, finding bugs sooner and getting everyone doing agile testing.</description>
    </item>
    <item>
      <title>Customize your Mac or Linux prompt or terminal</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-01-23-shell-customize-mac-linux/</link>
      <pubDate>Sun, 23 Jan 2022 10:10:13 -0800</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-01-23-shell-customize-mac-linux/</guid>
      <description>How I customised my terminal prompt on macOS and Linux to show the current git branch and more, coming back to the command line as an engineering manager.</description>
    </item>
    <item>
      <title>Site Reliability Engineering vs DevOps — How they differ and when to use each</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-12-04-site-reliability-engineering/</link>
      <pubDate>Sat, 04 Dec 2021 00:17:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-12-04-site-reliability-engineering/</guid>
      <description>A practical comparison of Site Reliability Engineering (SRE) and DevOps: responsibilities, culture, tooling, and recommendations for building reliable systems.</description>
    </item>
    <item>
      <title>Azure Active Directory for Developers: What you need to know</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-10-23-az-ad-for-devs/</link>
      <pubDate>Sat, 23 Oct 2021 15:27:17 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-10-23-az-ad-for-devs/</guid>
      <description>What developers need to know about Azure Active Directory: directory services, identity, what modern identity solves and setting up Azure AD authentication.</description>
    </item>
    <item>
      <title>How to use complex settings in Azure Functions using Options pattern and Dependency injection</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-di-opts/</link>
      <pubDate>Fri, 22 Oct 2021 22:25:15 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-di-opts/</guid>
      <description>Using the options pattern and dependency injection for settings in Azure Functions, and the local.settings.json naming rules I had been ignoring.</description>
    </item>
    <item>
      <title>Azure functions with Swagger and OpenAPI</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-swagger-openapi/</link>
      <pubDate>Sun, 19 Sep 2021 21:13:56 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-swagger-openapi/</guid>
      <description>How to add Swagger UI to HTTP-triggered Azure Functions in C#: what OpenAPI and Swagger are, and setting up Swashbuckle or the OpenAPI extension.</description>
    </item>
    <item>
      <title>DevOps, Continuous Integration, Delivery and Deployment</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-08-09-ci-cd-deploy-strategies/</link>
      <pubDate>Sun, 29 Aug 2021 16:36:18 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-08-09-ci-cd-deploy-strategies/</guid>
      <description>What DevOps, continuous integration, continuous delivery and continuous deployment mean, why they matter and why many companies still don&amp;#39;t practise them.</description>
    </item>
    <item>
      <title>Azure Cognitive Search (formerly Azure Search)</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-08-27-azure-search/</link>
      <pubDate>Fri, 27 Aug 2021 11:23:02 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-08-27-azure-search/</guid>
      <description>An introduction to Azure Cognitive Search: what an application search engine does, the features and pricing tiers, and where it fits in your architecture.</description>
    </item>
    <item>
      <title>What is Software Architecture and what does a software architect do?</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-07-24-software-architecture/</link>
      <pubDate>Sat, 24 Jul 2021 15:37:38 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-07-24-software-architecture/</guid>
      <description>What software architecture is, what a software architect does and how architecture differs from design, with an example of improving a system&amp;#39;s design.</description>
    </item>
    <item>
      <title>Azure Pipelines and test code coverage for Dotnet core projects</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-29-az-pipeline-test-coverage/</link>
      <pubDate>Tue, 29 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-29-az-pipeline-test-coverage/</guid>
      <description>Azure Pipelines and dotnet core test coverage: How to configure your pipeline to generate test code coverage for continuous integration quality checks.</description>
    </item>
    <item>
      <title>Entity Framework Core: Configure Database Connection using Azure Service Token Provider</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-22-az-ad-sql-conn/</link>
      <pubDate>Sat, 26 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-22-az-ad-sql-conn/</guid>
      <description>Connecting EF Core to Azure SQL with Azure AD access tokens, the right way, using a DbConnectionInterceptor, plus the newer connection-string-only option.</description>
    </item>
    <item>
      <title>OPENJSON - The Utility function you did not know you needed in a Data transfer Logic App</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-21-open-json/</link>
      <pubDate>Mon, 21 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-21-open-json/</guid>
      <description>How SQL Server&amp;#39;s OPENJSON function turns one action&amp;#39;s JSON results into rows the next SQL step in an Azure Logic App can use, with worked examples.</description>
    </item>
    <item>
      <title>What is Caching? The different types of caches and interfaces in .NET Core for caching</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-20-caching/</link>
      <pubDate>Sun, 20 Jun 2021 16:50:45 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-20-caching/</guid>
      <description>What caching is, why you can&amp;#39;t cache everything, in-memory versus distributed caches, and the interfaces ASP.NET Core gives you for caching in web applications.</description>
    </item>
    <item>
      <title>What are Azure Logic Apps and How to deploy them using Azure Devops Pipeline - A tutorial and a list of challenges you might encounter</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-12-az-logic-app-pipeline/</link>
      <pubDate>Sat, 12 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-12-az-logic-app-pipeline/</guid>
      <description>A step-by-step tutorial on building Azure Logic Apps in Visual Studio and deploying them through a CI/CD pipeline, with the challenges you might hit on the way.</description>
    </item>
    <item>
      <title>Proxy vs Reverse Proxy - What are they?</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-06-proxy-reverse/</link>
      <pubDate>Sun, 06 Jun 2021 15:25:41 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-06-proxy-reverse/</guid>
      <description>What a proxy server and a reverse proxy are, what each one is useful for and how they differ, explained simply for developers new to networking.</description>
    </item>
    <item>
      <title>Git, Case Sensitivity and Github actions</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-15-git-case-sensitivity/</link>
      <pubDate>Sat, 15 May 2021 22:50:18 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-15-git-case-sensitivity/</guid>
      <description>How a mixed-case project name on Windows broke my GitHub Actions build on Linux: Git&amp;#39;s case sensitivity, why it bit me and how to fix and avoid the problem.</description>
    </item>
    <item>
      <title>Cohesion and Coupling - two important concepts to understand when building good software</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-09-cohesion-coupling/</link>
      <pubDate>Sun, 09 May 2021 22:55:34 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-09-cohesion-coupling/</guid>
      <description>What cohesion and coupling mean in software design, where the ideas came from in structured design, and how they differ, with references for further reading.</description>
    </item>
    <item>
      <title>Using ProblemDetails in .NET Core 3.1 with C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-04-problem-details/</link>
      <pubDate>Sat, 08 May 2021 15:30:08 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-04-problem-details/</guid>
      <description>How to return consistent API errors with ProblemDetails in ASP.NET Core: what RFC 7807 problem details are, handling exceptions and customising responses.</description>
    </item>
    <item>
      <title>.NET (dotnet) Framework and Core and things</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-07-dotnet/</link>
      <pubDate>Fri, 07 May 2021 21:48:44 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-07-dotnet/</guid>
      <description>ASP.NET, .NET Framework, .NET Core: what each one is, how they differ, what the ASP part means and how server-side web apps work, explained in plain terms.</description>
    </item>
    <item>
      <title>Client Side Search for your Hugo Blog with Fuse.js</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-01-client-side-search-fuse/</link>
      <pubDate>Sat, 01 May 2021 22:21:16 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-01-client-side-search-fuse/</guid>
      <description>How I added fast client-side search to my Hugo blog with Fuse.js and Mark.js: generating a JSON index, the search page and highlighting the matching results.</description>
    </item>
    <item>
      <title>Event Storming</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-04-25-event-storming/</link>
      <pubDate>Sun, 25 Apr 2021 18:41:27 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-04-25-event-storming/</guid>
      <description>What Event Storming is and how it uncovers hidden domain complexity: domain events, hotspots, external systems and running Big Picture Event Storming workshops.</description>
    </item>
    <item>
      <title>Why Domain Driven Design</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-04-08-why-domain-driven-design/</link>
      <pubDate>Thu, 08 Apr 2021 22:38:30 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-04-08-why-domain-driven-design/</guid>
      <description>Why Domain-Driven Design helps tame complex software: how complexity creeps in, how misunderstood problems derail projects, and why talking to users matters.</description>
    </item>
    <item>
      <title>Good Bye Wordpress. Hello Hugo on Azure Storage</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-04-04-good-bye-wordpress/</link>
      <pubDate>Sun, 04 Apr 2021 17:24:42 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-04-04-good-bye-wordpress/</guid>
      <description>Why I left WordPress for a Hugo static site, deployed continuously from GitHub to Azure Storage behind Azure CDN with GitHub Actions, and how to get started.</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/about/</link>
      <pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/about/</guid>
      <description>Who is Eakan Gopalakrishnan?</description>
    </item>
    <item>
      <title>Web API Versioning</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-03-12-web-api-versioning/</link>
      <pubDate>Fri, 12 Mar 2021 22:35:38 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-03-12-web-api-versioning/</guid>
      <description>How to version an ASP.NET Core Web API without breaking the clients that consume it, illustrated with a sample weather forecast API on GitHub.</description>
    </item>
    <item>
      <title>Managing a team</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-03-03-managing-a-team/</link>
      <pubDate>Wed, 03 Mar 2021 23:21:26 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-03-03-managing-a-team/</guid>
      <description>What I&amp;#39;ve learnt managing teams since 2015: Paloma Medina&amp;#39;s BICEPS model of core human needs at work, and how each need shapes how I manage.</description>
    </item>
    <item>
      <title>Azure Functions - Overview and tutorial</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-24-azure-functions-overview-and-tutorial/</link>
      <pubDate>Sun, 24 Jan 2021 22:44:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-24-azure-functions-overview-and-tutorial/</guid>
      <description>An introduction to Azure Functions, with a hands-on GitHub tutorial that builds an HTTP-triggered function and sends its output to an Azure Storage queue.</description>
    </item>
    <item>
      <title>React aka Reactjs</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-23-react-aka-reactjs/</link>
      <pubDate>Sat, 23 Jan 2021 20:31:51 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-23-react-aka-reactjs/</guid>
      <description>A beginner&amp;#39;s overview of React: what the library is, why the virtual DOM matters, and how to build a to-do list app with Create React App, step by step.</description>
    </item>
    <item>
      <title>Quirky Arrays in C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-14-quirky-arrays-in-c/</link>
      <pubDate>Thu, 14 Jan 2021 21:30:16 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-14-quirky-arrays-in-c/</guid>
      <description>Why C# arrays caught me out on a matrix transpose problem: single-dimensional, multidimensional (rectangular) and jagged arrays explained in plain words.</description>
    </item>
    <item>
      <title>HashSet in C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-10-hashset-in-csharp/</link>
      <pubDate>Sun, 10 Jan 2021 13:08:58 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-10-hashset-in-csharp/</guid>
      <description>How HashSet&amp;lt;T&amp;gt; stores unique elements in C#, with console examples of UnionWith, ExceptWith and SymmetricExceptWith, and a look at its performance.</description>
    </item>
    <item>
      <title>Windows Terminal and customisations</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-31-windows-terminal-and-customisations/</link>
      <pubDate>Thu, 31 Dec 2020 15:58:17 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-31-windows-terminal-and-customisations/</guid>
      <description>Setting up Windows Terminal with PowerShell and WSL: installing it, the fonts that tripped me up, a Solarized Dark theme and fixing prompt customisation.</description>
    </item>
    <item>
      <title>What did I learn as a software engineering manager</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-22-what-i-learned-from-5-years-as-a-software-engineering-manager/</link>
      <pubDate>Tue, 22 Dec 2020 22:53:51 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-22-what-i-learned-from-5-years-as-a-software-engineering-manager/</guid>
      <description>What five years as a software engineering manager taught me: leaving coding behind, the role&amp;#39;s unseen reality, leadership versus management, and introversion.</description>
    </item>
    <item>
      <title>Application Insights in .Net Core App</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-20-application-insights-in-net-core-app/</link>
      <pubDate>Sun, 20 Dec 2020 12:15:55 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-20-application-insights-in-net-core-app/</guid>
      <description>What Application Insights is and how it works in a .NET Core app: adding the NuGet package and instrumentation key, and the telemetry it collects for you.</description>
    </item>
    <item>
      <title>Semantic versioning - Semver - An introduction - node package manager syntax and quirks</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-semantic-versioning-semver-introduction/</link>
      <pubDate>Sun, 06 Dec 2020 18:33:07 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-semantic-versioning-semver-introduction/</guid>
      <description>What semantic versioning is and why it matters: major, minor and patch versions explained with examples, and how npm uses caret and tilde in package.json.</description>
    </item>
    <item>
      <title>Node - Get started</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-node-get-started/</link>
      <pubDate>Sun, 06 Dec 2020 17:37:59 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-node-get-started/</guid>
      <description>Getting started with Node: what the runtime is, how npm fits in, and the different ways to run JavaScript with it, starting with the REPL mode.</description>
    </item>
    <item>
      <title>Node and npm: The intro I wish, I got when I began web development</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-node-and-npm-the-intro-i-wish-i-got-when-i-began-web-development/</link>
      <pubDate>Sun, 06 Dec 2020 14:30:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-node-and-npm-the-intro-i-wish-i-got-when-i-began-web-development/</guid>
      <description>The introduction to Node and npm I wish I&amp;#39;d had: what a JavaScript runtime is, why Node took off, and what npm, its package manager, does for you.</description>
    </item>
    <item>
      <title>Application Insights, SeriLog and .NET Core</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-28-application-insights-serilog-and-net-core/</link>
      <pubDate>Sat, 28 Nov 2020 07:27:55 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-28-application-insights-serilog-and-net-core/</guid>
      <description>Setting up Application Insights with Serilog in a .NET Core app: what Application Insights does, why logging deserves attention, and how to wire it up.</description>
    </item>
    <item>
      <title>Feature Toggles</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-08-feature-toggles/</link>
      <pubDate>Sun, 08 Nov 2020 16:07:49 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-08-feature-toggles/</guid>
      <description>What feature toggles are, the two broad types, and how pairing them with trunk-based development makes continuous integration far less painful.</description>
    </item>
    <item>
      <title>A static responsive website as an Azure AppService</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-31-static-website-as-an-azure-appservice/</link>
      <pubDate>Sat, 31 Oct 2020 21:06:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-31-static-website-as-an-azure-appservice/</guid>
      <description>Building a static responsive website with the viewport meta tag and CSS Flexbox, then hosting it on Azure App Service with a custom domain and an SSL binding.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 4</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-12-ef-core-3-1-part-4/</link>
      <pubDate>Sun, 25 Oct 2020 17:53:59 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-12-ef-core-3-1-part-4/</guid>
      <description>Entity Framework Core 3.1, part 4: when to use database views, stored procedures and raw SQL with EF Core, and how to keep them in your migrations.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 3</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-3/</link>
      <pubDate>Sun, 25 Oct 2020 17:22:33 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-3/</guid>
      <description>Entity Framework Core 3.1, part 3: updating related data when the context isn&amp;#39;t tracking it, and working with many-to-many relationships and join tables.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 2</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-2/</link>
      <pubDate>Sun, 25 Oct 2020 17:16:49 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-2/</guid>
      <description>Entity Framework Core 3.1, part 2: reading and writing data, how change tracking works behind SaveChanges, and logging the SQL EF Core generates.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 1</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-24-ef-core-3-1-part-1/</link>
      <pubDate>Sun, 25 Oct 2020 17:04:36 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-24-ef-core-3-1-part-1/</guid>
      <description>Entity Framework Core 3.1, part 1: what an ORM is, what EF Core brings to .NET, and the essentials of data models and migrations you must know.</description>
    </item>
    <item>
      <title>Containers! Docker! Virtual Machines! What exactly do they do?</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-04-docker/</link>
      <pubDate>Sun, 04 Oct 2020 11:58:01 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-04-docker/</guid>
      <description>When should you use a container? What containers, Docker, virtual machines and hypervisors are, how containers compare with VMs and why Docker took off.</description>
    </item>
    <item>
      <title>Git: Part 5 - Reset and further</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-5-reset-and-further/</link>
      <pubDate>Sat, 03 Oct 2020 13:30:31 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-5-reset-and-further/</guid>
      <description>A practical introduction to Git, part 5: undoing changes with git reset, and how git reflog helps you recover work you thought you had lost for good.</description>
    </item>
    <item>
      <title>Git: Part 4 - Branching and more</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-4-branching-and-more/</link>
      <pubDate>Sat, 03 Oct 2020 13:09:57 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-4-branching-and-more/</guid>
      <description>A practical introduction to Git, part 4: what branches and HEAD are, and the two ways to integrate changes between branches, merging and rebasing.</description>
    </item>
    <item>
      <title>Git: Part 3 - Hands on</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-3-hands-on/</link>
      <pubDate>Sat, 03 Oct 2020 12:39:45 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-3-hands-on/</guid>
      <description>A practical introduction to Git, part 3: hands-on commands to create a repository, configure Git, check status, make commits and browse the commit history.</description>
    </item>
    <item>
      <title>Git: Part 2 - Some essential concepts</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-2-some-essential-concepts/</link>
      <pubDate>Sat, 03 Oct 2020 12:36:03 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-2-some-essential-concepts/</guid>
      <description>A practical introduction to Git, part 2: remotes and hosting platforms, cloning and fetching, and how Git stores your work as trees, blobs and commits.</description>
    </item>
    <item>
      <title>Git: Part 1 - An introduction</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-1-an-introduction/</link>
      <pubDate>Sat, 03 Oct 2020 12:30:48 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-1-an-introduction/</guid>
      <description>A practical introduction to Git, part 1: what version control is and why you need it, how to install Git, and getting started with Git Bash on Windows.</description>
    </item>
    <item>
      <title>Moving a blog to Wordpress</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-09-28-moving-a-blog-to-wordpress/</link>
      <pubDate>Mon, 28 Sep 2020 17:41:27 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-09-28-moving-a-blog-to-wordpress/</guid>
      <description>Why I moved my old Blogger posts to WordPress and how the move works: there&amp;#39;s no magic export button, but WordPress&amp;#39;s import guide makes it easy.</description>
    </item>
    <item>
      <title>Software and invisibility</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-09-16-software-and-invisibility/</link>
      <pubDate>Wed, 16 Sep 2020 20:29:26 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-09-16-software-and-invisibility/</guid>
      <description>Software development is invisible to most stakeholders. Why &amp;#39;90% done&amp;#39; worries people, and practical ways engineers can make their progress visible.</description>
    </item>
    <item>
      <title>Software design - Why?</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-06-27-software-design-why/</link>
      <pubDate>Sat, 27 Jun 2020 14:31:41 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-06-27-software-design-why/</guid>
      <description>Why jumping straight into code backfires: what software design is, why requirements are never a complete spec, and how a design blueprint helps.</description>
    </item>
    <item>
      <title>LINQ - watchout for slow queries</title>
      <link>https://www.softwarecraftsperson.com/posts/2016-02-14-linq-watchout-for-slow-queries/</link>
      <pubDate>Sun, 14 Feb 2016 19:19:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2016-02-14-linq-watchout-for-slow-queries/</guid>
      <description>Why LINQ queries can get slow: lessons from an inherited job scheduling app whose core table used a GUID primary key as a clustered index, and what to look for.</description>
    </item>
    <item>
      <title>Password free SSH login to Server using Putty</title>
      <link>https://www.softwarecraftsperson.com/posts/2016-02-13-password-free-ssh-login-to-server-using/</link>
      <pubDate>Sat, 13 Feb 2016 23:29:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2016-02-13-password-free-ssh-login-to-server-using/</guid>
      <description>How to set up password-free SSH login from Windows with PuTTY and PuTTYgen: generating a key pair, installing the public key on the server and saving a session.</description>
    </item>
    <item>
      <title>Getting to know LINQ</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-07-27-getting-to-know-linq/</link>
      <pubDate>Sun, 27 Jul 2014 20:54:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-07-27-getting-to-know-linq/</guid>
      <description>An introduction to LINQ, Language Integrated Query in C#: what it is, the query and lambda syntaxes, and the basics of querying databases with it.</description>
    </item>
    <item>
      <title>Refactoring - Code written by others</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-04-21-refactoring-code-written-by-others/</link>
      <pubDate>Mon, 21 Apr 2014 01:26:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-04-21-refactoring-code-written-by-others/</guid>
      <description>Refactoring a legacy codebase written by others: why special-casing scenarios is the enemy of maintainability, and why I find refactoring rewarding.</description>
    </item>
    <item>
      <title>Perl Catalyst - VBox Network Configuration on Ubuntu</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-vbox-network/</link>
      <pubDate>Sun, 09 Feb 2014 22:35:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-vbox-network/</guid>
      <description>Running the Perl Catalyst tutorial&amp;#39;s virtual machine inside another VM on Ubuntu, and configuring the VirtualBox network adapter and NAT so the nested VM works.</description>
    </item>
    <item>
      <title>Perl Catalyst Tutorial needs us to download a virtual machine</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-tutorial-needs-us-to/</link>
      <pubDate>Sun, 09 Feb 2014 11:29:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-tutorial-needs-us-to/</guid>
      <description>Getting started with Catalyst, a popular Perl MVC web framework, and why its official tutorial asks you to download and run a ready-made virtual machine.</description>
    </item>
    <item>
      <title>emacs - Why do I use it?</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-09-emacs-why-do-i-use-it/</link>
      <pubDate>Sun, 09 Feb 2014 00:01:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-09-emacs-why-do-i-use-it/</guid>
      <description>Why Emacs became my only text editor on Linux: learning it on the job, getting productive with its built-in tutorial, and why good tools make better developers.</description>
    </item>
    <item>
      <title>Perl module installation - Ubuntu</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-05-perl-module-installation-ubuntu/</link>
      <pubDate>Wed, 05 Feb 2014 22:59:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-05-perl-module-installation-ubuntu/</guid>
      <description>A quick tip for Ubuntu: install a Perl module from CPAN in a single line with perl -MCPAN -e &amp;#39;install ModuleName&amp;#39;, run with sudo for a system-wide install.</description>
    </item>
    <item>
      <title>Perl - Modules and path on disk</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-02-perl-modules-and-path-on-disk/</link>
      <pubDate>Sun, 02 Feb 2014 20:51:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-02-perl-modules-and-path-on-disk/</guid>
      <description>How to find where a Perl module is installed on disk, so the CPAN module versions behind your scripts stay consistent across different operating systems.</description>
    </item>
    <item>
      <title>GNU Screen - Dynamic Window Titles, etc - tmux after this</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-02-more-about-gnu-screen-tmux-after-this/</link>
      <pubDate>Sun, 02 Feb 2014 04:50:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-02-more-about-gnu-screen-tmux-after-this/</guid>
      <description>How I use GNU Screen day to day: customising .screenrc, a hardstatus line and dynamic window titles, and why I&amp;#39;d probably pick tmux if I started again.</description>
    </item>
    <item>
      <title>BASH - keymap and binding</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-01-26-bash-keymap-and-binding/</link>
      <pubDate>Sun, 26 Jan 2014 13:55:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-01-26-bash-keymap-and-binding/</guid>
      <description>How I used bash&amp;#39;s bind and read built-ins to map the up and down arrow keys to history search, so a partly typed command recalls matching history.</description>
    </item>
    <item>
      <title>GNU Screen - Introduction to terminal multiplexing</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-01-22-gnu-screen-introduction-to-terminal/</link>
      <pubDate>Wed, 22 Jan 2014 21:32:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-01-22-gnu-screen-introduction-to-terminal/</guid>
      <description>An introduction to terminal multiplexing with GNU Screen: why one terminal session with many windows beats juggling PuTTY sessions, and how I came to use it.</description>
    </item>
    <item>
      <title>Windows 8 and Windows 8.1 shortcuts</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-12-23-windows-8-and-windows-81-shortcuts/</link>
      <pubDate>Mon, 23 Dec 2013 21:11:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-12-23-windows-8-and-windows-81-shortcuts/</guid>
      <description>A Windows 8 and 8.1 keyboard shortcut you may not know: apps pinned to the taskbar are numbered 1 to 9, and the Windows key plus a number opens each one.</description>
    </item>
    <item>
      <title>Vertica and K-Safety</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-11-06-vertica-and-k-safety/</link>
      <pubDate>Wed, 06 Nov 2013 01:41:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-11-06-vertica-and-k-safety/</guid>
      <description>What K-safety means in Vertica: how duplicate copies of projections keep the cluster available when nodes fail, and why a table can&amp;#39;t go below the system&amp;#39;s K.</description>
    </item>
    <item>
      <title>Perl - Autovivification</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-11-04-perl-autovivification/</link>
      <pubDate>Mon, 04 Nov 2013 23:41:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-11-04-perl-autovivification/</guid>
      <description>What autovivification means in Perl: how assigning to a non-existent entry in a nested hash silently creates the missing levels, and when that can bite you.</description>
    </item>
    <item>
      <title>Software Engineers should read this</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-10-14-software-engineers-should-read-this/</link>
      <pubDate>Mon, 14 Oct 2013 10:21:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-10-14-software-engineers-should-read-this/</guid>
      <description>A short recommendation: every programmer should read and understand Martin Fowler&amp;#39;s IEEE Software column on making implicit design and behaviour explicit.</description>
    </item>
    <item>
      <title>SQuirreL graphical user interface for Vertica</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-09-24-squirrel-graphical-user-interface-for/</link>
      <pubDate>Tue, 24 Sep 2013 17:21:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-09-24-squirrel-graphical-user-interface-for/</guid>
      <description>Setting up SQuirreL SQL, a free, open-source Java database client, as a graphical interface for HP Vertica: adding the driver, an alias and the connection.</description>
    </item>
    <item>
      <title>Vertica Query Performance Tuning - An introduction</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-09-12-vertica-query-performance-tuning/</link>
      <pubDate>Thu, 12 Sep 2013 13:36:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-09-12-vertica-query-performance-tuning/</guid>
      <description>An introduction to Vertica query performance tuning: how tables map to projections across nodes, and the changes that sped up my own slow analytical queries.</description>
    </item>
    <item>
      <title>DIR on VMS and display useful information</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-08-07-dir-on-vms-and-display-useful/</link>
      <pubDate>Wed, 07 Aug 2013 11:20:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-08-07-dir-on-vms-and-display-useful/</guid>
      <description>Making DIR on HP OpenVMS behave more like ls -lrt: options that show versions, dates, owner and size, and why sorting by date needs a script on OpenVMS.</description>
    </item>
    <item>
      <title>Vertica and its version - Find out using SQL</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-24-vertica-and-its-version-find-out-using/</link>
      <pubDate>Mon, 24 Jun 2013 22:09:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-24-vertica-and-its-version-find-out-using/</guid>
      <description>How to find out which version of Vertica you are running with a simple SQL query, even on a shared development cluster without database administrator access.</description>
    </item>
    <item>
      <title>Exploring Vertica&#39;s INTERPOLATE predicate </title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-18-exploring-verticas-interpolate-predicate/</link>
      <pubDate>Tue, 18 Jun 2013 00:55:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-18-exploring-verticas-interpolate-predicate/</guid>
      <description>Exploring Vertica&amp;#39;s INTERPOLATE predicate, which joins tables and fills gaps with the last known value, with simple examples and the case that stumped me.</description>
    </item>
    <item>
      <title>Vertica - Calendar table with dates from a start date to an end date using analytical SQL</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-18-vertica-calendar-table-with-dates-from/</link>
      <pubDate>Tue, 18 Jun 2013 00:50:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-18-vertica-calendar-table-with-dates-from/</guid>
      <description>How to build a calendar table of every date between a start and end date in Vertica using plain SQL rather than a stored procedure, with a Stack Overflow link.</description>
    </item>
    <item>
      <title>Bash v/s Cshell - Functions and their definitions - useful &#39;type&#39; keyword</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-09-bash-vs-cshell-functions-and-their/</link>
      <pubDate>Sun, 09 Jun 2013 23:41:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-09-bash-vs-cshell-functions-and-their/</guid>
      <description>Bash has functions and C shell doesn&amp;#39;t. How I approximate them with aliases in C shell, and how bash&amp;#39;s built-in type keyword shows a function&amp;#39;s full definition.</description>
    </item>
    <item>
      <title>Viewing function definitions in Vertica</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-05-viewing-function-definitions-in-vertica/</link>
      <pubDate>Wed, 05 Jun 2013 09:28:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-05-viewing-function-definitions-in-vertica/</guid>
      <description>Why reading user-defined function definitions from Vertica&amp;#39;s USER_FUNCTIONS table truncates them, and how EXPORT_OBJECTS() shows the full source instead.</description>
    </item>
    <item>
      <title>Setup DBVisualizer with an HP Vertica DB connection</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-05-setup-dbvisualizer-with-hp-vertica-db/</link>
      <pubDate>Wed, 05 Jun 2013 00:03:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-05-setup-dbvisualizer-with-hp-vertica-db/</guid>
      <description>Step-by-step setup of DbVisualizer with an HP Vertica database connection on Windows: installing the JDBC driver, configuring it and connecting to the cluster.</description>
    </item>
    <item>
      <title>CShell and Absurd quotes and eval</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-03-cshell-and-absurd-quotes-and-eval/</link>
      <pubDate>Mon, 03 Jun 2013 20:58:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-03-cshell-and-absurd-quotes-and-eval/</guid>
      <description>Writing a generic wrapper script in C shell, and fighting its quirky quoting rules and eval along the way. A reminder of why C shell scripting is best avoided.</description>
    </item>
    <item>
      <title>MySQL Partitioning Tutorial</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-03-mysql-partitioning-tutorial/</link>
      <pubDate>Mon, 03 Jun 2013 20:57:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-03-mysql-partitioning-tutorial/</guid>
      <description>A pointer to a clear MySQL partitioning tutorial that helped me partition data by how it is accessed, while mapping an object database into a relational one.</description>
    </item>
    <item>
      <title>VSQL extract data into file</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-05-30-vsql-extract-data-into-file/</link>
      <pubDate>Thu, 30 May 2013 17:34:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-05-30-vsql-extract-data-into-file/</guid>
      <description>How to extract query results from a vsql session straight into a file, ready to paste into Excel for someone less familiar with Vertica, without a script.</description>
    </item>
    <item>
      <title>Vertica DELETE columns from one table using data from another</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-05-30-vertica-delete-columns-from-one-table/</link>
      <pubDate>Thu, 30 May 2013 16:34:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-05-30-vertica-delete-columns-from-one-table/</guid>
      <description>How to delete rows in one Vertica table based on matching records in another, when Vertica doesn&amp;#39;t support joins in DELETE statements the way MySQL does.</description>
    </item>
    <item>
      <title>Windows Run box</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-05-07-windows-run-box/</link>
      <pubDate>Tue, 07 May 2013 15:17:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-05-07-windows-run-box/</guid>
      <description>A handy list of Windows Run box commands, such as appwiz.cpl and hdwwiz.cpl, that open control panel tools and utilities directly without hunting through menus.</description>
    </item>
    <item>
      <title>xargs saved my day</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-02-06-xargs-saved-my-day/</link>
      <pubDate>Wed, 06 Feb 2013 22:33:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-02-06-xargs-saved-my-day/</guid>
      <description>How xargs saved my day: working out the disk space used by archived data files spread across nested database directories on Linux, in a single command.</description>
    </item>
    <item>
      <title>Emacs - Copy Line</title>
      <link>https://www.softwarecraftsperson.com/posts/2012-10-02-emac-copy-line/</link>
      <pubDate>Tue, 02 Oct 2012 13:19:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2012-10-02-emac-copy-line/</guid>
      <description>A short Emacs Lisp snippet for your .emacs file that copies whole lines to the kill ring, the copying equivalent of kill-line, bound to Meta-k.</description>
    </item>
    <item>
      <title>Surrogate keys v/s natural keys</title>
      <link>https://www.softwarecraftsperson.com/posts/2012-07-18-surrogate-keys-vs-natural-keys/</link>
      <pubDate>Wed, 18 Jul 2012 13:37:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2012-07-18-surrogate-keys-vs-natural-keys/</guid>
      <description>Surrogate keys or natural keys? Designing tables for financial securities that carry many real-world identifiers, such as SEDOL, CUSIP and ISIN codes.</description>
    </item>
    <item>
      <title>Static in C&#43;&#43;</title>
      <link>https://www.softwarecraftsperson.com/posts/2012-07-18-static-in-c/</link>
      <pubDate>Wed, 18 Jul 2012 11:02:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2012-07-18-static-in-c/</guid>
      <description>The static keyword in C&#43;&#43; means different things in different contexts: variables that live for the whole program, and class members shared by every object.</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/1/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/1/</guid>
      <description>&lt;h1 id=&#34;foundational-learning&#34;&gt;Foundational learning&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=U3RkDLtS7uY&#34;&gt;https://www.youtube.com/watch?v=U3RkDLtS7uY&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;writing-policies&#34;&gt;Writing policies&lt;/h2&gt;
&lt;p&gt;The order in which data is written to the cache and the persistent data store will affect the performance of the cache.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-if-data-is-written-into-the-cache-first&#34;&gt;What happens if data is written into the cache first?&lt;/h2&gt;
&lt;p&gt;Writing the data in the cache first, means you can then choose to either:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;write synchronously to the persistent datastore and then respond to the client&lt;/li&gt;
&lt;li&gt;write to cache and respond to the client but allow writing to the persistent storage asynchronously&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first approach is called Write-through cache. The implications of this approach is that writes will take longer as both the cache and the database are written to and ensured it is successful before a response is sent to the client.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/2/</guid>
      <description>&lt;h1 id=&#34;high-level-design-of-the-distributed-cache&#34;&gt;High level design of the Distributed Cache&lt;/h1&gt;
&lt;h2 id=&#34;functional-requirements&#34;&gt;Functional requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;insert data into the distributed cache&lt;/li&gt;
&lt;li&gt;retrieve data from the distributed cache&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;nfr&#34;&gt;NFR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fast retrieval of data - insert and retrieve should be fast&lt;/li&gt;
&lt;li&gt;scalability - distributed cache must be scalable horizontally without bottlenecks&lt;/li&gt;
&lt;li&gt;availability - ensure that there is sufficient redundancy to keep the system highly available.&lt;/li&gt;
&lt;li&gt;Consistency - The same data retrieved from the cache concurrently should be the same.&lt;/li&gt;
&lt;li&gt;Affordability - shouldn&amp;rsquo;t cost the planet&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;api&#34;&gt;API&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;put (key, value)&lt;/li&gt;
&lt;li&gt;get (key)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;design-considerations&#34;&gt;Design considerations&lt;/h2&gt;
&lt;h3 id=&#34;storage-hardware&#34;&gt;Storage hardware&lt;/h3&gt;
&lt;p&gt;Make use of commodity hardware where possible to keep costs relatively low. Large data will demand more shards, hence keeping commodity hardware will enable us to scale efficiently.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/3/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-cache/3/</guid>
      <description>&lt;h1 id=&#34;evaluating-the-design&#34;&gt;Evaluating the design&lt;/h1&gt;
&lt;h3 id=&#34;high-performance&#34;&gt;High performance&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Consistent Hashing results in O(log(N)) complexity where N represents the number of shards&lt;/li&gt;
&lt;li&gt;On a hash server, it takes constant time to retrieve a value using the key O(1)&lt;/li&gt;
&lt;li&gt;for eviction in the linked list&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s assess the effective access time considering there could be cache hits and misses.&lt;/p&gt;
&lt;p&gt;EAT = Ratio (hit) x Time (hit) +  Ratio(miss) x Time (miss)&lt;/p&gt;
&lt;p&gt;if MFU, we have 10% cache miss and for LRU, 5% cache miss rate&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/1/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/1/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;A distributed system is inherently complex and hence when something goes wrong, it is difficult to pinpoint what happened unless there is good level of observability.&lt;/p&gt;
&lt;p&gt;Observability is the ability to understand what is happening in a distributed system by looking at its external outputs - in this context - logs, metrics, traces etc.&lt;/p&gt;
&lt;p&gt;Failures in distributed systems could be attributed to infrastructure - server, network, electrical, etc or due to the application that we care about. One service going down in the system can take down multiple systems across the board if the system is not resilient.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/2/</guid>
      <description>&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;all critical processes on the servers must be monitored for crashes&lt;/li&gt;
&lt;li&gt;anomalies and overall values in CPU/Memory/Disk/Network bandwidth, average load and so on&lt;/li&gt;
&lt;li&gt;hardware component faults - memory failure, slow disk, cpu heat etc&lt;/li&gt;
&lt;li&gt;network access - server to server comms&lt;/li&gt;
&lt;li&gt;networking components - switches, load balancers, routers, etc&lt;/li&gt;
&lt;li&gt;power consumption at server, rack and data centre level&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;building-blocks&#34;&gt;Building blocks&lt;/h2&gt;
&lt;p&gt;Blob storage - to store info about our metrics!&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/3/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/courses/system-design/distributed-monitoring/3/</guid>
      <description>&lt;h2 id=&#34;client-side-errors&#34;&gt;Client side errors&lt;/h2&gt;
&lt;p&gt;Example of a case where an ISP accidentally released different internet routes. Google customers couldn&amp;rsquo;t reach google in this case. This was a result of a BGP leak. Border gateway protocol is a routing protocol that connects the entire internet. In a LAN, routing is easy, but as the network grows, it gets complicated.&lt;/p&gt;
&lt;p&gt;Thus for routing in the internet, there are special methods. Large organisations and ISPs manage internet connectivity for multipl network sites and locations. Often called Autonomous Systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/egk-interview-prep/multiverse-question-bank-with-answers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/egk-interview-prep/multiverse-question-bank-with-answers/</guid>
      <description>&lt;h1 id=&#34;multiverse-interview-question-bank--with-full-answers&#34;&gt;Multiverse Interview Question Bank — With Full Answers&lt;/h1&gt;
&lt;h3 id=&#34;senior-engineering-manager-enterprise-trust--reliability&#34;&gt;Senior Engineering Manager, Enterprise Trust &amp;amp; Reliability&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Interview: 16 September — peer + hiring manager&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Everything is here. Each answer is written in first person, in STAR shape, drawn from your Leapsome reviews (2022–2025) and your own prep notes. Read them for shape and detail, then say them in your own words — don&amp;rsquo;t memorise verbatim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where you see &lt;code&gt;[CHECK]&lt;/code&gt;&lt;/strong&gt; — a detail I couldn&amp;rsquo;t confirm from your documents. Fill it in before the call.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://www.softwarecraftsperson.com/resume/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/resume/</guid>
      <description>&lt;div class=&#34;resume-top-block-sentinel&#34; aria-hidden=&#34;true&#34;&gt;&lt;/div&gt;
&lt;div class=&#34;resume-top-block&#34;&gt;
    


    
    
    &lt;article class=&#34;jr__item jr-basics__item first-entry home-info&#34;&gt;
        &lt;div class=&#34;profile_inner&#34;&gt;
                &lt;img draggable=&#34;false&#34; src=&#34;https://www.softwarecraftsperson.com/images/eakan.jpg&#34; alt=&#34;Eakan with his pet dog&#34;
                    title=&#34;Eakan with his pet dog&#34; height=&#34;300&#34;
                    width=&#34;300&#34; /&gt;
        &lt;/div&gt;
        &lt;header class=&#34;entry-header&#34;&gt;
            &lt;h2&gt;Eakan Gopalakrishnan&lt;/h2&gt;
        &lt;/header&gt;
        &lt;div class=&#34;entry-content&#34;&gt;
            
                
                    &lt;div class=&#34;jr-work__position&#34;&gt;Senior Engineering Leader&lt;/div&gt;
                
                
                    &lt;div class=&#34;jr-work__summary&#34;&gt;Engineering Leader with two decades of experience navigating the evolution of high-scale digital platforms in Energy, Insurance, and Finance. I specialize in bridging deep platform infrastructure with customer-facing product delivery: scaling global engineering units and driving operational efficiencies. I lead by operationalizing a true &amp;lsquo;You Build It, You Run It&amp;rsquo; culture, fostering autonomous teams that treat reliability as a core feature.&lt;/div&gt;
                
            
        &lt;/div&gt;
        &lt;footer class=&#34;entry-footer&#34;&gt;
            &lt;div class=&#34;social-icons&#34; align=&#34;center&#34;&gt;
    &lt;a href=&#34;https://twitter.com/eakangk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Twitter&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
    stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;
    &lt;path
        d=&#34;M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z&#34;&gt;
    &lt;/path&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://stackoverflow.com/users/2262959/eakan-gopalakrishnan&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Stackoverflow&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
    stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;
    &lt;path
        d=&#34;M2.913 16.041v6.848h17.599v-6.848M7.16 18.696h8.925M7.65 13.937l8.675 1.8M9.214 9.124l8.058 3.758M12.086 4.65l6.849 5.66M15.774 1.111l5.313 7.162&#34; /&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/lonelydev&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Github&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
    stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;
    &lt;path
        d=&#34;M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22&#34;&gt;
    &lt;/path&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://www.linkedin.com/in/eakangk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Linkedin&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
    stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;
    &lt;path d=&#34;M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z&#34;&gt;&lt;/path&gt;
    &lt;rect x=&#34;2&#34; y=&#34;9&#34; width=&#34;4&#34; height=&#34;12&#34;&gt;&lt;/rect&gt;
    &lt;circle cx=&#34;4&#34; cy=&#34;4&#34; r=&#34;2&#34;&gt;&lt;/circle&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://instagram.com/ekky.in.transit&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Instagram&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
    stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;
    &lt;rect x=&#34;2&#34; y=&#34;2&#34; width=&#34;20&#34; height=&#34;20&#34; rx=&#34;5&#34; ry=&#34;5&#34;&gt;&lt;/rect&gt;
    &lt;path d=&#34;M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z&#34;&gt;&lt;/path&gt;
    &lt;line x1=&#34;17.5&#34; y1=&#34;6.5&#34; x2=&#34;17.5&#34; y2=&#34;6.5&#34;&gt;&lt;/line&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://flickr.com/eakangk&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Flickr&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;currentColor&#34;&gt;
    &lt;path
        d=&#34;M5.334 6.666C2.3884 6.666 0 9.055 0 12c0 2.9456 2.3884 5.334 5.334 5.334 2.9456 0 5.332-2.3884 5.332-5.334 0-2.945-2.3864-5.334-5.332-5.334zm13.332 0c-2.9456 0-5.332 2.389-5.332 5.334 0 2.9456 2.3864 5.334 5.332 5.334C21.6116 17.334 24 14.9456 24 12c0-2.945-2.3884-5.334-5.334-5.334Z&#34; /&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://www.goodreads.com/user/show/60827212-eakan-gopalakrishnan&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Goodreads&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;currentColor&#34;&gt;
    &lt;path
        d=&#34;M11.43 23.995c-3.608-.208-6.274-2.077-6.448-5.078.695.007 1.375-.013 2.07-.006.224 1.342 1.065 2.43 2.683 3.026 1.583.496 3.737.46 5.082-.174 1.351-.636 2.145-1.822 2.503-3.577.212-1.042.236-1.734.231-2.92l-.005-1.631h-.059c-1.245 2.564-3.315 3.53-5.59 3.475-5.74-.054-7.68-4.534-7.528-8.606.01-5.241 3.22-8.537 7.557-8.495 2.354-.14 4.605 1.362 5.554 3.37l.059.002.002-2.918 2.099.004-.002 15.717c-.193 7.04-4.376 7.89-8.209 7.811zm6.1-15.633c-.096-3.26-1.601-6.62-5.503-6.645-3.954-.017-5.625 3.592-5.604 6.85-.013 3.439 1.643 6.305 4.703 6.762 4.532.591 6.551-3.411 6.404-6.967z&#34; /&gt;
&lt;/svg&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://www.buymeacoffee.com/swcraftsperson&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer me&#34;
        title=&#34;Buymeacoffee&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 884 1279&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;&gt;
    &lt;path d=&#34;M791.109 297.518L790.231 297.002L788.201 296.383C789.018 297.072 790.04 297.472 791.109 297.518Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path d=&#34;M803.896 388.891L802.916 389.166L803.896 388.891Z&#34; fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M791.484 297.377C791.359 297.361 791.237 297.332 791.118 297.29C791.111 297.371 791.111 297.453 791.118 297.534C791.252 297.516 791.379 297.462 791.484 297.377Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path d=&#34;M791.113 297.529H791.244V297.447L791.113 297.529Z&#34; fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M803.111 388.726L804.591 387.883L805.142 387.573L805.641 387.04C804.702 387.444 803.846 388.016 803.111 388.726Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path d=&#34;M793.669 299.515L792.223 298.138L791.243 297.605C791.77 298.535 792.641 299.221 793.669 299.515Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M430.019 1186.18C428.864 1186.68 427.852 1187.46 427.076 1188.45L427.988 1187.87C428.608 1187.3 429.485 1186.63 430.019 1186.18Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M641.187 1144.63C641.187 1143.33 640.551 1143.57 640.705 1148.21C640.705 1147.84 640.86 1147.46 640.929 1147.1C641.015 1146.27 641.084 1145.46 641.187 1144.63Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M619.284 1186.18C618.129 1186.68 617.118 1187.46 616.342 1188.45L617.254 1187.87C617.873 1187.3 618.751 1186.63 619.284 1186.18Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M281.304 1196.06C280.427 1195.3 279.354 1194.8 278.207 1194.61C279.136 1195.06 280.065 1195.51 280.684 1195.85L281.304 1196.06Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M247.841 1164.01C247.704 1162.66 247.288 1161.35 246.619 1160.16C247.093 1161.39 247.489 1162.66 247.806 1163.94L247.841 1164.01Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M472.623 590.836C426.682 610.503 374.546 632.802 306.976 632.802C278.71 632.746 250.58 628.868 223.353 621.274L270.086 1101.08C271.74 1121.13 280.876 1139.83 295.679 1153.46C310.482 1167.09 329.87 1174.65 349.992 1174.65C349.992 1174.65 416.254 1178.09 438.365 1178.09C462.161 1178.09 533.516 1174.65 533.516 1174.65C553.636 1174.65 573.019 1167.08 587.819 1153.45C602.619 1139.82 611.752 1121.13 613.406 1101.08L663.459 570.876C641.091 563.237 618.516 558.161 593.068 558.161C549.054 558.144 513.591 573.303 472.623 590.836Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path d=&#34;M78.6885 386.132L79.4799 386.872L79.9962 387.182C79.5987 386.787 79.1603 386.435 78.6885 386.132Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
    &lt;path
        d=&#34;M879.567 341.849L872.53 306.352C866.215 274.503 851.882 244.409 819.19 232.898C808.711 229.215 796.821 227.633 788.786 220.01C780.751 212.388 778.376 200.55 776.518 189.572C773.076 169.423 769.842 149.257 766.314 129.143C763.269 111.85 760.86 92.4243 752.928 76.56C742.604 55.2584 721.182 42.8009 699.88 34.559C688.965 30.4844 677.826 27.0375 666.517 24.2352C613.297 10.1947 557.342 5.03277 502.591 2.09047C436.875 -1.53577 370.983 -0.443234 305.422 5.35968C256.625 9.79894 205.229 15.1674 158.858 32.0469C141.91 38.224 124.445 45.6399 111.558 58.7341C95.7448 74.8221 90.5829 99.7026 102.128 119.765C110.336 134.012 124.239 144.078 138.985 150.737C158.192 159.317 178.251 165.846 198.829 170.215C256.126 182.879 315.471 187.851 374.007 189.968C438.887 192.586 503.87 190.464 568.44 183.618C584.408 181.863 600.347 179.758 616.257 177.304C634.995 174.43 647.022 149.928 641.499 132.859C634.891 112.453 617.134 104.538 597.055 107.618C594.095 108.082 591.153 108.512 588.193 108.942L586.06 109.252C579.257 110.113 572.455 110.915 565.653 111.661C551.601 113.175 537.515 114.414 523.394 115.378C491.768 117.58 460.057 118.595 428.363 118.647C397.219 118.647 366.058 117.769 334.983 115.722C320.805 114.793 306.661 113.611 292.552 112.177C286.134 111.506 279.733 110.801 273.333 110.009L267.241 109.235L265.917 109.046L259.602 108.134C246.697 106.189 233.792 103.953 221.025 101.251C219.737 100.965 218.584 100.249 217.758 99.2193C216.932 98.1901 216.482 96.9099 216.482 95.5903C216.482 94.2706 216.932 92.9904 217.758 91.9612C218.584 90.9319 219.737 90.2152 221.025 89.9293H221.266C232.33 87.5721 243.479 85.5589 254.663 83.8038C258.392 83.2188 262.131 82.6453 265.882 82.0832H265.985C272.988 81.6186 280.026 80.3625 286.994 79.5366C347.624 73.2301 408.614 71.0801 469.538 73.1014C499.115 73.9618 528.676 75.6996 558.116 78.6935C564.448 79.3474 570.746 80.0357 577.043 80.8099C579.452 81.1025 581.878 81.4465 584.305 81.7391L589.191 82.4445C603.438 84.5667 617.61 87.1419 631.708 90.1703C652.597 94.7128 679.422 96.1925 688.713 119.077C691.673 126.338 693.015 134.408 694.649 142.03L696.732 151.752C696.786 151.926 696.826 152.105 696.852 152.285C701.773 175.227 706.7 198.169 711.632 221.111C711.994 222.806 712.002 224.557 711.657 226.255C711.312 227.954 710.621 229.562 709.626 230.982C708.632 232.401 707.355 233.6 705.877 234.504C704.398 235.408 702.75 235.997 701.033 236.236H700.895L697.884 236.649L694.908 237.044C685.478 238.272 676.038 239.419 666.586 240.486C647.968 242.608 629.322 244.443 610.648 245.992C573.539 249.077 536.356 251.102 499.098 252.066C480.114 252.57 461.135 252.806 442.162 252.771C366.643 252.712 291.189 248.322 216.173 239.625C208.051 238.662 199.93 237.629 191.808 236.58C198.106 237.389 187.231 235.96 185.029 235.651C179.867 234.928 174.705 234.177 169.543 233.397C152.216 230.798 134.993 227.598 117.7 224.793C96.7944 221.352 76.8005 223.073 57.8906 233.397C42.3685 241.891 29.8055 254.916 21.8776 270.735C13.7217 287.597 11.2956 305.956 7.64786 324.075C4.00009 342.193 -1.67805 361.688 0.472751 380.288C5.10128 420.431 33.165 453.054 73.5313 460.35C111.506 467.232 149.687 472.807 187.971 477.556C338.361 495.975 490.294 498.178 641.155 484.129C653.44 482.982 665.708 481.732 677.959 480.378C681.786 479.958 685.658 480.398 689.292 481.668C692.926 482.938 696.23 485.005 698.962 487.717C701.694 490.429 703.784 493.718 705.08 497.342C706.377 500.967 706.846 504.836 706.453 508.665L702.633 545.797C694.936 620.828 687.239 695.854 679.542 770.874C671.513 849.657 663.431 928.434 655.298 1007.2C653.004 1029.39 650.71 1051.57 648.416 1073.74C646.213 1095.58 645.904 1118.1 641.757 1139.68C635.218 1173.61 612.248 1194.45 578.73 1202.07C548.022 1209.06 516.652 1212.73 485.161 1213.01C450.249 1213.2 415.355 1211.65 380.443 1211.84C343.173 1212.05 297.525 1208.61 268.756 1180.87C243.479 1156.51 239.986 1118.36 236.545 1085.37C231.957 1041.7 227.409 998.039 222.9 954.381L197.607 711.615L181.244 554.538C180.968 551.94 180.693 549.376 180.435 546.76C178.473 528.023 165.207 509.681 144.301 510.627C126.407 511.418 106.069 526.629 108.168 546.76L120.298 663.214L145.385 904.104C152.532 972.528 159.661 1040.96 166.773 1109.41C168.15 1122.52 169.44 1135.67 170.885 1148.78C178.749 1220.43 233.465 1259.04 301.224 1269.91C340.799 1276.28 381.337 1277.59 421.497 1278.24C472.979 1279.07 524.977 1281.05 575.615 1271.72C650.653 1257.95 706.952 1207.85 714.987 1130.13C717.282 1107.69 719.576 1085.25 721.87 1062.8C729.498 988.559 737.115 914.313 744.72 840.061L769.601 597.451L781.009 486.263C781.577 480.749 783.905 475.565 787.649 471.478C791.392 467.391 796.352 464.617 801.794 463.567C823.25 459.386 843.761 452.245 859.023 435.916C883.318 409.918 888.153 376.021 879.567 341.849ZM72.4301 365.835C72.757 365.68 72.1548 368.484 71.8967 369.792C71.8451 367.813 71.9483 366.058 72.4301 365.835ZM74.5121 381.94C74.6842 381.819 75.2003 382.508 75.7337 383.334C74.925 382.576 74.4089 382.009 74.4949 381.94H74.5121ZM76.5597 384.641C77.2996 385.897 77.6953 386.689 76.5597 384.641V384.641ZM80.672 387.979H80.7752C80.7752 388.1 80.9645 388.22 81.0333 388.341C80.9192 388.208 80.7925 388.087 80.6548 387.979H80.672ZM800.796 382.989C793.088 390.319 781.473 393.726 769.996 395.43C641.292 414.529 510.713 424.199 380.597 419.932C287.476 416.749 195.336 406.407 103.144 393.382C94.1102 392.109 84.3197 390.457 78.1082 383.798C66.4078 371.237 72.1548 345.944 75.2003 330.768C77.9878 316.865 83.3218 298.334 99.8572 296.355C125.667 293.327 155.64 304.218 181.175 308.09C211.917 312.781 242.774 316.538 273.745 319.36C405.925 331.405 540.325 329.529 671.92 311.91C695.906 308.686 719.805 304.941 743.619 300.674C764.835 296.871 788.356 289.731 801.175 311.703C809.967 326.673 811.137 346.701 809.778 363.615C809.359 370.984 806.139 377.915 800.779 382.989H800.796Z&#34;
        fill=&#34;currentColor&#34;&gt;&lt;/path&gt;
&lt;/svg&gt;
    &lt;/a&gt;
&lt;/div&gt;

            &lt;div class=&#34;download-button-group&#34; role=&#34;group&#34; aria-label=&#34;Resume download options&#34;&gt;
    &lt;a href=&#34;https://www.softwarecraftsperson.com/download/eakan-g-202607-leadership-1pager.pdf&#34; class=&#34;download-button&#34; title=&#34;Download one-page leadership resume (PDF)&#34; aria-label=&#34;Download one-page leadership resume (PDF)&#34; data-full-label=&#34;Leadership resume (1 page)&#34; data-short-label=&#34;Leadership&#34; download&gt;
        &lt;i data-feather=&#34;download&#34;&gt;&lt;/i&gt;
        &lt;span class=&#34;download-button-label&#34;&gt;Compact&lt;/span&gt;
        &lt;i data-feather=&#34;file-text&#34;&gt;&lt;/i&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://www.softwarecraftsperson.com/download/eakan-g-202607.pdf&#34; class=&#34;download-button&#34; title=&#34;Download detailed engineering resume (PDF)&#34; aria-label=&#34;Download detailed resume (PDF)&#34; data-full-label=&#34;Detailed resume PDF&#34; data-short-label=&#34;Detailed&#34; download&gt;
        &lt;i data-feather=&#34;download&#34;&gt;&lt;/i&gt;
        &lt;span class=&#34;download-button-label&#34;&gt;Detailed&lt;/span&gt;
        &lt;i data-feather=&#34;file-text&#34;&gt;&lt;/i&gt;
    &lt;/a&gt;
&lt;/div&gt;
        &lt;/footer&gt;
    &lt;/article&gt;

&lt;/div&gt;

&lt;h3 id=&#34;technologist-professional-experience&#34;&gt;&amp;#x1f9d1;&amp;zwj;&amp;#x1f4bb; Professional Experience&lt;/h3&gt;



  &lt;div class=&#34;jr__list jr-work__list&#34;&gt;
    
      &lt;div class=&#34;jr__item jr-work__item&#34;&gt;
        &lt;div class=&#34;jr__item-meta collapsible&#34;&gt;
          &lt;div class=&#34;jr-work__position&#34;&gt;Senior Engineering Manager&lt;/div&gt;
          &lt;div class=&#34;jr__date-range&#34;&gt;
    &lt;span&gt;2025-07-15&lt;/span&gt;
    &lt;span&gt;-&lt;/span&gt;
    &lt;span&gt;Present&lt;/span&gt;
  &lt;/div&gt;
          
            &lt;div class=&#34;jr-work__name&#34;&gt;
              
                
                  &lt;a href=&#34;https://www.kaluza.com/&#34;&gt;
                    Kaluza
                  &lt;/a&gt;
                
              
            &lt;/div&gt;
            &lt;div class=&#34;jr-work__description&#34;&gt;
              
                &lt;span &gt;An intelligent retail energy platform powering the future of energy.&lt;/span&gt;
              
            &lt;/div&gt;
          

          
            &lt;div class=&#34;jr-work__location&#34;&gt;London, United Kingdom&lt;/div&gt;
          

          
            &lt;p class=&#34;jr-work__summary&#34;&gt;Orchestrated the rapid scaling of autonomous software engineering teams for delivering Global Energy Commerce capabilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenSSF Scorecard</title>
      <link>https://www.softwarecraftsperson.com/scorecard/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/scorecard/</guid>
      <description>A Hugo page that renders the latest OpenSSF Scorecard findings from workflow-generated data.</description>
    </item>
  </channel>
</rss>
