<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Sreekanth’s Substack]]></title><description><![CDATA[My personal Substack]]></description><link>https://blog.sreekanth.gs</link><image><url>https://substackcdn.com/image/fetch/$s_!P240!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6b342f6-cc37-4530-ba4f-5d7db9888d95_1280x1280.png</url><title>Sreekanth’s Substack</title><link>https://blog.sreekanth.gs</link></image><generator>Substack</generator><lastBuildDate>Mon, 11 May 2026 11:07:46 GMT</lastBuildDate><atom:link href="https://blog.sreekanth.gs/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sreekanth]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sreekanthgs@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sreekanthgs@substack.com]]></itunes:email><itunes:name><![CDATA[Sreekanth]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sreekanth]]></itunes:author><googleplay:owner><![CDATA[sreekanthgs@substack.com]]></googleplay:owner><googleplay:email><![CDATA[sreekanthgs@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sreekanth]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Caring for Employees Isn’t Complex – It Starts with These 10 Basics]]></title><description><![CDATA[In every organization, strategies, processes, and products take center stage.]]></description><link>https://blog.sreekanth.gs/p/caring-for-employees-isnt-complex</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/caring-for-employees-isnt-complex</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Tue, 26 Aug 2025 13:55:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P240!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6b342f6-cc37-4530-ba4f-5d7db9888d95_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In every organization, strategies, processes, and products take center stage. Yet what truly defines long-term success is how well people are taken care of. Employees who feel supported and valued bring not just their skills but also their energy, creativity, and loyalty to work.</p><p>Employee well-being is not a checklist item. It is a philosophy that must show up in daily practices, leadership behaviors, and organizational policies. The good news is that creating a healthy, supportive workplace does not always require sweeping reforms. Often, it comes down to doing the basics right and doing them consistently.</p><p>Here are 10 simple ways leaders can take care of their employees and, in turn, build organisations that last.</p><p></p><p><strong>1. Decent Work-Life Balance</strong></p><p>Work-life balance is not about reducing productivity, it is about sustaining it. Teams that are constantly stretched eventually burn out. In some organizations, long hours became the default expectation and soon attrition followed. Encouraging reasonable work hours and respecting personal boundaries keeps employees energized and engaged over the long term.</p><p></p><p><strong>2. Prioritise Health and Family Well-Being</strong></p><p>Employees do not exist in isolation from their families. When organizations recognize this, the culture becomes deeply supportive. In many successful companies, medical emergencies or family priorities are given unquestioned importance. This assurance reduces anxiety and builds long-term trust.</p><p></p><p><strong>3. Clear and Documented Roles and Responsibilities</strong></p><p>One of the most common sources of stress in teams is unclear ownership. When roles overlap without clarity, tasks fall through the cracks. In several cases, projects have derailed because people assumed responsibilities were with someone else. Simple and documented role definitions prevent friction, improve collaboration, and help individuals focus on outcomes rather than navigating confusion.</p><p></p><p><strong>4. De-Risk Single Points of Failure</strong></p><p>Every team has subject matter experts, but concentrating critical knowledge with one person is a risk. Organizations that fail to de-risk often face disruption when such individuals leave or are unavailable. Stronger teams assign a secondary owner for key responsibilities, ensuring continuity and faster ramp-ups. This builds resilience and prevents knowledge silos.</p><p></p><p><strong>5. Empower to Delegate, Educate to Own</strong></p><p>Delegation should not be confused with offloading. Good leaders delegate with context and guidance, allowing team members to learn ownership. Over time, this nurtures independence. In many places, young professionals flourish when they are trusted with responsibility early and supported with mentoring rather than micromanagement.</p><p></p><p><strong>6. Promote Self-Ownership and Accountability</strong></p><blockquote><p>A culture of self-ownership creates trust and eliminates the need for constant follow-ups.</p></blockquote><p>Cultures where managers must constantly follow up usually reflect weak accountability. High-performing organizations cultivate an environment where individuals take initiative, update proactively, and fully own their work. Such a culture creates reliability, reduces managerial overhead, and drives consistent delivery. Accountability, when embedded as a cultural norm, builds a system where trust is natural.</p><p></p><p><strong>7. Decent Benefits and Perks</strong></p><p>Health coverage is often underestimated until a crisis occurs. Employees in many companies face financial stress because insurance cover is insufficient. Providing a base health insurance of at least 15 to 20 lakhs, with a super top-up option of another 20 lakhs or more, ensures employees and their families are protected. This is not a perk - it is a baseline responsibility for any serious employer.</p><p></p><p><strong>8. Decent Leave Benefits</strong></p><p>Leave policies should strike the right balance - enough to allow rest and recovery, but not so open-ended that employees feel guilty or uncertain about using them. Unlimited leave policies, while well-intentioned, often backfire. On the other hand, defined sick and vacation leave give employees clarity and comfort. Thoughtful leave policies signal genuine care for employee well-being and prevent presenteeism.</p><p></p><p><strong>9. Empower to Exit</strong></p><blockquote><p>The best way to retain people is to prepare them for their next chapter.</p></blockquote><p>The healthiest organizations do not fear attrition, they prepare employees for their next chapter. Leaders who invest in skill-building, provide meaningful work, and enable career growth find that employees actually stay longer. When people know they will leave stronger than they came, they feel respected and motivated. Empowering employees to exit often becomes the very reason they choose to stay.</p><p></p><p><strong>10. Single Buddy Outside the Team</strong></p><p>Beyond formal HR processes, employees benefit from having a buddy who is not part of their immediate team or reporting chain. This creates a safe and informal space for questions, cultural guidance, and general support. Organizations that implement buddy systems often see faster integration of new hires and a stronger sense of belonging across departments. This single buddy is not a replacement for HR, but a human connection that helps employees navigate their journey.</p><p></p><p><strong>Final Thought</strong></p><p>Employee well-being is not achieved through slogans or one-time initiatives. It is built through clarity, fairness, trust, and consistent practices. These 10 simple approaches, when embraced as a philosophy, create an environment where employees do not just work - they thrive. And when employees thrive, organisations inevitably follow.</p><p>The question every leader should ask is simple: <em>are we creating a workplace where people feel genuinely cared for?</em></p><p>If you are a leader, reflect on which of these practices already exist in your organization and which need attention. If you are an employee, share what works best for you - your perspective might just inspire the next wave of positive change in your workplace.</p>]]></content:encoded></item><item><title><![CDATA[Building a Private Cluster on Hetzner (Part 3) – Setting Up a Private K3s Cluster]]></title><description><![CDATA[With the bare metal server secured behind a private VPN and locked down at the network layer, it was time to set up a lightweight Kubernetes distribution to orchestrate workloads.]]></description><link>https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner-6d8</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner-6d8</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Wed, 30 Jul 2025 06:19:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6fd6be36-1a0b-47f5-9cc9-f91364136951_1200x628.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With the bare metal server secured behind a private VPN and locked down at the network layer, it was time to set up a lightweight Kubernetes distribution to orchestrate workloads.</p><p>For this part, I chose <strong>K3s</strong>, and in this post, I&#8217;ll walk through how I got it running, validated it, and prepared it for secure workload deployment with SSL automation.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.sreekanth.gs/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreekanth&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Why K3s?</h2><p>K3s is a minimal, certified Kubernetes distribution built for production use in resource-constrained environments. It was designed by Rancher Labs and has the following advantages for my setup:</p><ul><li><p><strong>Lightweight</strong>: Small binary (~100MB), fewer moving parts</p></li><li><p><strong>Single binary</strong>: Bundles <code>kubelet</code>, <code>kube-proxy</code>, <code>containerd</code>, and more</p></li><li><p><strong>Reduced memory footprint</strong>: Great for a single-node environment</p></li><li><p><strong>Embedded SQLite by default</strong>: Eliminates the need for a separate etcd setup</p></li><li><p><strong>Faster provisioning</strong>: I got a working control plane in under 2 minutes</p></li></ul><p>Since I&#8217;m running this on a dedicated Hetzner bare metal node, I didn&#8217;t need a full-scale Kubernetes install with HA components.</p><h2>Step 1: Installing K3s (Single Node)</h2><p>I followed the official quick start guide for a basic single-node installation.</p><pre><code><code>curl -sfL https://get.k3s.io | sh -</code></code></pre><p>After a few seconds, the node was up and running with a fully functional Kubernetes API.</p><p>K3s installs the kubeconfig at <code>/etc/rancher/k3s/k3s.yaml</code>. I copied it to my home directory for ease of use:</p><pre><code>mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config</code></pre><h2>Step 2: Validating the K3s Cluster</h2><p>To confirm that the cluster was functioning properly, I ran:</p><pre><code>kubectl get nodes kubectl get pods --all-namespaces</code></pre><p>The output showed the single node in <code>Ready</code> state, and all system pods running smoothly. Since I installed K3s behind VPN access, all <code>kubectl</code> operations ran through the private tunnel.</p><h2>Step 3: Identifying the Private CNI IP</h2><p>K3s uses <strong>flannel</strong> as the default CNI. Each node gets a private overlay network IP, which is critical for routing internal service-to-service traffic securely.</p><p>To fetch the node&#8217;s CNI IP:</p><pre><code>ip -o -4 addr show | grep flannel</code></pre><p>This IP is different from the public server IP or even the VPN IP &#8211; it&#8217;s the <strong>overlay network IP</strong>, which I&#8217;ll use for all future secure communication between internal services.</p><h2>Step 4: Verifying <code>kubectl</code> and <code>helm</code></h2><p><code>kubectl</code> comes pre-installed with K3s. To install <code>helm</code>, I used:</p><pre><code>curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash</code></pre><p>And confirmed it was working:</p><pre><code>helm version</code></pre><p>At this point, I had both cluster access (<code>kubectl</code>) and package management (<code>helm</code>) ready to go.</p><h2>Step 5: Installing <code>cert-manager</code> Using Helm</h2><p>To automate TLS certificate management in the cluster, I installed <strong>cert-manager</strong>, which supports Let&#8217;s Encrypt and other issuers via ACME.</p><pre><code>kubectl create namespace cert-manager

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v1.14.2 \
  --set installCRDs=true</code></pre><p>I waited for all pods in <code>cert-manager</code> namespace to become <code>Running</code>:</p><pre><code>kubectl get pods -n cert-manager</code></pre><p>cert-manager gives me the ability to generate SSL certificates &#8211; both <strong>wildcard</strong> and <strong>standalone</strong> &#8211; using <strong>DNS01</strong> challenge mode, ideal for clusters without public ingress or open ports.</p><h2>What&#8217;s Next</h2><p>Now that the cluster is up and cert-manager is installed, the next step is to:</p><ul><li><p><strong>Create a ClusterIssuer</strong> using Let&#8217;s Encrypt</p></li><li><p><strong>Generate wildcard SSL certificates</strong> for a sample domain</p></li><li><p><strong>Deploy workloads</strong> into the cluster with valid TLS termination</p></li></ul><p>That&#8217;s coming up in <strong>Part 4</strong>.</p><div><hr></div><h2>References</h2><ul><li><p>K3s Quick Start Guide: https://docs.k3s.io/quick-start/</p></li><li><p>cert-manager Documentation: https://cert-manager.io/docs/</p></li><li><p>Helm Installation: https://helm.sh/docs/intro/install/</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.sreekanth.gs/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreekanth&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Succession Planning in Technology Management]]></title><description><![CDATA[When I first stepped into a management role in the IT industry, succession planning wasn&#8217;t high on my priority list.]]></description><link>https://blog.sreekanth.gs/p/succession-planning-in-technology</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/succession-planning-in-technology</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Sun, 27 Jul 2025 04:14:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P240!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6b342f6-cc37-4530-ba4f-5d7db9888d95_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first stepped into a management role in the IT industry, succession planning wasn&#8217;t high on my priority list. Like many others, I was focused on delivery, firefighting, and making sure my team hit its quarterly goals. But over time, I realized that neglecting succession planning can be one of the most costly mistakes a leader can make.</p><p><strong>Why Isn&#8217;t Succession Planning a Priority?</strong></p><p>Let&#8217;s be honest: succession planning feels uncomfortable. There&#8217;s a <em>subconscious</em> fear it might be seen as grooming your replacement or admitting you aren&#8217;t indispensable. Often, the pace of IT work is so relentless that discussions about the future take a backseat to the demands of today. Many of us aren&#8217;t taught how to do it, and we assume we&#8217;ll &#8220;cross that bridge when we get there.&#8221; The reality is, if we wait until we need a successor, we&#8217;re already too late.</p><p><strong>The Value of Succession Planning</strong></p><p>What changed my perspective? I started seeing how disruptive unexpected absences - resignations, unplanned leaves due to illnesses, or even just taking a week off - could be. With succession planning:</p><ul><li><p>Teams keep momentum when key people leave</p></li><li><p>Projects are less likely to stall during transitions</p></li><li><p>There&#8217;s greater trust from both team members and upper management</p></li></ul><p>Instead of scrambling in a crisis, we prepare the ground for stable performance no matter who holds the title.</p><p><strong>How I Approach Succession Planning</strong></p><p>&#9;1.&#9;<strong>Identify High Potential Talent Early</strong>: I pay attention to those who show initiative beyond their role, have empathy, and are constantly learning.</p><p>&#9;2.&#9;<strong>Delegate Real Responsibilities</strong>: Instead of delegating only tasks, I delegate decision-making. It&#8217;s uncomfortable at first, but it&#8217;s the only way to let people grow.</p><p>&#9;3.&#9;<strong>Cross-Train Whenever Possible</strong>: I encourage team members to learn each other&#8217;s &#8220;day jobs&#8221; to build resilience within the team.</p><p>&#9;4.&#9;<strong>Create Safe Spaces for Experimentation</strong>: I let potential leaders lead smaller projects or handle meetings. If they stumble, I provide feedback in private and support in public.</p><p><strong>Personal Benefits: Delegation, Balance, and Peace</strong></p><p>Succession planning doesn&#8217;t just help the company - it transforms my own work life:</p><ul><li><p>Delegation comes naturally when I see people are ready and willing to step up.</p></li><li><p>Work-life balance improves, because I&#8217;m not the bottleneck for every decision. I can actually take a vacation (and not check my email every hour!).</p></li><li><p>Work becomes peaceful. I don&#8217;t operate from a place of fear. When difficulties arise, there&#8217;s confidence that the team can weather the storm - and that&#8217;s liberating.</p></li></ul><p><strong>Accountability and Ownership</strong></p><p>When I invest in succession planning, I make it part of everyone&#8217;s job description - not just mine. I challenge my reports to identify who could replace them if needed. This culture of accountability strengthens the team&#8217;s sense of ownership. No one coasts. We understand that part of our legacy is leaving things better for those who come after.</p><p><strong>The Importance of Teams, Delegation, and Backing Each Other</strong></p><p>The IT world is complex and moves fast. No one person has all the answers. That&#8217;s why building a strong team, where roles overlap and people step up for each other, is non-negotiable. Effective delegation preserves sanity and drives innovation by empowering diverse voices. But delegation isn&#8217;t about abandonment - it&#8217;s about standing behind your team. When things go wrong (and they will), I back my team publicly and solve issues privately. That&#8217;s how deep trust is built.</p><p><strong>Final Thoughts:</strong></p><p>Succession planning forces us to think beyond our to-do lists and daily emergencies. It&#8217;s about building a legacy, not just a function. By investing in people, embracing delegation, and fostering true team cohesion, I&#8217;ve found more satisfaction in my own role - and set my team up to thrive, whether I&#8217;m here or not.</p>]]></content:encoded></item><item><title><![CDATA[So You Want to Be an Engineering Manager? Advice from an Engineering Leader]]></title><description><![CDATA[At some point in your engineering journey, you might start wondering: &#8220;What&#8217;s next for me?]]></description><link>https://blog.sreekanth.gs/p/so-you-want-to-be-an-engineering</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/so-you-want-to-be-an-engineering</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Mon, 14 Jul 2025 10:01:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P240!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6b342f6-cc37-4530-ba4f-5d7db9888d95_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At some point in your engineering journey, you might start wondering: &#8220;What&#8217;s next for me? Should I go deeper into tech, or should I explore leading people?&#8221; If you&#8217;re asking that question, you&#8217;re already on the cusp of an important transition. Becoming an engineering manager isn&#8217;t just a title change - it&#8217;s a shift in mindset, focus, and responsibility. And it&#8217;s a journey that requires thoughtful reflection, deliberate action, and continuous learning.</p><p>As someone who&#8217;s mentored dozens of engineers through this transition, let me share some honest, experience-backed advice on what it really means to be an engineering manager, especially in those crucial first couple of years.</p><p></p><p><strong>Understanding the Role</strong></p><p>First, let&#8217;s get clear on what an engineering manager (EM) is - and isn&#8217;t.</p><p>An EM is not the &#8220;boss&#8221; of the team in the traditional sense. You&#8217;re not there to hand out tasks or watch over shoulders. You&#8217;re there to enable, guide, and amplify. Your role is to help your team deliver software effectively while making sure they grow, stay engaged, and feel fulfilled in their work.</p><p>You still use your technical background - make no mistake. But instead of writing code all day, you&#8217;re thinking about how to build an environment where others can write great code consistently. You&#8217;re connecting dots, removing roadblocks, managing expectations, and nurturing talent.</p><p></p><p><strong>What You&#8217;ll Actually Be Doing</strong></p><p>Most new managers are surprised by how different the day-to-day looks. If you&#8217;re moving into management expecting to still do a lot of coding, you might want to hit pause.</p><p>Your calendar will soon be filled with 1:1s, planning meetings, hiring interviews, feedback sessions, and cross-functional syncs. These aren&#8217;t distractions from the job - they are the job. One-on-one meetings, for example, become a critical ritual. They&#8217;re where you listen to your team&#8217;s concerns, understand their aspirations, catch early signs of burnout or disengagement, and offer feedback. They aren&#8217;t status updates - they&#8217;re where trust is built, and people problems are solved before they escalate.</p><p>You&#8217;ll also spend a good deal of energy coordinating delivery. That doesn&#8217;t mean breathing down engineers&#8217; necks for ETAs - it means helping teams plan realistically, protecting focus time, ensuring dependencies are clear, and making sure quality doesn&#8217;t suffer under pressure. It&#8217;s a subtle art of balancing business urgency with engineering discipline.</p><p></p><p><strong>When Should You Consider Becoming an Engineering Manager?</strong></p><p>I often see engineers lured into management because it seems like the &#8220;next step&#8221; in the ladder. But it&#8217;s not a promotion - it&#8217;s a pivot. The best time to make this shift is when you&#8217;re already showing signs of informal leadership: mentoring juniors, taking initiative to fix processes, influencing team direction, and stepping up during crises.</p><p>If you enjoy helping people unblock themselves more than solving the problem yourself, or if you find yourself gravitating toward team health and product clarity, it&#8217;s a good sign you&#8217;re ready. On the other hand, if you&#8217;re still deeply in love with the technical depth of your craft - and that&#8217;s perfectly valid - you may not want to give up the hands-on aspect just yet.</p><p></p><p><strong>The Foundation You&#8217;ll Need</strong></p><p>To make a successful transition, you&#8217;ll need a few solid foundations. First, your technical credibility must be established. You don&#8217;t need to be the smartest engineer in the room, but your team needs to trust your judgment. You&#8217;ll still be reviewing designs, guiding architectural decisions, and occasionally getting into the weeds.</p><p>Second, communication becomes your superpower. You&#8217;ll write more docs, send more Slack/Teams messages, and have more conversations than you ever did as an IC. The ability to communicate clearly, empathetically, and persuasively is what separates good EMs from great ones.</p><p>Third, you need emotional intelligence. You&#8217;ll be navigating career aspirations, interpersonal conflicts, and sometimes personal issues. Being calm, fair, and empathetic under pressure becomes part of your daily job description.</p><p></p><p><strong>Is It a One-Way Door?</strong></p><p>A common fear among new managers is, &#8220;What if I hate it? Can I go back?&#8221;</p><p>The short answer: Yes, you can. It&#8217;s not a one-way door, but it does get harder the longer you stay in management. Skills atrophy. Tech moves fast. That said, many companies today support dual tracks, and a move from EM back to a senior IC role like Staff Engineer or Architect is increasingly common.</p><p>Still, you should give management a genuine shot - ideally 12 to 18 months - before making that call. The first six months can be disorienting. You won&#8217;t get the same dopamine rush from shipping a PR, and you&#8217;ll sometimes feel invisible. But with time, the satisfaction shifts: from personal wins to team wins.</p><p></p><p><strong>How Is Your Success Measured?</strong></p><p>You may wonder how you&#8217;ll know you&#8217;re doing well.</p><p>Unlike engineering, where outcomes are visible in code and features, management impact is fuzzier. But there are ways to measure effectiveness. Do people on your team feel psychologically safe and supported? Are they growing in their roles? Are you hitting delivery targets without burning people out? Are you contributing to org-wide hiring and process improvements?</p><p>Your key result areas might include team velocity, quality metrics, team retention, engagement survey results, or even stakeholder satisfaction. But more than numbers, it&#8217;s the health of your team - both emotional and operational - that tells your story.</p><p></p><p><strong>Taking Time to Reflect</strong></p><p>You&#8217;ll need to build a regular habit of reflection. Just like we hold sprint retros to inspect and adapt, you should do the same with your leadership style. What&#8217;s working? Where did you miss the mark? What&#8217;s the feedback you&#8217;re hearing (or not hearing)?</p><p>Keep a journal, seek feedback from your team and peers, and watch your blind spots. Self-awareness is one of the most underrated traits in management.</p><p></p><p><strong>Building the Next Generation of Leaders</strong></p><p>One of the most fulfilling parts of being an EM is grooming future leaders. Spotting potential, giving someone a chance to lead a project, coaching them through tough calls - this is where you move from being a manager to a multiplier.</p><p>Invest in your team&#8217;s growth. Create space for them to experiment, fail, and learn. Share context, not just instructions. And most importantly, be transparent about what management really involves - so they can make an informed choice when their time comes.</p><p></p><p><strong>Parting Words</strong></p><p>The transition to engineering management is equal parts exciting and overwhelming. It&#8217;s a role that demands patience, resilience, and humility. But it also offers unmatched opportunities to shape culture, drive impact, and make a lasting difference - not just in the codebase, but in people&#8217;s lives.</p><p>You won&#8217;t get everything right, and that&#8217;s okay. What matters is that you&#8217;re committed to learning, listening, and growing every day. If that sounds like a challenge you&#8217;re up for, then welcome aboard. The journey won&#8217;t be easy - but it will be worth it.</p>]]></content:encoded></item><item><title><![CDATA[Building a Private Cluster on Hetzner (Part 2) - Air-Gapping with a Private VPN]]></title><description><![CDATA[Once I had my Hetzner bare metal server up and running, I wanted to isolate it from the public internet without losing remote access.]]></description><link>https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner-a3d</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner-a3d</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Sun, 13 Jul 2025 02:44:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3d45cc04-f470-4e5a-8c49-064bd8b055c3_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Once I had my Hetzner bare metal server up and running, I wanted to isolate it from the public internet without losing remote access. The answer: a <strong>private VPN endpoint</strong> that acts as a controlled entry point into the cluster.</p><p>This post covers the setup in detail using <strong>Pritunl</strong> and both <strong>WireGuard</strong> and <strong>OpenVPN</strong> (TCP) as VPN protocols.</p><p></p><p><strong>Why a Private VPN?</strong></p><p>The moment a server is exposed to the internet, it becomes a target. Port scans, SSH brute force attempts, and other forms of probing happen within minutes.</p><p>Instead of relying on IP whitelisting or hoping SSH holds up under attack, I decided to:</p><ul><li><p>Completely block SSH from the public internet</p></li><li><p>Funnel all admin access through a secure VPN</p></li><li><p>Treat the VPN as the only entry point into the private cluster</p></li></ul><p>This effectively <strong>air-gaps</strong> the node, while I still retain complete control.</p><p></p><p><strong>Pritunl vs. OpenVPN OSS</strong></p><p>I considered setting up OpenVPN manually, but Pritunl turned out to be a better choice for my goals.</p><p><strong>OpenVPN (OSS):</strong></p><ul><li><p>Fully CLI driven</p></li><li><p>Flexible but complex</p></li><li><p>Requires manual management of certs, keys, users, and routes</p></li></ul><p><strong>Pritunl:</strong></p><ul><li><p>Clean web interface</p></li><li><p>Built-in support for both WireGuard and OpenVPN</p></li><li><p>Handles user and certificate management</p></li><li><p>Easy to scale if I add more nodes later</p></li></ul><p>For a single-node private cluster, the free version of Pritunl was more than sufficient.</p><p></p><p><strong>Protocol Strategy: WireGuard + OpenVPN TCP</strong></p><p>I chose to enable both <strong>WireGuard</strong> and <strong>OpenVPN over TCP</strong> for flexibility.</p><p><strong>Why both?</strong></p><ul><li><p><strong>WireGuard</strong>: Fast, modern, and simple. Great for low-latency access from personal devices.</p></li><li><p><strong>OpenVPN over TCP</strong>: More resilient in restrictive environments (hotels, corporate networks) that block UDP.</p></li></ul><p><strong>Port Security Tip:</strong></p><p>Both protocols use well-known default ports:</p><ul><li><p><strong>WireGuard default</strong>: 51820/udp</p></li><li><p><strong>OpenVPN default</strong>: 1194/tcp</p></li></ul><p>I changed both to non-standard high ports to reduce noise from bots and scanners:</p><ul><li><p><strong>WireGuard</strong>: 51234/udp</p></li><li><p><strong>OpenVPN TCP</strong>: 14444/tcp</p></li></ul><p>This helps minimise automated scans and random login attempts.</p><p></p><p><strong>Installing Pritunl on Ubuntu 24.04</strong></p><p>I followed the official instructions to install Pritunl and MongoDB</p><pre><code><code># Add repository

