<?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>Forem: Christian Alt-Wibbing</title>
    <description>The latest articles on Forem by Christian Alt-Wibbing (@christian_altwibbing_985).</description>
    <link>https://forem.com/christian_altwibbing_985</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%2F1721449%2Fe316c950-8b74-46b8-af96-30abb8c53c8d.png</url>
      <title>Forem: Christian Alt-Wibbing</title>
      <link>https://forem.com/christian_altwibbing_985</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/christian_altwibbing_985"/>
    <language>en</language>
    <item>
      <title>Post-Quantum Cryptography</title>
      <dc:creator>Christian Alt-Wibbing</dc:creator>
      <pubDate>Fri, 24 Apr 2026 07:58:50 +0000</pubDate>
      <link>https://forem.com/christian_altwibbing_985/post-quantum-cryptography-151b</link>
      <guid>https://forem.com/christian_altwibbing_985/post-quantum-cryptography-151b</guid>
      <description>&lt;h2&gt;
  
  
  Why the Future of Encryption Starts Today
&lt;/h2&gt;

&lt;p&gt;I have been developing software for over 20 years but what is happening right now is something interesting. Something that genuinely makes me sit up and pay attention.&lt;/p&gt;

&lt;p&gt;Quantum computers are no longer science fiction. And with &lt;strong&gt;.NET 10&lt;/strong&gt;, Microsoft has built the answer directly into the platform: &lt;strong&gt;Post-Quantum Cryptography (PQC)&lt;/strong&gt;. Quantum-safe encryption that holds up even when quantum computers become a reality.&lt;/p&gt;

&lt;p&gt;In this article, I will walk you through what I understand what that means step by step even if you are just starting out in software development. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Why Is This Even a Topic?
&lt;/h3&gt;

&lt;p&gt;Imagine you send a encrypted data today. Someone copy the data without decrypt it and waits. In ten years, they have a tool that can decrypt it. Then they read your data.&lt;/p&gt;

&lt;p&gt;That is exactly the scenario keeping security experts around the world up at night. It even has a name: “&lt;strong&gt;Harvest Now, Decrypt Later.&lt;/strong&gt;” Attackers collect encrypted data today and decrypt it later, once quantum computers are powerful enough.&lt;/p&gt;

&lt;p&gt;The data most at risk is anything that needs to &lt;strong&gt;stay secret for a long time&lt;/strong&gt;: financial information, health records, long-term contracts. If you work in finance, this is not an abstract problem — it is your reality.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What Exactly Are Qubits?
&lt;/h3&gt;

&lt;p&gt;Before we go further, let me explain what we are dealing with. I am not an expert in that topic but here is what I understood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Classical Computers: Bits&lt;/strong&gt;&lt;br&gt;
A classical computer knows only two states: 0 or 1. That is called a bit. Everything a computer does — writing text, playing videos, encrypting data. Everything is built on billions of these tiny 0-or-1 decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quantum Computers: Qubits&lt;/strong&gt;&lt;br&gt;
A quantum computer works with qubits. Thanks to a quantum phenomenon called &lt;em&gt;superposition&lt;/em&gt;, qubits can be 0 and 1 at the same time as long as you do not measure them. That sounds strange (and I’m not scientific enough to explain that :) ), but the effect is enormous.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Analogy&lt;/strong&gt;: Think of a maze. A classical computer tries every path one by one. A quantum computer tries all paths simultaneously. For certain problems, that is exponentially faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The result: for certain mathematical problems, exactly those that uses RSA, ECDSA, a quantum computer, is exponentially faster than a classical one. Our current encryption would be broken.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The New Standards — International and Official
&lt;/h3&gt;

&lt;p&gt;The good news: The American NIST (National Institute of Standards and Technology) finalised the first three post-quantum standards in 2024. And this was not an American solo project. 82 algorithms from 25 countries were submitted and reviewed by cryptographers worldwide.&lt;/p&gt;

