<?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: Vishal Pattni</title>
    <description>The latest articles on DEV Community by Vishal Pattni (@vishal_pattni).</description>
    <link>https://dev.to/vishal_pattni</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4145335%2F23a7d364-1b8c-4d9e-b828-1b831c8205b8.jpg</url>
      <title>DEV Community: Vishal Pattni</title>
      <link>https://dev.to/vishal_pattni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vishal_pattni"/>
    <language>en</language>
    <item>
      <title>AI Made Me Write Less Code — and Think More About Engineering</title>
      <dc:creator>Vishal Pattni</dc:creator>
      <pubDate>Mon, 28 Sep 2026 03:49:50 +0000</pubDate>
      <link>https://dev.to/vishal_pattni/ai-made-me-write-less-code-and-think-more-about-engineering-2lbd</link>
      <guid>https://dev.to/vishal_pattni/ai-made-me-write-less-code-and-think-more-about-engineering-2lbd</guid>
      <description>&lt;p&gt;&lt;em&gt;What I learned building and deploying a full-stack application with AI-assisted development, from the first specification to HTTPS on a GCP VM.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I had been tracking my workouts in Google Sheets for quite some time.&lt;/p&gt;

&lt;p&gt;It worked. But eventually I started thinking: &lt;em&gt;why am I still maintaining a spreadsheet for something this simple?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I had wanted to build a small workout tracker for a while, but there was one thing holding me back: &lt;strong&gt;frontend development isn't my strongest area&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I decided to turn the project into an experiment.&lt;/p&gt;

&lt;p&gt;I wanted to see how far I could go with &lt;strong&gt;AI-assisted software development&lt;/strong&gt; — but not through what is commonly called &lt;em&gt;vibe coding&lt;/em&gt;, where you describe an idea, let the AI generate a lot of code, and iterate mostly by looking at the result.&lt;/p&gt;

&lt;p&gt;Instead, I wanted to remain involved in the engineering decisions at every stage.&lt;/p&gt;

&lt;p&gt;The result surprised me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About 99% of the code in the application was written by AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But I didn't feel like I had outsourced the engineering.&lt;/p&gt;

&lt;p&gt;If anything, I spent more time thinking about &lt;strong&gt;requirements, specifications, architecture, trade-offs, reviewing changes, testing, and deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is what that experience looked like.&lt;/p&gt;




&lt;h1&gt;
  
  
  The experiment: AI-assisted development, not vibe coding
&lt;/h1&gt;

&lt;p&gt;I've experimented with vibe coding before.&lt;/p&gt;

&lt;p&gt;It is incredibly impressive how quickly you can get something working.&lt;/p&gt;

&lt;p&gt;But I also found myself feeling that the implementation was slowly moving out of my control.&lt;/p&gt;

&lt;p&gt;The AI might decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how the application should be structured&lt;/li&gt;
&lt;li&gt;how components should look&lt;/li&gt;
&lt;li&gt;how state should be managed&lt;/li&gt;
&lt;li&gt;how APIs should be designed&lt;/li&gt;
&lt;li&gt;which libraries should be introduced&lt;/li&gt;
&lt;li&gt;how different pieces should interact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And eventually, I would have an application that &lt;em&gt;worked&lt;/em&gt;, but I wasn't necessarily confident that I understood how it got there.&lt;/p&gt;

&lt;p&gt;I wanted to try something different.&lt;/p&gt;

&lt;p&gt;At work, I had already been introduced to &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;. I hadn't yet had the opportunity to work with it deeply, so this project became a way to experiment with that approach myself.&lt;/p&gt;

&lt;p&gt;My rough development loop became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requirement
    ↓
Specification
    ↓
Implementation plan
    ↓
Detailed prompt
    ↓
AI implementation
    ↓
Review the diff
    ↓
Run tests
    ↓
Manual verification
    ↓
Commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And there was one thing I didn't expect:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I thought AI would reduce the amount of work I had to do. It did — but it also shifted a lot of my time toward reading specifications and reviewing what was being proposed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was one of the first things that changed my perception of AI-assisted development.&lt;/p&gt;




