<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andrey Nikishaev</title>
    <description>The latest articles on DEV Community by Andrey Nikishaev (@anikishaev).</description>
    <link>https://dev.to/anikishaev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3031054%2F35209c1f-d997-42c6-ab9c-a15421e5195b.jpeg</url>
      <title>DEV Community: Andrey Nikishaev</title>
      <link>https://dev.to/anikishaev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anikishaev"/>
    <language>en</language>
    <item>
      <title>SQL Is Easy... And That’s The Problem</title>
      <dc:creator>Andrey Nikishaev</dc:creator>
      <pubDate>Wed, 04 Jun 2025 13:44:16 +0000</pubDate>
      <link>https://dev.to/anikishaev/sql-is-easy-and-thats-the-problem-3630</link>
      <guid>https://dev.to/anikishaev/sql-is-easy-and-thats-the-problem-3630</guid>
      <description>&lt;p&gt;🗄️ Almost every software project needs a database to store information, which is why most developers start with SQL or object-based databases. These tools are familiar, flexible, and easy to use out of the box.&lt;/p&gt;

&lt;p&gt;But that flexibility comes at a hidden cost.&lt;/p&gt;

&lt;p&gt;SQL and object databases allow developers to store data in virtually any structure—even poorly designed ones. Without enforced planning or schema constraints, it’s tempting to skip modeling relationships or typing queries properly. This often leads to messy, unscalable data layers that later cause serious issues: slow queries, painful sharding and replication, unclear data ownership, and access control chaos.&lt;/p&gt;

&lt;p&gt;I love PostgreSQL as much as anyone, but in my 25+ years of engineering, I’ve rarely seen teams treat data modeling with the care it deserves. In most cases, schema design happens reactively, not proactively.&lt;/p&gt;

&lt;p&gt;That’s why in many of my recent projects, I’ve leaned toward less traditional databases—like Cassandra or AWS DynamoDB. These systems force you to think ahead. You can’t skip modeling. You must define access patterns and data structures upfront. Otherwise, the system simply won’t work.&lt;/p&gt;

&lt;p&gt;And that’s a good thing.&lt;/p&gt;

&lt;p&gt;Great systems aren’t about enforcing rules manually—they’re about creating environments where the right architecture becomes the path of least resistance.&lt;/p&gt;

&lt;p&gt;Watch full video: &lt;a href="https://youtu.be/kORcLmvS5OE" rel="noopener noreferrer"&gt;https://youtu.be/kORcLmvS5OE&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Did you plan your retirement?</title>
      <dc:creator>Andrey Nikishaev</dc:creator>
      <pubDate>Wed, 04 Jun 2025 13:42:28 +0000</pubDate>
      <link>https://dev.to/anikishaev/did-you-plan-your-retirement-gei</link>
      <guid>https://dev.to/anikishaev/did-you-plan-your-retirement-gei</guid>
      <description>&lt;p&gt;🧓 Any software engineer can experience a kind of "early retirement" - sometimes chosen, sometimes forced. And i want to emphasize how important its to prepare for the end of an engineering career - and how to navigate it.&lt;/p&gt;

&lt;p&gt;For many, its hard to imagine what stepping away from engineering feels like. So let me try to explain it from a different angle.&lt;/p&gt;

&lt;p&gt;Imagine you're 40 or 45. From today, you’re not allowed to write code anymore. No more building products, fixing bugs, reviewing PRs, or discussing system architecture. You can’t touch your favorite editor. You're left with an empty GitHub graph, no standups, and no more income. You can't return to what you've been mastering for 15-20 years. It's over. Finite.&lt;/p&gt;

&lt;p&gt;That's a reality many engineers eventually face - whether due to burnout, layoffs, AI disruption, or just life. And it's one most of us are not prepared for.&lt;/p&gt;

&lt;p&gt;That's why I believe you need to start building a parallel path while you’re still active. A new occupation, a different income stream, or simply a life outside the code. My strongest recommendation: start now, not later.&lt;/p&gt;

&lt;p&gt;💰 First, long-term financial planning is essential. Not everyone wants to think about it, but everyone needs it. Talk to professionals. Find someone with real financial knowledge and the integrity to match. The right advice early on makes a world of difference.&lt;/p&gt;

&lt;p&gt;💡 Second, finding a new passion after engineering isn’t simple. Writing code gives many of us a deep sense of flow and purpose. Losing that can be devastating. So start experimenting now. Try things - whether it's teaching, writing, mentoring, creating tools, starting a company, or working in a completely different field.&lt;/p&gt;

&lt;p&gt;One thing I know for sure: engineers love to solve problems. We crave challenges, not idleness. We need something to sink our teeth into. Doing nothing isn't an option for most of us.&lt;/p&gt;