&lt;p&gt;In parallel, ISO/IEC and ETSI (the European Telecommunications Standards Institute) are working on their own frameworks. The IETF is currently integrating PQC into core protocols like &lt;strong&gt;TLS&lt;/strong&gt;. This is a global process .&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;FIPS Standard&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Replaces&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ML-KEM&lt;/td&gt;
&lt;td&gt;FIPS 203&lt;/td&gt;
&lt;td&gt;Key Exchange (Key Encapsulation)&lt;/td&gt;
&lt;td&gt;ECDH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ML-DSA&lt;/td&gt;
&lt;td&gt;FIPS 204&lt;/td&gt;
&lt;td&gt;Digital Signatures&lt;/td&gt;
&lt;td&gt;RSA / ECDSA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SLH-DSA&lt;/td&gt;
&lt;td&gt;FIPS 205&lt;/td&gt;
&lt;td&gt;Digital Signatures (hash-based)&lt;/td&gt;
&lt;td&gt;RSA / ECDSA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4. What Does .NET 10 Do with This?
&lt;/h3&gt;

&lt;p&gt;.NET 10 released in November 2025 as a Long-Term Support (LTS) release — brings these algorithms directly into the familiar &lt;code&gt;System.Security.Cryptography&lt;/code&gt; namespace. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No external NuGet package, no third-party library. Just there, ready to use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a .NET developer, you now find these new classes:&lt;br&gt;
• MLKem&lt;br&gt;
• MLDsa&lt;br&gt;
• SlhDsa&lt;/p&gt;

&lt;p&gt;Even &lt;code&gt;X509Certificate2&lt;/code&gt;has been extended: certificates can now contain PQC keys. This is important for &lt;strong&gt;TLS&lt;/strong&gt; and &lt;strong&gt;PKI&lt;/strong&gt; infrastructures.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Hybrid Approach — The Best of Both Worlds
&lt;/h3&gt;

&lt;p&gt;I would advise against switching everything over to PQC overnight. In my experience, new developments need time to prove themselves first. The PQC algorithms are mathematically well-founded and approved by NIST – but they have not yet proven themselves to the same level as RSA, which has been in use for decades.&lt;/p&gt;

&lt;p&gt;The solution: &lt;strong&gt;the hybrid approach&lt;/strong&gt;. You combine a classical algorithm (e.g. ECDH) plus ML-KEM simultaneously. If one algorithm is broken, the other still protects you. You are secured against both classical and quantum attacks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hybrid = classical algorithm + PQC in parallel. Secure against both attack types.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;.NET 10 also supports *&lt;em&gt;Composite ML-DSA *&lt;/em&gt; which is a combination of a classical and a post-quantum algorithm in a single signature. This is the recommended transition path.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. What Does This Mean for Your Project?
&lt;/h3&gt;

&lt;p&gt;Let me be honest: if you have services today that &lt;strong&gt;do not encrypt data at all&lt;/strong&gt;, that is more urgent than PQC. Post-quantum only protects encrypted communication. If data is flowing in plain text, the best quantum algorithm in the world will not help.&lt;br&gt;
My recommended order of priority:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Enable TLS for all services, Kafka, RabbitMQ&lt;/td&gt;
&lt;td&gt;Today&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;New services directly with ML-KEM + AES (Hybrid)&lt;/td&gt;
&lt;td&gt;During .NET 10 migration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Migrate internal services to PQC&lt;/td&gt;
&lt;td&gt;When both sides are under your control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Switch certificates to PQC&lt;/td&gt;
&lt;td&gt;When CA + infrastructure are ready&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7. What About the IdentityServer?
&lt;/h3&gt;

&lt;p&gt;Many projects use &lt;strong&gt;Duende IdentityServer&lt;/strong&gt; for authentication — with JWT tokens signed using RS256 (RSA + SHA-256). That is exactly the algorithm a quantum computer could break.&lt;br&gt;
The goal: add &lt;strong&gt;ML-DSA as an additional signing algorithm&lt;/strong&gt; — alongside RS256, not as a replacement. Why alongside? Because older clients expect RS256 and do not yet understand ML-DSA.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Important: &lt;br&gt;
Duende IdentityServer must explicitly support ML-DSA. This is a dependency outside your control. Keep an eye on the Duende roadmap!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  8. My Personal Conclusion
&lt;/h3&gt;

&lt;p&gt;After years of software development, I have learned: the biggest security problems do not arise from missing technology but they come from acting too late. PQC is not a “someday” topic. It is a “prepare now” topic.&lt;/p&gt;