&lt;h1&gt;
  
  
  Choosing the tools
&lt;/h1&gt;

&lt;p&gt;Before starting, I spent some time looking at different AI coding agents.&lt;/p&gt;

&lt;p&gt;I experimented with a few free models through OpenRouter and also tried Claude Code through the CLI.&lt;/p&gt;

&lt;p&gt;Eventually, I decided to start with &lt;strong&gt;Cursor's Start plan&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cursor became my primary coding environment for the project.&lt;/p&gt;

&lt;p&gt;I also used &lt;strong&gt;ChatGPT alongside Cursor&lt;/strong&gt;, particularly for breaking down requirements and creating detailed prompts that I could feed into the coding agent.&lt;/p&gt;

&lt;p&gt;So my workflow wasn't simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cursor, build this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My requirement
      ↓
Think through what I actually want
      ↓
ChatGPT → refine / structure the prompt
      ↓
Cursor → implement
      ↓
Review
      ↓
Test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction turned out to matter a lot.&lt;/p&gt;




&lt;h1&gt;
  
  
  What did I actually build?
&lt;/h1&gt;

&lt;p&gt;The application is intentionally simple.&lt;/p&gt;

&lt;p&gt;I wanted a workout tracker with &lt;strong&gt;as little clutter as possible&lt;/strong&gt; — only the things I actually needed.&lt;/p&gt;

&lt;p&gt;The core functionality includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exercise library&lt;/li&gt;
&lt;li&gt;Workout/routine creation&lt;/li&gt;
&lt;li&gt;Active workout logging&lt;/li&gt;
&lt;li&gt;Sets and exercises&lt;/li&gt;
&lt;li&gt;Previous performance&lt;/li&gt;
&lt;li&gt;Workout history&lt;/li&gt;
&lt;li&gt;Dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's essentially it.&lt;/p&gt;

&lt;p&gt;There is no attempt to build a social fitness platform, nutrition tracker, AI fitness coach, or anything else.&lt;/p&gt;

&lt;p&gt;For now, &lt;strong&gt;I am the primary user&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If I continue polishing it, I'll eventually share it with friends.&lt;/p&gt;

&lt;p&gt;The project also gave me an opportunity to get back into full-stack development. I've spent most of my professional career working primarily on backend systems, so building the frontend with React was useful in itself.&lt;/p&gt;

&lt;p&gt;And once I had the application running locally, I wanted to take it one step further:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can I actually put this thing on the internet?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That led to the second half of the experiment.&lt;/p&gt;




&lt;h1&gt;
  
  
  The technology stack
&lt;/h1&gt;

&lt;p&gt;I deliberately chose technologies that were either familiar or useful for my learning goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Java 21&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;Spring Security&lt;/li&gt;
&lt;li&gt;JPA / Hibernate&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Flyway&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;React Router&lt;/li&gt;
&lt;li&gt;TanStack Query&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Infrastructure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Google Cloud Platform&lt;/li&gt;
&lt;li&gt;Let's Encrypt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Java and Spring Boot are areas I'm already comfortable with.&lt;/p&gt;

&lt;p&gt;I've used PostgreSQL before.&lt;/p&gt;

&lt;p&gt;React was something I had wanted to learn properly for a while.&lt;/p&gt;

&lt;p&gt;So the project wasn't about learning every technology from scratch. It was about using AI to help me move faster across the entire stack while still understanding the decisions being made.&lt;/p&gt;




&lt;h1&gt;
  
  
  Architecture: keeping things deliberately simple
&lt;/h1&gt;

&lt;p&gt;One of the biggest decisions was the deployment architecture.&lt;/p&gt;

&lt;p&gt;AI suggested several possible approaches.&lt;/p&gt;

&lt;p&gt;I could have gone down a more cloud-native path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
  ↓
Cloud hosting
  ↓
API Gateway
  ↓
Container service
  ↓
Managed PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that wasn't what I wanted at this stage.&lt;/p&gt;