&lt;p&gt;🎯 This isn't just for those at the end of their careers. It’s a valuable exercise for every engineer: sit down and ask yourself - if coding disappeared from my life tomorrow, what would I do next?&lt;/p&gt;

&lt;p&gt;As for me, I'm grateful I've started to find new challenges that give me meaning outside of my IDE. It's not the same - but it's something real.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tutorial: Unlocking the Power of Sidecars in Kubernetes</title>
      <dc:creator>Andrey Nikishaev</dc:creator>
      <pubDate>Mon, 02 Jun 2025 17:27:33 +0000</pubDate>
      <link>https://dev.to/anikishaev/tutorial-unlocking-the-power-of-sidecars-in-kubernetes-3ff8</link>
      <guid>https://dev.to/anikishaev/tutorial-unlocking-the-power-of-sidecars-in-kubernetes-3ff8</guid>
      <description>&lt;p&gt;I recently built a small demo that illustrates how sidecar containers can transform observability and control in any Kubernetes‐based service. Instead of embedding metrics, logging, and networking logic directly into your app, you simply “bolt on” three dedicated sidecars:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus&lt;/strong&gt; – Collects application and infrastructure metrics out of the box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promtail → Grafana Loki&lt;/strong&gt; – Streams logs in real time without changing your app code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envoy Proxy&lt;/strong&gt; – Handles TLS termination, request filtering, and even simulates network failures.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ✅ Why this Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separation of Concerns&lt;/strong&gt;: All observability (metrics + logs) and networking (TLS, filters, chaos testing) live outside the main container. Your app stays lightweight and focused solely on business logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency Across Services&lt;/strong&gt;: You can reuse the exact same Prometheus/Promtail/Envoy configuration for every microservice. No more “one‐off” instrumentation code in each repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster Development &amp;amp; Onboarding&lt;/strong&gt;: Developers don’t need to spend time wiring in monitoring libraries or custom proxy code—sidecars handle it for you automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier Upgrades and Troubleshooting&lt;/strong&gt;: When you need to tweak logging formats or experiment with TLS settings, you update the sidecar image, not dozens of disparate applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource Overhead&lt;/strong&gt;: Each sidecar adds CPU/memory usage. In lightweight deployments, be mindful of your node capacity and pod limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational Complexity&lt;/strong&gt;: More containers per Pod means more YAML to manage and additional network hops. You’ll need to ensure your CI/CD and Helm charts stay up to date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sidecar Lifecycle&lt;/strong&gt;: When you roll out a new version of your app, the sidecar versions may need to stay in sync (e.g., Promtail pipelines). Establish clear versioning and testing practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, moving observability and networking logic into reusable sidecars makes your main application image lighter, speeds up developer onboarding, and enforces a consistent control plane across all services. If you’re evaluating how to standardize monitoring, logging, and network policies at scale, consider a sidecar‐centric approach. It’s a small shift in architecture that can pay big dividends in maintainability and speed.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/creotiv/sidecar-demo" rel="noopener noreferrer"&gt;https://github.com/creotiv/sidecar-demo&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Making tutorials and guides as tests, so they always work</title>
      <dc:creator>Andrey Nikishaev</dc:creator>
      <pubDate>Tue, 08 Apr 2025 18:20:02 +0000</pubDate>
      <link>https://dev.to/anikishaev/making-tutorials-and-guides-as-tests-so-they-always-work-4oj7</link>
      <guid>https://dev.to/anikishaev/making-tutorials-and-guides-as-tests-so-they-always-work-4oj7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg3rian14qrefniw9njq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg3rian14qrefniw9njq.jpg" alt="Image description" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzprs1s107lb0g3p3hd3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzprs1s107lb0g3p3hd3.jpg" alt="Image description" width="800" height="749"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my previous post &lt;a href="https://lnkd.in/eJbfM6xR" rel="noopener noreferrer"&gt;https://lnkd.in/eJbfM6xR&lt;/a&gt; I discussed how important it is to synchronize all the data in a project. I also mentioned that doing it manually is a pain in the ass and basically never works.&lt;/p&gt;

&lt;p&gt;In this post, I want to show an example of how this problem should be solved—and its elegance.&lt;/p&gt;

&lt;p&gt;Our task is to write tutorials and guides for the documentation, but in such a way that they are always tied to a specific version of the code and are always executable.&lt;/p&gt;

&lt;p&gt;To solve this problem, we present the guides as test cases, which are executed along with all others during the build process. Based on their results, an MD-format file with the article is generated. And if something doesn't work, we immediately fix it and accordingly update the test/guide.&lt;/p&gt;

&lt;p&gt;As you can see from the code, even a junior developer could write the tool that does this, or you can simply ask ChatGPT.&lt;/p&gt;

&lt;p&gt;This approach will save you from pain, problems, and thousands of bug reports about something not working.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