&lt;p&gt;.NET 10 makes it easy for us: the algorithms are there, they are standardised, they are internationally recognised. The entry point is manageable. And anyone currently migrating to .NET 10 has the perfect opportunity to incorporate PQC at the same time, no extra overhead.&lt;/p&gt;

&lt;p&gt;Start with what matters most: encrypt first. Then think about PQC. And then you will be ready for what is coming.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources &amp;amp; Further Reading
&lt;/h3&gt;

&lt;p&gt;• &lt;a href="https://devblogs.microsoft.com/dotnet/post-quantum-cryptography-in-dotnet/" rel="noopener noreferrer"&gt;Post-Quantum Cryptography in .NET&lt;/a&gt; — .NET Blog (Microsoft)&lt;br&gt;
• &lt;a href="https://anthonygiretti.com/2026/01/19/net-10-post-quantum-cryptography-comes-to-net/" rel="noopener noreferrer"&gt;.NET 10: Post-Quantum Cryptography Comes to .NET&lt;/a&gt; — Anthony Giretti&lt;br&gt;
• &lt;a href="https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards" rel="noopener noreferrer"&gt;NIST Releases First 3 Finalized Post-Quantum Encryption Standards&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://www.strathweb.com/2025/02/ml-kem-and-ml-dsa-post-quantum-cryptography-in-net/" rel="noopener noreferrer"&gt;ML-KEM and ML-DSA Post-Quantum Cryptography in .NET&lt;/a&gt; — Strathweb&lt;br&gt;
• &lt;a href="https://www.nist.gov/pqc" rel="noopener noreferrer"&gt;Post-Quantum Cryptography&lt;/a&gt; — NIST (international adoption)&lt;br&gt;
• &lt;a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview#net-libraries" rel="noopener noreferrer"&gt;What’s new in .NET 10 &lt;/a&gt;— Microsoft Learn&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>encryption</category>
      <category>programming</category>
      <category>security</category>
    </item>
    <item>
      <title>Minimal APIs, Controllers &amp; FastEndpoints Compared</title>
      <dc:creator>Christian Alt-Wibbing</dc:creator>
      <pubDate>Wed, 22 Apr 2026 06:25:36 +0000</pubDate>
      <link>https://forem.com/christian_altwibbing_985/minimal-apis-controllers-fastendpoints-compared-5h3i</link>
      <guid>https://forem.com/christian_altwibbing_985/minimal-apis-controllers-fastendpoints-compared-5h3i</guid>
      <description>&lt;h2&gt;
  
  
  What is this about?
&lt;/h2&gt;

&lt;p&gt;When you build a new API in .NET 10 today, you face a decision that didn’t exist before: Minimal API, classic Controllers, or FastEndpoints? All three are fully capable approaches — but they have different strengths, weaknesses, and use cases.&lt;br&gt;
In this post, we take an honest look at all three.&lt;/p&gt;


&lt;h2&gt;
  
  
  Minimal APIs — lean, modern, fast
&lt;/h2&gt;

&lt;p&gt;Minimal APIs were introduced with .NET 6 and have evolved significantly since then. In .NET 10, they have truly come of age.&lt;/p&gt;
&lt;h3&gt;
  
  
  The simplest endpoint in the world
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/ping"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"pong"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That’s a complete API. One line. No controller, no class, no attribute.&lt;/p&gt;
&lt;h3&gt;
  
  
  What’s new in .NET 10?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Built-in Validation&lt;/strong&gt; Previously you had to either pull in FluentValidation or write your own checks. Now a simple call is enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddValidation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your DTO with DataAnnotations is then automatically validated — and on failure, a clean ProblemDetails response is returned. No more manual if-statement juggling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Endpoint Filters instead of Action Filters
&lt;/h3&gt;

&lt;p&gt;Instead of Action Filters, Minimal APIs use Endpoint Filters. The concept is similar — logic before or after the handler — but less powerful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/orders"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEndpointFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;LoggingFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEndpointFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ValidationFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filters run from outside in — like middleware onions. For logging, validation, and simple auth checks, this works well. For complex result manipulation, it gets tricky.&lt;/p&gt;

&lt;h3&gt;
  
  
  The biggest advantage in my opinion: Native AOT
&lt;/h3&gt;