&lt;p&gt;My goal was to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get the application live.&lt;/li&gt;
&lt;li&gt;Learn Docker properly.&lt;/li&gt;
&lt;li&gt;Refresh my cloud knowledge.&lt;/li&gt;
&lt;li&gt;Understand deployment end-to-end.&lt;/li&gt;
&lt;li&gt;Keep the infrastructure inexpensive.&lt;/li&gt;
&lt;li&gt;Avoid introducing infrastructure complexity that the application didn't need.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I went with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Browser
                       │
                       ▼
                    Nginx
                  /       \
                 /         \
             React         /api
                             │
                             ▼
                       Spring Boot
                             │
                             ▼
                        PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything runs through &lt;strong&gt;Docker Compose on a single GCP VM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That architecture isn't intended to be a universal recommendation.&lt;/p&gt;

&lt;p&gt;It simply matched the requirements of this project.&lt;/p&gt;

&lt;p&gt;And that's an important part of the experiment.&lt;/p&gt;




&lt;h1&gt;
  
  
  One of the most important decisions: authentication
&lt;/h1&gt;

&lt;p&gt;Another example was authentication.&lt;/p&gt;

&lt;p&gt;There were several possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;JWT + refresh tokens&lt;/li&gt;
&lt;li&gt;OAuth/OIDC&lt;/li&gt;
&lt;li&gt;Server-side sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this application, I chose &lt;strong&gt;server-side sessions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application is primarily a browser-based application, with a relatively small number of users and no requirement for independently scalable authentication services.&lt;/p&gt;

&lt;p&gt;That made a traditional session-based model a good fit.&lt;/p&gt;

&lt;p&gt;The browser communicates with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-app.my-domain.dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and Nginx routes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to Spring Boot.&lt;/p&gt;

&lt;p&gt;This also allowed me to keep the frontend and backend &lt;strong&gt;same-origin&lt;/strong&gt;, which simplified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;session cookies&lt;/li&gt;
&lt;li&gt;CSRF protection&lt;/li&gt;
&lt;li&gt;CORS&lt;/li&gt;
&lt;li&gt;local/production configuration&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part wasn't that AI knew how to implement sessions.&lt;/p&gt;

&lt;p&gt;It did.&lt;/p&gt;

&lt;p&gt;The interesting part was deciding &lt;strong&gt;which authentication model made sense for this application&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  This is where I started noticing the real value of AI
&lt;/h1&gt;

&lt;p&gt;AI was very good at implementation.&lt;/p&gt;

&lt;p&gt;It handled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project scaffolding&lt;/li&gt;
&lt;li&gt;Java/Spring code&lt;/li&gt;
&lt;li&gt;React components&lt;/li&gt;
&lt;li&gt;Unit tests&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Docker configuration&lt;/li&gt;
&lt;li&gt;CI/CD configuration&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Deployment configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it was fast.&lt;/p&gt;

&lt;p&gt;Very fast.&lt;/p&gt;

&lt;p&gt;A detailed prompt could produce a substantial implementation in a fraction of the time it would take me to write everything manually.&lt;/p&gt;

&lt;p&gt;But the quality of the output was strongly related to the quality of the instructions.&lt;/p&gt;

&lt;p&gt;The more precise the requirement, constraints, architecture, and expected behavior were, the more useful the generated implementation became.&lt;/p&gt;

&lt;p&gt;That changed how I thought about prompting.&lt;/p&gt;

&lt;p&gt;Prompting wasn't simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Write this code."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It became closer to writing a &lt;strong&gt;technical implementation specification&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI didn't make architecture disappear
&lt;/h1&gt;

&lt;p&gt;This was probably the biggest lesson for me.&lt;/p&gt;

