<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Panayiotis Kritiotis</title><link>https://pkritiotis.io/</link><description>Recent content on Panayiotis Kritiotis</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 15 May 2026 08:12:29 +0300</lastBuildDate><atom:link href="https://pkritiotis.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Staying Technical as an Engineering Manager</title><link>https://pkritiotis.io/staying-technical-as-an-engineering-manager/</link><pubDate>Fri, 15 May 2026 08:12:29 +0300</pubDate><guid>https://pkritiotis.io/staying-technical-as-an-engineering-manager/</guid><description>&lt;p>It’s Friday afternoon and you’re coming out of a week where the important work was mostly conversations. You look at the backlog and it hits you again: &lt;em>&amp;ldquo;I&amp;rsquo;m not doing enough technical work. I&amp;rsquo;m losing my edge. My identity. Damn.&amp;rdquo;&lt;/em>&lt;/p></description></item><item><title>Redesigning my Website with an AI Partner: What a Joy</title><link>https://pkritiotis.io/redesigning-my-website-with-ai/</link><pubDate>Mon, 16 Feb 2026 12:25:00 +0300</pubDate><guid>https://pkritiotis.io/redesigning-my-website-with-ai/</guid><description>&lt;p>It’s been a long time since I wanted to redesign my website. I wanted it to feel like mine, but I kept postponing it.&lt;/p>
&lt;p>The problem wasn&amp;rsquo;t a lack of ideas. It was a mix of time, priorities, and to be honest, motivation. I’ve never been comfortable with the plumbing of CSS and JavaScript, and I didn&amp;rsquo;t want to spend my limited time mastering frontend development just to tweak a personal blog.&lt;/p></description></item><item><title>Domain-Driven Design in Go: Designing Entities - What Works, What Breaks, and What’s Overkill</title><link>https://pkritiotis.io/ddd-entity-in-go/</link><pubDate>Mon, 10 Feb 2025 22:00:00 +0300</pubDate><guid>https://pkritiotis.io/ddd-entity-in-go/</guid><description>&lt;p>At first glance, defining an entity in Go seems simple—just a struct, right? Well, not quite.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>I’ve been fascinated with Domain-Driven Design (DDD) for a while now. I’ve been using bits and pieces of DDD for several years, but in the last couple of years, I’ve spent considerable time deep-diving into its details—refining my understanding and exploring how to apply it effectively in real-world projects.&lt;/p></description></item><item><title>Agile: Embrace the Philosophy, Not Rigid Framework Rules</title><link>https://pkritiotis.io/agile-philosophy-over-rigidity/</link><pubDate>Sat, 20 Jul 2024 15:25:00 +0300</pubDate><guid>https://pkritiotis.io/agile-philosophy-over-rigidity/</guid><description>&lt;p>Staying strictly fixated on any Agile framework and enforcing written-in-stone rules by the book is inefficient.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Pure Scrum/XP/Kanban is the way&amp;rdquo;&lt;/p>&lt;/blockquote>
&lt;p>Well, not necessarily. While all these are valid methodologies, they are not the only way.&lt;/p></description></item><item><title>3 Major Fallacies Engineers Make in Architecture Decisions</title><link>https://pkritiotis.io/three-major-fallacies-architecture-decisions/</link><pubDate>Sun, 23 Jun 2024 23:00:00 +0300</pubDate><guid>https://pkritiotis.io/three-major-fallacies-architecture-decisions/</guid><description>&lt;p>Over the past 10 years, I&amp;rsquo;ve led and participated in numerous architecture designs, learning a lot from my mistakes and observations.&lt;/p>
&lt;p>Architecture design is the foundation of successful software. It enables business strategy and vision, and it’s crucial for evolving a system without incurring huge costs as requirements change.&lt;/p></description></item><item><title>5 Essential Prioritization Frameworks for Engineering Managers</title><link>https://pkritiotis.io/engineering-management-prioritization-frameworks/</link><pubDate>Fri, 14 Jun 2024 12:30:00 +0300</pubDate><guid>https://pkritiotis.io/engineering-management-prioritization-frameworks/</guid><description>&lt;p>Your time is finite, and your team&amp;rsquo;s backlog feels endless — welcome to life as an Engineering Manager.&lt;/p>
&lt;p>As we highlighted in the previous post on the &lt;a href="https://pkritiotis.io/engineering-manager-goal-3-principles/">Engineering Manager&amp;rsquo;s ultimate goal&lt;/a>, the most important part of your role is execution — you need to deliver results. To do this as efficiently and effectively as possible, you need to identify the highest-leverage activities that will give you the best value at a specific time. This principle applies not only to your own task list but also to your team’s backlog.&lt;/p></description></item><item><title>Understanding and Achieving Your Goal as an Engineering Manager: 3 Fundamental Principles</title><link>https://pkritiotis.io/engineering-manager-goal-3-principles/</link><pubDate>Fri, 07 Jun 2024 16:02:00 +0300</pubDate><guid>https://pkritiotis.io/engineering-manager-goal-3-principles/</guid><description>&lt;p>As an Engineering Manager, you have a lot on your plate and need a wide range of skills to be successful. From technical expertise, to execution know-how and people management, mastering all these skills takes a lifetime, no doubt about it.&lt;/p></description></item><item><title>Refreshing My Writing Journey</title><link>https://pkritiotis.io/refreshing-my-writing-journey/</link><pubDate>Sat, 01 Jun 2024 13:49:00 +0300</pubDate><guid>https://pkritiotis.io/refreshing-my-writing-journey/</guid><description>&lt;p>In August 2021, I published my first &amp;ldquo;Hello World&amp;rdquo; blog post. My goal was to share the valuable lessons I&amp;rsquo;ve learned and experienced with the community, while also documenting my journey and deepening my understanding of the topics I write about.&lt;/p></description></item><item><title>5 Lessons That Transformed How I Approach Execution as an Engineering Manager</title><link>https://pkritiotis.io/engineering-execution-aha-moments/</link><pubDate>Sun, 28 Apr 2024 18:00:00 +0300</pubDate><guid>https://pkritiotis.io/engineering-execution-aha-moments/</guid><description>&lt;p>In this blog post, I&amp;rsquo;m diving into execution; arguably the most crucial skill in engineering management because it&amp;rsquo;s all about delivering the results that drive your company forward.&lt;/p>
&lt;p>Throughout my career as an engineering manager, I’ve stumbled upon some game-changing &amp;lsquo;Aha Moments&amp;rsquo; that totally shifted how I think about getting things done. These insights have not only simplified my approach to executing tasks and managing projects but have also made them more straightforward and effective.&lt;/p></description></item><item><title>8 Tips for Pragmatic Technical Decision-Making in Fast-Paced Environments</title><link>https://pkritiotis.io/technical-decision-making-fast-paced-environments/</link><pubDate>Sun, 20 Aug 2023 16:36:00 +0300</pubDate><guid>https://pkritiotis.io/technical-decision-making-fast-paced-environments/</guid><description>&lt;p>This blog post explores the engineering decision-making challenges in fast-paced development environments, the importance of maintaining technical agility, and presents a framework to make balanced technical decisions that enable consistent velocity and quality.&lt;/p></description></item><item><title>Feedback loops in software engineering</title><link>https://pkritiotis.io/feedback-loops/</link><pubDate>Sat, 20 May 2023 12:20:00 +0300</pubDate><guid>https://pkritiotis.io/feedback-loops/</guid><description>&lt;p>In this blog post, I write about the power of feedback loops and the essential characteristics of the ideal feedback loop.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>Our goal, as software engineers, is to deliver software projects. Personal projects, work projects, and projects of any type, size, and industry.&lt;/p></description></item><item><title>Implementing a simple, generic mediator pattern in go</title><link>https://pkritiotis.io/mediator-pattern-in-go/</link><pubDate>Sun, 18 Dec 2022 23:50:00 +0300</pubDate><guid>https://pkritiotis.io/mediator-pattern-in-go/</guid><description>&lt;p>This article presents a simple implementation of a generic mediator in Go.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>As software systems become larger and more complex, &lt;strong>managing the interaction dependencies between different components can become complicated&lt;/strong>. Refactoring and introducing changes can also become particularly challenging and error-prone when the interaction semantics change.&lt;/p></description></item><item><title>Software Documentation - Value, Misconceptions, Common Pitfalls, and Essentials</title><link>https://pkritiotis.io/software-documentation/</link><pubDate>Mon, 05 Sep 2022 19:00:00 +0300</pubDate><guid>https://pkritiotis.io/software-documentation/</guid><description>&lt;p>This article explores the value of software documentation, a few misconceptions about the need for documentation, and some common pitfalls we fall into when we document software.&lt;/p>
&lt;p>Finally, it provides an overview of the essential documentation for software engineering teams and some guidelines for organizing documentation.&lt;/p></description></item><item><title>Implementing the Outbox pattern in go</title><link>https://pkritiotis.io/outbox-pattern-in-go/</link><pubDate>Sun, 29 May 2022 16:00:00 +0300</pubDate><guid>https://pkritiotis.io/outbox-pattern-in-go/</guid><description>&lt;p>This article presents the design and implementation of the &lt;strong>outbox pattern&lt;/strong> in go.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>Last November, I wrote an article on &lt;a href="https://pkritiotis.io/outbox-pattern-implementation-challenges/">what the outbox pattern is and its implementation challenges&lt;/a>. If you are unfamiliar with the outbox pattern, I suggest reading this post first.&lt;/p></description></item><item><title>Software Engineering Philosophy: Tradeoffs and Quality</title><link>https://pkritiotis.io/software-engineering-philosophy-tradeoffs-quality/</link><pubDate>Sun, 20 Mar 2022 22:15:52 +0300</pubDate><guid>https://pkritiotis.io/software-engineering-philosophy-tradeoffs-quality/</guid><description>&lt;p>This post talks about &lt;em>software engineering philosophy&lt;/em>; the list and priorities of the &lt;em>fundamental values&lt;/em> we, software engineers, use to decide how to approach tradeoffs in software engineering problems.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>The nature of software engineering involves a continuous need for decision-making. Decision-making is needed for the design, development, and delivery of software. And can be even expanded to processes, workflows, and even organization-related challenges.&lt;/p></description></item><item><title>A systematic approach to Technical Requirement Analysis</title><link>https://pkritiotis.io/technical-requirement-analysis-systematic-approach/</link><pubDate>Sun, 09 Jan 2022 20:30:00 +0300</pubDate><guid>https://pkritiotis.io/technical-requirement-analysis-systematic-approach/</guid><description>&lt;p>This article describes a methodical way of approaching Technical Requirement Analysis that includes a list of steps that help in clarifying ambiguity and preventing unexpected issues before an engineering team jumps into the design phase.&lt;/p></description></item><item><title>Outbox pattern - Why, How and Implementation Challenges</title><link>https://pkritiotis.io/outbox-pattern-implementation-challenges/</link><pubDate>Mon, 29 Nov 2021 19:00:00 +0300</pubDate><guid>https://pkritiotis.io/outbox-pattern-implementation-challenges/</guid><description>&lt;p>This article presents the &lt;strong>outbox pattern&lt;/strong>, a communication/messaging pattern used in event-driven distributed systems that allows executing database operations and reliably publishing messages.&lt;/p>
&lt;p>We will examine why we need the outbox pattern, how it works, and its implementation challenges.&lt;/p></description></item><item><title>Designing functions that return potentially absent values in Go</title><link>https://pkritiotis.io/go-design-functions-returning-absent-values/</link><pubDate>Thu, 14 Oct 2021 18:00:00 +0300</pubDate><guid>https://pkritiotis.io/go-design-functions-returning-absent-values/</guid><description>&lt;p>This article presents a micro-level design pattern to indicate the absence of function return values idiomatically in Go.&lt;/p>
&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;p>Code readability is one of the most critical properties of maintainable software and a significant factor in reducing cost in software development&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>. It allows developers to correctly understand how software behaves with less effort while also preventing errors by eliminating wrong assumptions.&lt;/p></description></item><item><title>Clean Architecture in Go [2024 Updated]</title><link>https://pkritiotis.io/clean-architecture-in-golang/</link><pubDate>Wed, 08 Sep 2021 21:30:00 +0300</pubDate><guid>https://pkritiotis.io/clean-architecture-in-golang/</guid><description>&lt;p>&lt;em>&lt;strong>❇️ This post and the respective &lt;a href="https://github.com/pkritiotis/go-climb-clean-architecture-example">repository&lt;/a> was updated in August 2024 to reflect a simplified infra layering approach and more accurate terminology&lt;/strong>&lt;/em>&lt;/p>
&lt;p>This article covers the fundamentals of the Clean Architecture design concept and demonstrates how to apply its principles in Go through a simple web app implementation.&lt;/p></description></item><item><title>My Hello World</title><link>https://pkritiotis.io/my-hello-world/</link><pubDate>Sat, 28 Aug 2021 14:15:52 +0300</pubDate><guid>https://pkritiotis.io/my-hello-world/</guid><description>&lt;p>I have been thinking about starting a blog for a few years, and I feel this is now the right time.&lt;/p>
&lt;h2 id="why-this-blog">Why this blog?&lt;/h2>
&lt;p>There are multiple reasons for starting this blog.&lt;/p></description></item><item><title>About</title><link>https://pkritiotis.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pkritiotis.io/about/</guid><description>&lt;p>Hi, I’m Panayiotis Kritiotis.&lt;/p>
&lt;p>I’m a Senior Engineering Manager at &lt;a href="https://www.e-food.gr/">efood&lt;/a>, and I write about the parts of software engineering that sit between code, people, and judgment.&lt;/p>
&lt;p>Throughout my career I’ve always been deep in the technical craft: building systems, thinking about architecture, messing with Go, and caring a bit obsessively about clean boundaries and good design. Over time, my work expanded into engineering leadership, but the technical side never stopped being central to how I work and think.&lt;/p></description></item></channel></rss>