&lt;p&gt;Minimal APIs support Native AOT (Ahead-of-Time Compilation) — Controllers do not. That means: no JIT at runtime, lightning-fast startup, less memory, smaller deployments. A real game-changer for Lambda functions, Kubernetes pods, or edge deployments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  Extracting endpoints — the Extension Method trick
&lt;/h4&gt;

&lt;p&gt;A clean solution for larger projects: move endpoints into their own &amp;gt; classes and register them via Extension Methods:&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static class OrderEndpoints {     
  public static WebApplication MapOrderEndpoints(this WebApplication &amp;gt;app){
     app.MapPost("/orders", HandleCreate);         
     app.MapGet("/orders/{id}", HandleGet);         
     return app;     
  } 
}
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Program.cs stays clean:&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.MapOrderEndpoints(); 
app.MapProductEndpoints(); 
app.MapCustomerEndpoints();
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Controllers — proven, structured, complete
&lt;/h2&gt;

&lt;p&gt;Controllers are the classic approach in ASP.NET Core. They’ve been around for years, are well documented, and every .NET developer knows them.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Controllers do better
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Action Filter Pipeline&lt;/strong&gt; — this is the biggest difference. Controllers have &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OnActionExecuting, &lt;/li&gt;
&lt;li&gt;OnActionExecuted, &lt;/li&gt;
&lt;li&gt;OnResultExecuting &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;very fine-grained control over different phases of the request lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct Unit Testability&lt;/strong&gt; — you can instantiate a controller directly and test it without spinning up the entire HTTP stack:&lt;br&gt;
var controller = new OrdersController(mockService); var result = controller.Create(request);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proven Structure&lt;/strong&gt; — one class per resource, methods per action. New team member? They’ll find their way around immediately.&lt;/p&gt;
&lt;h3&gt;
  
  
  What Controllers cannot do
&lt;/h3&gt;

&lt;p&gt;No Native AOT support — Controllers rely too heavily on Reflection, and Reflection is incompatible with Native AOT. This is a fundamental limitation, not a bug.&lt;/p&gt;


&lt;h2&gt;
  
  
  FastEndpoints — the best of both worlds
&lt;/h2&gt;

&lt;p&gt;FastEndpoints is an open-source library that builds on top of Minimal APIs — but gives you a clean, structured development experience on top.&lt;/p&gt;
&lt;h3&gt;
  
  
  The REPR Pattern
&lt;/h3&gt;

&lt;p&gt;The core concept is the &lt;strong&gt;REPR Pattern&lt;/strong&gt; — Request → Endpoint → Response. Each endpoint gets its own class. Not one controller class with 10 methods — but truly one class per endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CreateOrderEndpoint&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Endpoint&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;     
   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Configure&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
         &lt;span class="nf"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/orders"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
         &lt;span class="nf"&gt;AllowAnonymous&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;     
   &lt;span class="p"&gt;}&lt;/span&gt;      
   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;HandleAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateOrderRequest&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                          &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;SendOkAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Order created"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see: it has the structure of Controllers — a class, clear methods — but the performance of Minimal APIs underneath.&lt;br&gt;
What FastEndpoints brings&lt;br&gt;
• Built-in Validation with FluentValidation — directly integrated&lt;br&gt;
• Filter System — similar to Action Filters, cleanly implemented&lt;br&gt;
• Performance on par with Minimal APIs — noticeably faster than Controllers&lt;br&gt;
• Native AOT Support — because it builds on Minimal APIs&lt;/p&gt;

&lt;h3&gt;
  
  
  The trade-off
&lt;/h3&gt;

&lt;p&gt;FastEndpoints is an external dependency. You’re bringing in a library with its own concepts. New team members need to learn it. The community is smaller than for Controllers or Minimal APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion — which one should I pick?
&lt;/h2&gt;

&lt;p&gt;The honest answer: it depends. But here’s a simple rule of thumb:&lt;br&gt;
• Minimal API → Small, fast, modern. Perfect for microservices and cloud-native.&lt;br&gt;
• Controllers → Large, proven, structured. Perfect for large teams and complex projects.&lt;br&gt;
• FastEndpoints → The best of both worlds — with an external dependency as the price.&lt;/p&gt;