&lt;p&gt;AI can suggest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You could use JWT."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can also suggest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You could use server-side sessions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can tell me about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cloud Run, Kubernetes, ECS, a VM, managed databases..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But it doesn't automatically know which one makes sense &lt;strong&gt;for my current objective&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I still have to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much complexity do I want?&lt;/li&gt;
&lt;li&gt;How many users do I have?&lt;/li&gt;
&lt;li&gt;What am I trying to learn?&lt;/li&gt;
&lt;li&gt;What are my cost constraints?&lt;/li&gt;
&lt;li&gt;How much infrastructure do I want to operate?&lt;/li&gt;
&lt;li&gt;Is this a prototype or a production system?&lt;/li&gt;
&lt;li&gt;What should I build now?&lt;/li&gt;
&lt;li&gt;What can wait?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI can dramatically reduce the cost of implementing a decision. It doesn't eliminate the need to make the decision.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That became one of the central lessons of this project.&lt;/p&gt;




&lt;h1&gt;
  
  
  Testing still mattered
&lt;/h1&gt;

&lt;p&gt;Even though AI generated almost all the code, I didn't want the workflow to become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI generated code
        ↓
Looks good
        ↓
Ship it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Testing remained an important part of the development process.&lt;/p&gt;

&lt;p&gt;By the end of the project, the application had approximately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend
255 tests

Frontend
138 tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also manually tested the application after implementing features.&lt;/p&gt;

&lt;p&gt;Most of the generated diffs were manually reviewed before committing.&lt;/p&gt;

&lt;p&gt;This was particularly important because the AI was responsible for a large amount of implementation.&lt;/p&gt;

&lt;p&gt;The more code the AI writes, the more important it becomes to have a reliable mechanism for determining whether the code actually does what you intended.&lt;/p&gt;




&lt;h1&gt;
  
  
  From localhost to the internet
&lt;/h1&gt;

&lt;p&gt;This was probably the most exciting part of the project for me.&lt;/p&gt;

&lt;p&gt;I had used Docker before.&lt;/p&gt;

&lt;p&gt;I had worked with cloud technologies before.&lt;/p&gt;

&lt;p&gt;But this was my first time taking one of my own applications all the way from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-app.my-domain.dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The journey looked roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local development
       ↓
Docker Compose
       ↓
GCP VM
       ↓
Static IP
       ↓
Hostinger DNS
       ↓
Nginx
       ↓
Let's Encrypt
       ↓
HTTPS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I bought my first domain name for the project as well.&lt;/p&gt;

&lt;p&gt;That moment when you open your own domain and see your application running isn't particularly complicated technically.&lt;/p&gt;

&lt;p&gt;But it feels different.&lt;/p&gt;

&lt;p&gt;The application stops being something sitting on your laptop and starts feeling like an actual product.&lt;/p&gt;




&lt;h1&gt;
  
  
  GCP was easier than I expected
&lt;/h1&gt;

&lt;p&gt;I hadn't used GCP extensively before this project, and I still want to learn GCP more systematically.&lt;/p&gt;

&lt;p&gt;But getting the first deployment running was surprisingly approachable.&lt;/p&gt;

&lt;p&gt;I used a small GCP VM and Docker Compose rather than introducing managed services everywhere.&lt;/p&gt;

&lt;p&gt;The free tier was also a major factor.&lt;/p&gt;

&lt;p&gt;For a personal project with very few users, being able to experiment with a real cloud environment without immediately worrying about infrastructure costs made the learning experience much easier.&lt;/p&gt;

&lt;p&gt;At the same time, the deployment gave me a much better &lt;strong&gt;bird's-eye view of a product&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of thinking only about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Does my Java API work?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had to think about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DNS
 ↓
Networking
 ↓
Firewall
 ↓
VM
 ↓
Docker
 ↓
Nginx
 ↓
Frontend
 ↓
Backend
 ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That perspective is something I wouldn't have gotten from building only the application locally.&lt;/p&gt;




&lt;h1&gt;
  
  
  What AI changed for me
&lt;/h1&gt;

&lt;p&gt;After this project, I don't think the most interesting question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can AI write software?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clearly, it can write a lot of software.&lt;/p&gt;

&lt;p&gt;The more interesting question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What happens to software engineering when implementation becomes dramatically faster?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My experience so far is that the bottleneck moves.&lt;/p&gt;

&lt;p&gt;Less time goes into manually writing every class, component, test, configuration file, and Docker configuration.&lt;/p&gt;