echo "deb https://repo.pritunl.com/stable/apt jammy main" | sudo tee /etc/apt/sources.list.d/pritunl.list

sudo apt install gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A

# Install packages
sudo apt update
sudo apt install pritunl mongodb-org -y

# Start services
sudo systemctl enable mongod pritunl
sudo systemctl start mongod pritunl</code></code></pre><p>After installation, the web dashboard was available at https://&lt;your-server-public-ip&gt;.</p><p><strong>Changing Pritunl Dashboard Port</strong></p><p>To avoid default port-based attacks, I changed the <strong>Pritunl dashboard</strong> port from 443 to something like 14443.</p><p>This can be done in the dashboard under <strong>Settings &gt; Port.</strong></p><p></p><p><strong>Configuring Pritunl</strong></p><p>Here&#8217;s how I set it up after logging in using the setup key:</p><pre><code><code>sudo pritunl setup-key</code></code></pre><p></p><p><strong>Configuration steps:</strong></p><ol><li><p>Change admin password on first login</p></li><li><p>Create an <strong>Organization</strong></p></li><li><p>Create a <strong>Server</strong> by enabling</p><ol><li><p><strong>WireGuard</strong> (port 51234/udp)</p></li><li><p><strong>OpenVPN TCP</strong> (port 14444/tcp)</p></li></ol></li><li><p>Add <strong>Users</strong> under the organization</p></li><li><p>Configure <strong>Routes</strong> as required</p></li></ol><p></p><p><strong>Important: Remove 0.0.0.0/0 Route</strong></p><p>By default, Pritunl adds a full-tunnel route (0.0.0.0/0) which sends all your internet traffic through the VPN. I deleted this to avoid:</p><ul><li><p>Slowdowns in general internet browsing</p></li><li><p>DNS leaks and latency issues</p></li><li><p>Wasting Hetzner bandwidth</p></li></ul><p>I only kept routes to the internal VPN subnet, like 192.168.100.0/24 (check your internal VPN subnet in <strong>Pritunl Dashboard </strong>under<strong> Servers</strong>, this is only an example)</p><p></p><p><strong>Hetzner Firewall Configuration</strong></p><p>Hetzner&#8217;s robot <strong>stateless firewall</strong> is easy to use and quite effective. I used it to block everything except:</p><ul><li><p><strong>WireGuard port</strong>: 51234/udp</p></li><li><p><strong>OpenVPN TCP port</strong>: 14444/tcp</p></li><li><p><strong>Pritunl dashboard port</strong>: 14443/tcp (allowed only from my ISP IP)</p></li></ul><p>I <strong>completely blocked port 22</strong> to enforce VPN-only SSH access.</p><p></p><p><strong>Testing Access</strong></p><p>After configuring and downloading the VPN profiles, I connected and tested SSH:</p><pre><code><code>ssh root@192.168.100.1 #Use your VPN Server subnet first IP</code></code></pre><p>Both protocols worked as expected. I now access the server only via VPN, with no open public ports other than the ones explicitly allowed.</p><p></p><p><strong>What&#8217;s Next</strong></p><p>Now that the server is secure and accessible only through private VPN tunnels, I&#8217;ll move on to setting up a K3s Kubernetes cluster.</p><p>In Part 3, I&#8217;ll walk through installing K3s, initialising the cluster, deploying workloads, and integrating it with monitoring and CI/CD tools.</p><p>Stay tuned.</p><p></p><p><strong>References</strong></p><ul><li><p>Pritunl Documentation: <a href="https://docs.pritunl.com/">https://docs.pritunl.com</a></p></li><li><p>Hetzner Firewalls: <a href="https://docs.hetzner.com/robot/dedicated-server/firewall/">https://docs.hetzner.com/robot/dedicated-server/firewall/</a></p></li></ul><ul><li><p>WireGuard Overview: <a href="https://www.wireguard.com/">https://www.wireguard.com/</a></p></li><li><p>OpenVPN Protocol Info: <a href="https://openvpn.net/">https://openvpn.net/</a></p></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[Building a Private Cluster on Hetzner (Part 1) - Getting Started with Bare Metal]]></title><description><![CDATA[If you&#8217;re exploring high-performance infrastructure for your next private cluster project, Hetzner&#8217;s bare metal offering is one of the best bangs for your buck.]]></description><link>https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner</link><guid isPermaLink="false">https://blog.sreekanth.gs/p/building-a-private-cluster-on-hetzner</guid><dc:creator><![CDATA[Sreekanth]]></dc:creator><pubDate>Thu, 10 Jul 2025 17:00:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/39ec1c7d-9ee0-45ed-809c-a0dcc57b8f0d_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;re exploring high-performance infrastructure for your next private cluster project, Hetzner&#8217;s bare metal offering is one of the best bangs for your buck. Whether you&#8217;re a home-lab enthusiast or a startup tinkering with production-grade setups, Hetzner gives you raw power without breaking the bank.</p><p>In this first part of the series, I&#8217;ll walk through:</p><ul><li><p>Procuring a bare metal server via Hetzner&#8217;s auction</p></li><li><p>Getting through the verification (KYC) process</p></li><li><p>Choosing the right payment method</p></li><li><p>Securing login via SSH keys</p></li><li><p>Picking the right OS and data center</p></li><li><p>A teaser for what&#8217;s coming next</p><p></p></li></ul><p><strong>Step 1: Buy a Server from Hetzner Auction</strong></p><p>Hetzner&#8217;s <a href="https://www.hetzner.com/sb">server auction</a> is a hidden gem. I&#8217;ve found some seriously capable machines at great prices compared to their regular offerings.</p><p>Recommended spec for a private cluster node:</p><ul><li><p>CPU: Intel Xeon (e.g., E5-2670 v3 or better)</p></li><li><p>Memory: 128 GB ECC DDR4</p></li><li><p>Storage: 2 x 240 GB SSD in RAID 1 (for redundancy)</p></li><li><p>Network: 1 Gbps port</p></li></ul><p>These machines are more than enough for running a Kubernetes master, CI/CD jobs, or small VM clusters. Keep in mind that the auction servers are used or refurbished, but they&#8217;re tested and quite reliable.</p><p></p><p><strong>Step 2: Account Verification (KYC for Indian Customers)</strong></p><p>Before I could start using the server, Hetzner asked for identity verification. As an Indian customer, I had to go through their KYC process. This included:</p><ul><li><p>Uploading a government-issued ID</p></li><li><p>Submitting address proof (like a utility bill or bank statement)</p></li><li><p>Sometimes recording a short video or selfie for verification</p></li></ul><p>This is covered in Hetzner&#8217;s <a href="https://docs.hetzner.com/general/others/account-verification/">account verification documentation</a>.</p><p>Note: The process can take anywhere from 24 to 72 hours. It may take longer on weekends or if the documents need manual review, so it&#8217;s best to factor that into your setup timeline.</p><p></p><p><strong>Step 3: Payment Methods</strong></p><p>Hetzner supports multiple payment options:</p><ul><li><p>Credit or debit cards</p></li><li><p>PayPal</p></li><li><p>BitPay (for crypto payments)</p></li></ul><p>For my use case, using an international credit card made the most sense. It allows automatic billing every month, which saves me from having to track due dates or process manual payments.</p><p></p><p><strong>Step 4: Use SSH Key Authentication</strong></p><p>Once the server was provisioned, I used SSH key-based authentication to log in. It&#8217;s more secure than using passwords and eliminates the risk of brute-force attacks.</p><p>To generate a key:</p><pre><code><code>ssh-keygen -t ed25519 -C "your_email@example.com"</code></code></pre><p>I added the public key to Hetzner when I was setting up the server. If you missed it during provisioning, it is easy to add later via the console interface.</p><p></p><p><strong>Step 5: Choose the Right OS and Data Center</strong></p><p>I went with <strong>Ubuntu</strong> <strong>24.04</strong> <strong>LTS</strong> for the OS. It&#8217;s stable, current, and has wide support across all the tools I plan to use.</p><p>For the data center location, I considered network latency and regional performance. My top picks:</p><ul><li><p><strong>Helsinki</strong> (FSN1) &#8211; great for workloads targeting Europe and India</p></li><li><p><strong>Singapore</strong> (SGP1) &#8211; better if most traffic is Asia-Pacific based</p></li></ul><p>The location you choose can affect latency and bandwidth, so it&#8217;s worth aligning with your traffic pattern.</p><p></p><p><strong>What&#8217;s Next</strong></p><p>Now that the server is ready and secured, I&#8217;ll move on to setting up a private VPN endpoint that effectively air-gaps the node from the public internet.</p><p>In the next part of this series, I&#8217;ll cover that setup in detail - including how I configured a secure, private access tunnel and locked down all external exposure.</p><p>Stay tuned for Part 2.</p>]]></content:encoded></item></channel></rss>