&lt;p&gt;And the great thing: all three can coexist in the same app. You can start with Minimal APIs and migrate to FastEndpoints later — or keep Controllers for complex parts and use Minimal APIs for simple endpoints.&lt;/p&gt;




&lt;h2&gt;
  
  
  For further information you can read following Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-10.0?view=aspnetcore-10.0#improved-form-validation" rel="noopener noreferrer"&gt;Validation Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/news/2025/12/asp-net-core-10-release/" rel="noopener noreferrer"&gt;asp.net core 10 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/apis?view=aspnetcore-10.0" rel="noopener noreferrer"&gt;Microsoft Apis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fast-endpoints.com" rel="noopener noreferrer"&gt;Fast Endpoints&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>api</category>
      <category>microsoft</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Vibe Coding – The Revolution of Software Development or Just a Hype</title>
      <dc:creator>Christian Alt-Wibbing</dc:creator>
      <pubDate>Fri, 09 May 2025 13:00:39 +0000</pubDate>
      <link>https://forem.com/christian_altwibbing_985/vibe-coding-the-revolution-of-software-development-or-just-a-hype-3oee</link>
      <guid>https://forem.com/christian_altwibbing_985/vibe-coding-the-revolution-of-software-development-or-just-a-hype-3oee</guid>
      <description>&lt;p&gt;In the fast-paced world of software development, new buzzwords and trends are constantly emerging. One of the hottest current topics is something called &lt;strong&gt;Vibe Coding&lt;/strong&gt;. But what’s behind this term that’s dividing opinions—praised by some as revolutionary, dismissed by others as “total garbage”?&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Vibe Coding, really?
&lt;/h3&gt;

&lt;p&gt;The term &lt;strong&gt;Vibe Coding&lt;/strong&gt; was coined in February 2025 by computer scientist &lt;strong&gt;Andrej Karpathy&lt;/strong&gt;, co-founder of OpenAI and former AI lead at Tesla. He described it as a &lt;strong&gt;conversation-based approach&lt;/strong&gt; where spoken commands are used while an &lt;strong&gt;Artificial Intelligence (AI)&lt;/strong&gt; generates the actual code. Karpathy himself said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's not really coding - I just see things, say things, run things, and copy-paste things, and it mostly works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At its core, &lt;strong&gt;Vibe Coding&lt;/strong&gt; describes a programming technique that &lt;strong&gt;relies entirely on AI&lt;/strong&gt; to write source code, making programming &lt;strong&gt;accessible even to those without experience&lt;/strong&gt;. Instead of manually coding, the user describes a problem in a few sentences as a &lt;strong&gt;prompt&lt;/strong&gt; for a &lt;strong&gt;large language model (LLM)&lt;/strong&gt; with sufficient programming knowledge. The LLM then generates the software, shifting the programmer’s role from writing code to &lt;strong&gt;guiding, testing, and refining&lt;/strong&gt; the AI-generated output.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Hobby Projects to Startup Codebases
&lt;/h2&gt;

&lt;p&gt;Vibe Coding allows even inexperienced users to create software prototypes without deep training or technical skills. It's gaining traction for its ability to &lt;strong&gt;rapidly turn ideas into prototypes&lt;/strong&gt; with minimal technical effort.&lt;/p&gt;

&lt;p&gt;However, experts warn that the results are often &lt;strong&gt;limited and error-prone&lt;/strong&gt;. In one case, AI-generated code produced fake reviews for an e-commerce site. Roose suggested that Vibe Coding is better suited to &lt;strong&gt;hobby projects&lt;/strong&gt; than to mission-critical tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Potential of Vibe Coding
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster from idea to prototype:&lt;/strong&gt; Vibe Coding can significantly lower the barrier between an idea and working software. People without coding experience can bring their visions to life quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Focus on the idea:&lt;/strong&gt; Instead of getting lost in technical details, users can focus on the &lt;strong&gt;functionality and user experience&lt;/strong&gt; of the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increased efficiency:&lt;/strong&gt; Even professional developers can use Vibe Coding to &lt;strong&gt;generate boilerplate code&lt;/strong&gt; or &lt;strong&gt;quickly build first versions&lt;/strong&gt; of software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learning effect:&lt;/strong&gt; Interacting with AI-generated code can give &lt;strong&gt;non-technical users a basic understanding&lt;/strong&gt; of software development.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges and Criticism
&lt;/h3&gt;