&lt;p&gt;More time can go into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defining requirements&lt;/li&gt;
&lt;li&gt;Understanding architecture&lt;/li&gt;
&lt;li&gt;Evaluating alternatives&lt;/li&gt;
&lt;li&gt;Reviewing generated code&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Understanding infrastructure&lt;/li&gt;
&lt;li&gt;Making trade-offs&lt;/li&gt;
&lt;li&gt;Deciding what &lt;em&gt;not&lt;/em&gt; to build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That doesn't make engineering less important.&lt;/p&gt;

&lt;p&gt;It changes where the engineering effort goes.&lt;/p&gt;




&lt;h1&gt;
  
  
  The fundamentals still matter — a lot
&lt;/h1&gt;

&lt;p&gt;If anything, this experiment made me more convinced that fundamentals are extremely important.&lt;/p&gt;

&lt;p&gt;If an AI generates a Spring Security configuration, you need enough security knowledge to understand whether the configuration makes sense.&lt;/p&gt;

&lt;p&gt;If it proposes JWT, sessions, or OAuth, you need enough understanding to evaluate the trade-offs.&lt;/p&gt;

&lt;p&gt;If it generates a Docker Compose configuration, you should understand networking, ports, volumes, containers, and persistence.&lt;/p&gt;

&lt;p&gt;If it proposes a cloud architecture, you need enough cloud knowledge to understand the cost and operational implications.&lt;/p&gt;

&lt;p&gt;The ability to generate code is becoming cheaper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding what should be built is still expensive.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And I think that distinction is becoming increasingly important.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I'd take away from this experiment
&lt;/h1&gt;

&lt;p&gt;The biggest thing I learned isn't that AI can write 99% of my code.&lt;/p&gt;

&lt;p&gt;It's that &lt;strong&gt;I can now spend much less of my time typing code and much more of my time thinking about the product and the engineering behind it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The speed is incredible.&lt;/p&gt;

&lt;p&gt;Ideas can become working software much faster than before.&lt;/p&gt;

&lt;p&gt;A developer who previously avoided frontend work can experiment with a React application.&lt;/p&gt;

&lt;p&gt;A backend engineer can explore deployment and infrastructure.&lt;/p&gt;

&lt;p&gt;Someone can go from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I have an idea."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I have a publicly accessible application."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;much faster.&lt;/p&gt;

&lt;p&gt;But that acceleration comes with a responsibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't let the speed convince you that you don't need to understand what you're building.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI can write the code.&lt;/p&gt;

&lt;p&gt;AI can suggest the architecture.&lt;/p&gt;

&lt;p&gt;AI can explain the trade-offs.&lt;/p&gt;

&lt;p&gt;AI can even tell you that its implementation is correct.&lt;/p&gt;

&lt;p&gt;But ultimately, &lt;strong&gt;you are still the engineer responsible for deciding what gets built and why.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's probably the biggest change I experienced during this project:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI made me write less code — and think more about engineering.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;The Workout Tracker is still a work in progress.&lt;/p&gt;

&lt;p&gt;For now, I'm using it myself.&lt;/p&gt;

&lt;p&gt;There are still non-functional aspects to improve — backups, monitoring, operational reliability, and other production concerns.&lt;/p&gt;

&lt;p&gt;But that's also part of the experiment.&lt;/p&gt;

&lt;p&gt;The application isn't finished just because the code is deployed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the product is the beginning. Learning how to operate it is another part of engineering.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend
Java 21 · Spring Boot · Spring Security · JPA/Hibernate · PostgreSQL · Flyway

Frontend
React · TypeScript · Vite · Tailwind CSS · React Router · TanStack Query

Infrastructure
Docker · Docker Compose · Nginx · GitHub Actions · GCP · Let's Encrypt

AI
Cursor · ChatGPT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;This is a personal account of my experience building this project with AI-assisted development. It isn't intended as a comparison or review of Cursor, ChatGPT, or any particular AI coding tool.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codingagents</category>
      <category>softwareengineering</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