&lt;p&gt;Despite the potential benefits, there are major concerns and criticisms around Vibe Coding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding:&lt;/strong&gt; Developers might use AI-generated code &lt;strong&gt;without fully understanding how it works&lt;/strong&gt;, leading to undetected bugs, malfunctions, or security flaws.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality and maintainability:&lt;/strong&gt; LLMs often produce code &lt;strong&gt;without considering architecture, reusability, or maintainability&lt;/strong&gt;. The result can be unclear and inconsistent code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security risks:&lt;/strong&gt; Blind trust in AI-generated code can lead to &lt;strong&gt;security vulnerabilities&lt;/strong&gt;, like accidentally leaking API keys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Loss of coding skills:&lt;/strong&gt; Overreliance on AI may result in a &lt;strong&gt;loss of programming proficiency&lt;/strong&gt; and dependency on AI tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accountability:&lt;/strong&gt; It's often &lt;strong&gt;unclear who is responsible&lt;/strong&gt; for errors or security issues in AI-generated code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some voices in the developer community are highly critical of Vibe Coding. In one Reddit thread, it was labeled &lt;strong&gt;“total garbage.”&lt;/strong&gt; Others expressed concerns over &lt;strong&gt;the loss of learning processes&lt;/strong&gt; and the &lt;strong&gt;neglect of security practices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools Supporting Vibe Coding
&lt;/h3&gt;

&lt;p&gt;Despite criticism, a growing number of tools and platforms are making Vibe Coding more accessible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IDEs with AI integration:&lt;/strong&gt; Tools like &lt;strong&gt;Cursor&lt;/strong&gt; enable direct interaction with AI models for code generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VS Code extensions:&lt;/strong&gt; The &lt;strong&gt;Cline&lt;/strong&gt; plugin brings AI features into the popular VS Code editor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Online code editors:&lt;/strong&gt; &lt;strong&gt;Replit&lt;/strong&gt; offers a web-based IDE with built-in AI agents capable of generating full applications from natural language prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI assistants with canvas features:&lt;/strong&gt; Platforms like &lt;strong&gt;Claude&lt;/strong&gt;, &lt;strong&gt;ChatGPT&lt;/strong&gt;, and &lt;strong&gt;Google AI&lt;/strong&gt; let users write and run code directly in the browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dedicated Vibe Coding platforms:&lt;/strong&gt; Replit also offers easy deployment and integrated cloud services for quick project launches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion: More than just a Vibe?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Vibe Coding&lt;/strong&gt; is trending—and it could significantly change the way we develop software. It enables faster development and lowers the barrier for those without much experience.&lt;/p&gt;

&lt;p&gt;But: blindly trusting code written by AI can be risky. It might have errors, be insecure, or hard to understand.&lt;/p&gt;

&lt;p&gt;Most likely, the future will be a &lt;strong&gt;mix of traditional programming and AI-assisted tools&lt;/strong&gt;. Vibe Coding is great for quick tests, small apps, or automating boring tasks. For &lt;strong&gt;critical or complex projects&lt;/strong&gt;, however, a deep understanding of the code and thorough review is still essential.&lt;/p&gt;

&lt;p&gt;Whether Vibe Coding turns out to be more than just a short-lived trend remains to be seen. &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%2Fwi50fg3n26zcmrd7wooy.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%2Fwi50fg3n26zcmrd7wooy.jpg" alt="A robot hand and a human hand" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What matters most is to &lt;strong&gt;stay open to innovation&lt;/strong&gt;—but also to approach it &lt;strong&gt;carefully and thoughtfully&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>vibecoding</category>
      <category>softwaredevelopment</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Software Development: Art, Science, and Gardening</title>
      <dc:creator>Christian Alt-Wibbing</dc:creator>
      <pubDate>Fri, 09 May 2025 12:37:14 +0000</pubDate>
      <link>https://forem.com/christian_altwibbing_985/software-development-art-science-and-gardening-57ob</link>
      <guid>https://forem.com/christian_altwibbing_985/software-development-art-science-and-gardening-57ob</guid>
      <description>&lt;p&gt;&lt;em&gt;"Is software developed or cultivated?"&lt;/em&gt; This question brings an intriguing perspective to the world of software development. When we write software, do we follow strict methods, or is it a creative, artistic process? And what does it mean to treat a software system like a garden?&lt;/p&gt;

&lt;h2&gt;
  
  
  Art and Science: Two Perspectives on Software Development
&lt;/h2&gt;

&lt;p&gt;In the debate over whether software development is an art or a science, it quickly becomes clear how much our perspective shapes our thinking and approach. When we see software development as a &lt;strong&gt;science&lt;/strong&gt;, we emphasize structured, reproducible processes and precise results created through clear rules. In science, we often seek the best, reproducible solution, based on data and analysis. In software development, this might mean relying on &lt;strong&gt;design patterns&lt;/strong&gt;, &lt;strong&gt;algorithms&lt;/strong&gt;, and a strict adherence to &lt;strong&gt;best practices&lt;/strong&gt; that streamline the development process.&lt;/p&gt;

&lt;p&gt;On the other hand, there’s the &lt;strong&gt;artistic approach&lt;/strong&gt;: Here, it’s less about following rules and more about creativity, expression, and problem-solving from various, often innovative perspectives. Just as artists shape a blank canvas, developers bring their ideas to life through code, exploring new paths and making choices that go beyond mere functionality. Solutions may be elegant and unique, but they often reflect personal preferences, leading to different styles and approaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Living Organism: Understanding Software as a Garden
&lt;/h2&gt;

&lt;p&gt;In his book &lt;em&gt;Code That Fits in Your Head&lt;/em&gt;, Mark Seemann offers an intriguing alternative: Instead of seeing software solely as art or science, we might think of it as a living organism or a garden. A garden isn’t static – it grows, changes, and without regular care, it can become overgrown.&lt;/p&gt;

&lt;p&gt;For software, this means that without &lt;strong&gt;regular refactoring&lt;/strong&gt; and &lt;strong&gt;removal of obsolete elements&lt;/strong&gt;, a codebase gradually loses structure and clarity. An overgrown garden is difficult to manage and ultimately costs more time and effort. By viewing software development as continuous maintenance, we work proactively to keep the system stable and sustainable – striking a balance between the precision of science and the creativity of art. But just like any garden, this raises the question of &lt;strong&gt;how much maintenance is enough, and when does it become too much&lt;/strong&gt;? Even an overly groomed garden can look crowded and chaotic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking to the Past: The Journeyman's Years as a Model for Learning Developers
&lt;/h2&gt;

&lt;p&gt;An inspiring idea is to revisit the &lt;strong&gt;European tradition of the journeyman's years&lt;/strong&gt;, also known as the “Wanderjahre” or “Walz” in germany. In the past, craftsmen would travel from town to town, learning from different masters and gaining valuable experience that shaped their skills and style. Applied to software development, this approach could mean that developers benefit from working on diverse projects, with various mentors and teams, to learn new ideas and techniques. This approach preserves flexibility and fosters a broad understanding of different problem-solving methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Risk of Overengineering
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The brighter the light, the darker the shadow."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When efforts to make software “perfect” go too far, extra abstractions and complexity can unnecessarily bloat the system. As knowledge and skills grow, so too does the risk of &lt;strong&gt;overengineering&lt;/strong&gt;. The more tools and techniques a developer masters, the greater the temptation to craft solutions that are more complex and intricate than necessary. This drive to make everything perfect and "elegant" can make the code unnecessarily complicated and hard to maintain. A well-maintained “garden” is only as complex as needed and as simple as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Striking a Balance between Structure and Creativity
&lt;/h2&gt;

&lt;p&gt;Ultimately, the art of software development lies in balancing these different approaches. Guidelines and best practices create a framework that elevates software development to &lt;strong&gt;engineering&lt;/strong&gt;, while still leaving room for the creative freedom that enables innovative and elegant solutions. A sustainably maintained "software garden" relies on retaining an overview, eliminating outdated structures, finding the right balance between creativity and discipline, and occasionally switching teams or projects.&lt;/p&gt;

&lt;p&gt;How do you maintain your code? Do you strictly adhere to scientific methods, or do you see your work as artistic expression? Share your views and experiences in the comments – how do you keep your codebase maintainable and elegant?&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>systemdesign</category>
    </item>
  </channel>
</rss>
