<?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: Moniruzzaman Saikat</title>
    <description>The latest articles on DEV Community by Moniruzzaman Saikat (@moniruzzamansaikat).</description>
    <link>https://dev.to/moniruzzamansaikat</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%2F533319%2F781e464d-fde1-4a5a-bf4a-0bf01425e5cd.png</url>
      <title>DEV Community: Moniruzzaman Saikat</title>
      <link>https://dev.to/moniruzzamansaikat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moniruzzamansaikat"/>
    <language>en</language>
    <item>
      <title>Essential Sections and Pages Every Real Estate Website Template Should Have</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 24 Aug 2026 20:01:38 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/essential-sections-and-pages-every-real-estate-website-template-should-have-1ekp</link>
      <guid>https://dev.to/moniruzzamansaikat/essential-sections-and-pages-every-real-estate-website-template-should-have-1ekp</guid>
      <description>&lt;p&gt;A real estate website template has a different job from a normal corporate website.&lt;/p&gt;

&lt;p&gt;A corporate website may succeed by explaining the company, presenting a few services, and providing a contact form. A real estate website has to support a much more complex user journey.&lt;/p&gt;

&lt;p&gt;Visitors need to search properties, compare listings, understand locations, evaluate prices, inspect photos and amenities, contact agents, save properties, and sometimes submit their own listings.&lt;/p&gt;

&lt;p&gt;That means a strong real estate template cannot be designed as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Homepage + About + Contact + a few property cards&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It needs to behave more like a small property marketplace.&lt;/p&gt;

&lt;p&gt;Whether you are creating a template for ThemeForest, Creative Market, your own marketplace, or a client project, the right page architecture matters almost as much as the visual design.&lt;/p&gt;

&lt;p&gt;In this article, we will break down the essential sections, pages, components, user flows, and production considerations that a serious real estate template should include.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Start With the User Journeys
&lt;/h2&gt;

&lt;p&gt;Before designing pages, identify what people actually want to accomplish.&lt;/p&gt;

&lt;p&gt;A real estate website typically serves several different users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Property buyers
&lt;/h3&gt;

&lt;p&gt;They want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search properties&lt;/li&gt;
&lt;li&gt;Filter by location&lt;/li&gt;
&lt;li&gt;Filter by price&lt;/li&gt;
&lt;li&gt;Filter by property type&lt;/li&gt;
&lt;li&gt;Compare properties&lt;/li&gt;
&lt;li&gt;View photos&lt;/li&gt;
&lt;li&gt;Check amenities&lt;/li&gt;
&lt;li&gt;See property details&lt;/li&gt;
&lt;li&gt;Contact the agent&lt;/li&gt;
&lt;li&gt;Schedule a viewing&lt;/li&gt;
&lt;li&gt;Save properties&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Renters
&lt;/h3&gt;

&lt;p&gt;Their needs are similar, but rental-specific information becomes more important:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly rent&lt;/li&gt;
&lt;li&gt;Deposit&lt;/li&gt;
&lt;li&gt;Lease duration&lt;/li&gt;
&lt;li&gt;Furnishing status&lt;/li&gt;
&lt;li&gt;Availability date&lt;/li&gt;
&lt;li&gt;Utilities&lt;/li&gt;
&lt;li&gt;Pet policies&lt;/li&gt;
&lt;li&gt;Parking&lt;/li&gt;
&lt;li&gt;Nearby transportation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Property owners
&lt;/h3&gt;

&lt;p&gt;Depending on the business model, owners may want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Submit properties&lt;/li&gt;
&lt;li&gt;Edit listings&lt;/li&gt;
&lt;li&gt;Upload images&lt;/li&gt;
&lt;li&gt;Manage inquiries&lt;/li&gt;
&lt;li&gt;View listing performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agents
&lt;/h3&gt;

&lt;p&gt;Agents may need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public profiles&lt;/li&gt;
&lt;li&gt;Their property listings&lt;/li&gt;
&lt;li&gt;Contact information&lt;/li&gt;
&lt;li&gt;Social links&lt;/li&gt;
&lt;li&gt;Reviews&lt;/li&gt;
&lt;li&gt;Inquiry management&lt;/li&gt;
&lt;li&gt;Dashboard tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agencies
&lt;/h3&gt;

&lt;p&gt;An agency may need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Company profile&lt;/li&gt;
&lt;li&gt;Team members&lt;/li&gt;
&lt;li&gt;Service areas&lt;/li&gt;
&lt;li&gt;Properties&lt;/li&gt;
&lt;li&gt;Reviews&lt;/li&gt;
&lt;li&gt;Contact information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once these journeys are understood, the required pages become much easier to define.&lt;/p&gt;




&lt;h1&gt;
  
  
  Core Public Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  2. Homepage
&lt;/h2&gt;

&lt;p&gt;The homepage is not just a marketing landing page.&lt;/p&gt;

&lt;p&gt;For most real estate websites, it should immediately help users start discovering properties.&lt;/p&gt;

&lt;p&gt;The most important homepage sections are usually the following.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hero Section
&lt;/h2&gt;

&lt;p&gt;The hero should communicate the website's purpose immediately.&lt;/p&gt;

&lt;p&gt;A typical structure could be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find a Place You'll Love

Buy | Rent | Commercial

[Location]
[Property Type]
[Price Range]

[Search Properties]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hero may include a background image, featured property, city skyline, architecture photography, or a cleaner split layout.&lt;/p&gt;

&lt;p&gt;The important part is not the image.&lt;/p&gt;

&lt;p&gt;The important part is the search experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful hero search fields
&lt;/h3&gt;

&lt;p&gt;Depending on the template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Location&lt;/li&gt;
&lt;li&gt;City&lt;/li&gt;
&lt;li&gt;Neighborhood&lt;/li&gt;
&lt;li&gt;Property type&lt;/li&gt;
&lt;li&gt;Buy or rent&lt;/li&gt;
&lt;li&gt;Minimum price&lt;/li&gt;
&lt;li&gt;Maximum price&lt;/li&gt;
&lt;li&gt;Bedrooms&lt;/li&gt;
&lt;li&gt;Property ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not overload the hero with every possible filter.&lt;/p&gt;

&lt;p&gt;Advanced filters belong on the property search page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Property Type Categories
&lt;/h2&gt;

&lt;p&gt;Users should be able to quickly browse by property type.&lt;/p&gt;

&lt;p&gt;Typical categories include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apartment
House
Villa
Office
Commercial
Land
Studio
Condo
Townhouse
Warehouse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each category can display:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Icon&lt;/li&gt;
&lt;li&gt;Image&lt;/li&gt;
&lt;li&gt;Number of available properties&lt;/li&gt;
&lt;li&gt;Short description&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apartments
1,240 properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This section works particularly well near the beginning of the homepage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Featured Properties
&lt;/h2&gt;

&lt;p&gt;A strong real estate homepage almost always needs a featured listings section.&lt;/p&gt;

&lt;p&gt;Property cards should provide enough information for users to make an initial decision without opening every property.&lt;/p&gt;

&lt;p&gt;A good property card may include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Image

FOR SALE

Modern Family Villa
Gulshan, Dhaka

৳3.2 Crore

4 Beds
3 Baths
2,400 sq ft

♡ Save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additional metadata could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Featured badge&lt;/li&gt;
&lt;li&gt;Verified badge&lt;/li&gt;
&lt;li&gt;New listing badge&lt;/li&gt;
&lt;li&gt;Property type&lt;/li&gt;
&lt;li&gt;Price per square foot&lt;/li&gt;
&lt;li&gt;Agent avatar&lt;/li&gt;
&lt;li&gt;Date listed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The card design should remain visually clean despite the amount of information.&lt;/p&gt;




&lt;h2&gt;
  
  
  Properties for Sale
&lt;/h2&gt;

&lt;p&gt;If the platform supports both rental and sales listings, separating them on the homepage can make discovery easier.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Properties for Sale

Apartment in Dhanmondi
Villa in Bashundhara
House in Uttara
Commercial Space in Banani

View All Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Properties for Rent
&lt;/h2&gt;

&lt;p&gt;Rental listings deserve their own section when rentals are a major part of the platform.&lt;/p&gt;

&lt;p&gt;Price formatting should clearly communicate the billing period:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;৳45,000 / month
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;৳45,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small details like this make a template feel like it was actually designed for real estate.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Location-Based Discovery
&lt;/h1&gt;

&lt;p&gt;Location is arguably one of the most important dimensions of real estate.&lt;/p&gt;

&lt;p&gt;Users often search by geography before considering the exact property.&lt;/p&gt;

&lt;p&gt;A template should support sections like:&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore Popular Locations
&lt;/h2&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gulshan
145 Properties

Banani
89 Properties

Dhanmondi
163 Properties

Bashundhara
217 Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visually, these can be displayed as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image cards&lt;/li&gt;
&lt;li&gt;Large editorial tiles&lt;/li&gt;
&lt;li&gt;Compact cards&lt;/li&gt;
&lt;li&gt;Map-based elements&lt;/li&gt;
&lt;li&gt;Horizontal sliders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Location pages should also be supported deeper in the template.&lt;/p&gt;

&lt;p&gt;More on that later.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Featured Cities or Neighborhoods
&lt;/h1&gt;

&lt;p&gt;For larger real estate platforms, property location may have multiple levels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country
→ City
→ Area
→ Neighborhood
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A location discovery section might therefore present major cities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dhaka
Chattogram
Sylhet
Rajshahi
Khulna
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or neighborhoods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gulshan
Banani
Uttara
Dhanmondi
Mirpur
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A good template should make it possible to adapt the same component to either model.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Recommended Properties
&lt;/h1&gt;

&lt;p&gt;A recommendation section gives the homepage a more marketplace-oriented feel.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recommended for You

Popular Near You

Recently Added

Best Value Properties

New Developments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a static HTML template, these recommendations do not need actual personalization.&lt;/p&gt;

&lt;p&gt;You are designing the interface that a backend system could eventually populate dynamically.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Property Search Page
&lt;/h1&gt;

&lt;p&gt;This is one of the most important pages in the entire template.&lt;/p&gt;

&lt;p&gt;If this page is weak, the real estate template will feel incomplete no matter how good the homepage looks.&lt;/p&gt;

&lt;p&gt;A property search page usually needs:&lt;br&gt;
&lt;/p&gt;

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

Breadcrumb / Page Title

Search Bar

Filter Sidebar or Filter Toolbar

Active Filters

Results Count

Sort Control

Property Results

List / Grid Toggle

Map Toggle

Pagination

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Search Filters
&lt;/h2&gt;

&lt;p&gt;This is where the template needs to become domain-specific.&lt;/p&gt;

&lt;p&gt;Common filters include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Transaction type
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Property type
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apartment
House
Villa
Studio
Commercial
Office
Land
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Location
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;City
Area
Neighborhood
ZIP / Postal Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Price
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Minimum Price
Maximum Price
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or a range slider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bedrooms
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Any
1+
2+
3+
4+
5+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bathrooms
&lt;/h3&gt;

&lt;p&gt;Similar to bedrooms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Property size
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Minimum Area
Maximum Area
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Amenities
&lt;/h3&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Parking
Swimming Pool
Gym
Garden
Balcony
Elevator
Security
Air Conditioning
Furnished
Pet Friendly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Property status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Available
Sold
Rented
Under Construction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Listing date
&lt;/h3&gt;

&lt;p&gt;Useful for finding recent listings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Active Filter Chips
&lt;/h2&gt;

&lt;p&gt;Once filters have been applied, users should be able to see and remove them easily.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gulshan ×
Apartment ×
3+ Bedrooms ×
Under ৳2 Crore ×

Clear All
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a small component, but it significantly improves usability.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Property Listing Grid Page
&lt;/h1&gt;

&lt;p&gt;Real estate templates often benefit from having multiple listing layouts.&lt;/p&gt;

&lt;p&gt;At minimum, include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Grid
Property List
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The grid layout works well for visual browsing.&lt;/p&gt;

&lt;p&gt;The list layout can provide more information without opening the property page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Grid View
&lt;/h2&gt;

&lt;p&gt;Typical structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Image]

FOR SALE

Luxury Apartment
Gulshan 2, Dhaka

৳2.8 Crore

3 Beds | 3 Baths | 1,950 sq ft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  List View
&lt;/h2&gt;

&lt;p&gt;A list item may show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Large Image]

Luxury Apartment in Gulshan

Gulshan 2, Dhaka

Beautiful three-bedroom apartment with
modern interiors and excellent city access.

3 Beds
3 Baths
1,950 sq ft

৳2.8 Crore

View Details
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supporting both interfaces makes a commercial template significantly more complete.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Map Search Page
&lt;/h1&gt;

&lt;p&gt;Modern property platforms frequently combine listings with maps.&lt;/p&gt;

&lt;p&gt;A useful layout might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;----------------------------------
| Property Results |             |
|                  |     Map     |
| Property Card    |             |
| Property Card    |             |
| Property Card    |             |
----------------------------------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On desktop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;40% listing panel
60% map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;50% listings
50% map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On mobile, the layout can switch between:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;using tabs or buttons.&lt;/p&gt;

&lt;p&gt;Even if your static template uses a placeholder map, designing this page demonstrates that the template is prepared for a real property platform.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Property Detail Page
&lt;/h1&gt;

&lt;p&gt;This is probably the most important page to design carefully.&lt;/p&gt;

&lt;p&gt;A property detail page has a large amount of information, and poor hierarchy can make it overwhelming.&lt;/p&gt;

&lt;p&gt;The page should generally progress from visual information to essential facts to detailed information.&lt;/p&gt;




&lt;h2&gt;
  
  
  Property Gallery
&lt;/h2&gt;

&lt;p&gt;Photography sells real estate.&lt;/p&gt;

&lt;p&gt;The gallery needs more attention than a standard e-commerce gallery.&lt;/p&gt;

&lt;p&gt;Good options include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large main photo + 4 supporting images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large gallery carousel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Include a control like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;View All 24 Photos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Potential additional actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Save
Share
Print
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Property Header
&lt;/h2&gt;

&lt;p&gt;Immediately below or beside the gallery, show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Luxury Family Villa

Gulshan 2, Dhaka

FOR SALE

৳3.5 Crore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optionally include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property ID: RE-10284
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Property Quick Facts
&lt;/h2&gt;

&lt;p&gt;Important characteristics should be visually scannable.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bedrooms
4

Bathrooms
3

Area
2,450 sq ft

Garage
2

Year Built
2024
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Icons work well here.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Property Overview
&lt;/h1&gt;

&lt;p&gt;A compact overview can include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property ID
Property Type
Status
Bedrooms
Bathrooms
Garage
Year Built
Size
Lot Size
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A grid format works well for this information.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Property Description
&lt;/h1&gt;

&lt;p&gt;Listings often contain longer descriptions.&lt;/p&gt;

&lt;p&gt;Typography needs to support several paragraphs comfortably.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;About This Property

This modern four-bedroom residence combines
spacious living areas with contemporary architecture...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avoid extremely narrow text columns or oversized typography.&lt;/p&gt;

&lt;p&gt;Property descriptions need to remain readable.&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Amenities and Features
&lt;/h1&gt;

&lt;p&gt;Amenities are essential.&lt;/p&gt;

&lt;p&gt;A typical section could include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Air Conditioning
✓ Swimming Pool
✓ Security
✓ Parking
✓ Elevator
✓ Balcony
✓ Gym
✓ Garden
✓ Backup Generator
✓ High-Speed Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a multi-column layout on desktop.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Floor Plans
&lt;/h1&gt;

&lt;p&gt;Professional real estate templates should include a floor plan section.&lt;/p&gt;

&lt;p&gt;Each floor plan may display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ground Floor
1,200 sq ft

Bedrooms: 2
Bathrooms: 2

[Floor Plan Image]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For multiple floors, an accordion works well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ground Floor
First Floor
Second Floor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  14. Video Tour
&lt;/h1&gt;

&lt;p&gt;Some property platforms include:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The interface may support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Vimeo&lt;/li&gt;
&lt;li&gt;Self-hosted video&lt;/li&gt;
&lt;li&gt;Video thumbnail with modal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even when not required by every project, having the component makes the template more versatile.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Virtual Tour
&lt;/h1&gt;

&lt;p&gt;Higher-end real estate platforms increasingly use virtual tours.&lt;/p&gt;

&lt;p&gt;Your template could provide a dedicated block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;360° Virtual Tour

Explore the property from anywhere.

[Start Virtual Tour]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The developer purchasing your template could later integrate Matterport or another virtual tour provider.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Property Location
&lt;/h1&gt;

&lt;p&gt;The detail page needs a location section.&lt;/p&gt;

&lt;p&gt;Typical information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Address
Road 54, Gulshan 2, Dhaka

City
Dhaka

Area
Gulshan

Postal Code
1212
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Followed by a map.&lt;/p&gt;

&lt;p&gt;Exact addresses may sometimes be hidden for privacy, so templates should support approximate location information too.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. What's Nearby
&lt;/h1&gt;

&lt;p&gt;Nearby places can make a property detail page much more useful.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nearby Places

School          0.4 km
Hospital        1.2 km
Supermarket     0.6 km
Metro Station   0.8 km
Restaurant      0.3 km
Park            1.1 km
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This section adds practical context rather than simply presenting property specifications.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Agent Contact Card
&lt;/h1&gt;

&lt;p&gt;The agent contact component is critical.&lt;/p&gt;

&lt;p&gt;It could include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Agent Photo]

Sarah Ahmed
Senior Property Consultant

Phone
Email
WhatsApp

[Send Message]
[Schedule Viewing]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On desktop, this card can be placed in a sticky sidebar while scrolling through property details.&lt;/p&gt;

&lt;p&gt;That keeps the conversion action available throughout the page.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Property Inquiry Form
&lt;/h1&gt;

&lt;p&gt;A simple inquiry form may contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name
Email
Phone
Message

I'm interested in this property.

[Send Inquiry]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefilling the message with the property name or ID is useful.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hi, I'm interested in Property RE-10284.
Please contact me with more information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. Schedule a Viewing
&lt;/h1&gt;

&lt;p&gt;A dedicated viewing request interface can provide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Choose Date

Choose Time

Your Name
Email
Phone

[Schedule Viewing]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A well-designed template can show this as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modal&lt;/li&gt;
&lt;li&gt;Sidebar form&lt;/li&gt;
&lt;li&gt;Dedicated page&lt;/li&gt;
&lt;li&gt;Inline form&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  21. Mortgage Calculator
&lt;/h1&gt;

&lt;p&gt;A mortgage calculator is another valuable real estate component.&lt;/p&gt;

&lt;p&gt;Fields can include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Price
Down Payment
Interest Rate
Loan Term
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Estimated Monthly Payment
৳128,450
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even a front-end demonstration makes the template feel much more complete.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Similar Properties
&lt;/h1&gt;

&lt;p&gt;At the bottom of the detail page, show related listings.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Similar Properties

4 Bedroom Villa
Gulshan
৳3.2 Crore

Luxury Apartment
Banani
৳2.9 Crore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps users exploring instead of reaching a dead end.&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Recently Viewed Properties
&lt;/h1&gt;

&lt;p&gt;For larger templates, a recently viewed section is another useful marketplace component.&lt;/p&gt;

&lt;p&gt;It could appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the bottom of the property page&lt;/li&gt;
&lt;li&gt;On the homepage&lt;/li&gt;
&lt;li&gt;Inside the user dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The static version can demonstrate the UI using localStorage.&lt;/p&gt;




&lt;h1&gt;
  
  
  Agent Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  24. Agents Directory
&lt;/h2&gt;

&lt;p&gt;A real estate marketplace often has multiple agents.&lt;/p&gt;

&lt;p&gt;Create a dedicated page such as:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Agent cards could display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Photo]

John Smith
Property Consultant

24 Properties

Phone
Email

View Profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional filters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Location
Specialization
Agency
Language
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  25. Agent Detail Page
&lt;/h1&gt;

&lt;p&gt;Each agent needs a proper profile page.&lt;/p&gt;

&lt;p&gt;Recommended sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent Profile Header

Photo
Name
Position
Agency
Phone
Email
Social Links
WhatsApp

About Agent

Specializations

Service Areas

Agent Properties

Reviews

Contact Form
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An experienced agent may also have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Years of Experience
Properties Sold
Active Listings
Client Rating
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Agency Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  26. Agencies Directory
&lt;/h2&gt;

&lt;p&gt;If the system supports multiple real estate agencies, create an agency directory.&lt;/p&gt;

&lt;p&gt;Agency cards may show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agency Logo

Urban Homes Realty

Dhaka, Bangladesh

32 Agents
148 Properties

View Agency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  27. Agency Profile Page
&lt;/h1&gt;

&lt;p&gt;The agency page may include:&lt;br&gt;
&lt;/p&gt;

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

Agency Name

About Agency

Address

Contact Details

Social Links

Agents

Available Properties

Reviews

Office Locations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially useful for multi-vendor property marketplace templates.&lt;/p&gt;




&lt;h1&gt;
  
  
  Location Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  28. City Detail Page
&lt;/h2&gt;

&lt;p&gt;A dedicated city page creates a stronger browsing experience.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Properties in Dhaka
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;City Overview

Property Statistics

Popular Neighborhoods

Properties for Sale

Properties for Rent

Local Agents

Map

Area Guide

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

&lt;/div&gt;



&lt;p&gt;From a development perspective, this page can later become useful for search engine landing pages as well.&lt;/p&gt;




&lt;h1&gt;
  
  
  29. Neighborhood or Area Detail Page
&lt;/h1&gt;

&lt;p&gt;Users often care about neighborhoods more than entire cities.&lt;/p&gt;

&lt;p&gt;A neighborhood page could include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Living in Gulshan

Average Property Price

Available Properties

Schools

Hospitals

Restaurants

Transportation

Lifestyle

Map

Nearby Areas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This type of page can make a real estate platform significantly richer.&lt;/p&gt;




&lt;h1&gt;
  
  
  Property Submission
&lt;/h1&gt;

&lt;h2&gt;
  
  
  30. Add Property Page
&lt;/h2&gt;

&lt;p&gt;If agents or property owners can submit listings, this is essential.&lt;/p&gt;

&lt;p&gt;Instead of one giant form, use structured steps.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1
Basic Information

Step 2
Price and Location

Step 3
Property Details

Step 4
Amenities

Step 5
Media

Step 6
Review and Publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Basic Property Information
&lt;/h2&gt;

&lt;p&gt;Fields might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Title
Description
Property Type
Listing Type
Property Status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Price
Price Prefix
Price Suffix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This supports formats like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Starting from ৳75 Lac
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;৳40,000 / month
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Property Details
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bedrooms
Bathrooms
Garage
Area
Lot Size
Year Built
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Location
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country
City
Area
Address
Postal Code
Latitude
Longitude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Amenities
&lt;/h2&gt;

&lt;p&gt;Checkboxes work well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pool
Gym
Security
Parking
Elevator
Balcony
Garden
Furnished
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Media
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Images
Featured Image
Floor Plans
Property Video URL
Virtual Tour URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A drag-and-drop uploader is a good UI choice here.&lt;/p&gt;




&lt;h1&gt;
  
  
  Authentication Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  31. Login
&lt;/h2&gt;

&lt;p&gt;Real estate platforms often have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Login
Register
Forgot Password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A clean login page should support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Email
Password
Remember Me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Potential social login placeholders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Continue with Google
Continue with Facebook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  32. Registration
&lt;/h1&gt;

&lt;p&gt;Depending on the platform, registration might allow different account types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Buyer
Property Owner
Agent
Agency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The role selection should be clearly designed.&lt;/p&gt;




&lt;h1&gt;
  
  
  User Dashboard
&lt;/h1&gt;

&lt;h2&gt;
  
  
  33. Dashboard Overview
&lt;/h2&gt;

&lt;p&gt;A professional template benefits greatly from dashboard pages.&lt;/p&gt;

&lt;p&gt;The dashboard overview might show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Active Listings
Pending Listings
Total Views
Saved Properties
Messages
Inquiries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Charts could display listing views or inquiries over time.&lt;/p&gt;




&lt;h1&gt;
  
  
  34. My Properties
&lt;/h1&gt;

&lt;p&gt;Users should be able to manage their listings.&lt;/p&gt;

&lt;p&gt;A property management table might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property
Date
Status
Views
Price
Actions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Edit
Delete
View
Duplicate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  35. Add New Property
&lt;/h1&gt;

&lt;p&gt;The dashboard version can reuse the property submission form.&lt;/p&gt;

&lt;p&gt;Keeping both frontend submission and dashboard submission patterns consistent improves the design system.&lt;/p&gt;




&lt;h1&gt;
  
  
  36. Saved Properties
&lt;/h1&gt;

&lt;p&gt;Users need somewhere to manage favorites.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Saved Properties

[Property Card]
[Property Card]
[Property Card]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remove
View Property
Contact Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  37. Property Comparison
&lt;/h1&gt;

&lt;p&gt;Comparison functionality is particularly useful for buyers.&lt;/p&gt;

&lt;p&gt;Users may compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property A
Property B
Property C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Across attributes such as:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Property A&lt;/th&gt;
&lt;th&gt;Property B&lt;/th&gt;
&lt;th&gt;Property C&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;৳2.4 Cr&lt;/td&gt;
&lt;td&gt;৳2.8 Cr&lt;/td&gt;
&lt;td&gt;৳2.6 Cr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bedrooms&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bathrooms&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Area&lt;/td&gt;
&lt;td&gt;1,850 sq ft&lt;/td&gt;
&lt;td&gt;2,300 sq ft&lt;/td&gt;
&lt;td&gt;2,050 sq ft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parking&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Furnished&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This gives the template another meaningful user flow.&lt;/p&gt;




&lt;h1&gt;
  
  
  38. Messages
&lt;/h1&gt;

&lt;p&gt;If the marketplace supports internal communication, provide a messages interface.&lt;/p&gt;

&lt;p&gt;Typical layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-------------------------------
| Conversations | Chat        |
|               |             |
| Sarah Ahmed   | Messages    |
| David Karim   |             |
| Urban Realty  |             |
-------------------------------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simpler template can skip live chat but still demonstrate an inbox UI.&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Inquiries
&lt;/h1&gt;

&lt;p&gt;Agents need to manage property inquiries.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property
Customer
Phone
Date
Status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inquiry statuses might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;New
Contacted
Viewing Scheduled
Closed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  40. Profile Settings
&lt;/h1&gt;

&lt;p&gt;Account settings should include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profile Information
Photo
Name
Phone
Email
Address
Social Profiles
Password
Notification Preferences
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent accounts may also include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bio
License Number
Specialization
Service Areas
Agency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Supporting Marketing Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  41. About Us
&lt;/h2&gt;

&lt;p&gt;The About page should not be overly generic.&lt;/p&gt;

&lt;p&gt;For a real estate business, useful sections include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Company Story

Mission

Why Choose Us

Statistics

Team

Locations

Testimonials

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

&lt;/div&gt;



&lt;p&gt;Statistics might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5,000+
Properties Listed

2,400+
Happy Clients

150+
Professional Agents

12
Cities Covered
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  42. Services Page
&lt;/h1&gt;

&lt;p&gt;Real estate businesses often offer more than property listings.&lt;/p&gt;

&lt;p&gt;Services might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Buying
Property Selling
Property Rental
Property Management
Commercial Real Estate
Investment Consulting
Property Valuation
Mortgage Assistance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each service can link to a service detail page.&lt;/p&gt;




&lt;h1&gt;
  
  
  43. Service Detail Page
&lt;/h1&gt;

&lt;p&gt;A scalable template should include at least one example service detail page.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service Header

Overview

How It Works

Benefits

Process

Related Services

FAQ

Contact CTA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  44. Blog Page
&lt;/h1&gt;

&lt;p&gt;Real estate businesses rely heavily on educational and market content.&lt;/p&gt;

&lt;p&gt;The blog page might include categories such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Buying Guides
Selling Guides
Investment
Market Trends
Home Improvement
Neighborhood Guides
Real Estate News
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  45. Blog Detail Page
&lt;/h1&gt;

&lt;p&gt;A complete article page should include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Title
Category
Author
Date
Featured Image
Article Content
Tags
Share Buttons
Author Box
Related Posts
Comments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typography matters heavily here.&lt;/p&gt;

&lt;p&gt;Many HTML templates build impressive landing pages but neglect long-form content styles.&lt;/p&gt;

&lt;p&gt;Make sure headings, lists, quotes, images, tables, code-free rich text, and spacing all work properly.&lt;/p&gt;




&lt;h1&gt;
  
  
  46. Contact Page
&lt;/h1&gt;

&lt;p&gt;The contact page should contain more than a form.&lt;/p&gt;

&lt;p&gt;Useful information includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Office Address
Phone
Email
Working Hours
WhatsApp
Map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Form fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name
Email
Phone
Subject
Message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the company operates multiple branches, office cards can also be useful.&lt;/p&gt;




&lt;h1&gt;
  
  
  47. FAQ Page
&lt;/h1&gt;

&lt;p&gt;Real estate transactions create many repetitive questions.&lt;/p&gt;

&lt;p&gt;FAQ categories might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Buying
Selling
Renting
Property Listings
Agents
Payments
Accounts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An accordion layout works well.&lt;/p&gt;




&lt;h1&gt;
  
  
  48. Testimonials or Reviews
&lt;/h1&gt;

&lt;p&gt;Testimonials may appear on several pages, but a dedicated review component should exist in the design system.&lt;/p&gt;

&lt;p&gt;Reviews could show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Photo

"Excellent service..."

Client Name
Property Buyer

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

&lt;/div&gt;



&lt;p&gt;Avoid filling every page with testimonial sliders. Use them where they help build trust.&lt;/p&gt;




&lt;h1&gt;
  
  
  49. Pricing Page
&lt;/h1&gt;

&lt;p&gt;If the platform charges property owners or agencies for listings, a pricing page becomes essential.&lt;/p&gt;

&lt;p&gt;Example plans:&lt;br&gt;
&lt;/p&gt;

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

5 Property Listings
30 Days
Email Support

$19
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





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

25 Property Listings
Featured Listings
Analytics
Priority Support

$49
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





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

Unlimited Listings
10 Agent Accounts
Advanced Analytics
Premium Support

$99
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  50. Membership or Subscription Pages
&lt;/h1&gt;

&lt;p&gt;A marketplace template may include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Membership Plans
Checkout
Payment Success
Payment Failed
Billing History
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These pages are not necessary for every real estate theme, but they can significantly increase the scope of a marketplace-oriented template.&lt;/p&gt;




&lt;h1&gt;
  
  
  Utility Pages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  51. 404 Page
&lt;/h2&gt;

&lt;p&gt;Never forget the 404 page.&lt;/p&gt;

&lt;p&gt;Keep it useful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Not Found

The page you're looking for may have moved
or is no longer available.

[Browse Properties]
[Return Home]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  52. Empty States
&lt;/h1&gt;

&lt;p&gt;Templates often overlook empty states.&lt;/p&gt;

&lt;p&gt;You should intentionally design states such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No properties found.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You haven't saved any properties yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No messages available.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No listings match your filters.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then provide useful actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clear Filters
Browse Properties
Add Property
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good empty states make the dashboard and marketplace interfaces feel much more realistic.&lt;/p&gt;




&lt;h1&gt;
  
  
  53. Search No-Results Page
&lt;/h1&gt;

&lt;p&gt;This deserves special treatment.&lt;/p&gt;

&lt;p&gt;Instead of displaying:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No properties match your search.

Try adjusting:
• Location
• Price range
• Property type
• Bedroom count

[Clear Filters]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might also show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recently Added Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;below the message.&lt;/p&gt;




&lt;h1&gt;
  
  
  Shared Components Every Real Estate Template Needs
&lt;/h1&gt;

&lt;p&gt;Pages are only one side of the template.&lt;/p&gt;

&lt;p&gt;A strong template also needs a consistent component system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Header
&lt;/h2&gt;

&lt;p&gt;Several header variations may be useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standard header
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Logo
Buy
Rent
Agents
Agencies
Blog
Contact

Sign In
Add Property
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Transparent header
&lt;/h3&gt;

&lt;p&gt;Useful over hero images.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard header
&lt;/h3&gt;

&lt;p&gt;Usually simpler and more application-focused.&lt;/p&gt;

&lt;p&gt;The important point is that the header should fit the product rather than blindly reusing a generic SaaS navigation.&lt;/p&gt;




&lt;h1&gt;
  
  
  54. Mega Menu or Property Navigation
&lt;/h1&gt;

&lt;p&gt;A larger real estate platform may need structured navigation.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Buy
  Apartments
  Houses
  Villas
  Commercial
  Land

Rent
  Apartments
  Houses
  Offices
  Short-Term Rentals

Explore
  Cities
  Neighborhoods
  Agents
  Agencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A mega menu is useful only when the information architecture actually requires it.&lt;/p&gt;




&lt;h1&gt;
  
  
  55. Mobile Navigation
&lt;/h1&gt;

&lt;p&gt;Real estate templates have many filters and navigation items, so mobile behavior needs special attention.&lt;/p&gt;

&lt;p&gt;The mobile navigation should support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Menu
Search
Saved
Profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For mobile-heavy property marketplaces, a bottom navigation can also work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Home
Search
Saved
Messages
Profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  56. Breadcrumbs
&lt;/h1&gt;

&lt;p&gt;Real estate websites often have deep navigation.&lt;/p&gt;

&lt;p&gt;Breadcrumbs help users understand context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Home
/
Properties
/
Dhaka
/
Gulshan
/
Luxury Family Villa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They are especially useful on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Property detail&lt;/li&gt;
&lt;li&gt;Agent detail&lt;/li&gt;
&lt;li&gt;Agency detail&lt;/li&gt;
&lt;li&gt;City pages&lt;/li&gt;
&lt;li&gt;Neighborhood pages&lt;/li&gt;
&lt;li&gt;Blog posts&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  57. Property Cards
&lt;/h1&gt;

&lt;p&gt;Property cards are one of the most important components in the entire design system.&lt;/p&gt;

&lt;p&gt;Create several states:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default
Featured
For Sale
For Rent
Sold
New
Verified
Saved
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Card interactions should remain consistent.&lt;/p&gt;

&lt;p&gt;Do not create completely different property card styles in every section just for visual variety.&lt;/p&gt;

&lt;p&gt;Variation should come from section composition, not from abandoning the design system.&lt;/p&gt;




&lt;h1&gt;
  
  
  58. Agent Cards
&lt;/h1&gt;

&lt;p&gt;Create reusable agent components with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Photo
Name
Position
Listings Count
Phone
Social Links
Profile CTA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  59. Location Cards
&lt;/h1&gt;

&lt;p&gt;Support multiple forms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large Image Card
Compact City Card
Neighborhood Card
Text-Based Location List
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, variation is useful as long as the design language remains consistent.&lt;/p&gt;




&lt;h1&gt;
  
  
  60. Search Component
&lt;/h1&gt;

&lt;p&gt;A property search component should work in several contexts.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Homepage Search
Listing Page Search
Mobile Search
Compact Header Search
Map Search
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The underlying form language should feel related across all versions.&lt;/p&gt;




&lt;h1&gt;
  
  
  61. Filter Components
&lt;/h1&gt;

&lt;p&gt;Reusable filter elements should include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Checkbox
Radio
Select
Range
Location Select
Bedroom Selector
Amenity Selector
Expandable Filter Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mobile filters should normally open inside an offcanvas panel or full-screen overlay.&lt;/p&gt;




&lt;h1&gt;
  
  
  62. Sort Controls
&lt;/h1&gt;

&lt;p&gt;Property results typically require sorting.&lt;/p&gt;

&lt;p&gt;Common options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Newest
Oldest
Price: Low to High
Price: High to Low
Most Popular
Featured
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  63. Pagination
&lt;/h1&gt;

&lt;p&gt;Provide standard pagination:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;←
1
2
3
4
...
12
→
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Infinite scrolling may work for some products, but pagination remains a safer default template component.&lt;/p&gt;




&lt;h1&gt;
  
  
  64. Favorite or Save Interaction
&lt;/h1&gt;

&lt;p&gt;Property cards and detail pages should support a save icon.&lt;/p&gt;

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

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;after activation.&lt;/p&gt;

&lt;p&gt;For a static template, JavaScript can persist favorites using localStorage.&lt;/p&gt;




&lt;h1&gt;
  
  
  65. Share Property
&lt;/h1&gt;

&lt;p&gt;A share component might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Copy Link
Facebook
LinkedIn
WhatsApp
Email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avoid displaying every social network ever created.&lt;/p&gt;

&lt;p&gt;Use the ones relevant to the intended market.&lt;/p&gt;




&lt;h1&gt;
  
  
  66. Status Badges
&lt;/h1&gt;

&lt;p&gt;Reusable property badges might include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FOR SALE
FOR RENT
FEATURED
NEW
VERIFIED
SOLD
RENTED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep colors consistent across the entire template.&lt;/p&gt;




&lt;h1&gt;
  
  
  67. Forms and Validation States
&lt;/h1&gt;

&lt;p&gt;Design more than the default form state.&lt;/p&gt;

&lt;p&gt;Your component system should support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default
Focused
Filled
Disabled
Error
Success
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Email Address
john@example.com

Please enter a valid email address.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A template feels much more polished when validation states are considered.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real Estate Template Architecture
&lt;/h1&gt;

&lt;p&gt;If you are building the template itself, it helps to think in page groups.&lt;/p&gt;

&lt;p&gt;A good directory structure might conceptually look like:&lt;br&gt;
&lt;/p&gt;

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

Properties
  Property Grid
  Property List
  Map Search
  Property Details
  Compare

Locations
  Cities
  City Details
  Neighborhood Details

Agents
  Agents
  Agent Details

Agencies
  Agencies
  Agency Details

Submit Property

Dashboard
  Overview
  Properties
  Add Property
  Favorites
  Messages
  Inquiries
  Profile

Company
  About
  Services
  Service Details
  Pricing
  Contact
  FAQ

Blog
  Blog Grid
  Blog Details

Authentication
  Login
  Register
  Forgot Password

Utility
  404
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is much closer to a complete real estate product than simply shipping ten unrelated landing pages.&lt;/p&gt;




&lt;h1&gt;
  
  
  Homepage Section Order
&lt;/h1&gt;

&lt;p&gt;There is no universal homepage structure, but a good starting sequence is:&lt;br&gt;
&lt;/p&gt;

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

Hero + Property Search

Property Types

Featured Properties

Popular Locations

Properties for Sale

Promotional CTA

Properties for Rent

Why Choose Us

Featured Agents

Market Statistics

Testimonials

Latest Articles

Newsletter

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

&lt;/div&gt;



&lt;p&gt;You should not mechanically use every section.&lt;/p&gt;

&lt;p&gt;Choose sections based on the template's positioning.&lt;/p&gt;

&lt;p&gt;A luxury property template might rely heavily on editorial photography.&lt;/p&gt;

&lt;p&gt;A marketplace might emphasize search and filters.&lt;/p&gt;

&lt;p&gt;An agency template might emphasize agents and services.&lt;/p&gt;

&lt;p&gt;A rental platform might prioritize availability, map search, and neighborhoods.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Makes a Real Estate Template Feel Generic?
&lt;/h1&gt;

&lt;p&gt;Many real estate templates technically include enough sections but still feel generic.&lt;/p&gt;

&lt;p&gt;The reason is usually that the template was designed from a generic landing-page system instead of from real estate workflows.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hero
Features
Statistics
Cards
Testimonials
Blog
CTA
Footer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That structure could describe almost any website.&lt;/p&gt;

&lt;p&gt;A real estate template should visibly contain domain-specific interfaces such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property Search
Location Search
Bedroom Filters
Price Filters
Property Galleries
Amenities
Floor Plans
Agent Profiles
Map Search
Mortgage Calculator
Viewing Requests
Saved Properties
Comparison
Property Submission
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These components are what make the product clearly belong to the real estate industry.&lt;/p&gt;




&lt;h1&gt;
  
  
  Do Not Make Every Page Look the Same
&lt;/h1&gt;

&lt;p&gt;Consistency does not mean duplication.&lt;/p&gt;

&lt;p&gt;A common template-generation mistake is using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Breadcrumb
Title
Three-column cards
CTA
Footer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on almost every page.&lt;/p&gt;

&lt;p&gt;A stronger system changes composition based on purpose.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;h3&gt;
  
  
  Property listing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Filters + Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Property detail
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gallery + Property Information + Sticky Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Agent profile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profile + Bio + Listings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  City page
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Location Hero + Market Information + Properties
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sidebar + Statistics + Management Tables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Blog
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Editorial Content Layout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same typography, spacing, buttons, borders, colors, and component language.&lt;/p&gt;

&lt;p&gt;Different page composition.&lt;/p&gt;

&lt;p&gt;That is how a multi-page template feels coherent without becoming repetitive.&lt;/p&gt;




&lt;h1&gt;
  
  
  Responsive Design Is Especially Important
&lt;/h1&gt;

&lt;p&gt;Real estate users frequently browse properties from phones.&lt;/p&gt;

&lt;p&gt;That means responsive behavior should not be an afterthought.&lt;/p&gt;

&lt;p&gt;On mobile:&lt;/p&gt;

&lt;h3&gt;
  
  
  Property filters
&lt;/h3&gt;

&lt;p&gt;Move into:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;button opening an offcanvas panel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Map search
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List | Map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;toggle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Property gallery
&lt;/h3&gt;

&lt;p&gt;Convert the image grid into a carousel or simplified gallery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent sidebar
&lt;/h3&gt;

&lt;p&gt;Move below the main property information or convert it into a sticky bottom CTA.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Call
WhatsApp
Message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Comparison table
&lt;/h3&gt;

&lt;p&gt;Allow horizontal scrolling or use vertically stacked property comparisons.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;p&gt;Collapse the sidebar into a menu.&lt;/p&gt;

&lt;p&gt;A real estate template that looks excellent on desktop but becomes awkward when filtering properties on mobile is not production-ready.&lt;/p&gt;




&lt;h1&gt;
  
  
  Performance Matters
&lt;/h1&gt;

&lt;p&gt;Real estate websites are image-heavy.&lt;/p&gt;

&lt;p&gt;A single property can easily include twenty or more photos.&lt;/p&gt;

&lt;p&gt;If the template ignores performance, the actual application built from it may become extremely slow.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"property.jpg"&lt;/span&gt;
    &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Modern apartment in Gulshan"&lt;/span&gt;
    &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use appropriately sized images rather than downloading a 4K photo and rendering it inside a 350-pixel card.&lt;/p&gt;

&lt;p&gt;Modern formats such as WebP or AVIF can also reduce image weight significantly.&lt;/p&gt;




&lt;h1&gt;
  
  
  Keep Property Card Images Consistent
&lt;/h1&gt;

&lt;p&gt;Image consistency has a large impact on perceived quality.&lt;/p&gt;

&lt;p&gt;Define predictable aspect ratios.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.property-card__media&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;aspect-ratio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.property-card__media&lt;/span&gt; &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;object-fit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cover&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;Without this, property cards become uneven whenever agents upload images with different dimensions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Accessibility
&lt;/h1&gt;

&lt;p&gt;A professional template should also account for accessibility.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real labels for form inputs&lt;/li&gt;
&lt;li&gt;Keyboard-accessible dropdowns&lt;/li&gt;
&lt;li&gt;Visible focus states&lt;/li&gt;
&lt;li&gt;Alternative text for property images&lt;/li&gt;
&lt;li&gt;Accessible modal dialogs&lt;/li&gt;
&lt;li&gt;Sufficient color contrast&lt;/li&gt;
&lt;li&gt;Semantic headings&lt;/li&gt;
&lt;li&gt;Proper buttons instead of clickable &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For icon-only buttons such as favorites:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Save property"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fa-regular fa-heart"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is better than a clickable icon with no semantic meaning.&lt;/p&gt;




&lt;h1&gt;
  
  
  SEO-Friendly Page Architecture
&lt;/h1&gt;

&lt;p&gt;Real estate websites can generate a large number of indexable pages.&lt;/p&gt;

&lt;p&gt;Potential URL structures might look like:&lt;br&gt;
&lt;/p&gt;

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

/properties/for-sale

/properties/for-rent

/properties/apartments

/properties/villas

/location/dhaka

/location/dhaka/gulshan

/property/luxury-villa-gulshan

/agents

/agents/sarah-ahmed

/agencies

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

&lt;/div&gt;



&lt;p&gt;Even if you are building only a frontend template, designing around clean content relationships makes backend integration easier later.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Realistic Demo Data
&lt;/h1&gt;

&lt;p&gt;Demo content strongly affects how professional a template feels.&lt;/p&gt;

&lt;p&gt;Avoid property names such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Property One
Property Two
House Example
Beautiful Home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use realistic examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Contemporary 3-Bedroom Apartment in Gulshan

Lakeview Family Residence in Dhanmondi

Modern Commercial Office in Banani

Furnished Studio Near Uttara Metro Station
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Likewise, use realistic prices, addresses, room counts, property sizes, and agent profiles.&lt;/p&gt;

&lt;p&gt;Good demo content makes screenshots immediately more convincing.&lt;/p&gt;




&lt;h1&gt;
  
  
  Think Beyond the Homepage
&lt;/h1&gt;

&lt;p&gt;This is probably the most important lesson when designing templates for sale.&lt;/p&gt;

&lt;p&gt;A homepage can be visually impressive while the overall template remains weak.&lt;/p&gt;

&lt;p&gt;Buyers evaluating a commercial real estate template will eventually ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I search properties?

What does the detail page look like?

Is there a map layout?

Does it support agents?

Can users submit properties?

Is there a dashboard?

What happens on mobile?

Are favorites supported?

Can properties be compared?

What does the empty state look like?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your template should answer those questions visually.&lt;/p&gt;




&lt;h1&gt;
  
  
  Minimum Page Set
&lt;/h1&gt;

&lt;p&gt;If you want a smaller but still credible real estate template, I would consider this the minimum serious page set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;01. Homepage
02. Property Grid
03. Property List
04. Map Search
05. Property Details
06. Agents
07. Agent Details
08. Locations
09. Location Details
10. Add Property
11. Favorites
12. Compare Properties
13. Login
14. Register
15. Dashboard
16. About
17. Services
18. Blog
19. Blog Details
20. Contact
21. FAQ
22. 404
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That already gives developers enough building blocks to create several types of property websites.&lt;/p&gt;




&lt;h1&gt;
  
  
  Larger Marketplace Template
&lt;/h1&gt;

&lt;p&gt;For a premium marketplace-oriented template, I would expand it to something 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;Home
Home Alternative

Property Grid
Property List
Map Search
Property Detail
Compare Properties

Properties for Sale
Properties for Rent

Cities
City Detail
Neighborhood Detail

Agents
Agent Detail

Agencies
Agency Detail

Submit Property

Dashboard Overview
My Properties
Add Property
Favorites
Messages
Inquiries
Profile
Settings

Pricing
Checkout
Payment Success

About
Services
Service Detail
Contact
FAQ

Blog
Blog Detail

Login
Register
Forgot Password

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

&lt;/div&gt;



&lt;p&gt;You do not necessarily need thirty completely independent designs.&lt;/p&gt;

&lt;p&gt;Shared components can cover a large amount of this functionality.&lt;/p&gt;

&lt;p&gt;The goal is to demonstrate a complete system.&lt;/p&gt;




&lt;h1&gt;
  
  
  Recommended Priority When Building the Template
&lt;/h1&gt;

&lt;p&gt;If you are developing the template page by page, build the most important product flows first.&lt;/p&gt;

&lt;p&gt;A practical order is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Design System
2. Header and Footer
3. Homepage
4. Property Card
5. Property Listing
6. Filters
7. Property Detail
8. Map Search
9. Agent Pages
10. Location Pages
11. Property Submission
12. Dashboard
13. Favorites and Comparison
14. Marketing Pages
15. Blog
16. Authentication
17. Utility States
18. Mobile Refinement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This order reduces rework.&lt;/p&gt;

&lt;p&gt;For example, once the property card is finalized, you can reuse it across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homepage&lt;/li&gt;
&lt;li&gt;Search results&lt;/li&gt;
&lt;li&gt;Agent profiles&lt;/li&gt;
&lt;li&gt;Agency pages&lt;/li&gt;
&lt;li&gt;City pages&lt;/li&gt;
&lt;li&gt;Favorites&lt;/li&gt;
&lt;li&gt;Related properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is much better than independently designing similar components on every page.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Checklist
&lt;/h1&gt;

&lt;p&gt;Before calling a real estate template complete, verify that it covers the major workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovery
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Property search&lt;/li&gt;
&lt;li&gt;[ ] Buy/rent selection&lt;/li&gt;
&lt;li&gt;[ ] Property categories&lt;/li&gt;
&lt;li&gt;[ ] Location browsing&lt;/li&gt;
&lt;li&gt;[ ] Advanced filtering&lt;/li&gt;
&lt;li&gt;[ ] Sorting&lt;/li&gt;
&lt;li&gt;[ ] Grid/list views&lt;/li&gt;
&lt;li&gt;[ ] Map search&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Property Details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Image gallery&lt;/li&gt;
&lt;li&gt;[ ] Price&lt;/li&gt;
&lt;li&gt;[ ] Property specifications&lt;/li&gt;
&lt;li&gt;[ ] Description&lt;/li&gt;
&lt;li&gt;[ ] Amenities&lt;/li&gt;
&lt;li&gt;[ ] Floor plans&lt;/li&gt;
&lt;li&gt;[ ] Video or virtual tour&lt;/li&gt;
&lt;li&gt;[ ] Location map&lt;/li&gt;
&lt;li&gt;[ ] Nearby places&lt;/li&gt;
&lt;li&gt;[ ] Agent information&lt;/li&gt;
&lt;li&gt;[ ] Inquiry form&lt;/li&gt;
&lt;li&gt;[ ] Schedule viewing&lt;/li&gt;
&lt;li&gt;[ ] Similar properties&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Users
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Login&lt;/li&gt;
&lt;li&gt;[ ] Registration&lt;/li&gt;
&lt;li&gt;[ ] Favorites&lt;/li&gt;
&lt;li&gt;[ ] Property comparison&lt;/li&gt;
&lt;li&gt;[ ] Profile&lt;/li&gt;
&lt;li&gt;[ ] Messages or inquiries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agents and Agencies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Agent directory&lt;/li&gt;
&lt;li&gt;[ ] Agent profile&lt;/li&gt;
&lt;li&gt;[ ] Agency directory&lt;/li&gt;
&lt;li&gt;[ ] Agency profile&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Property Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Add property&lt;/li&gt;
&lt;li&gt;[ ] Edit property&lt;/li&gt;
&lt;li&gt;[ ] My properties&lt;/li&gt;
&lt;li&gt;[ ] Listing status&lt;/li&gt;
&lt;li&gt;[ ] Media upload interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Supporting Pages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] About&lt;/li&gt;
&lt;li&gt;[ ] Services&lt;/li&gt;
&lt;li&gt;[ ] Contact&lt;/li&gt;
&lt;li&gt;[ ] FAQ&lt;/li&gt;
&lt;li&gt;[ ] Blog&lt;/li&gt;
&lt;li&gt;[ ] Blog detail&lt;/li&gt;
&lt;li&gt;[ ] Pricing if applicable&lt;/li&gt;
&lt;li&gt;[ ] 404&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  UX
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Responsive filters&lt;/li&gt;
&lt;li&gt;[ ] Mobile property gallery&lt;/li&gt;
&lt;li&gt;[ ] Empty states&lt;/li&gt;
&lt;li&gt;[ ] Loading states&lt;/li&gt;
&lt;li&gt;[ ] Validation states&lt;/li&gt;
&lt;li&gt;[ ] Pagination&lt;/li&gt;
&lt;li&gt;[ ] Breadcrumbs&lt;/li&gt;
&lt;li&gt;[ ] Consistent badges&lt;/li&gt;
&lt;li&gt;[ ] Accessible controls&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;A good real estate template should not simply look like a real estate website.&lt;/p&gt;

&lt;p&gt;It should behave like the foundation of a real real estate product.&lt;/p&gt;

&lt;p&gt;That means property discovery needs proper search and filtering. Property pages need galleries, specifications, amenities, maps, floor plans, and conversion actions. Agents and agencies need their own content hierarchy. Buyers need favorites and comparisons. Sellers need property submission and management tools.&lt;/p&gt;

&lt;p&gt;The best templates also think beyond the obvious screens.&lt;/p&gt;

&lt;p&gt;They account for empty results, mobile filters, saved properties, dashboards, map views, viewing requests, image performance, responsive behavior, and reusable design components.&lt;/p&gt;

&lt;p&gt;The difference between a basic real estate HTML theme and a professional real estate template is therefore not the number of decorative homepage sections.&lt;/p&gt;

&lt;p&gt;It is the completeness of the system.&lt;/p&gt;

&lt;p&gt;Design the search experience first. Build strong property cards. Treat the property detail page as the central conversion page. Create reusable components. Then expand the system around buyers, renters, owners, agents, agencies, and locations.&lt;/p&gt;

&lt;p&gt;Once those pieces work together, you are no longer designing a collection of pages.&lt;/p&gt;

&lt;p&gt;You are designing the frontend foundation of a real estate platform.&lt;/p&gt;

</description>
      <category>realestate</category>
      <category>template</category>
      <category>design</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Become a .NET Developer in 2026: A Practical Roadmap From Zero to Production</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Sat, 08 Aug 2026 17:51:09 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-become-a-net-developer-in-2026-a-practical-roadmap-from-zero-to-production-3b1f</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-become-a-net-developer-in-2026-a-practical-roadmap-from-zero-to-production-3b1f</guid>
      <description>&lt;p&gt;Learning .NET in 2026 is not mainly about learning how to write C#.&lt;/p&gt;

&lt;p&gt;You can understand variables, loops, classes, LINQ, and even ASP.NET Core controllers and still struggle to build a production application.&lt;/p&gt;

&lt;p&gt;The actual job of a modern .NET developer involves much more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;ASP.NET Core&lt;/li&gt;
&lt;li&gt;HTTP and REST APIs&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;Entity Framework Core&lt;/li&gt;
&lt;li&gt;authentication and authorization&lt;/li&gt;
&lt;li&gt;dependency injection&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;cloud infrastructure&lt;/li&gt;
&lt;li&gt;application architecture&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;AI-assisted development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That list can make the ecosystem look intimidating.&lt;/p&gt;

&lt;p&gt;It does not need to be.&lt;/p&gt;

&lt;p&gt;The mistake is trying to learn everything simultaneously.&lt;/p&gt;

&lt;p&gt;A better approach is to learn .NET in layers and build increasingly realistic applications as your knowledge grows.&lt;/p&gt;

&lt;p&gt;This article presents the roadmap I would follow if I were becoming a .NET developer in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, Understand What ".NET Developer" Actually Means
&lt;/h2&gt;

&lt;p&gt;.NET is not a programming language.&lt;/p&gt;

&lt;p&gt;It is Microsoft's open-source, cross-platform development platform. C# is the language most commonly associated with it. Modern .NET applications can run on Windows, Linux, and macOS.&lt;/p&gt;

&lt;p&gt;The ecosystem can be roughly visualized 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;C#
 │
 ▼
.NET
 │
 ├── ASP.NET Core
 │      ├── REST APIs
 │      ├── Minimal APIs
 │      ├── MVC
 │      ├── Razor Pages
 │      ├── Blazor
 │      └── SignalR
 │
 ├── Worker Services
 │
 ├── Desktop
 │
 ├── Cloud Services
 │
 └── Other application models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your goal is backend or full-stack software engineering, the most useful path is usually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C#
↓
.NET
↓
ASP.NET Core
↓
SQL
↓
Entity Framework Core
↓
REST APIs
↓
Authentication
↓
Testing
↓
Architecture
↓
Docker
↓
Cloud + CI/CD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the path this article focuses on.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Start With Modern .NET, Not Old .NET Framework
&lt;/h1&gt;

&lt;p&gt;One of the first sources of confusion for beginners is Microsoft's naming history.&lt;/p&gt;

&lt;p&gt;You will encounter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.NET Framework
.NET Core
.NET 5
.NET 6
.NET 7
.NET 8
.NET 9
.NET 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not start a new learning journey with old .NET Framework tutorials unless you specifically need to maintain legacy applications.&lt;/p&gt;

&lt;p&gt;For modern development in 2026, focus on &lt;strong&gt;.NET 10&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;.NET 10 is an LTS release and Microsoft lists its support through November 2028. .NET 9 is an STS release supported through November 2026.&lt;/p&gt;

&lt;p&gt;For someone learning today, that makes .NET 10 a sensible default.&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.NET 10 SDK&lt;/li&gt;
&lt;li&gt;Visual Studio 2026, JetBrains Rider, or VS Code&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Docker Desktop&lt;/li&gt;
&lt;li&gt;PostgreSQL or SQL Server&lt;/li&gt;
&lt;li&gt;an API client such as Bruno or Postman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create your first application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new console &lt;span class="nt"&gt;-n&lt;/span&gt; HelloDotNet
&lt;span class="nb"&gt;cd &lt;/span&gt;HelloDotNet
dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do this before installing twenty extensions and watching fifteen hours of tutorials.&lt;/p&gt;

&lt;p&gt;Get something running first.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Learn C# Properly
&lt;/h1&gt;

&lt;p&gt;C# should be your first serious investment.&lt;/p&gt;

&lt;p&gt;C# 14 is the current C# release associated with .NET 10.&lt;/p&gt;

&lt;p&gt;Do not rush directly into ASP.NET Core.&lt;/p&gt;

&lt;p&gt;Framework knowledge without language knowledge creates developers who can copy code but cannot debug it.&lt;/p&gt;

&lt;p&gt;You should become comfortable reading and writing ordinary C# before building large web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the fundamentals
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Variables
Data types
Operators
Conditions
Loops
Methods
Arrays
Collections
Classes
Objects
Interfaces
Enums
Exceptions
Generics
Nullable types
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&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;Product&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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="n"&gt;required&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsAvailable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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;Then:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&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;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Mechanical Keyboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;IsAvailable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Mouse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;IsAvailable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&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;This code is easy.&lt;/p&gt;

&lt;p&gt;The goal is not memorization.&lt;/p&gt;

&lt;p&gt;You should understand what is happening and be able to modify it without assistance.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Understand Object-Oriented Programming, But Do Not Worship It
&lt;/h1&gt;

&lt;p&gt;C# is heavily object-oriented, so you need to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;encapsulation&lt;/li&gt;
&lt;li&gt;abstraction&lt;/li&gt;
&lt;li&gt;inheritance&lt;/li&gt;
&lt;li&gt;polymorphism&lt;/li&gt;
&lt;li&gt;interfaces&lt;/li&gt;
&lt;li&gt;composition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But knowing the definitions is not enough.&lt;/p&gt;

&lt;p&gt;Consider this:&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;interface&lt;/span&gt; &lt;span class="nc"&gt;IPaymentService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;PaymentResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;ChargeAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;amount&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;cancellationToken&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;And an implementation:&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;StripePaymentService&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IPaymentService&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;PaymentResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;ChargeAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;amount&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;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Call payment provider&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PaymentResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&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;Why use an interface?&lt;/p&gt;

&lt;p&gt;Not simply because "SOLID says so."&lt;/p&gt;

&lt;p&gt;Maybe because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you have multiple payment providers&lt;/li&gt;
&lt;li&gt;you want easier testing&lt;/li&gt;
&lt;li&gt;the implementation belongs behind an abstraction&lt;/li&gt;
&lt;li&gt;provider-specific code should not leak into business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That reasoning matters more than memorizing design principles.&lt;/p&gt;

&lt;p&gt;Also learn when &lt;strong&gt;not&lt;/strong&gt; to create abstractions.&lt;/p&gt;

&lt;p&gt;A common junior developer mistake is turning every class into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IFoo
Foo
IBar
Bar
IBaz
Baz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;even when there is only one simple implementation and no useful boundary.&lt;/p&gt;

&lt;p&gt;Good architecture is not measured by interface count.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Learn Collections, Generics, and LINQ
&lt;/h1&gt;

&lt;p&gt;LINQ is one of the most important C# skills for backend development.&lt;/p&gt;

&lt;p&gt;Suppose:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Order&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;You should comfortably understand code like:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;expensiveOrders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Total&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OrderByDescending&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Where
Select
First
FirstOrDefault
Single
SingleOrDefault
Any
All
OrderBy
OrderByDescending
GroupBy
Join
Take
Skip
Distinct
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More importantly, understand deferred execution.&lt;/p&gt;

&lt;p&gt;This:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;does not always mean the same thing depending on whether &lt;code&gt;products&lt;/code&gt; is an in-memory collection or an &lt;code&gt;IQueryable&amp;lt;T&amp;gt;&lt;/code&gt; connected to Entity Framework.&lt;/p&gt;

&lt;p&gt;That distinction becomes extremely important later.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Learn Async/Await Early
&lt;/h1&gt;

&lt;p&gt;Modern backend software spends a lot of time waiting on I/O:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database queries&lt;/li&gt;
&lt;li&gt;HTTP APIs&lt;/li&gt;
&lt;li&gt;file systems&lt;/li&gt;
&lt;li&gt;message brokers&lt;/li&gt;
&lt;li&gt;caches&lt;/li&gt;
&lt;li&gt;cloud services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So asynchronous programming is essential.&lt;/p&gt;

&lt;p&gt;Example:&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;?&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&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;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefaultAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;cancellationToken&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;Understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task
Task&amp;lt;T&amp;gt;
async
await
CancellationToken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not memorize &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt; as magic keywords.&lt;/p&gt;

&lt;p&gt;Understand why asynchronous I/O helps a server avoid unnecessarily blocking threads while waiting for external operations.&lt;/p&gt;

&lt;p&gt;Also learn common mistakes such as:&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Result&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Wait&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and unnecessary patterns such as:&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;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should eventually be able to recognize async code that technically compiles but provides no actual benefit.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Understand .NET Before ASP.NET Core
&lt;/h1&gt;

&lt;p&gt;Once your C# fundamentals are reasonable, understand what the .NET platform provides.&lt;/p&gt;

&lt;p&gt;Learn the basic ideas around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLR
Garbage collection
Assemblies
NuGet
SDK
Runtime
JIT compilation
Configuration
Dependency injection
Logging
Hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not need CLR internals at the beginning.&lt;/p&gt;

&lt;p&gt;But you should understand the relationship:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your C# Code
    ↓
Compiler
    ↓
Intermediate Language
    ↓
.NET Runtime
    ↓
Execution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understand project files too.&lt;/p&gt;

&lt;p&gt;A modern &lt;code&gt;.csproj&lt;/code&gt; might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;"Microsoft.NET.Sdk.Web"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;net10.0&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Nullable&amp;gt;&lt;/span&gt;enable&lt;span class="nt"&gt;&amp;lt;/Nullable&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ImplicitUsings&amp;gt;&lt;/span&gt;enable&lt;span class="nt"&gt;&amp;lt;/ImplicitUsings&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many beginners ignore the project file entirely.&lt;/p&gt;

&lt;p&gt;Do not.&lt;/p&gt;

&lt;p&gt;Eventually you will need it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;target frameworks&lt;/li&gt;
&lt;li&gt;package references&lt;/li&gt;
&lt;li&gt;build configuration&lt;/li&gt;
&lt;li&gt;analyzers&lt;/li&gt;
&lt;li&gt;compiler options&lt;/li&gt;
&lt;li&gt;publishing behavior&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  7. Learn HTTP Before You Learn ASP.NET Core Deeply
&lt;/h1&gt;

&lt;p&gt;This is one of the most valuable things you can do.&lt;/p&gt;

&lt;p&gt;Before becoming obsessed with controllers, learn HTTP.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
Response
Headers
Body
Query parameters
Path parameters
Cookies
HTTP methods
Status codes
Content types
Authentication headers
CORS
Caching
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understand the difference between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/products
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/products/42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/products
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT /api/products/42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;DELETE /api/products/42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Know common status codes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
201 Created
204 No Content

400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
409 Conflict
422 Unprocessable Content

500 Internal Server Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If HTTP is unclear, ASP.NET Core will feel like magic.&lt;/p&gt;

&lt;p&gt;If HTTP is clear, ASP.NET Core becomes a convenient implementation framework.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Move Into ASP.NET Core
&lt;/h1&gt;

&lt;p&gt;ASP.NET Core is the modern .NET web framework for building web applications and services, and Microsoft describes it as cross-platform, open-source, and designed for modern workloads.&lt;/p&gt;

&lt;p&gt;ASP.NET Core includes several application models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Web APIs
Minimal APIs
MVC
Razor Pages
Blazor
SignalR
gRPC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For backend development, start with Web APIs.&lt;/p&gt;

&lt;p&gt;Create one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new webapi &lt;span class="nt"&gt;-n&lt;/span&gt; Store.Api
&lt;span class="nb"&gt;cd &lt;/span&gt;Store.Api
dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then understand the generated application rather than blindly deleting everything.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Understand Program.cs
&lt;/h1&gt;

&lt;p&gt;Modern ASP.NET Core applications are configured primarily from &lt;code&gt;Program.cs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&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;AddControllers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&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;AddOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsDevelopment&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseHttpsRedirection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapControllers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This small file contains several major concepts.&lt;/p&gt;

&lt;p&gt;You need to understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application builder
Dependency injection container
Service registration
Middleware pipeline
Endpoint routing
Environment configuration
Application startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Microsoft's ASP.NET Core fundamentals documentation identifies dependency injection, configuration, and middleware among the framework's core concepts.&lt;/p&gt;

&lt;p&gt;Spend time here.&lt;/p&gt;

&lt;p&gt;Understanding the ASP.NET Core request pipeline will make many later concepts much easier.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Learn Dependency Injection
&lt;/h1&gt;

&lt;p&gt;Dependency injection is built deeply into ASP.NET Core.&lt;/p&gt;

&lt;p&gt;Example:&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="n"&gt;AddScoped&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IProductService&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ProductService&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;Then:&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;ProductsController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IProductService&lt;/span&gt; &lt;span class="n"&gt;_productService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductsController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IProductService&lt;/span&gt; &lt;span class="n"&gt;productService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_productService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;productService&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 should understand the major lifetimes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transient
Scoped
Singleton
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simplified mental model:&lt;/p&gt;

&lt;h3&gt;
  
  
  Transient
&lt;/h3&gt;

&lt;p&gt;A new instance is created whenever requested.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scoped
&lt;/h3&gt;

&lt;p&gt;One instance generally exists for the current request scope in a typical web application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Singleton
&lt;/h3&gt;

&lt;p&gt;One instance is shared for the application lifetime.&lt;/p&gt;

&lt;p&gt;Do not randomly choose &lt;code&gt;Scoped&lt;/code&gt; because every tutorial does it.&lt;/p&gt;

&lt;p&gt;Think about object lifetime and shared state.&lt;/p&gt;

&lt;p&gt;Especially understand why injecting request-scoped dependencies into singleton services creates problems.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Learn Middleware
&lt;/h1&gt;

&lt;p&gt;A request roughly travels through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  ↓
Middleware
  ↓
Middleware
  ↓
Middleware
  ↓
Endpoint
  ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might use middleware for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exception handling&lt;/li&gt;
&lt;li&gt;request logging&lt;/li&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;CORS&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;correlation IDs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple custom middleware might look like:&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;RequestTimingMiddleware&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;RequestDelegate&lt;/span&gt; &lt;span class="n"&gt;_next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;ILogger&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;RequestTimingMiddleware&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;RequestTimingMiddleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;RequestDelegate&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ILogger&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;RequestTimingMiddleware&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_next&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;_logger&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logger&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;InvokeAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stopwatch&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Stopwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;StartNew&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;_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;stopwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;_logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LogInformation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s"&gt;"Request {Method} {Path} completed in {Elapsed}ms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;stopwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ElapsedMilliseconds&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;Then register it:&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="n"&gt;UseMiddleware&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;RequestTimingMiddleware&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;When you understand middleware, ASP.NET Core stops feeling mysterious.&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Controllers vs Minimal APIs
&lt;/h1&gt;

&lt;p&gt;ASP.NET Core supports both controller-based APIs and Minimal APIs. .NET 10 includes continued improvements to Minimal APIs and OpenAPI support.&lt;/p&gt;

&lt;p&gt;A controller might look like:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/products"&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;class&lt;/span&gt; &lt;span class="nc"&gt;ProductsController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id:int}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IActionResult&lt;/span&gt; &lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Keyboard"&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;A Minimal API might look like:&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;MapGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products/{id:int}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&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;return&lt;/span&gt; &lt;span class="n"&gt;Results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Keyboard"&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;Do not waste time arguing that one approach is universally better.&lt;/p&gt;

&lt;p&gt;Minimal APIs work particularly well for smaller services and focused endpoints.&lt;/p&gt;

&lt;p&gt;Controllers can provide useful organization for conventional API-heavy applications.&lt;/p&gt;

&lt;p&gt;Learn both.&lt;/p&gt;

&lt;p&gt;Then choose based on the application.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Learn SQL Before Hiding Everything Behind an ORM
&lt;/h1&gt;

&lt;p&gt;This may be one of the most important recommendations in this article.&lt;/p&gt;

&lt;p&gt;Do not become an Entity Framework developer who cannot write SQL.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt;
&lt;span class="k"&gt;UPDATE&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;TOP&lt;/span&gt;
&lt;span class="n"&gt;Subqueries&lt;/span&gt;
&lt;span class="n"&gt;Indexes&lt;/span&gt;
&lt;span class="n"&gt;Transactions&lt;/span&gt;
&lt;span class="k"&gt;Constraints&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Primary keys
Foreign keys
Unique constraints
Indexes
Composite indexes
Normalization
Transactions
Isolation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total_spent&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'completed'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;total_spent&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An ORM does not eliminate databases.&lt;/p&gt;

&lt;p&gt;It generates database operations for you.&lt;/p&gt;

&lt;p&gt;If you cannot reason about SQL, indexes, query plans, and data relationships, you will eventually create performance problems that Entity Framework cannot magically solve.&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Learn Entity Framework Core
&lt;/h1&gt;

&lt;p&gt;Once SQL fundamentals make sense, learn EF Core.&lt;/p&gt;

&lt;p&gt;A model:&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;Product&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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="n"&gt;required&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&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;A context:&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;ApplicationDbContext&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DbContext&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ApplicationDbContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;DbContextOptions&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ApplicationDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&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;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DbSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Products&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Registration:&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="n"&gt;AddDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ApplicationDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;options&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;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseNpgsql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Database"&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;Then:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OrderBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DbContext
DbSet
Migrations
Relationships
Tracking
No-tracking queries
Eager loading
Explicit loading
Transactions
Concurrency
Indexes
Query projection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pay special attention to:&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="nf"&gt;AsNoTracking&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and projections:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AsNoTracking&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ProductResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returning entire entity graphs for every read operation is often unnecessary.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Stop Returning Database Entities Directly From APIs
&lt;/h1&gt;

&lt;p&gt;This is a common beginner design:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&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;It works.&lt;/p&gt;

&lt;p&gt;That does not mean it should become your default design.&lt;/p&gt;

&lt;p&gt;Your database model and public API contract serve different purposes.&lt;/p&gt;

&lt;p&gt;Use request and response models.&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;record&lt;/span&gt; &lt;span class="nc"&gt;CreateProductRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;record&lt;/span&gt; &lt;span class="nc"&gt;ProductResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Controller:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpPost&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductResponse&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;CreateProductRequest&lt;/span&gt; &lt;span class="n"&gt;request&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;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Product&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cancellationToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ProductResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;CreatedAtAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetById&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;response&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;This separation protects your API from accidental database-model changes.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Learn Validation
&lt;/h1&gt;

&lt;p&gt;Never assume incoming client data is valid.&lt;/p&gt;

&lt;p&gt;At minimum, validate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Required fields
Lengths
Ranges
Formats
Relationships
Business rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some validation belongs near the API boundary.&lt;/p&gt;

&lt;p&gt;Other validation represents business rules and belongs deeper in the application.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Email is required"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is different from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Customer cannot cancel an order after it has been shipped"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not treat those as the same kind of rule.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Learn Authentication and Authorization
&lt;/h1&gt;

&lt;p&gt;Authentication answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Who are you?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Authorization answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What are you allowed to do?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You should eventually understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cookies
JWT
Claims
Roles
Policies
OAuth 2.0
OpenID Connect
Refresh tokens
Identity providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A common API configuration might include:&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;AddAuthentication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;JwtBearerDefaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AuthenticationScheme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddJwtBearer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&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;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TokenValidationParameters&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;TokenValidationParameters&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;ValidateIssuer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;ValidateAudience&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;ValidateLifetime&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;ValidateIssuerSigningKey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&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;Then:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Authorize&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"profile"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IActionResult&lt;/span&gt; &lt;span class="nf"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Ok&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;And role or policy checks:&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="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Authorize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Roles&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Admin"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But do not stop at making JWT authentication "work."&lt;/p&gt;

&lt;p&gt;Learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;password hashing&lt;/li&gt;
&lt;li&gt;token expiration&lt;/li&gt;
&lt;li&gt;refresh token security&lt;/li&gt;
&lt;li&gt;secret management&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;authorization policies&lt;/li&gt;
&lt;li&gt;revocation strategies&lt;/li&gt;
&lt;li&gt;CORS&lt;/li&gt;
&lt;li&gt;CSRF where applicable&lt;/li&gt;
&lt;li&gt;secure cookie handling&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security cannot be added at the end like a UI theme.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Learn Error Handling Properly
&lt;/h1&gt;

&lt;p&gt;Do not wrap every controller method in this:&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;try&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&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;That quickly becomes unmaintainable and may expose information that clients should never receive.&lt;/p&gt;

&lt;p&gt;Prefer centralized exception handling.&lt;/p&gt;

&lt;p&gt;Your application might define exceptions such as:&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;ProductNotFoundException&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Exception&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductNotFoundException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Product &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; was not found."&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;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a centralized handler translates exceptions into appropriate HTTP responses.&lt;/p&gt;

&lt;p&gt;You should eventually understand Problem Details and consistent API error structures.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/problems/product-not-found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product not found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product 42 does not exist."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"traceId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consistency makes APIs much easier for frontend developers and API consumers to integrate.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Learn Logging and Observability
&lt;/h1&gt;

&lt;p&gt;This:&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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Something happened"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is not production observability.&lt;/p&gt;

&lt;p&gt;Use structured logging:&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;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LogInformation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"Order {OrderId} created for customer {CustomerId}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not:&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;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LogInformation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;$"Order &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; created for customer &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Structured logging allows logging systems to preserve values as searchable fields.&lt;/p&gt;

&lt;p&gt;Eventually learn the three major observability signals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Logs
Metrics
Traces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also learn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Correlation IDs
OpenTelemetry
Health checks
Distributed tracing
Alerting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a production request travels through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API
↓
Payment Service
↓
Message Broker
↓
Worker
↓
Email Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you need a way to understand what happened across those boundaries.&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Learn Testing
&lt;/h1&gt;

&lt;p&gt;Do not wait until you become "advanced" before learning tests.&lt;/p&gt;

&lt;p&gt;Start with unit tests.&lt;/p&gt;

&lt;p&gt;For example:&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;DiscountService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="nf"&gt;Calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;premium&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;premium&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="m"&gt;0.9m&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;Test:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Fact&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;void&lt;/span&gt; &lt;span class="nf"&gt;Calculate_ShouldApplyDiscount_ForPremiumCustomer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DiscountService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;90m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&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;Then learn integration testing.&lt;/p&gt;

&lt;p&gt;For backend systems, integration tests are extremely valuable because many bugs occur between components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API
Database
Authentication
Serialization
Configuration
Infrastructure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your progression should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Unit Tests
↓
Integration Tests
↓
API Tests
↓
End-to-End Tests where appropriate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not chase 100% code coverage.&lt;/p&gt;

&lt;p&gt;Test important behavior.&lt;/p&gt;




&lt;h1&gt;
  
  
  21. Learn Application Architecture
&lt;/h1&gt;

&lt;p&gt;Once you can build working APIs, start thinking about architecture.&lt;/p&gt;

&lt;p&gt;A small project can begin simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Store.Api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As complexity grows, you might separate concerns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Store.Api
Store.Application
Store.Domain
Store.Infrastructure
Store.Tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One possible responsibility split:&lt;/p&gt;

&lt;h3&gt;
  
  
  Domain
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entities
Value objects
Domain rules
Domain events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use cases
Commands
Queries
Interfaces
DTOs
Validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EF Core
External APIs
Email
Storage
Messaging
Caching
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP endpoints
Authentication
Middleware
Serialization
Configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This resembles Clean Architecture, but the important lesson is not the folder names.&lt;/p&gt;

&lt;p&gt;The important lesson is dependency direction.&lt;/p&gt;

&lt;p&gt;Your core business logic should not be tightly coupled to every infrastructure decision.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Do Not Overengineer Your First Projects
&lt;/h1&gt;

&lt;p&gt;You will encounter architectures and patterns such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clean Architecture
Vertical Slice Architecture
CQRS
DDD
Repository Pattern
Unit of Work
Mediator
Event Sourcing
Microservices
Hexagonal Architecture
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn them.&lt;/p&gt;

&lt;p&gt;Do not automatically use all of them.&lt;/p&gt;

&lt;p&gt;A CRUD application does not become enterprise software because it contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller
Service
Repository
UnitOfWork
Command
Handler
Mapper
Specification
DomainService
Factory
Mediator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for every operation.&lt;/p&gt;

&lt;p&gt;Every abstraction has a cost.&lt;/p&gt;

&lt;p&gt;Start simple.&lt;/p&gt;

&lt;p&gt;Introduce complexity when complexity solves a real problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Understand the Repository Pattern Debate
&lt;/h1&gt;

&lt;p&gt;You will see tutorials creating:&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;interface&lt;/span&gt; &lt;span class="nc"&gt;IProductRepository&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;?&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetByIdAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&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;then:&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;ProductRepository&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IProductRepository&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;ApplicationDbContext&lt;/span&gt; &lt;span class="n"&gt;_dbContext&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;This is not automatically wrong.&lt;/p&gt;

&lt;p&gt;But neither is using &lt;code&gt;DbContext&lt;/code&gt; directly.&lt;/p&gt;

&lt;p&gt;EF Core's &lt;code&gt;DbContext&lt;/code&gt; already provides repository-like and unit-of-work behavior.&lt;/p&gt;

&lt;p&gt;A custom repository can still be useful when it provides meaningful abstraction around domain-specific persistence.&lt;/p&gt;

&lt;p&gt;It becomes questionable when it merely converts:&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;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into:&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;productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetByIdAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without adding useful semantics.&lt;/p&gt;

&lt;p&gt;Learn why a pattern exists before applying it.&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Learn Vertical Slice Architecture
&lt;/h1&gt;

&lt;p&gt;Traditional layering often organizes code by technical concern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controllers/
Services/
Repositories/
Dtos/
Validators/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As projects grow, implementing one feature can require jumping across many directories.&lt;/p&gt;

&lt;p&gt;Vertical Slice Architecture organizes around features.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Features/
    Products/
        Create/
            Endpoint.cs
            Request.cs
            Validator.cs
            Handler.cs

        GetById/
            Endpoint.cs
            Response.cs
            Handler.cs

    Orders/
        Create/
        Cancel/
        Complete/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can make feature boundaries clearer.&lt;/p&gt;

&lt;p&gt;You do not need to adopt it immediately.&lt;/p&gt;

&lt;p&gt;But once you have built a traditional layered application, build another project using vertical slices.&lt;/p&gt;

&lt;p&gt;Compare them yourself.&lt;/p&gt;

&lt;p&gt;That experience teaches architecture better than architecture diagrams on social media.&lt;/p&gt;




&lt;h1&gt;
  
  
  25. Learn Caching
&lt;/h1&gt;

&lt;p&gt;Once your application is functional, start thinking about performance.&lt;/p&gt;

&lt;p&gt;Suppose this query executes thousands of times:&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;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Categories&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AsNoTracking&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and categories rarely change.&lt;/p&gt;

&lt;p&gt;Caching may help.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In-memory cache
Distributed cache
Redis
Cache expiration
Cache invalidation
Cache-aside
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Caching makes systems faster by making state management harder.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can this be cached?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;What happens when the underlying data changes?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cache invalidation deserves explicit design.&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Learn Background Processing
&lt;/h1&gt;

&lt;p&gt;Not every task should happen inside an HTTP request.&lt;/p&gt;

&lt;p&gt;Suppose checkout needs to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create order
Charge payment
Generate invoice
Send email
Update analytics
Notify warehouse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Making the client wait for every secondary operation creates unnecessary coupling.&lt;/p&gt;

&lt;p&gt;Some tasks can move to background processing.&lt;/p&gt;

&lt;p&gt;Learn about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hosted services&lt;/li&gt;
&lt;li&gt;worker services&lt;/li&gt;
&lt;li&gt;background queues&lt;/li&gt;
&lt;li&gt;scheduled jobs&lt;/li&gt;
&lt;li&gt;Hangfire&lt;/li&gt;
&lt;li&gt;Quartz.NET&lt;/li&gt;
&lt;li&gt;message brokers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually understand architectures like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /orders
     ↓
Create Order
     ↓
Publish OrderCreated
     ↓
 ┌────────────┬──────────────┐
 ▼            ▼              ▼
Email      Analytics     Fulfillment
Worker      Worker          Worker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That introduces another important subject.&lt;/p&gt;




&lt;h1&gt;
  
  
  27. Learn Messaging
&lt;/h1&gt;

&lt;p&gt;When building more complex distributed systems, learn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Queues
Topics
Publish/Subscribe
Acknowledgements
Retries
Dead-letter queues
Idempotency
At-least-once delivery
Eventual consistency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Technologies you may encounter include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RabbitMQ
Azure Service Bus
Amazon SQS
Kafka
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not begin your first todo application with Kafka.&lt;/p&gt;

&lt;p&gt;First understand why asynchronous messaging exists.&lt;/p&gt;

&lt;p&gt;Then use it when system requirements justify it.&lt;/p&gt;




&lt;h1&gt;
  
  
  28. Learn SignalR for Real-Time Applications
&lt;/h1&gt;

&lt;p&gt;Some systems need server-to-client communication:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chat
Notifications
Live dashboards
Tracking systems
Collaborative apps
Auction systems
Ticket availability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ASP.NET Core SignalR is designed for real-time application scenarios.&lt;/p&gt;

&lt;p&gt;Instead of clients constantly polling:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;the server can push updates when relevant.&lt;/p&gt;

&lt;p&gt;Build at least one real-time project.&lt;/p&gt;

&lt;p&gt;A small notification system is enough.&lt;/p&gt;

&lt;p&gt;It teaches concepts that ordinary CRUD applications do not.&lt;/p&gt;




&lt;h1&gt;
  
  
  29. Learn Docker
&lt;/h1&gt;

&lt;p&gt;A professional backend developer should understand containers.&lt;/p&gt;

&lt;p&gt;Create a Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mcr.microsoft.com/dotnet/aspnet:10.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mcr.microsoft.com/dotnet/sdk:10.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;build&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /src&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;dotnet restore
&lt;span class="k"&gt;RUN &lt;/span&gt;dotnet publish &lt;span class="nt"&gt;-c&lt;/span&gt; Release &lt;span class="nt"&gt;-o&lt;/span&gt; /app/publish

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;final&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=build /app/publish .&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["dotnet", "Store.Api.dll"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; store-api &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 store-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually use Docker Compose for multiple dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ASP.NET Core
PostgreSQL
Redis
RabbitMQ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding containers makes local development, CI/CD, and cloud deployment much easier to reason about.&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Learn CI/CD
&lt;/h1&gt;

&lt;p&gt;At some point, stop deploying by manually copying files.&lt;/p&gt;

&lt;p&gt;Your pipeline should eventually do something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Push
↓
Restore
↓
Build
↓
Test
↓
Security Checks
↓
Build Image
↓
Push Image
↓
Deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For GitHub Actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10.0.x"&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet restore&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet build --no-restore&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet test --no-build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not need to become a DevOps engineer.&lt;/p&gt;

&lt;p&gt;But a backend developer should understand how code travels from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git commit
&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;production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  31. Learn One Cloud Platform
&lt;/h1&gt;

&lt;p&gt;You do not need AWS, Azure, and Google Cloud simultaneously.&lt;/p&gt;

&lt;p&gt;Choose one.&lt;/p&gt;

&lt;p&gt;For .NET developers, Azure is a natural option, but .NET itself is cross-platform and can be deployed in many environments. Microsoft explicitly positions .NET as a platform for building cloud services across operating systems.&lt;/p&gt;

&lt;p&gt;Whichever platform you choose, learn concepts rather than memorizing product names.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compute
Managed databases
Object storage
Load balancing
DNS
Networking
Secrets
Queues
Monitoring
Serverless
Containers
Autoscaling
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then map those ideas onto a specific cloud.&lt;/p&gt;

&lt;p&gt;Cloud knowledge becomes much easier when you understand infrastructure concepts first.&lt;/p&gt;




&lt;h1&gt;
  
  
  32. Learn Aspire, But at the Right Time
&lt;/h1&gt;

&lt;p&gt;Aspire is increasingly relevant to modern .NET development.&lt;/p&gt;

&lt;p&gt;Microsoft describes Aspire as a multi-language toolchain for orchestrating, running, debugging, and deploying distributed applications during development.&lt;/p&gt;

&lt;p&gt;Imagine your application contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API
Worker
PostgreSQL
Redis
RabbitMQ
Frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running and configuring the entire environment can become painful.&lt;/p&gt;

&lt;p&gt;Aspire helps manage distributed application composition and provides tooling around development and observability. Its dashboard can expose information such as resources, configuration, logs, and related telemetry.&lt;/p&gt;

&lt;p&gt;But do not learn Aspire before you understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ASP.NET Core
Docker
Databases
Configuration
Services
Observability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otherwise Aspire becomes another layer of magic.&lt;/p&gt;

&lt;p&gt;Understand the underlying system first.&lt;/p&gt;

&lt;p&gt;Then use orchestration to simplify it.&lt;/p&gt;




&lt;h1&gt;
  
  
  33. Learn Performance Basics
&lt;/h1&gt;

&lt;p&gt;You do not need to become a runtime engineer.&lt;/p&gt;

&lt;p&gt;But you should recognize common performance problems.&lt;/p&gt;

&lt;p&gt;Learn about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;N+1 queries
Missing indexes
Over-fetching
Pagination
Connection pooling
Unnecessary allocations
Blocking async code
Repeated network calls
Caching
Serialization cost
Database round trips
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consider:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Orders&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Customer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ThenInclude&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For ten orders, maybe this is fine.&lt;/p&gt;

&lt;p&gt;For hundreds of thousands of records, it may be disastrous.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much data are we loading?&lt;/li&gt;
&lt;li&gt;How many queries are generated?&lt;/li&gt;
&lt;li&gt;Do we need every column?&lt;/li&gt;
&lt;li&gt;Can we project directly?&lt;/li&gt;
&lt;li&gt;Is pagination required?&lt;/li&gt;
&lt;li&gt;Does the database have the right indexes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Performance engineering often starts with asking good questions, not writing clever algorithms.&lt;/p&gt;




&lt;h1&gt;
  
  
  34. Learn Security as an Engineering Discipline
&lt;/h1&gt;

&lt;p&gt;Backend security deserves more than one tutorial.&lt;/p&gt;

&lt;p&gt;Learn about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL injection
XSS
CSRF
CORS
Authentication
Authorization
Broken access control
Mass assignment
Secrets management
Password storage
Rate limiting
Input validation
Secure headers
Dependency vulnerabilities
Logging sensitive information
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One particularly dangerous bug looks innocent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/orders/123
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user is authenticated.&lt;/p&gt;

&lt;p&gt;But are they authorized to access order &lt;code&gt;123&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Authentication alone does not answer that question.&lt;/p&gt;

&lt;p&gt;Always think in terms of resource ownership and authorization.&lt;/p&gt;




&lt;h1&gt;
  
  
  35. Learn Git Beyond git push
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone
git status
git add
git commit
git push
git pull
git fetch
git branch
git switch
git merge
git rebase
git stash
git log
git diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then understand team workflows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature branches
Pull requests
Code reviews
Merge conflicts
Commit history
Release branches
Tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git mistakes are normal.&lt;/p&gt;

&lt;p&gt;Not understanding what Git is doing is avoidable.&lt;/p&gt;




&lt;h1&gt;
  
  
  36. AI Changes How You Should Learn .NET
&lt;/h1&gt;

&lt;p&gt;This is the major difference between learning development a few years ago and learning it in 2026.&lt;/p&gt;

&lt;p&gt;AI coding assistants can now generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entities&lt;/li&gt;
&lt;li&gt;controllers&lt;/li&gt;
&lt;li&gt;tests&lt;/li&gt;
&lt;li&gt;Dockerfiles&lt;/li&gt;
&lt;li&gt;migrations&lt;/li&gt;
&lt;li&gt;DTOs&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;CI pipelines&lt;/li&gt;
&lt;li&gt;refactoring suggestions&lt;/li&gt;
&lt;li&gt;debugging hypotheses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;But it creates a dangerous learning path.&lt;/p&gt;

&lt;p&gt;A beginner can ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create complete ASP.NET Core clean architecture
with JWT authentication, Redis, RabbitMQ,
PostgreSQL, CQRS and Docker.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI may produce hundreds or thousands of lines.&lt;/p&gt;

&lt;p&gt;The application might even run.&lt;/p&gt;

&lt;p&gt;The developer may understand almost none of it.&lt;/p&gt;

&lt;p&gt;That is not productivity.&lt;/p&gt;

&lt;p&gt;That is technical debt you cannot see yet.&lt;/p&gt;




&lt;h1&gt;
  
  
  37. Use AI to Accelerate Understanding, Not Replace It
&lt;/h1&gt;

&lt;p&gt;A better workflow is:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Solve the problem yourself
&lt;/h3&gt;

&lt;p&gt;Even if the solution is incomplete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Ask AI to review it
&lt;/h3&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this ASP.NET Core endpoint.

Do not rewrite it yet.

Explain:
1. correctness issues
2. security risks
3. performance problems
4. maintainability problems
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Compare approaches
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me three ways to structure this,
from simplest to most scalable.

Explain the trade-offs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Make the final decision yourself
&lt;/h3&gt;

&lt;p&gt;You should be able to explain every important architectural decision.&lt;/p&gt;

&lt;p&gt;AI should increase your engineering leverage.&lt;/p&gt;

&lt;p&gt;It should not remove you from engineering.&lt;/p&gt;




&lt;h1&gt;
  
  
  38. Learn to Read Documentation
&lt;/h1&gt;

&lt;p&gt;This skill becomes more valuable as AI-generated tutorials increase.&lt;/p&gt;

&lt;p&gt;Microsoft maintains extensive documentation for .NET, C#, and ASP.NET Core, including tutorials, conceptual documentation, API references, samples, and language references.&lt;/p&gt;

&lt;p&gt;Build the habit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem
↓
Official documentation
↓
Understand concept
↓
Implement
↓
Experiment
↓
Use AI if needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem
↓
Paste into AI
↓
Paste answer into project
↓
Hope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second workflow feels faster until something breaks in production.&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Build Projects in Increasing Difficulty
&lt;/h1&gt;

&lt;p&gt;Tutorial consumption will not make you job-ready.&lt;/p&gt;

&lt;p&gt;Projects will.&lt;/p&gt;

&lt;p&gt;But project selection matters.&lt;/p&gt;

&lt;p&gt;Do not build ten todo apps.&lt;/p&gt;

&lt;p&gt;Build progressively harder systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project 1: Task Management API
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users
Authentication
Projects
Tasks
CRUD
Validation
Pagination
Filtering
SQL
EF Core
Swagger/OpenAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You learn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ASP.NET Core
HTTP
EF Core
JWT
REST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Project 2: E-Commerce Backend
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Products
Categories
Inventory
Customers
Cart
Orders
Payments
Coupons
Admin
Image storage
Search
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Redis
Background jobs
Email
Logging
Docker
Integration tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You start learning business logic instead of CRUD alone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project 3: Real-Time System
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chat
Live notifications
Delivery tracking
Ticket reservation
Auction platform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SignalR
Redis
Background services
Concurrency control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you encounter distributed-state problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project 4: Distributed Application
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Gateway
Identity
Order Service
Payment Service
Notification Worker
PostgreSQL
Redis
Message Broker
Observability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use Aspire or another orchestration approach once the underlying concepts make sense. Aspire is specifically designed to improve the local development experience around distributed applications.&lt;/p&gt;

&lt;p&gt;Now you are learning systems engineering rather than framework syntax.&lt;/p&gt;




&lt;h1&gt;
  
  
  40. Do Not Build Microservices Too Early
&lt;/h1&gt;

&lt;p&gt;Microservices appear frequently in enterprise .NET discussions.&lt;/p&gt;

&lt;p&gt;That does not mean your portfolio needs fourteen services.&lt;/p&gt;

&lt;p&gt;Start with a modular monolith.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
│
├── Identity
├── Catalog
├── Orders
├── Payments
├── Inventory
└── Notifications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clear modules inside one deployable application can teach most of the important boundaries without introducing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network failures
Distributed transactions
Service discovery
Message delivery
Deployment complexity
Distributed tracing
Cross-service versioning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you understand the limitations of a modular monolith, microservices will make much more sense.&lt;/p&gt;




&lt;h1&gt;
  
  
  41. A Practical 6-Month .NET Roadmap
&lt;/h1&gt;

&lt;p&gt;If I were starting today, this is approximately how I would structure six months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Month 1: C# Fundamentals
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Syntax
Methods
Classes
Interfaces
Collections
Generics
LINQ
Exceptions
Async/await
Nullable reference types
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console inventory system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not use ASP.NET Core yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Month 2: ASP.NET Core + HTTP
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP
REST
Controllers
Minimal APIs
Routing
Dependency injection
Middleware
Configuration
Logging
OpenAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task Management API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Month 3: Databases
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL
PostgreSQL or SQL Server
EF Core
Relationships
Migrations
Indexes
Transactions
Pagination
Query optimization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inventory Management API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Month 4: Production Backend Concepts
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authentication
Authorization
Validation
Error handling
Testing
Caching
Background jobs
Email
File storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E-Commerce Backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Month 5: Infrastructure
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker
Docker Compose
CI/CD
Cloud deployment
Health checks
Logging
Metrics
OpenTelemetry fundamentals
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy your application publicly.&lt;/p&gt;

&lt;p&gt;Your project should no longer exist only on localhost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Month 6: Architecture and Distributed Systems
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clean Architecture
Vertical Slices
DDD fundamentals
Messaging
SignalR
Distributed caching
Aspire
System design basics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build one serious portfolio application.&lt;/p&gt;

&lt;p&gt;Document the architecture.&lt;/p&gt;

&lt;p&gt;Write tests.&lt;/p&gt;

&lt;p&gt;Deploy it.&lt;/p&gt;

&lt;p&gt;Monitor it.&lt;/p&gt;

&lt;p&gt;Break it.&lt;/p&gt;

&lt;p&gt;Fix it.&lt;/p&gt;

&lt;p&gt;That last part matters.&lt;/p&gt;




&lt;h1&gt;
  
  
  42. What Should Your GitHub Portfolio Contain?
&lt;/h1&gt;

&lt;p&gt;I would rather see three serious projects than thirty tutorial repositories.&lt;/p&gt;

&lt;p&gt;A strong backend project should have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;README
Architecture explanation
Database diagram
API documentation
Docker setup
Tests
CI pipeline
Environment configuration guide
Example requests
Deployment
Screenshots where relevant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your README should answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What does this application do?

Why did you structure it this way?

How do I run it?

What technologies does it use?

What trade-offs did you make?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Architecture explanations are especially valuable.&lt;/p&gt;

&lt;p&gt;They prove that you made decisions instead of simply generating code.&lt;/p&gt;




&lt;h1&gt;
  
  
  43. What a Junior .NET Developer Should Actually Know
&lt;/h1&gt;

&lt;p&gt;You do &lt;strong&gt;not&lt;/strong&gt; need to know everything in this article before applying for jobs.&lt;/p&gt;

&lt;p&gt;A solid junior should be comfortable with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C#
OOP
Collections
LINQ
Async/await

ASP.NET Core
REST APIs
Controllers
Dependency injection
Middleware

SQL
EF Core
Relationships
Migrations

Authentication basics
Git
Testing basics
Docker basics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And most importantly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You should be able to build an application without following a step-by-step tutorial.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You may use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;Stack Overflow&lt;/li&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;blogs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Professional developers use references constantly.&lt;/p&gt;

&lt;p&gt;The skill is being able to reason about the information you find.&lt;/p&gt;




&lt;h1&gt;
  
  
  44. What a Mid-Level Developer Needs Beyond That
&lt;/h1&gt;

&lt;p&gt;Moving from junior to mid-level is less about learning another framework and more about judgment.&lt;/p&gt;

&lt;p&gt;You should begin understanding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why this query is slow

Why this endpoint is insecure

Why this service boundary is wrong

Why this abstraction adds unnecessary complexity

Why this code is difficult to test

Why a background job is better here

Why this operation must be transactional

Why caching may introduce stale data

Why this API contract will become difficult to evolve

Why deployment failed

Why production behaves differently from localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is engineering maturity.&lt;/p&gt;

&lt;p&gt;Framework knowledge is only part of it.&lt;/p&gt;




&lt;h1&gt;
  
  
  45. Common Mistakes When Learning .NET
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Mistake 1: Learning only C
&lt;/h2&gt;

&lt;p&gt;C# is the language.&lt;/p&gt;

&lt;p&gt;Backend development requires much more.&lt;/p&gt;

&lt;p&gt;Learn HTTP, databases, infrastructure, and architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 2: Learning only ASP.NET Core
&lt;/h2&gt;

&lt;p&gt;Framework knowledge without general software engineering knowledge creates fragile developers.&lt;/p&gt;

&lt;p&gt;Learn the underlying concepts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 3: Copying Clean Architecture templates
&lt;/h2&gt;

&lt;p&gt;If you cannot explain why each project exists, you probably do not need the architecture yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 4: Avoiding SQL because EF Core exists
&lt;/h2&gt;

&lt;p&gt;Eventually your ORM will generate a slow query.&lt;/p&gt;

&lt;p&gt;You need to know why.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 5: Building only CRUD projects
&lt;/h2&gt;

&lt;p&gt;CRUD is necessary.&lt;/p&gt;

&lt;p&gt;It is not enough.&lt;/p&gt;

&lt;p&gt;Build systems containing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Payments
Queues
Caching
Authorization
Concurrency
Real-time communication
Background processing
External integrations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mistake 6: Starting with microservices
&lt;/h2&gt;

&lt;p&gt;Microservices multiply operational complexity.&lt;/p&gt;

&lt;p&gt;Build a good monolith first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 7: Depending completely on AI
&lt;/h2&gt;

&lt;p&gt;If AI writes something you cannot debug, the code is effectively owned by nobody.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 8: Never deploying
&lt;/h2&gt;

&lt;p&gt;Localhost hides problems.&lt;/p&gt;

&lt;p&gt;Production teaches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DNS
TLS
Environment variables
Secrets
Networking
Containers
Database connectivity
Logging
Permissions
Reverse proxies
Deployment failures
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy things.&lt;/p&gt;




&lt;h1&gt;
  
  
  46. The Stack I Would Learn in 2026
&lt;/h1&gt;

&lt;p&gt;If I had to choose one focused backend stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Language:
C# 14

Runtime:
.NET 10

Web:
ASP.NET Core 10

Database:
PostgreSQL

ORM:
Entity Framework Core

Cache:
Redis

Real-Time:
SignalR

Messaging:
RabbitMQ or Azure Service Bus

Testing:
xUnit

Containers:
Docker

CI/CD:
GitHub Actions

Cloud:
Azure or AWS

Observability:
OpenTelemetry

Distributed Development:
Aspire

Version Control:
Git + GitHub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact technologies are less important than understanding the problems they solve.&lt;/p&gt;

&lt;p&gt;For example, once you understand messaging properly, moving from RabbitMQ to another broker becomes much easier.&lt;/p&gt;




&lt;h1&gt;
  
  
  47. What About Blazor?
&lt;/h1&gt;

&lt;p&gt;ASP.NET Core also includes Blazor for building web UI with .NET, and Microsoft's current ASP.NET Core getting-started material includes Blazor as part of the platform.&lt;/p&gt;

&lt;p&gt;Should a backend developer learn it?&lt;/p&gt;

&lt;p&gt;Eventually, maybe.&lt;/p&gt;

&lt;p&gt;But I would prioritize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C#
ASP.NET Core APIs
SQL
EF Core
Authentication
Testing
Docker
Cloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;first.&lt;/p&gt;

&lt;p&gt;Frontend knowledge is valuable.&lt;/p&gt;

&lt;p&gt;Backend depth should come before collecting frameworks.&lt;/p&gt;

&lt;p&gt;If you want full-stack .NET development, then Blazor becomes much more relevant.&lt;/p&gt;




&lt;h1&gt;
  
  
  48. What About MVC?
&lt;/h1&gt;

&lt;p&gt;ASP.NET Core MVC remains part of the modern ASP.NET Core stack and provides the Model-View-Controller pattern for building web apps and APIs.&lt;/p&gt;

&lt;p&gt;If your work involves server-rendered applications, existing enterprise applications, or conventional MVC systems, learn it.&lt;/p&gt;

&lt;p&gt;But for an API-focused roadmap, you can begin with Web APIs and return to full MVC views later.&lt;/p&gt;




&lt;h1&gt;
  
  
  49. Learn System Design Gradually
&lt;/h1&gt;

&lt;p&gt;You do not need to memorize how Netflix works.&lt;/p&gt;

&lt;p&gt;Start with smaller questions.&lt;/p&gt;

&lt;p&gt;Suppose you need to build an URL shortener.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How are IDs generated?

How are URLs stored?

How does redirection work?

Should reads be cached?

How do we count clicks?

What happens if the database is unavailable?

How would we scale reads?

How do we prevent abuse?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then move into more complicated systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Notification service
Chat system
Payment platform
Ticket reservation
File storage
E-commerce
Real-time tracking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;System design becomes useful when connected to actual engineering problems.&lt;/p&gt;




&lt;h1&gt;
  
  
  50. Learn to Debug Without Immediately Asking AI
&lt;/h1&gt;

&lt;p&gt;When something fails:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;500 Internal Server Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;do not immediately paste the entire project into an AI assistant.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What changed?

What exception occurred?

Where did it occur?

Can I reproduce it?

What does the stack trace say?

What values entered this code path?

What does the generated SQL look like?

Did configuration change?

Is the problem environment-specific?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Breakpoints
Debugger
Logs
Stack traces
Database logs
Network inspection
Git diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then use AI to accelerate investigation.&lt;/p&gt;

&lt;p&gt;A developer who can debug will survive technology changes.&lt;/p&gt;

&lt;p&gt;A developer who can only generate code will struggle whenever generated code stops working.&lt;/p&gt;




&lt;h1&gt;
  
  
  51. The Real Goal Is Not Becoming a ".NET Developer"
&lt;/h1&gt;

&lt;p&gt;Technology stacks change.&lt;/p&gt;

&lt;p&gt;Today the current path includes .NET 10, C# 14, ASP.NET Core 10, and increasingly sophisticated distributed-development tooling.&lt;/p&gt;

&lt;p&gt;Those versions will eventually change.&lt;/p&gt;

&lt;p&gt;The durable skills are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Programming
Debugging
Data modeling
API design
Testing
Security
Architecture
Distributed systems
Performance
Infrastructure
Communication
Problem solving
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;.NET is the ecosystem through which you practice those skills.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;If you only learn framework APIs, every major version feels threatening.&lt;/p&gt;

&lt;p&gt;If you understand software engineering, new framework versions mostly become new tools.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Roadmap
&lt;/h1&gt;

&lt;p&gt;Here is the complete path in one view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. C# fundamentals
        ↓
2. OOP + collections + LINQ
        ↓
3. Async programming
        ↓
4. .NET fundamentals
        ↓
5. HTTP + REST
        ↓
6. ASP.NET Core
        ↓
7. Dependency injection + middleware
        ↓
8. SQL
        ↓
9. Entity Framework Core
        ↓
10. Authentication + authorization
        ↓
11. Validation + error handling
        ↓
12. Testing
        ↓
13. Logging + observability
        ↓
14. Caching + background processing
        ↓
15. SignalR + messaging
        ↓
16. Application architecture
        ↓
17. Docker
        ↓
18. CI/CD
        ↓
19. Cloud
        ↓
20. Aspire + distributed systems
        ↓
21. Performance + security
        ↓
22. Real production projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not need to complete this roadmap before calling yourself a .NET developer.&lt;/p&gt;

&lt;p&gt;Start much earlier.&lt;/p&gt;

&lt;p&gt;Build something after every major stage.&lt;/p&gt;

&lt;p&gt;Do not spend six months preparing to build your first application.&lt;/p&gt;

&lt;p&gt;Build badly.&lt;/p&gt;

&lt;p&gt;Discover why it is bad.&lt;/p&gt;

&lt;p&gt;Refactor it.&lt;/p&gt;

&lt;p&gt;Deploy it.&lt;/p&gt;

&lt;p&gt;Break it.&lt;/p&gt;

&lt;p&gt;Debug it.&lt;/p&gt;

&lt;p&gt;Build the next version better.&lt;/p&gt;

&lt;p&gt;In 2026, AI can generate more code in minutes than a developer could manually write in days.&lt;/p&gt;

&lt;p&gt;That makes &lt;strong&gt;understanding code more valuable, not less&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The developers who will benefit most from AI are not those who know the most prompts.&lt;/p&gt;

&lt;p&gt;They are the developers who understand systems well enough to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what should be built&lt;/li&gt;
&lt;li&gt;how it should be structured&lt;/li&gt;
&lt;li&gt;whether generated code is correct&lt;/li&gt;
&lt;li&gt;where it will fail&lt;/li&gt;
&lt;li&gt;how it should be secured&lt;/li&gt;
&lt;li&gt;how it should scale&lt;/li&gt;
&lt;li&gt;and whether the complexity is justified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn C#.&lt;/p&gt;

&lt;p&gt;Learn .NET.&lt;/p&gt;

&lt;p&gt;But above all, learn software engineering.&lt;/p&gt;

&lt;p&gt;That is how you become a .NET developer who remains useful after the next framework release.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Survive as a Software Engineer in the Age of AI</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Fri, 07 Aug 2026 06:43:12 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-survive-as-a-software-engineer-in-the-age-of-ai-3g5b</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-survive-as-a-software-engineer-in-the-age-of-ai-3g5b</guid>
      <description>&lt;p&gt;Software engineering is changing faster than at any point in recent memory.&lt;/p&gt;

&lt;p&gt;A few years ago, AI-assisted development mostly meant autocomplete. Today, developers can ask an AI agent to inspect a repository, implement a feature, generate tests, debug an error, refactor several files, explain unfamiliar code, write database migrations, create API documentation, and review a pull request.&lt;/p&gt;

&lt;p&gt;The obvious question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If AI can write increasingly large amounts of software, what happens to software engineers?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think the wrong response is trying to compete with AI at typing code.&lt;/p&gt;

&lt;p&gt;The better response is becoming the engineer who knows &lt;strong&gt;what should be built, how it should be designed, whether the generated implementation is correct, and how the entire system behaves in production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI is making code cheaper.&lt;/p&gt;

&lt;p&gt;Engineering is not becoming cheaper.&lt;/p&gt;

&lt;p&gt;In many ways, engineering judgment is becoming more valuable.&lt;/p&gt;

&lt;p&gt;This article is about how software engineers can adapt to that change and remain valuable even as AI becomes dramatically better at writing code.&lt;/p&gt;




&lt;h2&gt;
  
  
  The uncomfortable truth: code generation is becoming a commodity
&lt;/h2&gt;

&lt;p&gt;For decades, being able to translate requirements into working code was one of the most valuable skills in software development.&lt;/p&gt;

&lt;p&gt;That is still valuable.&lt;/p&gt;

&lt;p&gt;But the economics are changing.&lt;/p&gt;

&lt;p&gt;Suppose a company needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a CRUD dashboard&lt;/li&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;database migrations&lt;/li&gt;
&lt;li&gt;validation&lt;/li&gt;
&lt;li&gt;unit tests&lt;/li&gt;
&lt;li&gt;a React interface&lt;/li&gt;
&lt;li&gt;Docker configuration&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Five years ago, producing all of this required a significant amount of manual development.&lt;/p&gt;

&lt;p&gt;Today, an experienced developer using modern AI tools can generate a large portion of it much faster.&lt;/p&gt;

&lt;p&gt;The developer is still necessary, but the bottleneck has moved.&lt;/p&gt;

&lt;p&gt;The difficult part increasingly becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding the actual requirement&lt;/li&gt;
&lt;li&gt;deciding the architecture&lt;/li&gt;
&lt;li&gt;defining boundaries&lt;/li&gt;
&lt;li&gt;identifying edge cases&lt;/li&gt;
&lt;li&gt;reviewing generated code&lt;/li&gt;
&lt;li&gt;protecting security&lt;/li&gt;
&lt;li&gt;handling failures&lt;/li&gt;
&lt;li&gt;designing data correctly&lt;/li&gt;
&lt;li&gt;operating the system&lt;/li&gt;
&lt;li&gt;deciding what should not be built&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;If your value proposition is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I can write controllers faster than another developer."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI is becoming serious competition.&lt;/p&gt;

&lt;p&gt;If your value proposition is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I can take an unclear business problem, design a maintainable system, use AI to accelerate implementation, verify the result, deploy it safely, and operate it at scale."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You are much harder to replace.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI will not remove software engineering
&lt;/h2&gt;

&lt;p&gt;It will remove parts of software engineering.&lt;/p&gt;

&lt;p&gt;That has happened repeatedly throughout the history of our industry.&lt;/p&gt;

&lt;p&gt;Developers once manually managed memory for almost everything.&lt;/p&gt;

&lt;p&gt;Then garbage collection became common.&lt;/p&gt;

&lt;p&gt;Developers once manually configured physical servers.&lt;/p&gt;

&lt;p&gt;Then virtualization appeared.&lt;/p&gt;

&lt;p&gt;Then cloud computing.&lt;/p&gt;

&lt;p&gt;Then infrastructure as code.&lt;/p&gt;

&lt;p&gt;Developers once manually created almost every UI component.&lt;/p&gt;

&lt;p&gt;Then component libraries and frameworks became widespread.&lt;/p&gt;

&lt;p&gt;Developers once manually searched documentation every time they forgot an API.&lt;/p&gt;

&lt;p&gt;Then search engines, Stack Overflow, IDE intelligence, and eventually AI assistants changed that workflow.&lt;/p&gt;

&lt;p&gt;Each abstraction removed work.&lt;/p&gt;

&lt;p&gt;It did not remove software development.&lt;/p&gt;

&lt;p&gt;Instead, developers started building more complicated systems.&lt;/p&gt;

&lt;p&gt;AI is another abstraction layer, although potentially a much larger one.&lt;/p&gt;

&lt;p&gt;The important question is therefore not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Will AI write code?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It obviously will.&lt;/p&gt;

&lt;p&gt;The important question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What skills become valuable when producing code itself becomes significantly easier?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is where engineers should focus.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Stop identifying yourself by how much code you write
&lt;/h1&gt;

&lt;p&gt;A common mistake developers make is measuring productivity through code production.&lt;/p&gt;

&lt;p&gt;Lines of code.&lt;/p&gt;

&lt;p&gt;Number of commits.&lt;/p&gt;

&lt;p&gt;Number of endpoints.&lt;/p&gt;

&lt;p&gt;Number of features implemented.&lt;/p&gt;

&lt;p&gt;These were never particularly good measurements.&lt;/p&gt;

&lt;p&gt;With AI, they become even less meaningful.&lt;/p&gt;

&lt;p&gt;Consider two developers.&lt;/p&gt;

&lt;p&gt;Developer A writes 3,000 lines of code implementing a complicated permission system.&lt;/p&gt;

&lt;p&gt;Developer B realizes the requirements can be solved using the application's existing authorization model and implements the same functionality in 300 lines.&lt;/p&gt;

&lt;p&gt;Who produced more value?&lt;/p&gt;

&lt;p&gt;Probably Developer B.&lt;/p&gt;

&lt;p&gt;Now add AI.&lt;/p&gt;

&lt;p&gt;An AI agent might generate those 3,000 lines in minutes.&lt;/p&gt;

&lt;p&gt;That does not automatically make the implementation good.&lt;/p&gt;

&lt;p&gt;More code means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more paths to test&lt;/li&gt;
&lt;li&gt;more places for bugs&lt;/li&gt;
&lt;li&gt;more maintenance&lt;/li&gt;
&lt;li&gt;more cognitive load&lt;/li&gt;
&lt;li&gt;more security surface&lt;/li&gt;
&lt;li&gt;more dependencies&lt;/li&gt;
&lt;li&gt;more opportunities for inconsistent behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The valuable engineer is increasingly the person who knows &lt;strong&gt;which code does not need to exist.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Become excellent at problem decomposition
&lt;/h1&gt;

&lt;p&gt;One of the most useful skills in AI-assisted development is breaking large problems into well-defined smaller problems.&lt;/p&gt;

&lt;p&gt;Consider this requirement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a notification system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds simple.&lt;/p&gt;

&lt;p&gt;But an experienced engineer immediately starts asking questions.&lt;/p&gt;

&lt;p&gt;What channels exist?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;SMS&lt;/li&gt;
&lt;li&gt;push notifications&lt;/li&gt;
&lt;li&gt;in-app notifications&lt;/li&gt;
&lt;li&gt;webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are notifications synchronous or asynchronous?&lt;/p&gt;

&lt;p&gt;Can users configure preferences?&lt;/p&gt;

&lt;p&gt;What happens when delivery fails?&lt;/p&gt;

&lt;p&gt;Should retries occur?&lt;/p&gt;

&lt;p&gt;How many retries?&lt;/p&gt;

&lt;p&gt;Do we need idempotency?&lt;/p&gt;

&lt;p&gt;Do notifications have priority levels?&lt;/p&gt;

&lt;p&gt;How do we prevent duplicate delivery?&lt;/p&gt;

&lt;p&gt;Should messages be localized?&lt;/p&gt;

&lt;p&gt;Are there rate limits?&lt;/p&gt;

&lt;p&gt;How will providers be switched?&lt;/p&gt;

&lt;p&gt;Do we need delivery analytics?&lt;/p&gt;

&lt;p&gt;How long should notification history be retained?&lt;/p&gt;

&lt;p&gt;Do users need unread counters?&lt;/p&gt;

&lt;p&gt;What happens when one provider goes down?&lt;/p&gt;

&lt;p&gt;The difference between junior and senior engineering often exists inside these questions.&lt;/p&gt;

&lt;p&gt;AI can generate a notification service.&lt;/p&gt;

&lt;p&gt;But if your request is poorly structured, you may receive an implementation that looks impressive while failing under real production conditions.&lt;/p&gt;

&lt;p&gt;Good engineers turn vague requirements into clear constraints.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Notification Service

Channels:
- Email
- SMS
- In-app

Delivery:
- Queue based
- At least once delivery

Requirements:
- Idempotency key for each message
- Exponential retry
- Maximum 5 attempts
- Dead letter queue after failure
- User-level channel preferences
- Provider abstraction
- Delivery logs
- Per-provider rate limiting

Volume:
- 1 million notifications/day

Latency:
- 95% of queued messages processed within 30 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now AI has something useful to work with.&lt;/p&gt;

&lt;p&gt;Your ability to structure problems determines the quality of your AI-assisted output.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Learn system design
&lt;/h1&gt;

&lt;p&gt;If there is one area I would recommend developers invest heavily in, it is system design.&lt;/p&gt;

&lt;p&gt;AI can generate individual components quickly.&lt;/p&gt;

&lt;p&gt;But real systems involve interactions between components.&lt;/p&gt;

&lt;p&gt;Consider building something like Uber.&lt;/p&gt;

&lt;p&gt;The UI might be relatively straightforward.&lt;/p&gt;

&lt;p&gt;The difficult engineering questions are elsewhere.&lt;/p&gt;

&lt;p&gt;How do you track drivers?&lt;/p&gt;

&lt;p&gt;How frequently should location be updated?&lt;/p&gt;

&lt;p&gt;Where should location data live?&lt;/p&gt;

&lt;p&gt;How do you find nearby drivers efficiently?&lt;/p&gt;

&lt;p&gt;What happens when two drivers accept the same request?&lt;/p&gt;

&lt;p&gt;How do you prevent duplicate rides?&lt;/p&gt;

&lt;p&gt;How do you process payments?&lt;/p&gt;

&lt;p&gt;How do you handle unreliable mobile networks?&lt;/p&gt;

&lt;p&gt;How do you synchronize ride state?&lt;/p&gt;

&lt;p&gt;How do you scale WebSocket connections?&lt;/p&gt;

&lt;p&gt;How do you distribute requests geographically?&lt;/p&gt;

&lt;p&gt;How do you recover from partial failures?&lt;/p&gt;

&lt;p&gt;How do you handle event ordering?&lt;/p&gt;

&lt;p&gt;How do you detect fraudulent behavior?&lt;/p&gt;

&lt;p&gt;AI can help implement each subsystem.&lt;/p&gt;

&lt;p&gt;But somebody still needs to understand how they fit together.&lt;/p&gt;

&lt;p&gt;That requires knowledge of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;distributed systems&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;networking&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;li&gt;consistency&lt;/li&gt;
&lt;li&gt;availability&lt;/li&gt;
&lt;li&gt;fault tolerance&lt;/li&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These concepts become more important as AI allows engineers to build larger systems faster.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Become very good at reading code
&lt;/h1&gt;

&lt;p&gt;There is an interesting shift happening.&lt;/p&gt;

&lt;p&gt;Historically, developers spent significant amounts of time writing code.&lt;/p&gt;

&lt;p&gt;AI-assisted developers increasingly spend more time reviewing code.&lt;/p&gt;

&lt;p&gt;Imagine an AI agent produces this pull request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+2,847 lines
-431 lines
23 files changed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI claims:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Implemented payment retry logic with idempotency protection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your job is not finished.&lt;/p&gt;

&lt;p&gt;It has barely started.&lt;/p&gt;

&lt;p&gt;You need to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the implementation match the requirements?&lt;/li&gt;
&lt;li&gt;Can duplicate payments occur?&lt;/li&gt;
&lt;li&gt;Are transactions handled correctly?&lt;/li&gt;
&lt;li&gt;What happens when the payment provider times out?&lt;/li&gt;
&lt;li&gt;Is the retry logic safe?&lt;/li&gt;
&lt;li&gt;Is there a race condition?&lt;/li&gt;
&lt;li&gt;Are logs leaking payment information?&lt;/li&gt;
&lt;li&gt;Are errors observable?&lt;/li&gt;
&lt;li&gt;Are tests meaningful?&lt;/li&gt;
&lt;li&gt;Did the agent modify unrelated code?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to understand unfamiliar code quickly becomes extremely valuable.&lt;/p&gt;

&lt;p&gt;This means developers should practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reading large codebases&lt;/li&gt;
&lt;li&gt;tracing execution paths&lt;/li&gt;
&lt;li&gt;understanding call graphs&lt;/li&gt;
&lt;li&gt;analyzing database queries&lt;/li&gt;
&lt;li&gt;identifying side effects&lt;/li&gt;
&lt;li&gt;recognizing architectural boundaries&lt;/li&gt;
&lt;li&gt;spotting suspicious abstractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not want to become someone who can only produce software through prompts.&lt;/p&gt;

&lt;p&gt;If an AI writes something you cannot understand, you do not really control the software.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Master debugging
&lt;/h1&gt;

&lt;p&gt;AI is excellent when the problem is clearly described.&lt;/p&gt;

&lt;p&gt;Production bugs often are not.&lt;/p&gt;

&lt;p&gt;Imagine customers report:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checkout occasionally freezes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the entire bug report.&lt;/p&gt;

&lt;p&gt;The logs show nothing obvious.&lt;/p&gt;

&lt;p&gt;It only happens approximately 2 percent of the time.&lt;/p&gt;

&lt;p&gt;Now you have an engineering investigation.&lt;/p&gt;

&lt;p&gt;You might inspect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Load Balancer
   ↓
Application API
   ↓
Payment Service
   ↓
Database
   ↓
Queue
   ↓
External Payment Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;connection pool exhaustion&lt;/li&gt;
&lt;li&gt;database locks&lt;/li&gt;
&lt;li&gt;request timeout configuration&lt;/li&gt;
&lt;li&gt;payment gateway latency&lt;/li&gt;
&lt;li&gt;duplicate transaction locks&lt;/li&gt;
&lt;li&gt;Redis failure&lt;/li&gt;
&lt;li&gt;queue congestion&lt;/li&gt;
&lt;li&gt;race conditions&lt;/li&gt;
&lt;li&gt;frontend retry behavior&lt;/li&gt;
&lt;li&gt;DNS resolution&lt;/li&gt;
&lt;li&gt;network packet loss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help investigate each possibility.&lt;/p&gt;

&lt;p&gt;But someone still needs to form hypotheses and gather evidence.&lt;/p&gt;

&lt;p&gt;Strong debugging requires a mental model of the system.&lt;/p&gt;

&lt;p&gt;The typical process looks something 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;Symptom
  ↓
Collect evidence
  ↓
Form hypothesis
  ↓
Design experiment
  ↓
Validate
  ↓
Identify root cause
  ↓
Implement fix
  ↓
Verify
  ↓
Prevent recurrence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developers who can debug complicated systems will continue to be extremely valuable.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Learn how databases actually work
&lt;/h1&gt;

&lt;p&gt;AI can generate SQL.&lt;/p&gt;

&lt;p&gt;That does not mean the SQL is good.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine.&lt;/p&gt;

&lt;p&gt;Now imagine the &lt;code&gt;orders&lt;/code&gt; table contains 500 million rows.&lt;/p&gt;

&lt;p&gt;Suddenly questions appear.&lt;/p&gt;

&lt;p&gt;Do we have an index?&lt;/p&gt;

&lt;p&gt;Should it be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INDEX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INDEX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What does the query plan show?&lt;/p&gt;

&lt;p&gt;Should old orders be archived?&lt;/p&gt;

&lt;p&gt;Should the table be partitioned?&lt;/p&gt;

&lt;p&gt;Would a read replica help?&lt;/p&gt;

&lt;p&gt;What is the write volume?&lt;/p&gt;

&lt;p&gt;What isolation level is being used?&lt;/p&gt;

&lt;p&gt;Could this query contribute to lock contention?&lt;/p&gt;

&lt;p&gt;AI can suggest answers.&lt;/p&gt;

&lt;p&gt;But database performance depends heavily on actual workload.&lt;/p&gt;

&lt;p&gt;Engineers should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indexes&lt;/li&gt;
&lt;li&gt;transactions&lt;/li&gt;
&lt;li&gt;isolation levels&lt;/li&gt;
&lt;li&gt;query plans&lt;/li&gt;
&lt;li&gt;locking&lt;/li&gt;
&lt;li&gt;normalization&lt;/li&gt;
&lt;li&gt;denormalization&lt;/li&gt;
&lt;li&gt;replication&lt;/li&gt;
&lt;li&gt;partitioning&lt;/li&gt;
&lt;li&gt;connection pools&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Database mistakes often remain invisible during development and become expensive only after scale arrives.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Understand distributed systems
&lt;/h1&gt;

&lt;p&gt;Once applications become large enough, distributed systems problems appear everywhere.&lt;/p&gt;

&lt;p&gt;You may have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  ↓
API Gateway
  ↓
Authentication Service
  ↓
Order Service
  ↓
Payment Service
  ↓
Inventory Service
  ↓
Message Queue
  ↓
Notification Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now everything can fail independently.&lt;/p&gt;

&lt;p&gt;The payment may succeed while your API request times out.&lt;/p&gt;

&lt;p&gt;The message broker may deliver the same event twice.&lt;/p&gt;

&lt;p&gt;Events may arrive in the wrong order.&lt;/p&gt;

&lt;p&gt;A database may become temporarily unavailable.&lt;/p&gt;

&lt;p&gt;Two services may disagree about state.&lt;/p&gt;

&lt;p&gt;Understanding concepts such as these becomes important:&lt;/p&gt;

&lt;h3&gt;
  
  
  Idempotency
&lt;/h3&gt;

&lt;p&gt;The same request should be safe to execute multiple times where required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Eventual consistency
&lt;/h3&gt;

&lt;p&gt;Different parts of the system may temporarily contain different states.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retry strategies
&lt;/h3&gt;

&lt;p&gt;Retries must avoid overwhelming an already failing dependency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Circuit breakers
&lt;/h3&gt;

&lt;p&gt;Stop repeatedly calling unhealthy services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dead-letter queues
&lt;/h3&gt;

&lt;p&gt;Preserve messages that repeatedly fail processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Distributed tracing
&lt;/h3&gt;

&lt;p&gt;Follow a request across multiple services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Saga patterns
&lt;/h3&gt;

&lt;p&gt;Coordinate multi-step business transactions without a global database transaction.&lt;/p&gt;

&lt;p&gt;AI can implement these patterns.&lt;/p&gt;

&lt;p&gt;But choosing the wrong pattern can make a system significantly more complicated.&lt;/p&gt;

&lt;p&gt;Architecture is about knowing when complexity is justified.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Learn networking fundamentals
&lt;/h1&gt;

&lt;p&gt;Many developers know frameworks extremely well but have only a vague understanding of what happens between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fetch("/api/orders")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the server receiving the request.&lt;/p&gt;

&lt;p&gt;That knowledge becomes extremely useful during production incidents.&lt;/p&gt;

&lt;p&gt;Understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;TCP&lt;/li&gt;
&lt;li&gt;HTTP&lt;/li&gt;
&lt;li&gt;TLS&lt;/li&gt;
&lt;li&gt;proxies&lt;/li&gt;
&lt;li&gt;load balancers&lt;/li&gt;
&lt;li&gt;CDN behavior&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;connection pooling&lt;/li&gt;
&lt;li&gt;timeouts&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;ports&lt;/li&gt;
&lt;li&gt;firewalls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a customer says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The website works on mobile data but not Wi-Fi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Framework knowledge will probably not solve the problem.&lt;/p&gt;

&lt;p&gt;Networking knowledge might.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Security knowledge becomes more important
&lt;/h1&gt;

&lt;p&gt;AI makes software easier to produce.&lt;/p&gt;

&lt;p&gt;Unfortunately, it also makes insecure software easier to produce.&lt;/p&gt;

&lt;p&gt;Suppose an AI generates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'role'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code works.&lt;/p&gt;

&lt;p&gt;But should the current user be able to modify that user?&lt;/p&gt;

&lt;p&gt;Should they be able to assign the admin role?&lt;/p&gt;

&lt;p&gt;Where is authorization?&lt;/p&gt;

&lt;p&gt;Where is validation?&lt;/p&gt;

&lt;p&gt;Could mass assignment create additional problems?&lt;/p&gt;

&lt;p&gt;AI often optimizes toward "make the feature work."&lt;/p&gt;

&lt;p&gt;Production engineers must think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can this feature fail or be abused?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developers should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;SQL injection&lt;/li&gt;
&lt;li&gt;XSS&lt;/li&gt;
&lt;li&gt;CSRF&lt;/li&gt;
&lt;li&gt;SSRF&lt;/li&gt;
&lt;li&gt;insecure direct object references&lt;/li&gt;
&lt;li&gt;secret management&lt;/li&gt;
&lt;li&gt;credential rotation&lt;/li&gt;
&lt;li&gt;API security&lt;/li&gt;
&lt;li&gt;encryption&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;dependency vulnerabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI increases development speed.&lt;/p&gt;

&lt;p&gt;Security review must keep pace.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Treat AI output like code from a very fast junior developer
&lt;/h1&gt;

&lt;p&gt;This mental model is useful.&lt;/p&gt;

&lt;p&gt;Imagine a developer who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;types extremely quickly&lt;/li&gt;
&lt;li&gt;knows thousands of libraries&lt;/li&gt;
&lt;li&gt;never becomes tired&lt;/li&gt;
&lt;li&gt;can read enormous amounts of code&lt;/li&gt;
&lt;li&gt;produces solutions immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this developer can also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;misunderstand requirements&lt;/li&gt;
&lt;li&gt;invent APIs&lt;/li&gt;
&lt;li&gt;introduce security vulnerabilities&lt;/li&gt;
&lt;li&gt;over-engineer solutions&lt;/li&gt;
&lt;li&gt;miss subtle race conditions&lt;/li&gt;
&lt;li&gt;confidently explain incorrect assumptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would you deploy everything they wrote without review?&lt;/p&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;That is roughly how AI-generated code should be treated.&lt;/p&gt;

&lt;p&gt;Use it aggressively.&lt;/p&gt;

&lt;p&gt;Trust it selectively.&lt;/p&gt;

&lt;p&gt;Verify important behavior.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Learn to give AI context, not just prompts
&lt;/h1&gt;

&lt;p&gt;Developers often focus too much on "prompt engineering."&lt;/p&gt;

&lt;p&gt;For serious software development, context engineering is more important.&lt;/p&gt;

&lt;p&gt;Compare these requests.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create authentication.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement authentication using Laravel Sanctum.

Requirements:
- Existing User model must remain unchanged
- Authentication is API-only
- Use Form Requests for validation
- Controllers should contain no business logic
- Authentication logic belongs in AuthService
- Responses must use existing ApiResponse helper
- Add feature tests
- Do not add new dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even better is providing AI access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture documentation&lt;/li&gt;
&lt;li&gt;coding standards&lt;/li&gt;
&lt;li&gt;database schema&lt;/li&gt;
&lt;li&gt;existing examples&lt;/li&gt;
&lt;li&gt;test conventions&lt;/li&gt;
&lt;li&gt;domain terminology&lt;/li&gt;
&lt;li&gt;repository structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The quality of AI-generated code depends heavily on the quality of context.&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Build architectural guardrails
&lt;/h1&gt;

&lt;p&gt;This becomes particularly important when AI agents produce larger amounts of code.&lt;/p&gt;

&lt;p&gt;Suppose your architecture requires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller
   ↓
Service
   ↓
Repository
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without enforcement, AI might produce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controller
   ↓
RandomHelper
   ↓
Repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or place business logic directly inside routes.&lt;/p&gt;

&lt;p&gt;Documentation helps.&lt;/p&gt;

&lt;p&gt;Automated enforcement is better.&lt;/p&gt;

&lt;p&gt;Use tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;static analysis&lt;/li&gt;
&lt;li&gt;linters&lt;/li&gt;
&lt;li&gt;dependency rules&lt;/li&gt;
&lt;li&gt;architectural tests&lt;/li&gt;
&lt;li&gt;type systems&lt;/li&gt;
&lt;li&gt;automated tests&lt;/li&gt;
&lt;li&gt;formatting rules&lt;/li&gt;
&lt;li&gt;CI checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, architecture rules can enforce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controllers cannot directly access repositories.

Domain modules cannot import infrastructure modules.

Payment code cannot import UI modules.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When AI generates code, deterministic rules can reject invalid implementations automatically.&lt;/p&gt;

&lt;p&gt;This creates an important pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human defines architecture
        ↓
AI generates implementation
        ↓
Automated rules validate structure
        ↓
Tests validate behavior
        ↓
Human reviews important decisions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is significantly more scalable than manually inspecting everything.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Testing becomes more valuable, not less
&lt;/h1&gt;

&lt;p&gt;AI can generate code faster than humans can manually verify it.&lt;/p&gt;

&lt;p&gt;That means automated verification becomes critical.&lt;/p&gt;

&lt;p&gt;Suppose an agent generates ten features in an afternoon.&lt;/p&gt;

&lt;p&gt;Without tests, your verification burden becomes enormous.&lt;/p&gt;

&lt;p&gt;With a strong test suite, you can quickly detect regressions.&lt;/p&gt;

&lt;p&gt;Your development workflow might become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requirement
    ↓
AI implementation
    ↓
Static analysis
    ↓
Unit tests
    ↓
Integration tests
    ↓
Architecture tests
    ↓
Security checks
    ↓
Human review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tests become part of the control system around AI.&lt;/p&gt;

&lt;p&gt;A good engineer does not only ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can AI write this feature?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How will I know the feature is correct?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  14. Learn observability
&lt;/h1&gt;

&lt;p&gt;Many software bugs cannot be reproduced locally.&lt;/p&gt;

&lt;p&gt;You need visibility into production.&lt;/p&gt;

&lt;p&gt;That means understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;structured logs&lt;/li&gt;
&lt;li&gt;metrics&lt;/li&gt;
&lt;li&gt;tracing&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;li&gt;error tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider a request traveling through several systems.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /checkout
      ↓
Order API
      ↓
Inventory Service
      ↓
Payment Service
      ↓
Payment Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without tracing, you may only know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Checkout failed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With distributed tracing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /checkout               4.8s
 ├── inventory.reserve       80ms
 ├── order.create            35ms
 └── payment.charge          4.6s
      └── external.gateway   4.5s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the problem becomes much easier to understand.&lt;/p&gt;

&lt;p&gt;AI can help interpret telemetry.&lt;/p&gt;

&lt;p&gt;But telemetry must exist first.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Learn cloud and infrastructure
&lt;/h1&gt;

&lt;p&gt;You do not need to become a full-time DevOps engineer.&lt;/p&gt;

&lt;p&gt;You should understand how software actually runs.&lt;/p&gt;

&lt;p&gt;Learn the basics of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;containers&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;reverse proxies&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;cloud computing&lt;/li&gt;
&lt;li&gt;load balancing&lt;/li&gt;
&lt;li&gt;autoscaling&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;storage&lt;/li&gt;
&lt;li&gt;secrets&lt;/li&gt;
&lt;li&gt;monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An engineer who can write an application but cannot understand its production environment has a major blind spot.&lt;/p&gt;

&lt;p&gt;AI makes deploying software easier.&lt;/p&gt;

&lt;p&gt;That means more developers will deploy software.&lt;/p&gt;

&lt;p&gt;Production knowledge therefore becomes more valuable, not less.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Understand cost
&lt;/h1&gt;

&lt;p&gt;A system can be technically correct and financially terrible.&lt;/p&gt;

&lt;p&gt;Imagine an AI feature that sends every request to a powerful LLM.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100,000 users
× 20 requests/day
= 2,000,000 AI requests/day
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A tiny architectural decision can suddenly become a major monthly expense.&lt;/p&gt;

&lt;p&gt;The same applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database queries&lt;/li&gt;
&lt;li&gt;object storage&lt;/li&gt;
&lt;li&gt;bandwidth&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;background jobs&lt;/li&gt;
&lt;li&gt;serverless execution&lt;/li&gt;
&lt;li&gt;API providers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good engineers think about economics.&lt;/p&gt;

&lt;p&gt;Questions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can this operation be cached?&lt;/li&gt;
&lt;li&gt;Can requests be batched?&lt;/li&gt;
&lt;li&gt;Does this data need permanent storage?&lt;/li&gt;
&lt;li&gt;Should this workload run asynchronously?&lt;/li&gt;
&lt;li&gt;Do we need this expensive model?&lt;/li&gt;
&lt;li&gt;Could a deterministic algorithm solve this?&lt;/li&gt;
&lt;li&gt;Can we reduce token consumption?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Engineering is not only about making systems work.&lt;/p&gt;

&lt;p&gt;It is about making them sustainable.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Develop product thinking
&lt;/h1&gt;

&lt;p&gt;This may be one of the biggest career advantages in the AI era.&lt;/p&gt;

&lt;p&gt;Developers traditionally receive requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build feature X.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strong product engineers ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Suppose somebody requests:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add real-time notifications using WebSockets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before implementation, ask:&lt;/p&gt;

&lt;p&gt;What problem are we solving?&lt;/p&gt;

&lt;p&gt;Maybe users simply need to know when a report is finished.&lt;/p&gt;

&lt;p&gt;A full WebSocket infrastructure might be unnecessary.&lt;/p&gt;

&lt;p&gt;Possible alternatives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Polling
Server-Sent Events
Push notifications
Email
Background refresh
WebSockets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct engineering solution depends on the product requirement.&lt;/p&gt;

&lt;p&gt;AI can quickly implement the wrong solution.&lt;/p&gt;

&lt;p&gt;Engineers must determine the right one.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Communication becomes a technical skill
&lt;/h1&gt;

&lt;p&gt;The stereotype of the brilliant developer who cannot communicate becomes increasingly difficult to sustain.&lt;/p&gt;

&lt;p&gt;Modern engineering involves constant communication with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product managers&lt;/li&gt;
&lt;li&gt;designers&lt;/li&gt;
&lt;li&gt;customers&lt;/li&gt;
&lt;li&gt;DevOps engineers&lt;/li&gt;
&lt;li&gt;security teams&lt;/li&gt;
&lt;li&gt;executives&lt;/li&gt;
&lt;li&gt;other developers&lt;/li&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Engineers need to explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trade-offs&lt;/li&gt;
&lt;li&gt;risks&lt;/li&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;timelines&lt;/li&gt;
&lt;li&gt;technical limitations&lt;/li&gt;
&lt;li&gt;failure scenarios&lt;/li&gt;
&lt;li&gt;alternative approaches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider the difference between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We need to refactor the backend.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checkout failures are increasing because payment processing and order creation currently share one synchronous transaction. Separating payment processing into an asynchronous workflow would reduce request failures, but it requires approximately two weeks of engineering and introduces eventual consistency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second explanation allows the business to make a decision.&lt;/p&gt;

&lt;p&gt;That is engineering communication.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Specialize, but understand the full system
&lt;/h1&gt;

&lt;p&gt;There is a common debate:&lt;/p&gt;

&lt;p&gt;Should developers become specialists or generalists?&lt;/p&gt;

&lt;p&gt;The best answer is usually both.&lt;/p&gt;

&lt;p&gt;You want depth in one or two areas.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend Engineering
        ↓
Laravel / .NET / Node.js
        ↓
Databases
        ↓
Distributed Systems
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But you should understand adjacent systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
Cloud
Networking
Security
DevOps
Product
AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not need expert-level knowledge everywhere.&lt;/p&gt;

&lt;p&gt;You need enough knowledge to understand how your decisions affect the overall system.&lt;/p&gt;

&lt;p&gt;This is sometimes called a T-shaped skill profile.&lt;/p&gt;

&lt;p&gt;AI makes this particularly powerful because it can help fill temporary knowledge gaps while your deeper expertise provides judgment.&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Do not become framework-dependent
&lt;/h1&gt;

&lt;p&gt;Framework knowledge is useful.&lt;/p&gt;

&lt;p&gt;Framework identity is dangerous.&lt;/p&gt;

&lt;p&gt;If your professional identity is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am a Laravel developer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then a major change in Laravel, PHP, or market demand can feel threatening.&lt;/p&gt;

&lt;p&gt;A more durable identity is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am a backend engineer who currently uses Laravel heavily.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference is subtle but important.&lt;/p&gt;

&lt;p&gt;Learn concepts underneath frameworks.&lt;/p&gt;

&lt;p&gt;Instead of only learning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cache-aside&lt;/li&gt;
&lt;li&gt;TTL&lt;/li&gt;
&lt;li&gt;invalidation&lt;/li&gt;
&lt;li&gt;distributed caching&lt;/li&gt;
&lt;li&gt;cache stampedes&lt;/li&gt;
&lt;li&gt;consistency trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of only learning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ACID&lt;/li&gt;
&lt;li&gt;locks&lt;/li&gt;
&lt;li&gt;isolation&lt;/li&gt;
&lt;li&gt;deadlocks&lt;/li&gt;
&lt;li&gt;transaction boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Framework APIs change.&lt;/p&gt;

&lt;p&gt;Engineering concepts survive much longer.&lt;/p&gt;




&lt;h1&gt;
  
  
  21. Learn multiple paradigms
&lt;/h1&gt;

&lt;p&gt;You do not need to learn every programming language.&lt;/p&gt;

&lt;p&gt;But learning different ecosystems expands how you think.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Laravel teaches productive web application development.&lt;/p&gt;

&lt;p&gt;Go may teach simplicity and concurrency.&lt;/p&gt;

&lt;p&gt;Rust forces you to think carefully about memory and ownership.&lt;/p&gt;

&lt;p&gt;Java or C# introduces mature enterprise architecture patterns.&lt;/p&gt;

&lt;p&gt;JavaScript exposes asynchronous programming deeply.&lt;/p&gt;

&lt;p&gt;SQL teaches declarative thinking.&lt;/p&gt;

&lt;p&gt;Functional languages introduce immutability and composition.&lt;/p&gt;

&lt;p&gt;AI makes exploring new languages dramatically easier.&lt;/p&gt;

&lt;p&gt;You can ask it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I know Laravel.

Explain dependency injection in ASP.NET Core by comparing it with Laravel's service container.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain Go channels using concepts familiar to a Node.js developer.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use AI as a learning accelerator.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Build things
&lt;/h1&gt;

&lt;p&gt;Reading about AI will not prepare you for AI-assisted engineering.&lt;/p&gt;

&lt;p&gt;Using it will.&lt;/p&gt;

&lt;p&gt;Take a real project.&lt;/p&gt;

&lt;p&gt;Build something with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;database&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;background workers&lt;/li&gt;
&lt;li&gt;monitoring&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;production deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use AI throughout the process.&lt;/p&gt;

&lt;p&gt;But pay attention to where it succeeds and fails.&lt;/p&gt;

&lt;p&gt;You will quickly discover something.&lt;/p&gt;

&lt;p&gt;AI is extremely good when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requirements are precise&lt;/li&gt;
&lt;li&gt;patterns already exist&lt;/li&gt;
&lt;li&gt;tasks are local&lt;/li&gt;
&lt;li&gt;tests define expected behavior&lt;/li&gt;
&lt;li&gt;architecture is clear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI becomes less reliable when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requirements are ambiguous&lt;/li&gt;
&lt;li&gt;multiple services interact&lt;/li&gt;
&lt;li&gt;business rules are undocumented&lt;/li&gt;
&lt;li&gt;bugs are non-deterministic&lt;/li&gt;
&lt;li&gt;infrastructure is involved&lt;/li&gt;
&lt;li&gt;historical architectural decisions matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That experience is difficult to learn from tutorials.&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Build reusable engineering systems
&lt;/h1&gt;

&lt;p&gt;One major productivity advantage is creating reusable infrastructure.&lt;/p&gt;

&lt;p&gt;Instead of asking AI to design your architecture from scratch for every project, build templates.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-saas-template/
├── auth/
├── billing/
├── notifications/
├── queue/
├── monitoring/
├── logging/
├── docker/
├── ci/
└── tests/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coding standards&lt;/li&gt;
&lt;li&gt;architecture guidelines&lt;/li&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;error handling&lt;/li&gt;
&lt;li&gt;API conventions&lt;/li&gt;
&lt;li&gt;test infrastructure&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then AI operates inside a known environment.&lt;/p&gt;

&lt;p&gt;This produces far more predictable results.&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Learn to manage AI agents
&lt;/h1&gt;

&lt;p&gt;There is an emerging engineering skill that did not exist in the same form a few years ago.&lt;/p&gt;

&lt;p&gt;Managing coding agents.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer → Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the workflow becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
   ↓
Task definition
   ↓
AI agent
   ↓
Implementation
   ↓
Automated verification
   ↓
Developer review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually one engineer may coordinate multiple agents.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

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

├── Agent A: Backend API
├── Agent B: Frontend
├── Agent C: Tests
├── Agent D: Documentation
└── Agent E: Code review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The engineer becomes partly an orchestrator.&lt;/p&gt;

&lt;p&gt;But orchestration requires architecture.&lt;/p&gt;

&lt;p&gt;Without clear boundaries, multiple agents can produce conflicting implementations.&lt;/p&gt;

&lt;p&gt;The human must define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interfaces&lt;/li&gt;
&lt;li&gt;ownership&lt;/li&gt;
&lt;li&gt;constraints&lt;/li&gt;
&lt;li&gt;acceptance criteria&lt;/li&gt;
&lt;li&gt;architectural rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is much closer to technical leadership than traditional solo coding.&lt;/p&gt;




&lt;h1&gt;
  
  
  25. Use AI to increase your learning speed
&lt;/h1&gt;

&lt;p&gt;One of the biggest opportunities of AI is not code generation.&lt;/p&gt;

&lt;p&gt;It is education.&lt;/p&gt;

&lt;p&gt;Previously, learning distributed systems might involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;books&lt;/li&gt;
&lt;li&gt;courses&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;blog posts&lt;/li&gt;
&lt;li&gt;experimentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are still valuable.&lt;/p&gt;

&lt;p&gt;But now you can have interactive explanations.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain database isolation levels using an e-commerce checkout example.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me how a race condition can happen under READ COMMITTED.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write a PostgreSQL example that reproduces the race condition.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show three ways to fix it and explain the trade-offs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Quiz me on the concept.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates an incredibly powerful learning environment.&lt;/p&gt;

&lt;p&gt;Developers who use AI only for generating CRUD code are missing a much larger opportunity.&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Build your own judgment
&lt;/h1&gt;

&lt;p&gt;There is one dangerous side effect of AI-assisted development.&lt;/p&gt;

&lt;p&gt;You can appear more capable than you actually are.&lt;/p&gt;

&lt;p&gt;A developer might generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes manifests&lt;/li&gt;
&lt;li&gt;distributed queues&lt;/li&gt;
&lt;li&gt;event-driven systems&lt;/li&gt;
&lt;li&gt;complex SQL&lt;/li&gt;
&lt;li&gt;encryption code&lt;/li&gt;
&lt;li&gt;OAuth flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without truly understanding any of them.&lt;/p&gt;

&lt;p&gt;Everything works until it does not.&lt;/p&gt;

&lt;p&gt;Then the developer has no mental model for debugging the system.&lt;/p&gt;

&lt;p&gt;Avoid this trap.&lt;/p&gt;

&lt;p&gt;Whenever AI generates something important, ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why does this work?

What assumptions does it make?

What can fail?

What alternatives exist?

What trade-offs were made?

How would this behave under load?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not need to manually write every line.&lt;/p&gt;

&lt;p&gt;You should understand the important decisions.&lt;/p&gt;




&lt;h1&gt;
  
  
  27. Learn when not to use AI
&lt;/h1&gt;

&lt;p&gt;AI is not automatically the best tool for every problem.&lt;/p&gt;

&lt;p&gt;Sometimes writing five lines yourself is faster than describing them.&lt;/p&gt;

&lt;p&gt;Sometimes deterministic tooling is safer.&lt;/p&gt;

&lt;p&gt;Sometimes documentation is more authoritative.&lt;/p&gt;

&lt;p&gt;Sometimes a compiler error tells you exactly what is wrong.&lt;/p&gt;

&lt;p&gt;Sometimes production telemetry matters more than AI speculation.&lt;/p&gt;

&lt;p&gt;Sometimes a simple shell command gives the answer immediately.&lt;/p&gt;

&lt;p&gt;Good engineers choose tools based on the problem.&lt;/p&gt;

&lt;p&gt;Not because the tool is fashionable.&lt;/p&gt;




&lt;h1&gt;
  
  
  28. Your GitHub activity may change
&lt;/h1&gt;

&lt;p&gt;Traditional developer portfolios often emphasize commits.&lt;/p&gt;

&lt;p&gt;In an AI-heavy development environment, commits may become less meaningful.&lt;/p&gt;

&lt;p&gt;Imagine one engineer producing the equivalent implementation output of several developers because AI agents handle much of the mechanical work.&lt;/p&gt;

&lt;p&gt;What becomes interesting instead?&lt;/p&gt;

&lt;p&gt;Projects that demonstrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architectural quality&lt;/li&gt;
&lt;li&gt;production readiness&lt;/li&gt;
&lt;li&gt;reliability&lt;/li&gt;
&lt;li&gt;scale&lt;/li&gt;
&lt;li&gt;thoughtful technical decisions&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;real users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small production system with thoughtful engineering can demonstrate more ability than hundreds of tutorial repositories.&lt;/p&gt;




&lt;h1&gt;
  
  
  29. Junior developers face the biggest challenge
&lt;/h1&gt;

&lt;p&gt;Entry-level developers traditionally learned through tasks such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create this CRUD page.
Fix this validation bug.
Add this endpoint.
Write this migration.
Update this component.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI can already handle many of those tasks.&lt;/p&gt;

&lt;p&gt;That creates a difficult question:&lt;/p&gt;

&lt;p&gt;How do juniors gain experience if beginner tasks disappear?&lt;/p&gt;

&lt;p&gt;The answer is not skipping fundamentals.&lt;/p&gt;

&lt;p&gt;It is learning them faster.&lt;/p&gt;

&lt;p&gt;Junior developers should spend serious time understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data structures&lt;/li&gt;
&lt;li&gt;algorithms&lt;/li&gt;
&lt;li&gt;HTTP&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;operating systems&lt;/li&gt;
&lt;li&gt;networking&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;software design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then use AI to build significantly more projects than previous generations could.&lt;/p&gt;

&lt;p&gt;A junior engineer who has built and operated ten serious applications with AI assistance may gain exposure to problems that previously required several years of work.&lt;/p&gt;

&lt;p&gt;The opportunity is enormous if AI is used for learning rather than replacing thinking.&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Senior developers must change too
&lt;/h1&gt;

&lt;p&gt;Experience does not automatically protect someone from disruption.&lt;/p&gt;

&lt;p&gt;A senior engineer who refuses AI may eventually compete against engineers of similar experience who use AI effectively.&lt;/p&gt;

&lt;p&gt;Imagine two senior developers.&lt;/p&gt;

&lt;p&gt;Both understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;distributed systems&lt;/li&gt;
&lt;li&gt;product engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But one also uses AI effectively for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repository exploration&lt;/li&gt;
&lt;li&gt;test generation&lt;/li&gt;
&lt;li&gt;implementation&lt;/li&gt;
&lt;li&gt;refactoring&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That developer may be significantly faster.&lt;/p&gt;

&lt;p&gt;The future is probably not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI vs developers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developers using AI
vs
Developers not using AI effectively
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  31. A practical AI-assisted engineering workflow
&lt;/h1&gt;

&lt;p&gt;Here is a workflow I think works well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Understand the problem yourself
&lt;/h2&gt;

&lt;p&gt;Do not immediately ask AI to code.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem
Constraints
Expected behavior
Edge cases
Performance requirements
Security requirements
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Design the architecture
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Components
Responsibilities
Data model
Interfaces
Dependencies
Failure modes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can ask AI to critique your design.&lt;/p&gt;

&lt;p&gt;Do not automatically ask AI to make every architectural decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Define acceptance criteria
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Given a user has already paid an invoice,
when the payment webhook is delivered again,
the system must not create another payment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acceptance criteria reduce ambiguity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Ask AI to implement a small slice
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement PaymentWebhookHandler only.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the entire billing system.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Smaller changes are easier to review.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Run automated verification
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tests
Static analysis
Type checking
Linting
Security scanning
Architecture checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 6: Review the code
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Correctness
Security
Error handling
Performance
Maintainability
Architecture
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7: Test failure scenarios
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What if Redis is unavailable?

What if this request runs twice?

What if the payment provider times out?

What if the database transaction fails?

What if two workers process this simultaneously?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy paths are easy.&lt;/p&gt;

&lt;p&gt;Production systems fail through unhappy paths.&lt;/p&gt;




&lt;h1&gt;
  
  
  32. Skills I would learn if I were starting today
&lt;/h1&gt;

&lt;p&gt;If I were preparing for the next several years of software engineering, I would prioritize roughly this stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core programming
&lt;/h3&gt;

&lt;p&gt;Learn at least one language deeply.&lt;/p&gt;

&lt;p&gt;Understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data structures&lt;/li&gt;
&lt;li&gt;algorithms&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;li&gt;memory basics&lt;/li&gt;
&lt;li&gt;error handling&lt;/li&gt;
&lt;li&gt;type systems&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP
REST
authentication
authorization
caching
queues
background jobs
WebSockets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Databases
&lt;/h3&gt;

&lt;p&gt;Learn SQL seriously.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;indexes
transactions
locking
query plans
replication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux
Docker
CI/CD
cloud fundamentals
DNS
load balancing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Software architecture
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;modularity
domain boundaries
event-driven architecture
distributed systems
failure handling
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Understand common application vulnerabilities and secure engineering practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-assisted development
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provide repository context
design agent tasks
review generated code
build automated guardrails
use AI for debugging
use AI for learning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Communication
&lt;/h3&gt;

&lt;p&gt;Practice writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;design documents
technical proposals
incident reports
architecture explanations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That combination creates an engineer who can operate well above the code-generation layer.&lt;/p&gt;




&lt;h1&gt;
  
  
  33. The new abstraction layer of software engineering
&lt;/h1&gt;

&lt;p&gt;Software development has continuously moved upward.&lt;/p&gt;

&lt;p&gt;We went from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Machine code
    ↓
Assembly
    ↓
High-level languages
    ↓
Frameworks
    ↓
Cloud platforms
    ↓
AI-assisted development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer makes the lower layer easier to manipulate.&lt;/p&gt;

&lt;p&gt;But somebody still needs to understand what the system should do.&lt;/p&gt;

&lt;p&gt;The developer of the future may spend less time manually implementing every detail.&lt;/p&gt;

&lt;p&gt;Instead, they may spend more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;designing systems&lt;/li&gt;
&lt;li&gt;defining constraints&lt;/li&gt;
&lt;li&gt;reviewing generated changes&lt;/li&gt;
&lt;li&gt;coordinating agents&lt;/li&gt;
&lt;li&gt;analyzing production behavior&lt;/li&gt;
&lt;li&gt;improving developer infrastructure&lt;/li&gt;
&lt;li&gt;making product decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That does not sound like the death of software engineering.&lt;/p&gt;

&lt;p&gt;It sounds like another evolution of it.&lt;/p&gt;




&lt;h1&gt;
  
  
  34. Do not try to beat AI at being AI
&lt;/h1&gt;

&lt;p&gt;AI has several advantages you cannot compete with.&lt;/p&gt;

&lt;p&gt;It can read faster.&lt;/p&gt;

&lt;p&gt;It can generate code faster.&lt;/p&gt;

&lt;p&gt;It can search enormous amounts of information.&lt;/p&gt;

&lt;p&gt;It does not become tired after writing repetitive tests.&lt;/p&gt;

&lt;p&gt;Trying to preserve your career by becoming a faster code typist is probably the wrong strategy.&lt;/p&gt;

&lt;p&gt;Focus on things where engineering judgment matters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What should we build?

Why should we build it?

How should the system behave?

What can go wrong?

What architecture fits the problem?

What trade-offs are acceptable?

How do we know the implementation is correct?

How will we operate it in production?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are much harder questions.&lt;/p&gt;




&lt;h1&gt;
  
  
  35. The strongest engineer may produce less code
&lt;/h1&gt;

&lt;p&gt;This is perhaps the strangest consequence of AI-assisted development.&lt;/p&gt;

&lt;p&gt;A highly productive engineer may personally type less code than before.&lt;/p&gt;

&lt;p&gt;Instead, they might spend their day:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;30 minutes understanding requirements

45 minutes designing architecture

20 minutes defining implementation tasks

AI generates code

40 minutes reviewing changes

30 minutes testing failure scenarios

20 minutes reviewing observability

15 minutes documenting architectural decisions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final output might represent several days of traditional implementation work.&lt;/p&gt;

&lt;p&gt;The engineer still did significant engineering.&lt;/p&gt;

&lt;p&gt;Typing simply became a smaller part of it.&lt;/p&gt;




&lt;h1&gt;
  
  
  What should you do starting now?
&lt;/h1&gt;

&lt;p&gt;Do not panic about AI.&lt;/p&gt;

&lt;p&gt;But do not ignore it either.&lt;/p&gt;

&lt;p&gt;Use it every day.&lt;/p&gt;

&lt;p&gt;Use it to build.&lt;/p&gt;

&lt;p&gt;Use it to learn.&lt;/p&gt;

&lt;p&gt;Use it to read unfamiliar repositories.&lt;/p&gt;

&lt;p&gt;Use it to write tests.&lt;/p&gt;

&lt;p&gt;Use it to challenge your architecture.&lt;/p&gt;

&lt;p&gt;Use it to investigate bugs.&lt;/p&gt;

&lt;p&gt;Use it to automate repetitive work.&lt;/p&gt;

&lt;p&gt;At the same time, strengthen the skills AI-generated code still depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;distributed systems&lt;/li&gt;
&lt;li&gt;networking&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;infrastructure&lt;/li&gt;
&lt;li&gt;product thinking&lt;/li&gt;
&lt;li&gt;communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, keep understanding the systems you build.&lt;/p&gt;

&lt;p&gt;Do not become a developer whose entire engineering process is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt
↓
Copy
↓
Paste
↓
Deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build a process 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;Understand
↓
Design
↓
Specify
↓
Generate
↓
Verify
↓
Observe
↓
Improve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference matters.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;AI is going to write a lot of software.&lt;/p&gt;

&lt;p&gt;That is no longer a particularly controversial prediction.&lt;/p&gt;

&lt;p&gt;But software engineering has never been only about writing code.&lt;/p&gt;

&lt;p&gt;The difficult parts have always included understanding incomplete requirements, managing complexity, debugging strange behavior, making architectural trade-offs, protecting users, operating systems reliably, and deciding what should be built.&lt;/p&gt;

&lt;p&gt;AI makes implementation faster.&lt;/p&gt;

&lt;p&gt;That means engineers can attempt larger things.&lt;/p&gt;

&lt;p&gt;And larger systems create more engineering problems, not fewer.&lt;/p&gt;

&lt;p&gt;So the goal should not be surviving AI by avoiding it.&lt;/p&gt;

&lt;p&gt;The goal should be moving one abstraction level higher.&lt;/p&gt;

&lt;p&gt;Become the engineer who can use AI to transform an idea into a reliable system.&lt;/p&gt;

&lt;p&gt;Understand the problem.&lt;/p&gt;

&lt;p&gt;Design the architecture.&lt;/p&gt;

&lt;p&gt;Define the constraints.&lt;/p&gt;

&lt;p&gt;Let AI accelerate the mechanical work.&lt;/p&gt;

&lt;p&gt;Then verify everything that matters.&lt;/p&gt;

&lt;p&gt;The developers who do that will not simply survive the AI era.&lt;/p&gt;

&lt;p&gt;They will be able to build more than software engineers from any previous generation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>How to Build Scalable Software Using AI Without Creating an Unmaintainable Mess</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Fri, 07 Aug 2026 05:03:58 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-build-scalable-software-using-ai-without-creating-an-unmaintainable-mess-3je6</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-build-scalable-software-using-ai-without-creating-an-unmaintainable-mess-3je6</guid>
      <description>&lt;p&gt;AI has changed the speed at which software can be built.&lt;/p&gt;

&lt;p&gt;A developer can describe an API endpoint and receive an implementation in seconds. An AI coding agent can inspect a repository, modify multiple files, generate tests, run commands, debug failures, and prepare a pull request.&lt;/p&gt;

&lt;p&gt;This is a significant improvement in development productivity.&lt;/p&gt;

&lt;p&gt;It also creates a new problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generating software faster does not mean generating scalable software.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In fact, AI can help you create a poorly designed system faster than ever.&lt;/p&gt;

&lt;p&gt;Ask an AI agent to "build a complete SaaS backend" and it may happily generate controllers, models, migrations, services, background jobs, authentication, caching, queues, and dozens of abstractions.&lt;/p&gt;

&lt;p&gt;The application may even work.&lt;/p&gt;

&lt;p&gt;Then six months later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;changing one feature breaks three others&lt;/li&gt;
&lt;li&gt;database queries become increasingly expensive&lt;/li&gt;
&lt;li&gt;business logic exists in five different places&lt;/li&gt;
&lt;li&gt;background jobs execute twice&lt;/li&gt;
&lt;li&gt;APIs become inconsistent&lt;/li&gt;
&lt;li&gt;every developer implements things differently&lt;/li&gt;
&lt;li&gt;tests become difficult to maintain&lt;/li&gt;
&lt;li&gt;AI agents make increasingly dangerous changes because the architecture is unclear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fundamental lesson is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI increases implementation capacity. Architecture determines whether that capacity produces a scalable system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Building scalable software with AI therefore requires a different mindset from simply using AI to write code.&lt;/p&gt;

&lt;p&gt;You need to design the environment in which AI writes code.&lt;/p&gt;

&lt;p&gt;You need architectural boundaries.&lt;/p&gt;

&lt;p&gt;You need rules.&lt;/p&gt;

&lt;p&gt;You need automated verification.&lt;/p&gt;

&lt;p&gt;You need documentation that machines can understand.&lt;/p&gt;

&lt;p&gt;And increasingly, you need to treat your repository as an operating environment for both human developers and software engineering agents.&lt;/p&gt;

&lt;p&gt;This article explains how to do that.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does "Scalable Software" Actually Mean?
&lt;/h2&gt;

&lt;p&gt;Developers often use scalability to mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The system can handle more traffic."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is only one form of scalability.&lt;/p&gt;

&lt;p&gt;A production system has to scale across several dimensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traffic scalability
&lt;/h3&gt;

&lt;p&gt;Can the system handle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 users
1,000 users
100,000 users
1,000,000 users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without collapsing?&lt;/p&gt;

&lt;p&gt;This involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application servers&lt;/li&gt;
&lt;li&gt;database performance&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;li&gt;load balancing&lt;/li&gt;
&lt;li&gt;storage&lt;/li&gt;
&lt;li&gt;connection management&lt;/li&gt;
&lt;li&gt;horizontal scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data scalability
&lt;/h3&gt;

&lt;p&gt;What happens when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;orders = 10,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;orders = 500,000,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Queries that looked harmless during development may become serious bottlenecks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team scalability
&lt;/h3&gt;

&lt;p&gt;Can twenty developers work on the codebase without constantly breaking each other's changes?&lt;/p&gt;

&lt;p&gt;A system can handle millions of requests and still have terrible engineering scalability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature scalability
&lt;/h3&gt;

&lt;p&gt;Can you add new functionality without modifying half the application?&lt;/p&gt;

&lt;p&gt;Good architecture minimizes the number of unrelated components affected by a change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operational scalability
&lt;/h3&gt;

&lt;p&gt;Can your team understand what is happening when production fails?&lt;/p&gt;

&lt;p&gt;Can you answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why is checkout slow?

Which service is failing?

Which request triggered this exception?

How many jobs are stuck?

Which deployment introduced the regression?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI scalability
&lt;/h3&gt;

&lt;p&gt;There is now another dimension worth considering.&lt;/p&gt;

&lt;p&gt;Can multiple AI coding agents safely contribute to the repository?&lt;/p&gt;

&lt;p&gt;This is becoming increasingly relevant.&lt;/p&gt;

&lt;p&gt;Coding systems such as Codex and GitHub Copilot support repository-level instructions that give agents persistent information about project structure, conventions, testing, and validation. OpenAI recommends &lt;code&gt;AGENTS.md&lt;/code&gt; for persistent repository context, while GitHub Copilot supports repository instructions and &lt;code&gt;AGENTS.md&lt;/code&gt; files for similar purposes.&lt;/p&gt;

&lt;p&gt;That means modern software architecture must increasingly optimize for two types of developers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human developers
+
AI engineering agents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fortunately, the things that make software easier for AI to understand are usually the same things that make it easier for humans to maintain.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI Should Be an Implementation Engine, Not Your Architect
&lt;/h1&gt;

&lt;p&gt;One of the most dangerous prompts in AI-assisted development is something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the complete backend architecture for my SaaS.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem is not that AI cannot produce architecture.&lt;/p&gt;

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

&lt;p&gt;The problem is that architecture is a collection of contextual decisions.&lt;/p&gt;

&lt;p&gt;Consider a payment system.&lt;/p&gt;

&lt;p&gt;Should you use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monolith?
modular monolith?
microservices?
event-driven architecture?
serverless?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no universally correct answer.&lt;/p&gt;

&lt;p&gt;The decision depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expected traffic&lt;/li&gt;
&lt;li&gt;engineering team size&lt;/li&gt;
&lt;li&gt;deployment model&lt;/li&gt;
&lt;li&gt;transaction requirements&lt;/li&gt;
&lt;li&gt;data consistency requirements&lt;/li&gt;
&lt;li&gt;operational capabilities&lt;/li&gt;
&lt;li&gt;budget&lt;/li&gt;
&lt;li&gt;expected product evolution&lt;/li&gt;
&lt;li&gt;failure tolerance&lt;/li&gt;
&lt;li&gt;integration requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI does not automatically know these constraints.&lt;/p&gt;

&lt;p&gt;If you ask it to decide without supplying them, it will fill the missing context with assumptions.&lt;/p&gt;

&lt;p&gt;The code may be technically reasonable while being completely wrong for your product.&lt;/p&gt;

&lt;p&gt;A better relationship looks 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;Human:
defines architecture

AI:
explores options
implements components
writes tests
performs refactoring
finds inconsistencies
reviews code
generates documentation
investigates failures
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of AI as an extremely fast engineering team working inside boundaries that you define.&lt;/p&gt;




&lt;h1&gt;
  
  
  Start With Architecture Before Writing Prompts
&lt;/h1&gt;

&lt;p&gt;Suppose we are building a project management SaaS.&lt;/p&gt;

&lt;p&gt;A naive architecture might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   |
Backend API
   |
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is technically architecture, but it tells an AI agent almost nothing.&lt;/p&gt;

&lt;p&gt;Instead, define the important boundaries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────────┐
                    │     Web App      │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │    API Layer     │
                    └────────┬─────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
              ▼              ▼              ▼
        ┌──────────┐   ┌──────────┐   ┌──────────┐
        │ Projects │   │ Billing  │   │ Accounts │
        └─────┬────┘   └────┬─────┘   └────┬─────┘
              │             │              │
              └─────────────┼──────────────┘
                            │
                            ▼
                    ┌──────────────────┐
                    │     Database     │
                    └──────────────────┘

                     Background Work
                            │
                            ▼
                    ┌──────────────────┐
                    │      Queue       │
                    └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now define responsibilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  API layer
&lt;/h3&gt;

&lt;p&gt;Responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;request parsing&lt;/li&gt;
&lt;li&gt;validation&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;response formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not responsible for business rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project module
&lt;/h3&gt;

&lt;p&gt;Responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;li&gt;tasks&lt;/li&gt;
&lt;li&gt;assignments&lt;/li&gt;
&lt;li&gt;project permissions&lt;/li&gt;
&lt;li&gt;project workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Billing module
&lt;/h3&gt;

&lt;p&gt;Responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subscriptions&lt;/li&gt;
&lt;li&gt;invoices&lt;/li&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;billing providers&lt;/li&gt;
&lt;li&gt;usage calculations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Account module
&lt;/h3&gt;

&lt;p&gt;Responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;organizations&lt;/li&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;li&gt;memberships&lt;/li&gt;
&lt;li&gt;roles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates boundaries an AI agent can follow.&lt;/p&gt;




&lt;h1&gt;
  
  
  Start With a Modular Monolith More Often Than You Think
&lt;/h1&gt;

&lt;p&gt;AI makes microservices unusually tempting.&lt;/p&gt;

&lt;p&gt;You can ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create an authentication microservice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a billing microservice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create an order service.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Soon you have twelve services.&lt;/p&gt;

&lt;p&gt;Unfortunately, you also have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;twelve deployments&lt;/li&gt;
&lt;li&gt;twelve logs&lt;/li&gt;
&lt;li&gt;twelve CI pipelines&lt;/li&gt;
&lt;li&gt;distributed tracing&lt;/li&gt;
&lt;li&gt;network failures&lt;/li&gt;
&lt;li&gt;duplicated authentication logic&lt;/li&gt;
&lt;li&gt;service discovery&lt;/li&gt;
&lt;li&gt;asynchronous consistency&lt;/li&gt;
&lt;li&gt;versioned contracts&lt;/li&gt;
&lt;li&gt;complicated local development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You solved a scaling problem you probably did not have.&lt;/p&gt;

&lt;p&gt;For many SaaS applications, a modular monolith is a better starting point.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
    Modules/
        Accounts/
        Projects/
        Billing/
        Notifications/
        Reporting/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each module contains its own:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Controllers
Services
Models
Repositories
Events
Jobs
Policies
Tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You receive many benefits of service separation without distributed-system complexity.&lt;/p&gt;

&lt;p&gt;Later, if billing becomes computationally expensive or organizationally independent, you can extract it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modular Monolith

      ↓

Identify scaling boundary

      ↓

Extract Billing Module

      ↓

Billing Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI is extremely useful during this extraction because clear boundaries allow it to identify dependencies and migrate them systematically.&lt;/p&gt;

&lt;p&gt;The important decision is establishing those boundaries early.&lt;/p&gt;




&lt;h1&gt;
  
  
  Create an Architecture Contract for AI
&lt;/h1&gt;

&lt;p&gt;One of the biggest improvements you can make to AI-assisted development is creating repository-level engineering instructions.&lt;/p&gt;

&lt;p&gt;OpenAI specifically recommends using &lt;code&gt;AGENTS.md&lt;/code&gt; to supply persistent context to Codex. OpenAI's guidance notes that these files can document naming conventions, business logic, dependencies, and repository-specific information that agents cannot reliably infer from source code alone.&lt;/p&gt;

&lt;p&gt;GitHub Copilot similarly supports repository-wide instructions, path-specific instructions, and &lt;code&gt;AGENTS.md&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;This changes how we should think about documentation.&lt;/p&gt;

&lt;p&gt;Documentation is no longer only for developers.&lt;/p&gt;

&lt;p&gt;It can function as executable context for engineering agents.&lt;/p&gt;

&lt;p&gt;A useful file could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Architecture&lt;/span&gt;

This application uses a modular monolith.

Modules:
&lt;span class="p"&gt;
-&lt;/span&gt; Accounts
&lt;span class="p"&gt;-&lt;/span&gt; Projects
&lt;span class="p"&gt;-&lt;/span&gt; Billing
&lt;span class="p"&gt;-&lt;/span&gt; Notifications
&lt;span class="p"&gt;-&lt;/span&gt; Reporting

Modules must not directly access another module's database models.

Cross-module communication must use application services or domain events.

&lt;span class="gh"&gt;# Controllers&lt;/span&gt;

Controllers are responsible only for:
&lt;span class="p"&gt;
-&lt;/span&gt; request validation
&lt;span class="p"&gt;-&lt;/span&gt; authorization
&lt;span class="p"&gt;-&lt;/span&gt; calling application services
&lt;span class="p"&gt;-&lt;/span&gt; returning responses

Never place business logic inside controllers.

&lt;span class="gh"&gt;# Database&lt;/span&gt;

All list endpoints must support pagination.

Avoid queries inside loops.

Use eager loading when relationships are required.

All new queries on high-volume tables must consider indexes.

&lt;span class="gh"&gt;# Jobs&lt;/span&gt;

External API calls should execute asynchronously unless an immediate response is required.

Jobs must be safe to retry where possible.

&lt;span class="gh"&gt;# Testing&lt;/span&gt;

All business logic requires unit or integration tests.

Every bug fix requires a regression test.

Run:

npm test

before completing any task.

&lt;span class="gh"&gt;# Security&lt;/span&gt;

Never expose database IDs when public UUIDs are available.

Never log passwords, tokens, secrets, or payment credentials.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine five AI agents working on different parts of the application.&lt;/p&gt;

&lt;p&gt;Without this document, each agent may invent its own conventions.&lt;/p&gt;

&lt;p&gt;With it, you have dramatically increased architectural consistency.&lt;/p&gt;




&lt;h1&gt;
  
  
  Give AI Constraints, Not Just Requirements
&lt;/h1&gt;

&lt;p&gt;Compare these two prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weak prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create an endpoint for creating orders.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI has to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validation&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;transaction handling&lt;/li&gt;
&lt;li&gt;event handling&lt;/li&gt;
&lt;li&gt;error handling&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;response structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different runs may produce completely different solutions.&lt;/p&gt;

&lt;p&gt;Now consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement POST /api/orders.

Requirements:

- authenticated users only
- use CreateOrderRequest for validation
- controller must contain no business logic
- business logic belongs in OrderService
- wrap inventory reservation and order creation in a database transaction
- dispatch OrderCreated only after successful persistence
- duplicate requests with the same idempotency key must not create multiple orders
- return OrderResource
- add integration tests
- follow the existing CreateInvoice implementation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second prompt does something important.&lt;/p&gt;

&lt;p&gt;It reduces the AI's decision surface.&lt;/p&gt;

&lt;p&gt;This is one of the biggest secrets of scalable AI-assisted development.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The more architectural decisions you encode into the system, the fewer architectural decisions AI has to invent.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Think in Invariants
&lt;/h1&gt;

&lt;p&gt;Strong systems are built around invariants.&lt;/p&gt;

&lt;p&gt;An invariant is something that must always remain true.&lt;/p&gt;

&lt;p&gt;For an e-commerce platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stock &amp;gt;= 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For financial software:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;total debits = total credits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a subscription system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a customer cannot have two active subscriptions
for the same plan unless explicitly allowed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For multi-tenant SaaS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a user from Tenant A must never access Tenant B's data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI should know these rules.&lt;/p&gt;

&lt;p&gt;A repository might contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Critical Domain Invariants&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Inventory must never become negative.
&lt;span class="p"&gt;2.&lt;/span&gt; Payment callbacks may be delivered multiple times.
&lt;span class="p"&gt;3.&lt;/span&gt; Tenant data must always be scoped by tenant_id.
&lt;span class="p"&gt;4.&lt;/span&gt; Subscription state changes must go through SubscriptionService.
&lt;span class="p"&gt;5.&lt;/span&gt; Paid invoices cannot be deleted.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now an agent modifying the system has significantly more useful context than one merely reading database schemas.&lt;/p&gt;




&lt;h1&gt;
  
  
  Design the Database Before Asking AI to Generate Models
&lt;/h1&gt;

&lt;p&gt;AI coding tools make schema generation extremely convenient.&lt;/p&gt;

&lt;p&gt;That convenience can hide bad database design.&lt;/p&gt;

&lt;p&gt;Imagine asking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create tables for an e-commerce system.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might receive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users
products
orders
order_items
payments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything looks fine.&lt;/p&gt;

&lt;p&gt;But scalable database design requires asking deeper questions.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;orders&lt;/code&gt;, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How many rows might this table contain?

How will orders be queried?

Can orders change after payment?

Should customer information be snapshotted?

How are refunds represented?

How are currencies handled?

What indexes are necessary?

Are IDs sequential or public?

Do we need tenant partitioning?

How long must records be retained?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important insight is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Database schemas encode product assumptions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI can generate migrations quickly, but you still need to determine those assumptions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Teach AI to Think About Query Complexity
&lt;/h1&gt;

&lt;p&gt;A classic AI-generated implementation might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$orders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Order&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$orders&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$order&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&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;It works perfectly with twenty orders.&lt;/p&gt;

&lt;p&gt;With 100,000 orders, things become different.&lt;/p&gt;

&lt;p&gt;Good architecture should explicitly instruct agents to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;li&gt;indexes&lt;/li&gt;
&lt;li&gt;N+1 queries&lt;/li&gt;
&lt;li&gt;selective columns&lt;/li&gt;
&lt;li&gt;aggregation cost&lt;/li&gt;
&lt;li&gt;query plans&lt;/li&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;sorting&lt;/li&gt;
&lt;li&gt;filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Order&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you might use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Order&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'customer:id,name'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But even that may eventually require optimization.&lt;/p&gt;

&lt;p&gt;A scalable engineering workflow tells AI to inspect the actual query pattern rather than blindly copying ORM conventions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Put Indexing Into the Feature Design Process
&lt;/h1&gt;

&lt;p&gt;Suppose your application frequently executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;tenant_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At sufficient scale, indexing becomes part of the feature.&lt;/p&gt;

&lt;p&gt;You might need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;idx_orders_tenant_status_created&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important point is not the exact index.&lt;/p&gt;

&lt;p&gt;The important point is that AI should be instructed to ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How will this data be accessed?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What columns should this table contain?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Avoid Premature Distributed Architecture
&lt;/h1&gt;

&lt;p&gt;Developers frequently associate scalability with microservices.&lt;/p&gt;

&lt;p&gt;That is a mistake.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    |
    ├── User Service
    ├── Product Service
    ├── Order Service
    ├── Payment Service
    ├── Notification Service
    └── Analytics Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture may scale beautifully.&lt;/p&gt;

&lt;p&gt;It can also become a nightmare.&lt;/p&gt;

&lt;p&gt;Every network boundary introduces potential:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timeout
retry
partial failure
version mismatch
latency
authentication failure
message duplication
deployment coordination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Distributed systems require explicit failure design.&lt;/p&gt;

&lt;p&gt;AWS's current reliability guidance, for example, recommends making mutating operations idempotent so retries do not create unintended duplicate effects. It also recommends controlling retries with techniques such as exponential backoff, jitter, and retry limits.&lt;/p&gt;

&lt;p&gt;AI can generate REST clients in seconds.&lt;/p&gt;

&lt;p&gt;It cannot eliminate network uncertainty.&lt;/p&gt;

&lt;p&gt;So extract services when there is a reason.&lt;/p&gt;

&lt;p&gt;Good reasons include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;independent scaling requirements&lt;/li&gt;
&lt;li&gt;strong team ownership boundaries&lt;/li&gt;
&lt;li&gt;security isolation&lt;/li&gt;
&lt;li&gt;fundamentally different workloads&lt;/li&gt;
&lt;li&gt;independent deployment requirements&lt;/li&gt;
&lt;li&gt;technological constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Microservices are scalable" is not enough.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Queues to Separate User Latency From Heavy Work
&lt;/h1&gt;

&lt;p&gt;Suppose a user uploads a video.&lt;/p&gt;

&lt;p&gt;A naive request might do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload
  ↓
Generate thumbnail
  ↓
Transcode video
  ↓
Analyze metadata
  ↓
Send notification
  ↓
Return HTTP response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user waits for everything.&lt;/p&gt;

&lt;p&gt;A scalable design looks different.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload
  ↓
Save metadata
  ↓
Queue processing
  ↓
Return response

      Background Workers
             |
      ┌──────┼───────┐
      ▼      ▼       ▼
 thumbnail transcode analysis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI is particularly effective at implementing workers and background jobs once the architecture is defined.&lt;/p&gt;

&lt;p&gt;The developer decides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;what must happen synchronously?
what can happen asynchronously?
what can fail independently?
what must be retried?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI implements those decisions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Make Background Jobs Idempotent
&lt;/h1&gt;

&lt;p&gt;This deserves special attention.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChargeCustomer&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;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;PaymentGateway&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;charge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;amount&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;What happens if:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;payment succeeds
↓
worker crashes
↓
job remains unacknowledged
↓
queue retries
↓
customer charged again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code looked correct.&lt;/p&gt;

&lt;p&gt;The system was not correct.&lt;/p&gt;

&lt;p&gt;A scalable system assumes work can execute more than once.&lt;/p&gt;

&lt;p&gt;The job might instead use an idempotency key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;PaymentGateway&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;charge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;idempotencyKey&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;paymentAttemptId&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS describes this principle explicitly: retryable operations should avoid additional side effects when the same request is processed again.&lt;/p&gt;

&lt;p&gt;Your AI instructions should therefore contain rules such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;All payment jobs must be idempotent.

All webhook handlers must tolerate duplicate delivery.

All external API retries must consider whether the operation is safe to repeat.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These small instructions can prevent extremely expensive bugs.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Caching Intentionally
&lt;/h1&gt;

&lt;p&gt;Another common AI response to performance problems is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Redis caching.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is not a caching strategy.&lt;/p&gt;

&lt;p&gt;Before caching something, answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What are we caching?

Why?

How long?

What invalidates it?

Can stale data be returned?

What happens if Redis is unavailable?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suppose this query runs constantly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;tenant_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'pending'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tenant:42:pending_orders_count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;When should it be invalidated?

After an order is created?

After status changes?

After cancellation?

After import?

After payment?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cache invalidation is part of the architecture.&lt;/p&gt;

&lt;p&gt;AI can implement the invalidation hooks quickly, but humans need to define the consistency expectation.&lt;/p&gt;




&lt;h1&gt;
  
  
  Build Stable Interfaces Between Components
&lt;/h1&gt;

&lt;p&gt;Good scalability depends heavily on contracts.&lt;/p&gt;

&lt;p&gt;Suppose the billing module exposes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;BillingService&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;function&lt;/span&gt; &lt;span class="n"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;Plan&lt;/span&gt; &lt;span class="nv"&gt;$plan&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Subscription&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;Other modules depend on this interface.&lt;/p&gt;

&lt;p&gt;They should not depend on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;StripeSubscriptionRepository
StripeWebhookParser
StripePaymentIntentService
StripeCustomerModel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because implementation details spread coupling.&lt;/p&gt;

&lt;p&gt;If every module directly accesses another module's internals, AI-generated changes become dangerous.&lt;/p&gt;

&lt;p&gt;A small implementation change can trigger modifications throughout the codebase.&lt;/p&gt;

&lt;p&gt;Stable contracts reduce the blast radius.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI Works Best With Strong Local Patterns
&lt;/h1&gt;

&lt;p&gt;One of OpenAI's recommendations for Codex is to structure tasks similarly to GitHub issues and point agents toward existing implementations when relevant.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement password reset rate limiting.

Follow the same architecture used by
LoginRateLimiter.

Files to inspect:

src/Auth/LoginRateLimiter.php
src/Auth/LoginController.php
tests/Auth/LoginRateLimiterTest.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is dramatically safer than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add rate limiting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first prompt gives the agent a local architectural reference.&lt;/p&gt;

&lt;p&gt;The second asks it to invent architecture.&lt;/p&gt;

&lt;p&gt;That suggests a powerful rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create one excellent implementation of every important pattern, then tell AI to follow it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Examples include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CreateOrder
UpdateSubscription
UploadFile
HandleWebhook
ProcessPayment
ExportReport
SendNotification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once those patterns exist, development becomes pattern replication rather than architecture invention.&lt;/p&gt;




&lt;h1&gt;
  
  
  Tests Become More Important in the AI Era, Not Less
&lt;/h1&gt;

&lt;p&gt;There is a common temptation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI wrote the code.
AI reviewed the code.
Therefore the code is probably correct.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is dangerous.&lt;/p&gt;

&lt;p&gt;AI can produce an implementation and then confidently approve its own incorrect assumptions.&lt;/p&gt;

&lt;p&gt;The scalable approach is automated verification.&lt;/p&gt;

&lt;p&gt;Think of this relationship:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI speed increases
       ↓
number of changes increases
       ↓
verification requirements increase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an engineering team moves from ten changes per day to fifty, manual verification becomes increasingly insufficient.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Multiple Layers of Testing
&lt;/h1&gt;

&lt;p&gt;A scalable system should have several verification layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unit tests
&lt;/h2&gt;

&lt;p&gt;Validate isolated business rules.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;test_discount_cannot_exceed_order_total&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;expectException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nc"&gt;InvalidDiscountException&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$order&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;applyDiscount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;120&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;h2&gt;
  
  
  Integration tests
&lt;/h2&gt;

&lt;p&gt;Validate component interactions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database
Queue
Cache
External service adapters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  API tests
&lt;/h2&gt;

&lt;p&gt;Validate actual contracts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/orders

201
{
    "id": "...",
    "status": "pending"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  End-to-end tests
&lt;/h2&gt;

&lt;p&gt;Validate critical user journeys.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Register
↓
Create organization
↓
Subscribe
↓
Create project
↓
Invite teammate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI can generate all of these.&lt;/p&gt;

&lt;p&gt;The important part is making tests a required deliverable.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement this feature.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement this feature.

Add unit tests for business rules.

Add integration tests for persistence.

Add API tests for authorization and validation.

Run the relevant suite and fix failures before completing the task.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Every Bug Should Produce a Regression Test
&lt;/h1&gt;

&lt;p&gt;This is one of the most effective rules you can introduce.&lt;/p&gt;

&lt;p&gt;Suppose production reveals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users can redeem the same coupon twice
when two requests arrive simultaneously.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not ask AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fix duplicate coupon redemption.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reproduce the duplicate coupon redemption bug
with a failing test.

Then fix the implementation.

The test must pass after the fix.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your repository gains permanent knowledge.&lt;/p&gt;

&lt;p&gt;The bug becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;production incident
      ↓
regression test
      ↓
architectural knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Over time, the test suite becomes a memory system.&lt;/p&gt;

&lt;p&gt;This is especially valuable for AI agents that did not participate in earlier incidents.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use Static Analysis as an Architectural Guardrail
&lt;/h1&gt;

&lt;p&gt;AI agents are excellent at generating code.&lt;/p&gt;

&lt;p&gt;Static analyzers are excellent at refusing certain classes of bad code.&lt;/p&gt;

&lt;p&gt;Combine them.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TypeScript compiler
PHPStan
Psalm
ESLint
Ruff
mypy
SpotBugs
SonarQube
ArchUnit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suppose your architecture says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Domain code cannot depend on HTTP controllers.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not leave this entirely in documentation.&lt;/p&gt;

&lt;p&gt;Where possible, enforce it.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Domain
   X
Controllers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an agent violates the rule, CI should fail.&lt;/p&gt;

&lt;p&gt;The ultimate scalable AI workflow is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tell AI what to do correctly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tell AI what to do
+
automatically reject invalid solutions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Treat CI as the Gatekeeper
&lt;/h1&gt;

&lt;p&gt;The development process should look something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                AI Agent
                   |
                   ▼
               Code Change
                   |
                   ▼
        ┌─────────────────────┐
        │         CI          │
        ├─────────────────────┤
        │ Formatting          │
        │ Linting             │
        │ Static analysis     │
        │ Unit tests          │
        │ Integration tests   │
        │ Architecture tests  │
        │ Security checks     │
        │ Build               │
        └──────────┬──────────┘
                   │
                  pass
                   │
                   ▼
                Review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The stronger the pipeline becomes, the more safely AI can operate autonomously.&lt;/p&gt;




&lt;h1&gt;
  
  
  Observability Is Part of Scalability
&lt;/h1&gt;

&lt;p&gt;Suppose AI helps you build an API handling 20,000 requests per minute.&lt;/p&gt;

&lt;p&gt;Then customers begin reporting:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Sometimes checkout takes 12 seconds."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What do you do?&lt;/p&gt;

&lt;p&gt;If the application only logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Something went wrong
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you have a problem.&lt;/p&gt;

&lt;p&gt;Scalable systems require observability.&lt;/p&gt;

&lt;p&gt;At minimum, consider:&lt;/p&gt;

&lt;h3&gt;
  
  
  Structured logs
&lt;/h3&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;log something structured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"payment_failed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payment_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pay_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"order_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ord_456"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5021&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Metrics
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requests/sec
error rate
latency
database connections
queue depth
job failure rate
cache hit ratio
CPU
memory
external API latency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tracing
&lt;/h3&gt;

&lt;p&gt;A request might travel through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API
 ↓
Order Service
 ↓
Payment Service
 ↓
Database
 ↓
Message Queue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Distributed tracing helps identify which stage consumed time.&lt;/p&gt;

&lt;p&gt;The critical point is that observability should not be added after the system becomes large.&lt;/p&gt;

&lt;p&gt;Build it while the architecture is still understandable.&lt;/p&gt;




&lt;h1&gt;
  
  
  Give AI Access to Operational Context Carefully
&lt;/h1&gt;

&lt;p&gt;AI can help investigate production issues when given:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;logs
stack traces
metrics
query plans
deployment diffs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p95 API latency increased from 180 ms to 1.8 seconds
after deployment 2026-08-07. Analyze these traces and
identify likely regressions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is far more effective than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My application is slow. Fix it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI becomes powerful when provided evidence.&lt;/p&gt;

&lt;p&gt;The general principle applies everywhere:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Context quality determines AI engineering quality.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Design for Horizontal Scaling
&lt;/h1&gt;

&lt;p&gt;Suppose one application instance handles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;500 requests/second
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server A
Server B
Server C
Server D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;behind a load balancer.&lt;/p&gt;

&lt;p&gt;The application should therefore avoid storing critical state in local process memory.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server A memory:
user_123_session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the next request reaches Server B:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Load Balancer
                     |
        ┌────────────┼────────────┐
        ▼            ▼            ▼
     Server A     Server B     Server C
        │            │            │
        └────────────┼────────────┘
                     ▼
               Shared Session
                  Storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common choices include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Redis
database-backed sessions
signed stateless tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architectural rule should be documented for AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application instances must remain stateless.

Do not introduce process-local state required across requests.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now an agent writing features is less likely to accidentally undermine horizontal scalability.&lt;/p&gt;




&lt;h1&gt;
  
  
  Separate Storage Concerns
&lt;/h1&gt;

&lt;p&gt;At small scale, developers often put everything into the relational database.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users
orders
sessions
logs
notifications
files
analytics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can work initially.&lt;/p&gt;

&lt;p&gt;As workloads grow, storage systems should match access patterns.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transactional data
→ PostgreSQL / MySQL

Cache
→ Redis

Object files
→ S3-compatible storage

Search
→ OpenSearch / Elasticsearch

Analytics
→ analytical database or warehouse

Events
→ Kafka / queue system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not introduce all of these on day one.&lt;/p&gt;

&lt;p&gt;But design interfaces that allow evolution.&lt;/p&gt;

&lt;p&gt;For file uploads, for example, do not scatter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nb"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;throughout the application.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;FileStorage&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;function&lt;/span&gt; &lt;span class="n"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kt"&gt;mixed&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&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;Today:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;The system evolves without rewriting every feature.&lt;/p&gt;




&lt;h1&gt;
  
  
  AI Makes Refactoring Economically Different
&lt;/h1&gt;

&lt;p&gt;Historically, large refactors were expensive because someone had to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find references
change interfaces
update implementations
modify tests
update documentation
fix compilation errors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coding agents can now automate a large portion of this mechanical work.&lt;/p&gt;

&lt;p&gt;OpenAI describes internal teams using Codex for large-codebase refactoring, performance optimization, test coverage improvements, and other engineering work.&lt;/p&gt;

&lt;p&gt;This means architecture can be more evolutionary than before.&lt;/p&gt;

&lt;p&gt;You do not need to perfectly predict the next five years.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;choose simple architecture
       ↓
create strong boundaries
       ↓
measure the system
       ↓
identify pressure points
       ↓
refactor deliberately
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI reduces the cost of the last step.&lt;/p&gt;

&lt;p&gt;It does not remove the need for the first four.&lt;/p&gt;




&lt;h1&gt;
  
  
  Keep Functions and Modules Small Enough to Understand
&lt;/h1&gt;

&lt;p&gt;AI can produce huge implementations because generating code is cheap.&lt;/p&gt;

&lt;p&gt;This sometimes results in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;processOrder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// validation&lt;/span&gt;
    &lt;span class="c1"&gt;// inventory check&lt;/span&gt;
    &lt;span class="c1"&gt;// customer lookup&lt;/span&gt;
    &lt;span class="c1"&gt;// discount calculation&lt;/span&gt;
    &lt;span class="c1"&gt;// tax calculation&lt;/span&gt;
    &lt;span class="c1"&gt;// payment&lt;/span&gt;
    &lt;span class="c1"&gt;// database updates&lt;/span&gt;
    &lt;span class="c1"&gt;// email&lt;/span&gt;
    &lt;span class="c1"&gt;// analytics&lt;/span&gt;
    &lt;span class="c1"&gt;// webhook&lt;/span&gt;
    &lt;span class="c1"&gt;// notification&lt;/span&gt;
    &lt;span class="c1"&gt;// logging&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A 500-line method may technically work.&lt;/p&gt;

&lt;p&gt;It is still architectural debt.&lt;/p&gt;

&lt;p&gt;Split responsibilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OrderProcessor
├── InventoryReservation
├── PricingCalculator
├── TaxCalculator
├── PaymentProcessor
├── OrderRepository
└── OrderEventPublisher
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But avoid the opposite extreme too.&lt;/p&gt;

&lt;p&gt;AI can also generate abstraction explosions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OrderCreatorInterface
DefaultOrderCreator
OrderCreationManager
OrderCreationCoordinator
OrderCreationFactory
OrderCreationContext
OrderCreationProvider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for something that required twenty lines.&lt;/p&gt;

&lt;p&gt;Scalable architecture is not maximum abstraction.&lt;/p&gt;

&lt;p&gt;It is the right abstraction at the right boundary.&lt;/p&gt;




&lt;h1&gt;
  
  
  Make AI Explain Before It Changes Critical Systems
&lt;/h1&gt;

&lt;p&gt;For dangerous or high-impact changes, use an analysis-first workflow.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Optimize our checkout database queries.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyze checkout database behavior.

Do not modify code yet.

Identify:

1. expensive queries
2. N+1 patterns
3. missing indexes
4. unnecessary writes
5. transaction boundaries
6. potential race conditions

Propose changes with expected benefits and risks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then review the plan.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement items 1, 2, and 4.

Do not change the transaction model yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates an engineering loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explore
   ↓
Understand
   ↓
Plan
   ↓
Review
   ↓
Implement
   ↓
Verify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI similarly recommends beginning with an ask or exploration mode for many Codex workflows rather than immediately requesting modifications.&lt;/p&gt;




&lt;h1&gt;
  
  
  Break Large Features Into Vertical Slices
&lt;/h1&gt;

&lt;p&gt;Avoid prompts like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the entire marketplace system.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1
Vendor registration

Phase 2
Product creation

Phase 3
Product publishing

Phase 4
Checkout

Phase 5
Commission calculation

Phase 6
Vendor payouts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even better, make each phase independently testable.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vendor registration

Requirements:
- user can apply
- application status starts pending
- admin can approve
- approval creates vendor profile
- operation must be transactional
- duplicate approval must not duplicate profile
- audit event must be recorded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the AI has a well-defined engineering problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use ADRs for Important Architecture Decisions
&lt;/h1&gt;

&lt;p&gt;Architecture Decision Records are extremely useful in AI-assisted projects.&lt;/p&gt;

&lt;p&gt;Suppose you choose PostgreSQL rather than MongoDB for your transactional system.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/adr/001-use-postgresql.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ADR 001: Use PostgreSQL as Primary Database&lt;/span&gt;

&lt;span class="gu"&gt;## Context&lt;/span&gt;

The application requires:
&lt;span class="p"&gt;
-&lt;/span&gt; relational transactions
&lt;span class="p"&gt;-&lt;/span&gt; complex reporting
&lt;span class="p"&gt;-&lt;/span&gt; financial consistency
&lt;span class="p"&gt;-&lt;/span&gt; strong foreign-key relationships

&lt;span class="gu"&gt;## Decision&lt;/span&gt;

Use PostgreSQL as the primary transactional database.

&lt;span class="gu"&gt;## Consequences&lt;/span&gt;

Benefits:
&lt;span class="p"&gt;
-&lt;/span&gt; strong transactional guarantees
&lt;span class="p"&gt;-&lt;/span&gt; mature relational capabilities
&lt;span class="p"&gt;-&lt;/span&gt; rich indexing
&lt;span class="p"&gt;-&lt;/span&gt; reliable reporting

Trade-offs:
&lt;span class="p"&gt;
-&lt;/span&gt; schema migrations must be managed
&lt;span class="p"&gt;-&lt;/span&gt; horizontal write scaling may require future work

&lt;span class="gu"&gt;## Revisit When&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; write throughput exceeds current architecture
&lt;span class="p"&gt;-&lt;/span&gt; geographically distributed writes become necessary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now six months later, an AI agent does not recommend MongoDB simply because a particular feature contains flexible JSON.&lt;/p&gt;

&lt;p&gt;It can understand why PostgreSQL exists.&lt;/p&gt;

&lt;p&gt;Architecture documentation becomes institutional memory.&lt;/p&gt;




&lt;h1&gt;
  
  
  Document the "Why", Not Just the "What"
&lt;/h1&gt;

&lt;p&gt;Bad documentation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We use Redis.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Redis stores short-lived cache entries and distributed locks.

Redis must not be the authoritative source for billing data.

If Redis is unavailable, critical transactional operations should remain correct, although performance may degrade.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That second version tells an agent how the technology fits into the architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  Security Needs Hard Boundaries
&lt;/h1&gt;

&lt;p&gt;AI generates code quickly.&lt;/p&gt;

&lt;p&gt;Security mistakes also scale quickly.&lt;/p&gt;

&lt;p&gt;Repository rules should explicitly address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;authentication
authorization
tenant isolation
input validation
secret handling
logging
SQL injection
file uploads
webhooks
rate limiting
encryption
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Never trust tenant_id supplied by the client.

Determine tenant context from authenticated membership.

Every tenant-owned query must explicitly scope by tenant.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That rule can prevent an entire class of vulnerabilities.&lt;/p&gt;

&lt;p&gt;For external callbacks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;All webhook endpoints must verify provider signatures before processing payloads.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For secrets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Never hardcode credentials.

Never log authorization headers.

Never commit .env files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not expect AI to infer your threat model.&lt;/p&gt;

&lt;p&gt;Encode it.&lt;/p&gt;




&lt;h1&gt;
  
  
  Review AI Code Differently
&lt;/h1&gt;

&lt;p&gt;Traditional code review asks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is this code correct?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI-assisted code review needs additional questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the code follow existing architecture?
&lt;/h3&gt;

&lt;p&gt;AI frequently produces locally correct but globally inconsistent code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Did it introduce a new pattern unnecessarily?
&lt;/h3&gt;

&lt;p&gt;For example, perhaps the repository already has:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;and AI creates:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;for the same responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Did it duplicate existing functionality?
&lt;/h3&gt;

&lt;p&gt;Search the repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are failure scenarios handled?
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timeouts
retries
duplicate requests
partial writes
concurrency
network failures
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Are queries scalable?
&lt;/h3&gt;

&lt;p&gt;Inspect loops and relationship loading.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are transactions correct?
&lt;/h3&gt;

&lt;p&gt;AI sometimes places too much inside a transaction or not enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is observability sufficient?
&lt;/h3&gt;

&lt;p&gt;Can the feature be debugged in production?&lt;/p&gt;

&lt;h3&gt;
  
  
  Did tests verify behavior or merely implementation?
&lt;/h3&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;




&lt;h1&gt;
  
  
  Never Blindly Accept Large AI Diffs
&lt;/h1&gt;

&lt;p&gt;If an AI agent changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;47 files
3,200 lines
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for a relatively small feature, investigate.&lt;/p&gt;

&lt;p&gt;Large diffs hide mistakes.&lt;/p&gt;

&lt;p&gt;Ask the agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain why each changed file is necessary.

Identify changes that can be removed without affecting
the requested functionality.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then reduce the change.&lt;/p&gt;

&lt;p&gt;AI code is cheap.&lt;/p&gt;

&lt;p&gt;Code ownership is not.&lt;/p&gt;

&lt;p&gt;Every generated line becomes something your team potentially maintains for years.&lt;/p&gt;




&lt;h1&gt;
  
  
  Use AI to Delete Code Too
&lt;/h1&gt;

&lt;p&gt;One of the healthiest uses of AI is identifying unnecessary complexity.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyze this module for:

- duplicate abstractions
- dead code
- redundant wrappers
- unnecessary interfaces
- duplicated validation
- unused dependencies

Propose simplifications without changing behavior.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A scalable codebase is often one that contains less code, not more.&lt;/p&gt;




&lt;h1&gt;
  
  
  Design an AI-Friendly Repository
&lt;/h1&gt;

&lt;p&gt;A repository that works well with AI often has a predictable structure.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
├── AGENTS.md
├── README.md
├── docs/
│   ├── architecture.md
│   ├── domains.md
│   ├── database.md
│   ├── security.md
│   └── adr/
├── src/
│   ├── Accounts/
│   ├── Billing/
│   ├── Projects/
│   └── Notifications/
├── tests/
├── scripts/
└── .github/
    └── workflows/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository itself communicates its architecture.&lt;/p&gt;

&lt;p&gt;Then &lt;code&gt;AGENTS.md&lt;/code&gt; might say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Before implementing changes:
&lt;span class="p"&gt;
1.&lt;/span&gt; Read docs/architecture.md.
&lt;span class="p"&gt;2.&lt;/span&gt; Inspect the closest existing implementation.
&lt;span class="p"&gt;3.&lt;/span&gt; Do not create new architectural patterns without justification.
&lt;span class="p"&gt;4.&lt;/span&gt; Add tests for behavioral changes.
&lt;span class="p"&gt;5.&lt;/span&gt; Run the relevant test suite.
&lt;span class="p"&gt;6.&lt;/span&gt; Run static analysis.
&lt;span class="p"&gt;7.&lt;/span&gt; Summarize architectural impact.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub's documentation similarly recommends repository instructions that explain project structure, coding conventions, test frameworks, and build/run procedures.&lt;/p&gt;




&lt;h1&gt;
  
  
  Create Standard Commands
&lt;/h1&gt;

&lt;p&gt;Agents perform much better when they do not need to discover basic development commands.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make setup
make dev
make &lt;span class="nb"&gt;test
&lt;/span&gt;make lint
make analyze
make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typecheck"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent instructions can simply state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;After changes run:

npm run lint
npm run typecheck
npm test
npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI notes that coding agents perform better when repositories have configured development environments, reliable tests, and clear documentation.&lt;/p&gt;

&lt;p&gt;The less time an AI agent spends guessing how your project works, the more time it can spend solving the actual problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  A Practical AI-Assisted Development Workflow
&lt;/h1&gt;

&lt;p&gt;Here is a workflow I would recommend for building serious software with AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Describe the product
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What are we building?
Who uses it?
What problem does it solve?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Multi-tenant project management SaaS for agencies.

Organizations contain users and projects.

Customers subscribe to plans with usage limits.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Define expected scale
&lt;/h2&gt;

&lt;p&gt;Do not say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;It should scale.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write assumptions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Initial:
1,000 organizations
10,000 users

Expected:
50,000 organizations
500,000 users
50 million tasks

Peak API traffic:
2,000 requests/second
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These estimates do not need to be perfect.&lt;/p&gt;

&lt;p&gt;They force architectural reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Identify domains
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accounts
Organizations
Projects
Billing
Notifications
Reporting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define ownership.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Establish architectural rules
&lt;/h2&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modular monolith.

Modules communicate through public services/events.

Controllers contain no business logic.

Database access remains inside owning modules.

Background work runs through queues.

Application nodes remain stateless.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Define critical invariants
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tenant data never crosses tenants.

Payment webhook processing is idempotent.

Usage counters cannot become negative.

Paid invoices cannot be modified.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 6: Create AI instructions
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AGENTS.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or the repository instruction format supported by your coding environment.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;architecture
commands
patterns
testing
security
database conventions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7: Build one module properly
&lt;/h2&gt;

&lt;p&gt;Do not generate the whole product at once.&lt;/p&gt;

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

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

&lt;/div&gt;



&lt;p&gt;carefully.&lt;/p&gt;

&lt;p&gt;Use it to establish patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Let AI replicate proven patterns
&lt;/h2&gt;

&lt;p&gt;Now tell AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement Project membership following
the same layering, validation, testing,
and authorization approach used by
Organization membership.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where AI becomes extraordinarily productive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Automate verification
&lt;/h2&gt;

&lt;p&gt;CI should enforce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;format
lint
types
architecture
tests
build
security
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 10: Measure before optimizing
&lt;/h2&gt;

&lt;p&gt;Deploy.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;latency
throughput
query times
queue depth
cache performance
error rates
resource usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then optimize actual bottlenecks.&lt;/p&gt;

&lt;p&gt;Do not ask AI to solve hypothetical scale problems before evidence exists.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example: Building a Scalable Order System With AI
&lt;/h1&gt;

&lt;p&gt;Consider an e-commerce order service.&lt;/p&gt;

&lt;p&gt;A simplistic flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /orders
     |
     ▼
Create order
     |
     ▼
Charge card
     |
     ▼
Send email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can improve it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  |
  ▼
POST /orders
  |
  ▼
API
  |
  ▼
OrderService
  |
  ├── Validate inventory
  ├── Calculate price
  ├── Create order
  └── Commit transaction
            |
            ▼
       OrderCreated
            |
      ┌─────┼─────────┐
      ▼     ▼         ▼
  Payment  Email   Analytics
   Worker  Worker    Worker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now specify invariants:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Order creation is idempotent.

Inventory cannot become negative.

Order prices are snapshotted.

Payment failure does not delete the order.

Email failure does not affect payment.

Webhook processing supports duplicate events.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then instruct AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement CreateOrder.

Architecture:

- controller handles HTTP only
- business logic belongs in CreateOrderService
- use a transaction for inventory reservation and order persistence
- use idempotency keys
- dispatch OrderCreated after persistence
- payment execution must happen asynchronously
- add concurrency tests around inventory
- add duplicate-request tests
- add structured logging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now AI is not designing the system.&lt;/p&gt;

&lt;p&gt;It is implementing a system you designed.&lt;/p&gt;

&lt;p&gt;That distinction is enormous.&lt;/p&gt;




&lt;h1&gt;
  
  
  What AI Should Do in a Scalable Engineering Team
&lt;/h1&gt;

&lt;p&gt;AI is particularly good at:&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository exploration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain how payments currently work.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pattern discovery
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find all implementations of idempotency handling.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code generation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement this service following the existing pattern.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate edge-case tests for this state machine.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Refactoring
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Move this domain logic from controllers into services
without changing API behavior.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Performance investigation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyze these database queries for N+1 patterns.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document the billing workflow based on the implementation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Migration work
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Update all call sites to use the new interface.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Review
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this diff specifically for concurrency,
authorization, and database performance issues.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These tasks benefit enormously from AI.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Humans Should Continue Owning
&lt;/h1&gt;

&lt;p&gt;Humans should remain responsible for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;product goals
architecture
trade-offs
domain boundaries
risk tolerance
security model
data ownership
consistency requirements
operational strategy
cost constraints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI can advise on all of these.&lt;/p&gt;

&lt;p&gt;But someone needs to own the decision.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Biggest Mistake: Optimizing for AI Output Instead of System Quality
&lt;/h1&gt;

&lt;p&gt;AI produces visible progress.&lt;/p&gt;

&lt;p&gt;You prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build notification system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and suddenly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;14 files created
2 migrations
6 services
3 jobs
4 tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It feels productive.&lt;/p&gt;

&lt;p&gt;But lines of code are not progress.&lt;/p&gt;

&lt;p&gt;Architecture is not measured by how much software exists.&lt;/p&gt;

&lt;p&gt;The relevant questions are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does this solve the problem?

Is the boundary correct?

Can this be changed later?

Can it fail safely?

Can it be observed?

Can it scale?

Can another engineer understand it?

Can an AI agent understand it six months later?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes the best AI-assisted implementation is fifty lines.&lt;/p&gt;




&lt;h1&gt;
  
  
  A Better Mental Model for AI-Assisted Software Engineering
&lt;/h1&gt;

&lt;p&gt;Traditional development looked roughly like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
   ↓
Design
   ↓
Code
   ↓
Test
   ↓
Deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI-assisted engineering increasingly looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Human Engineer
                         |
             Architecture + Constraints
                         |
                         ▼
                    AI Agents
                         |
             ┌───────────┼────────────┐
             ▼           ▼            ▼
          Coding       Testing      Refactoring
             │           │            │
             └───────────┼────────────┘
                         ▼
                Automated Guardrails
                         |
       ┌─────────────────┼──────────────────┐
       ▼                 ▼                  ▼
    Tests          Static Analysis      Security
       │                 │                  │
       └─────────────────┼──────────────────┘
                         ▼
                    Human Review
                         |
                         ▼
                    Production
                         |
                         ▼
                   Observability
                         |
                         ▼
                    Feedback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That feedback goes back into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tests
architecture
documentation
agent instructions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system becomes easier to develop over time.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Real Scalability Advantage of AI
&lt;/h1&gt;

&lt;p&gt;AI's biggest impact on scalable software may not be code generation.&lt;/p&gt;

&lt;p&gt;It may be reducing the cost of maintaining architectural consistency.&lt;/p&gt;

&lt;p&gt;Imagine an engineer saying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find every endpoint that returns an unpaginated collection.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An agent can search the repository.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Identify all jobs that perform non-idempotent external API calls.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find modules that directly access Billing models.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find database queries inside loops.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate regression tests for these cases.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This turns architectural maintenance from an occasional manual audit into something much closer to continuous inspection.&lt;/p&gt;

&lt;p&gt;That is extremely powerful.&lt;/p&gt;




&lt;h1&gt;
  
  
  Five Principles I Would Use on Every AI-Assisted Project
&lt;/h1&gt;

&lt;p&gt;If I had to reduce this entire approach to five rules, they would be these.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Architecture before generation
&lt;/h2&gt;

&lt;p&gt;Do not allow implementation speed to replace design.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;boundaries
data
failure modes
scale
ownership
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;before generating large amounts of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Constraints before prompts
&lt;/h2&gt;

&lt;p&gt;Give AI a system of rules.&lt;/p&gt;

&lt;p&gt;Do not repeatedly explain your architecture in every conversation.&lt;/p&gt;

&lt;p&gt;Encode it in the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Patterns before autonomy
&lt;/h2&gt;

&lt;p&gt;Build one good example.&lt;/p&gt;

&lt;p&gt;Then let agents repeat the pattern.&lt;/p&gt;

&lt;p&gt;Consistency beats creativity in most production codebases.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Verification before trust
&lt;/h2&gt;

&lt;p&gt;AI output is untrusted until verified.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tests
types
static analysis
CI
architecture rules
security checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Measurement before optimization
&lt;/h2&gt;

&lt;p&gt;Do not build Kafka because somebody said you might eventually have millions of users.&lt;/p&gt;

&lt;p&gt;Measure the system.&lt;/p&gt;

&lt;p&gt;Optimize the bottleneck that actually exists.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;AI has made writing software dramatically cheaper.&lt;/p&gt;

&lt;p&gt;That does not make software engineering less important.&lt;/p&gt;

&lt;p&gt;It makes engineering discipline more important.&lt;/p&gt;

&lt;p&gt;When generating code required significant human effort, development speed naturally limited how quickly complexity could accumulate.&lt;/p&gt;

&lt;p&gt;AI removes part of that limitation.&lt;/p&gt;

&lt;p&gt;A team can now produce enormous amounts of code very quickly.&lt;/p&gt;

&lt;p&gt;Without strong architecture, that becomes enormous amounts of technical debt very quickly.&lt;/p&gt;

&lt;p&gt;The teams that benefit most from AI will therefore not necessarily be those that generate the most code.&lt;/p&gt;

&lt;p&gt;They will be the teams that create environments where AI can safely generate code.&lt;/p&gt;

&lt;p&gt;They will build clear module boundaries.&lt;/p&gt;

&lt;p&gt;They will define invariants.&lt;/p&gt;

&lt;p&gt;They will document architectural decisions.&lt;/p&gt;

&lt;p&gt;They will design retry-safe operations.&lt;/p&gt;

&lt;p&gt;They will automate tests and static analysis.&lt;/p&gt;

&lt;p&gt;They will build observable systems.&lt;/p&gt;

&lt;p&gt;They will measure real bottlenecks.&lt;/p&gt;

&lt;p&gt;They will maintain repositories that both humans and AI agents can understand.&lt;/p&gt;

&lt;p&gt;And they will use AI for what it is exceptionally good at: accelerating implementation, exploration, testing, refactoring, investigation, and repetitive engineering work.&lt;/p&gt;

&lt;p&gt;The goal is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI writes my software.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A much better goal is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I design a system where AI can safely help build,
test, evolve, and operate the software.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the difference between using AI to generate code and using AI to build scalable software.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>Bruno: The Git-Native API Client Developers Should Try</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 03 Aug 2026 16:09:15 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/bruno-the-git-native-api-client-developers-should-try-4c8h</link>
      <guid>https://dev.to/moniruzzamansaikat/bruno-the-git-native-api-client-developers-should-try-4c8h</guid>
      <description>&lt;p&gt;Modern API development requires more than a tool that can send HTTP requests.&lt;/p&gt;

&lt;p&gt;Developers need API collections that can be reviewed, versioned, tested, shared, and executed inside CI pipelines. However, many API clients treat collections as data stored inside their own platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.usebruno.com/" rel="noopener noreferrer"&gt;Bruno&lt;/a&gt; takes a different approach.&lt;/p&gt;

&lt;p&gt;Bruno is an open-source, local-first, and Git-native API client. Instead of hiding API collections inside a cloud workspace, Bruno stores them as readable files on your filesystem.&lt;/p&gt;

&lt;p&gt;That simple decision makes Bruno fit naturally into a developer's existing workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Bruno?
&lt;/h2&gt;

&lt;p&gt;Bruno is a desktop API client for developing and testing APIs.&lt;/p&gt;

&lt;p&gt;You can use it to work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;GraphQL APIs&lt;/li&gt;
&lt;li&gt;Authentication flows&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Request scripts&lt;/li&gt;
&lt;li&gt;Response tests&lt;/li&gt;
&lt;li&gt;API documentation&lt;/li&gt;
&lt;li&gt;Automated collection runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It covers many workflows developers already use tools like Postman or Insomnia for.&lt;/p&gt;

&lt;p&gt;The major difference is how Bruno stores and manages API collections.&lt;/p&gt;

&lt;p&gt;Your requests live inside regular folders and text files. You can open them in an editor, commit them to Git, review changes in pull requests, and keep them beside your application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Git-Native API Collections Matter
&lt;/h2&gt;

&lt;p&gt;Imagine that your backend repository contains the following structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-api/
├── app/
├── database/
├── routes/
├── tests/
└── api-collection/
    ├── users/
    ├── authentication/
    ├── products/
    └── bruno.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API collection can be committed to the same repository as the application.&lt;/p&gt;

&lt;p&gt;When a developer changes an endpoint, they can update the related Bruno request in the same branch.&lt;/p&gt;

&lt;p&gt;A pull request can then contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Updated user registration validation
Updated registration API request
Added registration error tests
Updated API documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The backend implementation and its API examples remain synchronized.&lt;/p&gt;

&lt;p&gt;This is much cleaner than updating code in Git while separately maintaining a collection inside an external cloud workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collections Are Readable Files
&lt;/h2&gt;

&lt;p&gt;Bruno stores requests as plain-text files.&lt;/p&gt;

&lt;p&gt;A simplified Bruno request may look similar to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;meta {
  name: Get Current User
  type: http
  seq: 1
}

get {
  url: {{baseUrl}}/api/user
  body: none
  auth: bearer
}

auth:bearer {
  token: {{accessToken}}
}

tests {
  test("should return the authenticated user", function () {
    expect(res.status).to.equal(200);
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the request is text-based, it works well with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git diffs&lt;/li&gt;
&lt;li&gt;Pull requests&lt;/li&gt;
&lt;li&gt;Code reviews&lt;/li&gt;
&lt;li&gt;Merge history&lt;/li&gt;
&lt;li&gt;IDE search&lt;/li&gt;
&lt;li&gt;Automated agents&lt;/li&gt;
&lt;li&gt;Repository backups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need a proprietary interface just to understand what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-First by Design
&lt;/h2&gt;

&lt;p&gt;Bruno runs locally and does not require an account for its normal open-source workflow.&lt;/p&gt;

&lt;p&gt;Your requests, environments, scripts, and collections stay on your machine or inside repositories you control.&lt;/p&gt;

&lt;p&gt;This is useful when working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private APIs&lt;/li&gt;
&lt;li&gt;Internal company services&lt;/li&gt;
&lt;li&gt;Sensitive authentication flows&lt;/li&gt;
&lt;li&gt;Client projects&lt;/li&gt;
&lt;li&gt;Local development environments&lt;/li&gt;
&lt;li&gt;Restricted enterprise networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A local-first tool also avoids making your API workflow dependent on the availability of an external cloud platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Your First Bruno Collection
&lt;/h2&gt;

&lt;p&gt;After installing Bruno, create a new collection and select a directory on your filesystem.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;projects/
└── inventory-api/
    └── bruno/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create an environment containing variables such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vars {
  baseUrl: http://localhost:8000
  accessToken:
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then create a login request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST {{baseUrl}}/api/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a JSON body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"developer@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"password"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After receiving the response, you can save the token using a post-response script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bru&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEnvVar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessToken&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&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;Other authenticated requests can reuse the value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer {{accessToken}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a repeatable authentication workflow without manually copying tokens after every login.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing API Responses
&lt;/h2&gt;

&lt;p&gt;Bruno supports response tests, allowing a collection to work as both documentation and executable validation.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status should be 200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;response should contain a user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user should have an email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&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 also validate response types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;products should be an array&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;an&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;array&lt;/span&gt;&lt;span class="dl"&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;Or check business rules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product stock should not be negative&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;at&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;least&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&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;These tests help catch API regressions before they reach production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environments and Variables
&lt;/h2&gt;

&lt;p&gt;Most applications have multiple environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local&lt;/li&gt;
&lt;li&gt;Development&lt;/li&gt;
&lt;li&gt;Staging&lt;/li&gt;
&lt;li&gt;Production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of duplicating requests, you can create environment-specific variables.&lt;/p&gt;

&lt;p&gt;Local environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vars {
  baseUrl: http://localhost:8000
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Staging environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vars {
  baseUrl: https://staging-api.example.com
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Production environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vars {
  baseUrl: https://api.example.com
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your request remains unchanged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET {{baseUrl}}/api/products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You only switch the active environment.&lt;/p&gt;

&lt;p&gt;Sensitive values such as API keys and access tokens should be stored separately from committed collection files.&lt;/p&gt;

&lt;p&gt;Bruno automatically creates recommended Git ignore rules when creating collections, but developers should still review files before committing them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collaboration Through Git
&lt;/h2&gt;

&lt;p&gt;A Bruno collection can be managed like any other source code directory.&lt;/p&gt;

&lt;p&gt;Initialize Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add authentication API collection"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect it to a remote repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin https://github.com/username/project-api.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Team members can clone the repository and open the same collection in Bruno.&lt;/p&gt;

&lt;p&gt;Changes can be reviewed using normal Git commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff
git status
git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives API collections the same review process as application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Collections From the CLI
&lt;/h2&gt;

&lt;p&gt;Bruno provides a command-line interface called Bruno CLI.&lt;/p&gt;

&lt;p&gt;Install it using npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @usebruno/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigate to the collection directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;path/to/bruno-collection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the entire collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it with a selected environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nb"&gt;local&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run only a specific folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run &lt;span class="nb"&gt;users&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pass environment variables directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="nt"&gt;--env-var&lt;/span&gt; &lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run requests with selected tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run &lt;span class="nt"&gt;--tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smoke,sanity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To exclude unfinished or skipped requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bru run &lt;span class="nt"&gt;--exclude-tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;skip,draft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes Bruno useful beyond manual API exploration.&lt;/p&gt;

&lt;p&gt;Your collection can become part of your automated testing system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Bruno in CI/CD
&lt;/h2&gt;

&lt;p&gt;A simple CI workflow can install Bruno CLI and run an API collection after starting the application.&lt;/p&gt;

&lt;p&gt;A simplified GitHub Actions example could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;API Tests&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;api-tests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout repository&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up Node.js&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Bruno CLI&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g @usebruno/cli&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run API tests&lt;/span&gt;
        &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./bruno&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bru run --env ci&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a real application, you would also start the backend service and database before executing the collection.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install backend dependencies&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;composer install --no-interaction&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Prepare environment&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;cp .env.example .env&lt;/span&gt;
    &lt;span class="s"&gt;php artisan key:generate&lt;/span&gt;
    &lt;span class="s"&gt;php artisan migrate --force&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Start Laravel server&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;php artisan serve --host=127.0.0.1 --port=8000 &amp;amp;&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Bruno tests&lt;/span&gt;
  &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./bruno&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bru run --env ci&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every pull request can verify that important API endpoints still work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating Test Reports
&lt;/h2&gt;

&lt;p&gt;Bruno CLI supports report formats that can be used in automated pipelines.&lt;/p&gt;

&lt;p&gt;Depending on your workflow, you can generate formats such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;JUnit&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JUnit output is especially useful because many CI platforms can display test results directly.&lt;/p&gt;

&lt;p&gt;A collection can therefore serve several purposes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manual API exploration&lt;/li&gt;
&lt;li&gt;Developer documentation&lt;/li&gt;
&lt;li&gt;Regression testing&lt;/li&gt;
&lt;li&gt;CI validation&lt;/li&gt;
&lt;li&gt;Integration testing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This reduces the need to maintain separate API examples and testing assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Importing Existing Collections
&lt;/h2&gt;

&lt;p&gt;Teams do not need to rebuild every request manually before trying Bruno.&lt;/p&gt;

&lt;p&gt;Bruno supports importing collections from common formats and tools, including Postman collections.&lt;/p&gt;

&lt;p&gt;A practical migration process is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export the existing collection.&lt;/li&gt;
&lt;li&gt;Import it into Bruno.&lt;/li&gt;
&lt;li&gt;Verify environment variables and authentication.&lt;/li&gt;
&lt;li&gt;Review scripts and tests.&lt;/li&gt;
&lt;li&gt;Store the new collection inside the project repository.&lt;/li&gt;
&lt;li&gt;Commit it to Git.&lt;/li&gt;
&lt;li&gt;Add CLI execution to CI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some tool-specific scripts may require adjustment, but importing provides a useful starting point.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Documentation Inside the Collection
&lt;/h2&gt;

&lt;p&gt;Bruno supports Markdown documentation at different levels, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workspace&lt;/li&gt;
&lt;li&gt;Collection&lt;/li&gt;
&lt;li&gt;Folder&lt;/li&gt;
&lt;li&gt;Request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can document an authentication folder with information such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Authentication&lt;/span&gt;

All protected endpoints require a bearer token.

&lt;span class="gu"&gt;## Login&lt;/span&gt;

Send the user's email and password to &lt;span class="sb"&gt;`/api/login`&lt;/span&gt;.

The response contains an access token that should be included in the
&lt;span class="sb"&gt;`Authorization`&lt;/span&gt; header for future requests.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documentation stays close to the executable requests.&lt;/p&gt;

&lt;p&gt;When an endpoint changes, developers can update the request, tests, and explanation together.&lt;/p&gt;

&lt;p&gt;Bruno can also generate standalone HTML documentation from collections, making it possible to publish readable API references without maintaining a completely separate source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bruno 4 and AI Assistance
&lt;/h2&gt;

&lt;p&gt;Bruno 4.0 introduced Bring Your Own Key AI capabilities.&lt;/p&gt;

&lt;p&gt;Instead of forcing developers to use a fixed AI provider, Bruno supports OpenAI-compatible providers and custom model configurations.&lt;/p&gt;

&lt;p&gt;Its AI features can assist with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing request documentation&lt;/li&gt;
&lt;li&gt;Generating scripts&lt;/li&gt;
&lt;li&gt;Creating response tests&lt;/li&gt;
&lt;li&gt;Reviewing changes&lt;/li&gt;
&lt;li&gt;Working with the active request or collection&lt;/li&gt;
&lt;li&gt;Providing scripting autocomplete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Bring Your Own Key approach gives developers more control over the provider, model, and credentials they use.&lt;/p&gt;

&lt;p&gt;Bruno also includes security controls that explain what context is shared with the selected AI provider.&lt;/p&gt;

&lt;p&gt;AI assistance is most useful here when it improves the files developers already own instead of moving their entire API workflow into another closed platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Bruno Fits Best
&lt;/h2&gt;

&lt;p&gt;Bruno is particularly suitable for teams that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Already use Git for collaboration&lt;/li&gt;
&lt;li&gt;Want collections stored beside application code&lt;/li&gt;
&lt;li&gt;Prefer local-first development tools&lt;/li&gt;
&lt;li&gt;Need readable API request files&lt;/li&gt;
&lt;li&gt;Want API tests inside CI pipelines&lt;/li&gt;
&lt;li&gt;Work with private or internal APIs&lt;/li&gt;
&lt;li&gt;Want to avoid mandatory cloud accounts&lt;/li&gt;
&lt;li&gt;Need an open-source API client&lt;/li&gt;
&lt;li&gt;Use coding agents or IDE-based workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is also a strong option for solo developers because collections can be backed up and shared through any Git repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things to Consider
&lt;/h2&gt;

&lt;p&gt;Bruno's workflow may feel different if your team is accustomed to browser-based collaboration.&lt;/p&gt;

&lt;p&gt;Git-based collaboration assumes that team members understand concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repositories&lt;/li&gt;
&lt;li&gt;Commits&lt;/li&gt;
&lt;li&gt;Branches&lt;/li&gt;
&lt;li&gt;Pull requests&lt;/li&gt;
&lt;li&gt;Merge conflicts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is usually not a major issue for engineering teams, but it can require onboarding for non-technical users.&lt;/p&gt;

&lt;p&gt;Some advanced Git interface features and team capabilities are also associated with paid Bruno editions. You should compare the current editions before standardizing it across a larger organization.&lt;/p&gt;

&lt;p&gt;The core open-source workflow, however, remains highly useful for individual developers and technical teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bruno vs Traditional Cloud-Based API Clients
&lt;/h2&gt;

&lt;p&gt;The main difference is not the request editor.&lt;/p&gt;

&lt;p&gt;Most established API clients can send requests, manage environments, and execute tests.&lt;/p&gt;

&lt;p&gt;The important difference is ownership and workflow.&lt;/p&gt;

&lt;p&gt;A traditional cloud-based workflow often looks 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;Application code -&amp;gt; Git repository
API collection -&amp;gt; External platform
Documentation -&amp;gt; Another platform
Automated tests -&amp;gt; Separate test suite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Bruno-based workflow can look 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;Application code -&amp;gt; Git repository
API collection -&amp;gt; Same Git repository
API documentation -&amp;gt; Same collection
API tests -&amp;gt; Same collection
CI execution -&amp;gt; Bruno CLI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does not eliminate every tool, but it reduces fragmentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Project Structure
&lt;/h2&gt;

&lt;p&gt;For a Laravel API, I would organize the project 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;inventory-platform/
├── app/
├── database/
├── routes/
├── tests/
├── bruno/
│   ├── authentication/
│   │   ├── login.bru
│   │   ├── logout.bru
│   │   └── current-user.bru
│   ├── products/
│   │   ├── list-products.bru
│   │   ├── create-product.bru
│   │   └── update-product.bru
│   ├── orders/
│   │   ├── create-order.bru
│   │   └── get-order.bru
│   ├── environments/
│   ├── collection.bru
│   └── bruno.json
├── composer.json
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each backend feature should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its implementation&lt;/li&gt;
&lt;li&gt;Automated application tests&lt;/li&gt;
&lt;li&gt;Bruno requests&lt;/li&gt;
&lt;li&gt;Bruno response tests&lt;/li&gt;
&lt;li&gt;Relevant API documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A feature is not complete until its executable API examples are updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Bruno is not interesting simply because it is another API client.&lt;/p&gt;

&lt;p&gt;It is interesting because it treats API collections as part of the codebase.&lt;/p&gt;

&lt;p&gt;Collections can be stored locally, reviewed through Git, executed through the command line, validated in CI, and edited with normal developer tools.&lt;/p&gt;

&lt;p&gt;That makes the API workflow easier to own and maintain.&lt;/p&gt;

&lt;p&gt;For developers who value local tools, open-source software, readable files, and Git-based collaboration, Bruno is worth testing on a real project.&lt;/p&gt;

&lt;p&gt;You can explore it at &lt;a href="https://www.usebruno.com/" rel="noopener noreferrer"&gt;usebruno.com&lt;/a&gt; and keep your first collection inside your next API repository.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>testing</category>
      <category>productivity</category>
      <category>api</category>
    </item>
    <item>
      <title>React Native vs Flutter in 2026: Which One Should You Choose?</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 28 Jul 2026 14:50:16 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/react-native-vs-flutter-in-2026-which-one-should-you-choose-18fg</link>
      <guid>https://dev.to/moniruzzamansaikat/react-native-vs-flutter-in-2026-which-one-should-you-choose-18fg</guid>
      <description>&lt;p&gt;Every year someone declares a winner in the React Native vs Flutter debate.&lt;/p&gt;

&lt;p&gt;The reality is much simpler.&lt;/p&gt;

&lt;p&gt;Neither framework is universally better. The right choice depends on your team, product, timeline, and long term goals.&lt;/p&gt;

&lt;p&gt;After watching both ecosystems evolve, here is how I think about choosing between them in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native
&lt;/h2&gt;

&lt;p&gt;React Native lets you build mobile applications using JavaScript or TypeScript with React.&lt;/p&gt;

&lt;p&gt;If your team already builds web applications with React, the learning curve is relatively small.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Excellent for React developers&lt;/li&gt;
&lt;li&gt;Large ecosystem and community&lt;/li&gt;
&lt;li&gt;Strong third party library support&lt;/li&gt;
&lt;li&gt;Easier code sharing between web and mobile&lt;/li&gt;
&lt;li&gt;Huge hiring pool&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Native modules are sometimes required&lt;/li&gt;
&lt;li&gt;Performance can require additional optimization&lt;/li&gt;
&lt;li&gt;Dependency compatibility occasionally becomes frustrating&lt;/li&gt;
&lt;li&gt;Platform specific issues still exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React Native is often the fastest path if your company already has experienced React engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flutter
&lt;/h2&gt;

&lt;p&gt;Flutter uses Dart and renders its own UI instead of relying on native platform widgets.&lt;/p&gt;

&lt;p&gt;That gives developers remarkable control over the user interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Beautiful and consistent UI&lt;/li&gt;
&lt;li&gt;Excellent animation support&lt;/li&gt;
&lt;li&gt;High performance&lt;/li&gt;
&lt;li&gt;Great developer tooling&lt;/li&gt;
&lt;li&gt;Predictable rendering across Android and iOS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requires learning Dart&lt;/li&gt;
&lt;li&gt;Larger application size&lt;/li&gt;
&lt;li&gt;Smaller talent pool compared to React&lt;/li&gt;
&lt;li&gt;Less code sharing with existing React web applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flutter shines when UI quality and consistency are top priorities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;For most business applications, users will not notice a meaningful difference.&lt;/p&gt;

&lt;p&gt;Modern versions of both frameworks perform extremely well.&lt;/p&gt;

&lt;p&gt;Performance only becomes a deciding factor for applications with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex animations&lt;/li&gt;
&lt;li&gt;Heavy graphics&lt;/li&gt;
&lt;li&gt;Real time visual rendering&lt;/li&gt;
&lt;li&gt;Large interactive interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even then, architecture matters more than the framework itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Experience
&lt;/h2&gt;

&lt;p&gt;React Native feels familiar if you already know JavaScript.&lt;/p&gt;

&lt;p&gt;Flutter feels surprisingly productive once you become comfortable with Dart.&lt;/p&gt;

&lt;p&gt;Both provide excellent hot reload capabilities, making development much faster than traditional native development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community
&lt;/h2&gt;

&lt;p&gt;React Native has years of maturity and an enormous ecosystem.&lt;/p&gt;

&lt;p&gt;Flutter continues to grow rapidly with excellent documentation and an active community.&lt;/p&gt;

&lt;p&gt;Finding solutions online is easy with either framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiring Developers
&lt;/h2&gt;

&lt;p&gt;This is where React Native still has an advantage.&lt;/p&gt;

&lt;p&gt;JavaScript is one of the most widely used programming languages, making React Native developers easier to find.&lt;/p&gt;

&lt;p&gt;Flutter developers are becoming more common every year, but experienced engineers are still less abundant in many regions.&lt;/p&gt;

&lt;h2&gt;
  
  
  When I Would Choose React Native
&lt;/h2&gt;

&lt;p&gt;I would choose React Native when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The company already uses React&lt;/li&gt;
&lt;li&gt;Fast hiring is important&lt;/li&gt;
&lt;li&gt;Code sharing with web applications matters&lt;/li&gt;
&lt;li&gt;Existing JavaScript expertise is strong&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When I Would Choose Flutter
&lt;/h2&gt;

&lt;p&gt;I would choose Flutter when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pixel perfect UI is important&lt;/li&gt;
&lt;li&gt;The product relies heavily on animations&lt;/li&gt;
&lt;li&gt;Design consistency matters&lt;/li&gt;
&lt;li&gt;Starting a completely new mobile project&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;Frameworks change.&lt;/p&gt;

&lt;p&gt;Programming languages evolve.&lt;/p&gt;

&lt;p&gt;New tools appear every year.&lt;/p&gt;

&lt;p&gt;The fundamentals remain the same.&lt;/p&gt;

&lt;p&gt;A well designed architecture, clean code, thoughtful testing, and understanding your users will have a far bigger impact than choosing React Native or Flutter.&lt;/p&gt;

&lt;p&gt;The best mobile applications are rarely successful because of the framework they use.&lt;/p&gt;

&lt;p&gt;They succeed because they solve real problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Stop looking for the perfect framework.&lt;/p&gt;

&lt;p&gt;Instead, choose the one that fits your team, your product, and your long term maintenance goals.&lt;/p&gt;

&lt;p&gt;Both React Native and Flutter are capable of building excellent mobile applications in 2026.&lt;/p&gt;

&lt;p&gt;The better choice is the one your team can build, maintain, and improve with confidence.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What would you choose for your next project in 2026? React Native or Flutter?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>flutter</category>
      <category>programming</category>
      <category>mobile</category>
    </item>
    <item>
      <title>The Future of Software Engineering in the Age of AI</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 27 Jul 2026 16:57:39 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/the-future-of-software-engineering-in-the-age-of-ai-1cf8</link>
      <guid>https://dev.to/moniruzzamansaikat/the-future-of-software-engineering-in-the-age-of-ai-1cf8</guid>
      <description>&lt;p&gt;Artificial intelligence is changing software engineering faster than most developers expected.&lt;/p&gt;

&lt;p&gt;AI tools can already generate code, explain unfamiliar repositories, write tests, detect bugs, create documentation, and suggest architectural improvements. This has created an important question for software engineers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should developers learn and plan for if AI can write code?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The future of software engineering is not about competing with AI at typing speed. It is about becoming better at understanding problems, designing systems, validating decisions, and using AI responsibly.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Will Change the Developer Workflow
&lt;/h2&gt;

&lt;p&gt;Traditional software development often follows this process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand the requirement&lt;/li&gt;
&lt;li&gt;Design the solution&lt;/li&gt;
&lt;li&gt;Write the code&lt;/li&gt;
&lt;li&gt;Test the implementation&lt;/li&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Deploy the application&lt;/li&gt;
&lt;li&gt;Maintain the system&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI can assist in almost every step, but assistance is not the same as ownership.&lt;/p&gt;

&lt;p&gt;An AI tool may generate a controller, database migration, API endpoint, React component, or unit test within seconds. However, it does not automatically understand the complete business context, long-term product direction, infrastructure limitations, security requirements, or user expectations.&lt;/p&gt;

&lt;p&gt;The engineer still needs to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether the generated solution is correct&lt;/li&gt;
&lt;li&gt;Whether it follows the existing architecture&lt;/li&gt;
&lt;li&gt;Whether it introduces security risks&lt;/li&gt;
&lt;li&gt;Whether it can scale&lt;/li&gt;
&lt;li&gt;Whether it is maintainable&lt;/li&gt;
&lt;li&gt;Whether it solves the actual business problem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI will reduce repetitive coding, but it will increase the importance of engineering judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding Skills Will Still Matter
&lt;/h2&gt;

&lt;p&gt;Some people believe developers will no longer need to understand programming because AI can generate code.&lt;/p&gt;

&lt;p&gt;That is unlikely.&lt;/p&gt;

&lt;p&gt;Developers who understand programming deeply will use AI more effectively than developers who only know how to request code.&lt;/p&gt;

&lt;p&gt;Without technical knowledge, it becomes difficult to detect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect assumptions&lt;/li&gt;
&lt;li&gt;Hidden performance issues&lt;/li&gt;
&lt;li&gt;Security vulnerabilities&lt;/li&gt;
&lt;li&gt;Poor database queries&lt;/li&gt;
&lt;li&gt;Unnecessary dependencies&lt;/li&gt;
&lt;li&gt;Broken edge cases&lt;/li&gt;
&lt;li&gt;Inconsistent architecture&lt;/li&gt;
&lt;li&gt;Hallucinated libraries or methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A developer should still understand data structures, algorithms, databases, networking, operating systems, debugging, testing, security, and software architecture.&lt;/p&gt;

&lt;p&gt;The difference is that developers may spend less time writing basic boilerplate and more time reviewing, integrating, and improving generated solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Software Engineer Will Become a System Orchestrator
&lt;/h2&gt;

&lt;p&gt;Future software engineers may work more like orchestrators.&lt;/p&gt;

&lt;p&gt;Instead of manually implementing every small function, they may divide a large problem into smaller tasks and use multiple tools or agents to complete them.&lt;/p&gt;

&lt;p&gt;For example, an engineer may ask AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze an existing repository&lt;/li&gt;
&lt;li&gt;Propose a database structure&lt;/li&gt;
&lt;li&gt;Generate an initial implementation&lt;/li&gt;
&lt;li&gt;Write automated tests&lt;/li&gt;
&lt;li&gt;Review the implementation for security issues&lt;/li&gt;
&lt;li&gt;Create API documentation&lt;/li&gt;
&lt;li&gt;Prepare deployment instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The engineer will then review the output, resolve conflicts, test the system, and make the final decisions.&lt;/p&gt;

&lt;p&gt;This requires more than prompt writing. It requires the ability to structure work clearly and evaluate results accurately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Solving Will Be More Valuable Than Syntax
&lt;/h2&gt;

&lt;p&gt;Programming syntax is becoming easier to access.&lt;/p&gt;

&lt;p&gt;A developer can ask AI how to write a loop, create a Laravel relationship, build a React hook, configure Docker, or write a SQL query.&lt;/p&gt;

&lt;p&gt;The more valuable skill is understanding what should be built.&lt;/p&gt;

&lt;p&gt;A strong engineer should be able to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the actual problem?&lt;/li&gt;
&lt;li&gt;Who experiences the problem?&lt;/li&gt;
&lt;li&gt;What are the constraints?&lt;/li&gt;
&lt;li&gt;What is the simplest reliable solution?&lt;/li&gt;
&lt;li&gt;What could fail?&lt;/li&gt;
&lt;li&gt;What data should be stored?&lt;/li&gt;
&lt;li&gt;What should not be stored?&lt;/li&gt;
&lt;li&gt;What are the security risks?&lt;/li&gt;
&lt;li&gt;How will the system be maintained?&lt;/li&gt;
&lt;li&gt;How will success be measured?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can generate several solutions, but the engineer must choose the right one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Architecture Will Become More Important
&lt;/h2&gt;

&lt;p&gt;AI can produce working code that is locally correct but globally inconsistent.&lt;/p&gt;

&lt;p&gt;For example, an AI-generated feature may work in isolation while violating the project's architectural standards. It may duplicate existing services, bypass authorization rules, introduce tight coupling, or create unnecessary database queries.&lt;/p&gt;

&lt;p&gt;Future engineers will need strong architectural awareness.&lt;/p&gt;

&lt;p&gt;Important areas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular design&lt;/li&gt;
&lt;li&gt;Separation of concerns&lt;/li&gt;
&lt;li&gt;Domain modeling&lt;/li&gt;
&lt;li&gt;API design&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Caching strategies&lt;/li&gt;
&lt;li&gt;Event-driven systems&lt;/li&gt;
&lt;li&gt;Distributed systems&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to understand the whole system will become more valuable than the ability to generate individual files quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Review Will Become a Core Skill
&lt;/h2&gt;

&lt;p&gt;As AI-generated code increases, code review will become one of the most important engineering activities.&lt;/p&gt;

&lt;p&gt;Developers will need to review code for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functional correctness&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Readability&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;li&gt;Test coverage&lt;/li&gt;
&lt;li&gt;Architectural consistency&lt;/li&gt;
&lt;li&gt;Compliance requirements&lt;/li&gt;
&lt;li&gt;Unexpected side effects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can also assist with code review, but human accountability remains necessary.&lt;/p&gt;

&lt;p&gt;A useful future workflow may include multiple review stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI generates the initial code&lt;/li&gt;
&lt;li&gt;AI performs a first review&lt;/li&gt;
&lt;li&gt;Automated tests and static analysis run&lt;/li&gt;
&lt;li&gt;A developer reviews the implementation&lt;/li&gt;
&lt;li&gt;The feature is tested against real requirements&lt;/li&gt;
&lt;li&gt;The final change is approved&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The engineer becomes responsible for validating machine-generated work rather than trusting it automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Will Be More Important, Not Less
&lt;/h2&gt;

&lt;p&gt;AI can generate code quickly, which means teams may produce more code in less time.&lt;/p&gt;

&lt;p&gt;More code also creates more opportunities for defects.&lt;/p&gt;

&lt;p&gt;Testing must remain a major part of the development process.&lt;/p&gt;

&lt;p&gt;Future engineers should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit testing&lt;/li&gt;
&lt;li&gt;Integration testing&lt;/li&gt;
&lt;li&gt;End-to-end testing&lt;/li&gt;
&lt;li&gt;Contract testing&lt;/li&gt;
&lt;li&gt;Load testing&lt;/li&gt;
&lt;li&gt;Security testing&lt;/li&gt;
&lt;li&gt;Regression testing&lt;/li&gt;
&lt;li&gt;Property-based testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help create test cases, but developers must ensure the tests represent meaningful behavior.&lt;/p&gt;

&lt;p&gt;A generated test may confirm that the code behaves exactly as written while failing to verify whether the business requirement is correct.&lt;/p&gt;

&lt;p&gt;The best engineers will use AI to increase test coverage without replacing critical thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Knowledge Will Become Essential
&lt;/h2&gt;

&lt;p&gt;AI-generated code can contain vulnerabilities.&lt;/p&gt;

&lt;p&gt;It may create unsafe queries, expose sensitive information, use insecure authentication patterns, mishandle file uploads, or depend on outdated packages.&lt;/p&gt;

&lt;p&gt;Software engineers need to understand common security risks, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL injection&lt;/li&gt;
&lt;li&gt;Cross-site scripting&lt;/li&gt;
&lt;li&gt;Cross-site request forgery&lt;/li&gt;
&lt;li&gt;Broken access control&lt;/li&gt;
&lt;li&gt;Insecure direct object references&lt;/li&gt;
&lt;li&gt;Authentication weaknesses&lt;/li&gt;
&lt;li&gt;Secrets exposure&lt;/li&gt;
&lt;li&gt;Dependency vulnerabilities&lt;/li&gt;
&lt;li&gt;Unsafe deserialization&lt;/li&gt;
&lt;li&gt;Server-side request forgery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers must treat AI-generated code as untrusted until it has been reviewed and tested.&lt;/p&gt;

&lt;p&gt;Security cannot be delegated completely to an AI assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain Knowledge Will Differentiate Engineers
&lt;/h2&gt;

&lt;p&gt;Generic coding knowledge is widely available through AI tools.&lt;/p&gt;

&lt;p&gt;Domain knowledge is harder to replace.&lt;/p&gt;

&lt;p&gt;An engineer who understands healthcare, finance, logistics, education, e-commerce, legal operations, manufacturing, or another specialized industry can make better product decisions.&lt;/p&gt;

&lt;p&gt;Domain knowledge helps engineers understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real user workflows&lt;/li&gt;
&lt;li&gt;Industry terminology&lt;/li&gt;
&lt;li&gt;Regulatory requirements&lt;/li&gt;
&lt;li&gt;Operational risks&lt;/li&gt;
&lt;li&gt;Common exceptions&lt;/li&gt;
&lt;li&gt;Data sensitivity&lt;/li&gt;
&lt;li&gt;Business priorities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A developer who understands both technology and the business domain will remain highly valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Communication Skills Will Matter More
&lt;/h2&gt;

&lt;p&gt;Software engineering has never been only about code.&lt;/p&gt;

&lt;p&gt;Engineers communicate with clients, product managers, designers, testers, support teams, infrastructure teams, and other developers.&lt;/p&gt;

&lt;p&gt;As AI handles more implementation work, human communication becomes even more important.&lt;/p&gt;

&lt;p&gt;Future engineers should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask clear questions&lt;/li&gt;
&lt;li&gt;Challenge unclear requirements&lt;/li&gt;
&lt;li&gt;Explain technical decisions&lt;/li&gt;
&lt;li&gt;Document assumptions&lt;/li&gt;
&lt;li&gt;Describe risks&lt;/li&gt;
&lt;li&gt;Present tradeoffs&lt;/li&gt;
&lt;li&gt;Write useful specifications&lt;/li&gt;
&lt;li&gt;Give and receive feedback&lt;/li&gt;
&lt;li&gt;Coordinate across teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear communication also improves AI output. A vague requirement usually produces a vague implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developers Should Learn How to Work With AI Tools
&lt;/h2&gt;

&lt;p&gt;AI-assisted development should become a practical engineering skill.&lt;/p&gt;

&lt;p&gt;Developers should learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide relevant project context&lt;/li&gt;
&lt;li&gt;Break large tasks into smaller steps&lt;/li&gt;
&lt;li&gt;Define clear constraints&lt;/li&gt;
&lt;li&gt;Request explanations before implementation&lt;/li&gt;
&lt;li&gt;Ask for multiple solution options&lt;/li&gt;
&lt;li&gt;Generate and review tests&lt;/li&gt;
&lt;li&gt;Compare architectural approaches&lt;/li&gt;
&lt;li&gt;Verify generated APIs and libraries&lt;/li&gt;
&lt;li&gt;Request security reviews&lt;/li&gt;
&lt;li&gt;Use repository-level coding agents safely&lt;/li&gt;
&lt;li&gt;Control which files an agent can modify&lt;/li&gt;
&lt;li&gt;Review changes before committing them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to accept every generated answer. The goal is to use AI as a productive collaborator while maintaining control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt Engineering Alone Is Not a Career Plan
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is useful, but it is not enough by itself.&lt;/p&gt;

&lt;p&gt;Good prompts depend on good thinking.&lt;/p&gt;

&lt;p&gt;A developer needs technical understanding to provide the correct context, identify missing information, define constraints, and evaluate the output.&lt;/p&gt;

&lt;p&gt;Instead of focusing only on prompt tricks, engineers should improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Technical fundamentals&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Product thinking&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Domain expertise&lt;/li&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompting is one part of the process, not the entire profession.&lt;/p&gt;

&lt;h2&gt;
  
  
  Junior Developer Roles Will Change
&lt;/h2&gt;

&lt;p&gt;AI may affect junior developers more quickly because many entry-level tasks involve repetitive implementation.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating CRUD modules&lt;/li&gt;
&lt;li&gt;Writing basic tests&lt;/li&gt;
&lt;li&gt;Fixing simple bugs&lt;/li&gt;
&lt;li&gt;Creating documentation&lt;/li&gt;
&lt;li&gt;Converting designs into components&lt;/li&gt;
&lt;li&gt;Writing database migrations&lt;/li&gt;
&lt;li&gt;Building standard API endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks will not disappear completely, but teams may expect junior developers to complete them faster with AI assistance.&lt;/p&gt;

&lt;p&gt;Junior engineers should focus on understanding why the code works.&lt;/p&gt;

&lt;p&gt;They should practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading existing codebases&lt;/li&gt;
&lt;li&gt;Debugging without blindly copying solutions&lt;/li&gt;
&lt;li&gt;Writing tests&lt;/li&gt;
&lt;li&gt;Understanding database behavior&lt;/li&gt;
&lt;li&gt;Learning version control&lt;/li&gt;
&lt;li&gt;Reviewing AI-generated code&lt;/li&gt;
&lt;li&gt;Explaining their decisions&lt;/li&gt;
&lt;li&gt;Building complete projects&lt;/li&gt;
&lt;li&gt;Deploying and maintaining applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to learn and reason will matter more than memorizing syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Senior Engineers Will Also Need to Adapt
&lt;/h2&gt;

&lt;p&gt;Senior engineers are not automatically protected from AI-driven changes.&lt;/p&gt;

&lt;p&gt;A senior developer who refuses to use modern tools may become slower than a less experienced engineer who combines technical knowledge with effective AI usage.&lt;/p&gt;

&lt;p&gt;Senior engineers should learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design AI-assisted development workflows&lt;/li&gt;
&lt;li&gt;Define repository rules&lt;/li&gt;
&lt;li&gt;Review large generated changes&lt;/li&gt;
&lt;li&gt;Protect architectural consistency&lt;/li&gt;
&lt;li&gt;Improve team productivity&lt;/li&gt;
&lt;li&gt;Establish AI security policies&lt;/li&gt;
&lt;li&gt;Select appropriate tools&lt;/li&gt;
&lt;li&gt;Mentor developers in responsible AI usage&lt;/li&gt;
&lt;li&gt;Measure the actual value of AI adoption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Experience remains valuable, but it must be combined with adaptability.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Future Plan for Software Engineers
&lt;/h2&gt;

&lt;p&gt;Software engineers can prepare for the AI-driven future with a structured plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Strengthen the Fundamentals
&lt;/h3&gt;

&lt;p&gt;Learn programming deeply instead of depending entirely on frameworks.&lt;/p&gt;

&lt;p&gt;Focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data structures&lt;/li&gt;
&lt;li&gt;Algorithms&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Operating systems&lt;/li&gt;
&lt;li&gt;Object-oriented programming&lt;/li&gt;
&lt;li&gt;Functional programming concepts&lt;/li&gt;
&lt;li&gt;Concurrency&lt;/li&gt;
&lt;li&gt;Memory management&lt;/li&gt;
&lt;li&gt;Software design principles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frameworks change, but fundamentals remain useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Master One Technical Stack
&lt;/h3&gt;

&lt;p&gt;Avoid learning every new framework at a shallow level.&lt;/p&gt;

&lt;p&gt;Choose one stack and understand it properly.&lt;/p&gt;

&lt;p&gt;Learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project structure&lt;/li&gt;
&lt;li&gt;Dependency management&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Database optimization&lt;/li&gt;
&lt;li&gt;Background jobs&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deep knowledge makes it easier to evaluate AI-generated code.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Learn System Design
&lt;/h3&gt;

&lt;p&gt;Study how complete systems are designed.&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;Database indexing&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;File storage&lt;/li&gt;
&lt;li&gt;Search systems&lt;/li&gt;
&lt;li&gt;Notification systems&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then move toward distributed systems, fault tolerance, scalability, and event-driven architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Build Real Projects
&lt;/h3&gt;

&lt;p&gt;Tutorial projects are useful, but real projects reveal deeper problems.&lt;/p&gt;

&lt;p&gt;Build applications that include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple user roles&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;File uploads&lt;/li&gt;
&lt;li&gt;Background jobs&lt;/li&gt;
&lt;li&gt;Reports&lt;/li&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Audit logs&lt;/li&gt;
&lt;li&gt;Automated tests&lt;/li&gt;
&lt;li&gt;Production deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use AI during development, but review and understand every important decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Improve Debugging Skills
&lt;/h3&gt;

&lt;p&gt;AI can suggest solutions, but debugging still requires investigation.&lt;/p&gt;

&lt;p&gt;Practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading stack traces&lt;/li&gt;
&lt;li&gt;Inspecting logs&lt;/li&gt;
&lt;li&gt;Reproducing bugs&lt;/li&gt;
&lt;li&gt;Isolating variables&lt;/li&gt;
&lt;li&gt;Checking database queries&lt;/li&gt;
&lt;li&gt;Profiling performance&lt;/li&gt;
&lt;li&gt;Using debuggers&lt;/li&gt;
&lt;li&gt;Identifying race conditions&lt;/li&gt;
&lt;li&gt;Testing assumptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A developer who can find the actual cause of a problem will remain valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Learn Security
&lt;/h3&gt;

&lt;p&gt;Security should be part of everyday development.&lt;/p&gt;

&lt;p&gt;Study secure authentication, authorization, input validation, data protection, dependency management, secrets handling, and common web vulnerabilities.&lt;/p&gt;

&lt;p&gt;Review AI-generated code with a security-first mindset.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Learn AI-Assisted Development
&lt;/h3&gt;

&lt;p&gt;Use AI for real engineering tasks.&lt;/p&gt;

&lt;p&gt;Experiment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code generation&lt;/li&gt;
&lt;li&gt;Repository analysis&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Test generation&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Bug investigation&lt;/li&gt;
&lt;li&gt;SQL optimization&lt;/li&gt;
&lt;li&gt;Architecture comparison&lt;/li&gt;
&lt;li&gt;Code review&lt;/li&gt;
&lt;li&gt;Migration planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track which tasks save time and which tasks require more manual correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Develop Product Thinking
&lt;/h3&gt;

&lt;p&gt;Understand how software creates value.&lt;/p&gt;

&lt;p&gt;Learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify user pain points&lt;/li&gt;
&lt;li&gt;Prioritize features&lt;/li&gt;
&lt;li&gt;Reduce unnecessary complexity&lt;/li&gt;
&lt;li&gt;Validate ideas&lt;/li&gt;
&lt;li&gt;Measure outcomes&lt;/li&gt;
&lt;li&gt;Balance quality and delivery speed&lt;/li&gt;
&lt;li&gt;Understand business constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The engineer who helps build the right product is more valuable than the engineer who only writes requested code.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Improve Communication
&lt;/h3&gt;

&lt;p&gt;Practice writing technical documentation, architecture notes, issue descriptions, pull request summaries, and project proposals.&lt;/p&gt;

&lt;p&gt;Learn to explain complex topics in simple language.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Build a Public Body of Work
&lt;/h3&gt;

&lt;p&gt;Create evidence of your skills.&lt;/p&gt;

&lt;p&gt;This may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-source contributions&lt;/li&gt;
&lt;li&gt;Technical articles&lt;/li&gt;
&lt;li&gt;Complete GitHub projects&lt;/li&gt;
&lt;li&gt;Architecture case studies&lt;/li&gt;
&lt;li&gt;Performance optimization reports&lt;/li&gt;
&lt;li&gt;Security reviews&lt;/li&gt;
&lt;li&gt;Developer tools&lt;/li&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;Documentation improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strong portfolio should show how you think, not only how much code you can generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills That May Become More Valuable
&lt;/h2&gt;

&lt;p&gt;The following skills are likely to become increasingly important:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Software architecture&lt;/li&gt;
&lt;li&gt;Security engineering&lt;/li&gt;
&lt;li&gt;Cloud infrastructure&lt;/li&gt;
&lt;li&gt;DevOps&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Data engineering&lt;/li&gt;
&lt;li&gt;AI integration&lt;/li&gt;
&lt;li&gt;Model evaluation&lt;/li&gt;
&lt;li&gt;Product engineering&lt;/li&gt;
&lt;li&gt;Technical leadership&lt;/li&gt;
&lt;li&gt;Domain expertise&lt;/li&gt;
&lt;li&gt;Code review&lt;/li&gt;
&lt;li&gt;Testing strategy&lt;/li&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers do not need to master everything. They should combine strong fundamentals with one or two areas of deeper specialization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills That May Become Less Differentiating
&lt;/h2&gt;

&lt;p&gt;Some skills may remain useful while becoming less valuable as standalone abilities.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memorizing syntax&lt;/li&gt;
&lt;li&gt;Writing repetitive boilerplate&lt;/li&gt;
&lt;li&gt;Building basic CRUD systems without deeper logic&lt;/li&gt;
&lt;li&gt;Converting simple designs into static pages&lt;/li&gt;
&lt;li&gt;Writing basic documentation manually&lt;/li&gt;
&lt;li&gt;Creating simple unit tests&lt;/li&gt;
&lt;li&gt;Copying solutions without understanding them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can perform many of these tasks quickly.&lt;/p&gt;

&lt;p&gt;The developer must add value through reasoning, verification, integration, and ownership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will AI Replace Software Engineers?
&lt;/h2&gt;

&lt;p&gt;AI is more likely to replace parts of software engineering work than the entire profession.&lt;/p&gt;

&lt;p&gt;It may reduce the amount of manual effort required for many tasks. It may also allow smaller teams to build larger products.&lt;/p&gt;

&lt;p&gt;However, software projects still require people who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand unclear requirements&lt;/li&gt;
&lt;li&gt;Make technical decisions&lt;/li&gt;
&lt;li&gt;Manage risk&lt;/li&gt;
&lt;li&gt;Protect user data&lt;/li&gt;
&lt;li&gt;Resolve production incidents&lt;/li&gt;
&lt;li&gt;Coordinate teams&lt;/li&gt;
&lt;li&gt;Balance business and engineering priorities&lt;/li&gt;
&lt;li&gt;Take responsibility for outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The role will change, but responsibility will remain human.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Strategy Is Adaptation
&lt;/h2&gt;

&lt;p&gt;Developers should not ignore AI, and they should not depend on it blindly.&lt;/p&gt;

&lt;p&gt;The strongest approach is to combine human judgment with machine speed.&lt;/p&gt;

&lt;p&gt;Use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore ideas faster&lt;/li&gt;
&lt;li&gt;Reduce repetitive work&lt;/li&gt;
&lt;li&gt;Generate initial implementations&lt;/li&gt;
&lt;li&gt;Improve documentation&lt;/li&gt;
&lt;li&gt;Expand test coverage&lt;/li&gt;
&lt;li&gt;Analyze unfamiliar code&lt;/li&gt;
&lt;li&gt;Compare possible solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use engineering knowledge to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the problem&lt;/li&gt;
&lt;li&gt;Select the architecture&lt;/li&gt;
&lt;li&gt;Verify correctness&lt;/li&gt;
&lt;li&gt;Protect security&lt;/li&gt;
&lt;li&gt;Test edge cases&lt;/li&gt;
&lt;li&gt;Maintain quality&lt;/li&gt;
&lt;li&gt;Make final decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future belongs to engineers who can use AI without surrendering their judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Software engineering is entering a new stage.&lt;/p&gt;

&lt;p&gt;Writing code will remain important, but it will no longer be the only defining skill of a developer. The profession will place greater value on problem solving, architecture, testing, security, communication, domain knowledge, and responsible AI usage.&lt;/p&gt;

&lt;p&gt;Developers should not ask whether AI will eliminate software engineering.&lt;/p&gt;

&lt;p&gt;A more useful question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can I become the engineer who knows what to build, how to validate it, and how to use AI to deliver it better?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the future plan worth following.&lt;/p&gt;

</description>
      <category>career</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>From Electron to Native Desktop Apps: How I Rebuilt TimoDesk for macOS and Windows</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Fri, 17 Jul 2026 18:15:44 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/from-electron-to-native-desktop-apps-how-i-rebuilt-timodesk-for-macos-and-windows-fk3</link>
      <guid>https://dev.to/moniruzzamansaikat/from-electron-to-native-desktop-apps-how-i-rebuilt-timodesk-for-macos-and-windows-fk3</guid>
      <description>&lt;p&gt;From Electron to Native Desktop Apps: How I Rebuilt TimoDesk for macOS and Windows&lt;/p&gt;

&lt;p&gt;Over the last month, I have spent most of my time rebuilding TimoDesk.&lt;/p&gt;

&lt;p&gt;This was not a normal update or a small feature release. TimoDesk needed a complete desktop application rewrite.&lt;/p&gt;

&lt;p&gt;The previous application was built with Electron and React. It worked well, but after running for long periods, we faced problems such as higher memory usage, larger application bundles, occasional performance issues, and an experience that did not always feel fully native.&lt;/p&gt;

&lt;p&gt;Because TimoDesk is designed to run silently in the background for many hours, efficiency matters.&lt;/p&gt;

&lt;p&gt;So I made a major decision.&lt;/p&gt;

&lt;p&gt;I rebuilt the macOS application using Swift and the Windows application using .NET WPF.&lt;/p&gt;

&lt;p&gt;Both applications are now in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Was a Big Challenge for Me
&lt;/h2&gt;

&lt;p&gt;Before starting this work, I had never written a single line of Swift in my entire development career.&lt;/p&gt;

&lt;p&gt;I also had no native desktop application running in production.&lt;/p&gt;

&lt;p&gt;My background was mainly in JavaScript. JavaScript was one of my first loves in programming. Over the years, I wrote production applications with React, worked with Vue around 2020 and 2021, used Node.js, and learned enough Electron to understand how desktop applications could be created with web technologies.&lt;/p&gt;

&lt;p&gt;However, knowing how to create a basic Electron application and building a production-grade desktop application are two very different things.&lt;/p&gt;

&lt;p&gt;TimoDesk was my first serious desktop product.&lt;/p&gt;

&lt;p&gt;During the rewrite, I had to learn new technologies, understand operating-system-specific behavior, handle background services, manage performance, and make sure the applications could work reliably for real users.&lt;/p&gt;

&lt;p&gt;I built both native applications myself while working under constant pressure and learning completely new technology stacks at the same time.&lt;/p&gt;

&lt;p&gt;Seeing both applications reach production is a major personal achievement for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What TimoDesk Does
&lt;/h2&gt;

&lt;p&gt;TimoDesk is a complete time tracking and productivity platform for remote teams, companies, agencies, and professionals.&lt;/p&gt;

&lt;p&gt;The desktop application runs in the background and can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track working time&lt;/li&gt;
&lt;li&gt;Record applications used during work&lt;/li&gt;
&lt;li&gt;Track visited URLs&lt;/li&gt;
&lt;li&gt;Capture screenshots at configured intervals&lt;/li&gt;
&lt;li&gt;Synchronize time tracking data with the backend dashboard&lt;/li&gt;
&lt;li&gt;Associate tracked time with projects and tasks&lt;/li&gt;
&lt;li&gt;Operate silently without interrupting the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For organizers, team managers, and company owners, TimoDesk also provides real-time visibility into team activity.&lt;/p&gt;

&lt;p&gt;Managers can view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which team members are currently active&lt;/li&gt;
&lt;li&gt;Who is idle or inactive&lt;/li&gt;
&lt;li&gt;Which task each person is working on&lt;/li&gt;
&lt;li&gt;Current project activity&lt;/li&gt;
&lt;li&gt;Logged time and productivity information&lt;/li&gt;
&lt;li&gt;Periodic screenshots and application usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also provide browser extensions for Chrome and Mozilla Firefox. These extensions help connect browser activity with the broader TimoDesk productivity system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Moved Away from Electron
&lt;/h2&gt;

&lt;p&gt;Electron helped us build the original version quickly because it allowed us to use JavaScript and React.&lt;/p&gt;

&lt;p&gt;For many applications, Electron is still a practical choice. However, TimoDesk has requirements that make native development especially valuable.&lt;/p&gt;

&lt;p&gt;A time tracking application may remain active for an entire working day. It continuously handles timers, background synchronization, application monitoring, URL tracking, screenshots, and local system events.&lt;/p&gt;

&lt;p&gt;Over long working sessions, every unnecessary resource matters.&lt;/p&gt;

&lt;p&gt;The Electron version performed well in many situations, but we also experienced challenges such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher memory consumption&lt;/li&gt;
&lt;li&gt;Larger installation packages&lt;/li&gt;
&lt;li&gt;Resource pressure during long sessions&lt;/li&gt;
&lt;li&gt;Less direct operating system integration&lt;/li&gt;
&lt;li&gt;An interface that did not always feel completely native&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The native rewrite gives us greater control over performance, background processing, memory usage, system permissions, and operating system integration.&lt;/p&gt;

&lt;p&gt;The goal is to make TimoDesk lightweight, reliable, efficient, and closely connected to the operating system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the macOS Version with Swift
&lt;/h2&gt;

&lt;p&gt;The macOS version was developed using Swift.&lt;/p&gt;

&lt;p&gt;This was one of the most challenging parts of the project because Swift was completely new to me.&lt;/p&gt;

&lt;p&gt;I had to learn how macOS handles permissions, application monitoring, screenshots, background tasks, local storage, synchronization, system events, and user interface behavior.&lt;/p&gt;

&lt;p&gt;macOS has strict privacy and security requirements, especially for applications that interact with screen recording, accessibility features, and application activity.&lt;/p&gt;

&lt;p&gt;Building these features properly required more than simply translating JavaScript code into Swift. I had to redesign many parts of the application around the macOS environment.&lt;/p&gt;

&lt;p&gt;The result is a native application that feels more closely integrated with macOS and gives us a stronger foundation for future development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Windows Version with .NET WPF
&lt;/h2&gt;

&lt;p&gt;For Windows, I rebuilt TimoDesk using .NET and WPF.&lt;/p&gt;

&lt;p&gt;The Windows application needed to handle many of the same responsibilities as the macOS application, but Windows has its own APIs, lifecycle behavior, installation requirements, background processes, permissions, and system-level challenges.&lt;/p&gt;

&lt;p&gt;The WPF version gives us greater access to the Windows environment and allows us to optimize the experience specifically for Windows users.&lt;/p&gt;

&lt;p&gt;Instead of maintaining one general desktop application for every operating system, we can now improve each version based on the strengths and behavior of its platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux May Be Next
&lt;/h2&gt;

&lt;p&gt;I am also considering building a native Linux version.&lt;/p&gt;

&lt;p&gt;The long-term goal is to make TimoDesk highly efficient across all major operating systems.&lt;/p&gt;

&lt;p&gt;Linux presents its own challenges because desktop environments, display systems, permissions, and application packaging can vary significantly.&lt;/p&gt;

&lt;p&gt;However, a native Linux version would allow TimoDesk to serve more developers, technical teams, remote companies, and organizations that rely heavily on Linux workstations.&lt;/p&gt;

&lt;h2&gt;
  
  
  TimoDesk Is Becoming More Than a Time Tracker
&lt;/h2&gt;

&lt;p&gt;Time tracking is only one part of the larger vision.&lt;/p&gt;

&lt;p&gt;We are building TimoDesk as a complete work operating system for remote teams.&lt;/p&gt;

&lt;p&gt;Our team is actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project management&lt;/li&gt;
&lt;li&gt;Task management&lt;/li&gt;
&lt;li&gt;Payroll management&lt;/li&gt;
&lt;li&gt;Remote team operations&lt;/li&gt;
&lt;li&gt;Productivity analytics&lt;/li&gt;
&lt;li&gt;Mobile applications&lt;/li&gt;
&lt;li&gt;AI-powered recommendations&lt;/li&gt;
&lt;li&gt;Cost and performance insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is simple: teams should not need to move between many disconnected platforms to manage their daily work.&lt;/p&gt;

&lt;p&gt;A company should be able to manage projects, assign tasks, track time, monitor productivity, calculate payroll, review team performance, and communicate important work information from one connected system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile Applications Are Also Coming
&lt;/h2&gt;

&lt;p&gt;We are also developing mobile applications for TimoDesk.&lt;/p&gt;

&lt;p&gt;The mobile application will make it easier for users and managers to stay connected to their work from anywhere.&lt;/p&gt;

&lt;p&gt;Managers will be able to review team activity, tracked hours, projects, tasks, notifications, and productivity information without always opening the web dashboard.&lt;/p&gt;

&lt;p&gt;The mobile experience is an important part of making TimoDesk a complete work solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Features for Better Productivity
&lt;/h2&gt;

&lt;p&gt;We are also working on AI-powered features.&lt;/p&gt;

&lt;p&gt;The purpose of these features is not simply to add AI because it is popular. The goal is to use existing work data to generate useful recommendations.&lt;/p&gt;

&lt;p&gt;Based on how teams already use TimoDesk, the platform may be able to suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better task allocation&lt;/li&gt;
&lt;li&gt;More accurate project estimates&lt;/li&gt;
&lt;li&gt;Productivity improvements&lt;/li&gt;
&lt;li&gt;Potential workflow problems&lt;/li&gt;
&lt;li&gt;Time-consuming activities&lt;/li&gt;
&lt;li&gt;Opportunities to reduce project costs&lt;/li&gt;
&lt;li&gt;Work patterns that may affect delivery&lt;/li&gt;
&lt;li&gt;Better planning for future projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is to help teams make better decisions using the work information they already generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This project reminded me that developers should not be limited by the technologies they already know.&lt;/p&gt;

&lt;p&gt;A month ago, Swift was completely unfamiliar to me.&lt;/p&gt;

&lt;p&gt;Today, I have a native macOS application written in Swift and a Windows application written in .NET WPF running in production.&lt;/p&gt;

&lt;p&gt;The process was difficult. There were bugs, pressure, unfamiliar APIs, operating system restrictions, and many moments where the next step was not obvious.&lt;/p&gt;

&lt;p&gt;But production software is often built that way.&lt;/p&gt;

&lt;p&gt;You learn, solve one problem at a time, test constantly, and continue until the product becomes real.&lt;/p&gt;

&lt;p&gt;This experience gave me more confidence in my ability to move beyond web development and build deeper, system-level software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try TimoDesk
&lt;/h2&gt;

&lt;p&gt;TimoDesk is built for remote teams, agencies, companies, and professionals who need better visibility into projects, time, and productivity.&lt;/p&gt;

&lt;p&gt;You can use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track project time&lt;/li&gt;
&lt;li&gt;Monitor productivity&lt;/li&gt;
&lt;li&gt;Review application and URL usage&lt;/li&gt;
&lt;li&gt;Capture periodic screenshots&lt;/li&gt;
&lt;li&gt;Manage remote team activity&lt;/li&gt;
&lt;li&gt;Understand how working hours are spent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can explore TimoDesk at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://timodesk.com" rel="noopener noreferrer"&gt;https://timodesk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This native rewrite is only the beginning. The next stage is to make TimoDesk faster, smarter, more efficient, and capable of becoming the complete work platform remote teams can rely on every day.&lt;/p&gt;

&lt;p&gt;Here is the clean Markdown version, ready for DEV.to, GitHub, Medium, or any Markdown editor:&lt;/p&gt;

&lt;p&gt;From Electron to Native Desktop Apps: How I Rebuilt TimoDesk for macOS and Windows&lt;br&gt;
Over the last month, I have spent most of my time rebuilding TimoDesk.&lt;/p&gt;

&lt;p&gt;This was not a normal update or a small feature release. TimoDesk needed a complete desktop application rewrite.&lt;/p&gt;

&lt;p&gt;The previous application was built with Electron and React. It worked well, but after running for long periods, we faced problems such as higher memory usage, larger application bundles, occasional performance issues, and an experience that did not always feel fully native.&lt;/p&gt;

&lt;p&gt;Because TimoDesk is designed to run silently in the background for many hours, efficiency matters.&lt;/p&gt;

&lt;p&gt;So I made a major decision.&lt;/p&gt;

&lt;p&gt;I rebuilt the macOS application using Swift and the Windows application using .NET WPF.&lt;/p&gt;

&lt;p&gt;Both applications are now in production.&lt;/p&gt;

&lt;p&gt;Why This Was a Big Challenge for Me&lt;br&gt;
Before starting this work, I had never written a single line of Swift in my entire development career.&lt;/p&gt;

&lt;p&gt;I also had no native desktop application running in production.&lt;/p&gt;

&lt;p&gt;My background was mainly in JavaScript. JavaScript was one of my first loves in programming. Over the years, I wrote production applications with React, worked with Vue around 2020 and 2021, used Node.js, and learned enough Electron to understand how desktop applications could be created with web technologies.&lt;/p&gt;

&lt;p&gt;However, knowing how to create a basic Electron application and building a production-grade desktop application are two very different things.&lt;/p&gt;

&lt;p&gt;TimoDesk was my first serious desktop product.&lt;/p&gt;

&lt;p&gt;During the rewrite, I had to learn new technologies, understand operating-system-specific behavior, handle background services, manage performance, and make sure the applications could work reliably for real users.&lt;/p&gt;

&lt;p&gt;I built both native applications myself while working under constant pressure and learning completely new technology stacks at the same time.&lt;/p&gt;

&lt;p&gt;Seeing both applications reach production is a major personal achievement for me.&lt;/p&gt;

&lt;p&gt;What TimoDesk Does&lt;br&gt;
TimoDesk is a complete time tracking and productivity platform for remote teams, companies, agencies, and professionals.&lt;/p&gt;

&lt;p&gt;The desktop application runs in the background and can:&lt;/p&gt;

&lt;p&gt;Track working time&lt;/p&gt;

&lt;p&gt;Record applications used during work&lt;/p&gt;

&lt;p&gt;Track visited URLs&lt;/p&gt;

&lt;p&gt;Capture screenshots at configured intervals&lt;/p&gt;

&lt;p&gt;Synchronize time-tracking data with the backend dashboard&lt;/p&gt;

&lt;p&gt;Associate tracked time with projects and tasks&lt;/p&gt;

&lt;p&gt;Operate silently without interrupting the user&lt;/p&gt;

&lt;p&gt;For organizers, team managers, and company owners, TimoDesk also provides real-time visibility into team activity.&lt;/p&gt;

&lt;p&gt;Managers can view:&lt;/p&gt;

&lt;p&gt;Which team members are currently active&lt;/p&gt;

&lt;p&gt;Who is idle or inactive&lt;/p&gt;

&lt;p&gt;Which task each person is working on&lt;/p&gt;

&lt;p&gt;Current project activity&lt;/p&gt;

&lt;p&gt;Logged time and productivity information&lt;/p&gt;

&lt;p&gt;Periodic screenshots and application usage&lt;/p&gt;

&lt;p&gt;We also provide browser extensions for Chrome and Mozilla Firefox. These extensions help connect browser activity with the broader TimoDesk productivity system.&lt;/p&gt;

&lt;p&gt;Why We Moved Away from Electron&lt;br&gt;
Electron helped us build the original version quickly because it allowed us to use JavaScript and React.&lt;/p&gt;

&lt;p&gt;For many applications, Electron is still a practical choice. However, TimoDesk has requirements that make native development especially valuable.&lt;/p&gt;

&lt;p&gt;A time-tracking application may remain active for an entire working day. It continuously handles timers, background synchronization, application monitoring, URL tracking, screenshots, and local system events.&lt;/p&gt;

&lt;p&gt;Over long working sessions, every unnecessary resource matters.&lt;/p&gt;

&lt;p&gt;The Electron version performed well in many situations, but we also experienced challenges such as:&lt;/p&gt;

&lt;p&gt;Higher memory consumption&lt;/p&gt;

&lt;p&gt;Larger installation packages&lt;/p&gt;

&lt;p&gt;Resource pressure during long sessions&lt;/p&gt;

&lt;p&gt;Less direct operating system integration&lt;/p&gt;

&lt;p&gt;An interface that did not always feel completely native&lt;/p&gt;

&lt;p&gt;The native rewrite gives us greater control over performance, background processing, memory usage, system permissions, and operating system integration.&lt;/p&gt;

&lt;p&gt;The goal is to make TimoDesk lightweight, reliable, efficient, and closely connected to the operating system.&lt;/p&gt;

&lt;p&gt;Building the macOS Version with Swift&lt;br&gt;
The macOS version was developed using Swift.&lt;/p&gt;

&lt;p&gt;This was one of the most challenging parts of the project because Swift was completely new to me.&lt;/p&gt;

&lt;p&gt;I had to learn how macOS handles permissions, application monitoring, screenshots, background tasks, local storage, synchronization, system events, and user interface behavior.&lt;/p&gt;

&lt;p&gt;macOS has strict privacy and security requirements, especially for applications that interact with screen recording, accessibility features, and application activity.&lt;/p&gt;

&lt;p&gt;Building these features properly required more than simply translating JavaScript code into Swift. I had to redesign many parts of the application around the macOS environment.&lt;/p&gt;

&lt;p&gt;The result is a native application that feels more closely integrated with macOS and gives us a stronger foundation for future development.&lt;/p&gt;

&lt;p&gt;Building the Windows Version with .NET WPF&lt;br&gt;
For Windows, I rebuilt TimoDesk using .NET and WPF.&lt;/p&gt;

&lt;p&gt;The Windows application needed to handle many of the same responsibilities as the macOS application, but Windows has its own APIs, lifecycle behavior, installation requirements, background processes, permissions, and system-level challenges.&lt;/p&gt;

&lt;p&gt;The WPF version gives us greater access to the Windows environment and allows us to optimize the experience specifically for Windows users.&lt;/p&gt;

&lt;p&gt;Instead of maintaining one general desktop application for every operating system, we can now improve each version based on the strengths and behavior of its platform.&lt;/p&gt;

&lt;p&gt;Linux May Be Next&lt;br&gt;
I am also considering building a native Linux version.&lt;/p&gt;

&lt;p&gt;The long-term goal is to make TimoDesk highly efficient across all major operating systems.&lt;/p&gt;

&lt;p&gt;Linux presents its own challenges because desktop environments, display systems, permissions, and application packaging can vary significantly.&lt;/p&gt;

&lt;p&gt;However, a native Linux version would allow TimoDesk to serve more developers, technical teams, remote companies, and organizations that rely heavily on Linux workstations.&lt;/p&gt;

&lt;p&gt;TimoDesk Is Becoming More Than a Time Tracker&lt;br&gt;
Time tracking is only one part of the larger vision.&lt;/p&gt;

&lt;p&gt;We are building TimoDesk as a complete work operating system for remote teams.&lt;/p&gt;

&lt;p&gt;Our team is actively working on:&lt;/p&gt;

&lt;p&gt;Project management&lt;/p&gt;

&lt;p&gt;Task management&lt;/p&gt;

&lt;p&gt;Payroll management&lt;/p&gt;

&lt;p&gt;Remote team operations&lt;/p&gt;

&lt;p&gt;Productivity analytics&lt;/p&gt;

&lt;p&gt;Mobile applications&lt;/p&gt;

&lt;p&gt;AI-powered recommendations&lt;/p&gt;

&lt;p&gt;Cost and performance insights&lt;/p&gt;

&lt;p&gt;The objective is simple: teams should not need to move between many disconnected platforms to manage their daily work.&lt;/p&gt;

&lt;p&gt;A company should be able to manage projects, assign tasks, track time, monitor productivity, calculate payroll, review team performance, and communicate important work information from one connected system.&lt;/p&gt;

&lt;p&gt;Mobile Applications Are Also Coming&lt;br&gt;
We are also developing mobile applications for TimoDesk.&lt;/p&gt;

&lt;p&gt;The mobile application will make it easier for users and managers to stay connected to their work from anywhere.&lt;/p&gt;

&lt;p&gt;Managers will be able to review team activity, tracked hours, projects, tasks, notifications, and productivity information without always opening the web dashboard.&lt;/p&gt;

&lt;p&gt;The mobile experience is an important part of making TimoDesk a complete work solution.&lt;/p&gt;

&lt;p&gt;AI Features for Better Productivity&lt;br&gt;
We are also working on AI-powered features.&lt;/p&gt;

&lt;p&gt;The purpose of these features is not simply to add AI because it is popular. The goal is to use existing work data to generate useful recommendations.&lt;/p&gt;

&lt;p&gt;Based on how teams already use TimoDesk, the platform may be able to suggest:&lt;/p&gt;

&lt;p&gt;Better task allocation&lt;/p&gt;

&lt;p&gt;More accurate project estimates&lt;/p&gt;

&lt;p&gt;Productivity improvements&lt;/p&gt;

&lt;p&gt;Potential workflow problems&lt;/p&gt;

&lt;p&gt;Time-consuming activities&lt;/p&gt;

&lt;p&gt;Opportunities to reduce project costs&lt;/p&gt;

&lt;p&gt;Work patterns that may affect delivery&lt;/p&gt;

&lt;p&gt;Better planning for future projects&lt;/p&gt;

&lt;p&gt;The idea is to help teams make better decisions using the work information they already generate.&lt;/p&gt;

&lt;p&gt;What I Learned&lt;br&gt;
This project reminded me that developers should not be limited by the technologies they already know.&lt;/p&gt;

&lt;p&gt;A month ago, Swift was completely unfamiliar to me.&lt;/p&gt;

&lt;p&gt;Today, I have a native macOS application written in Swift and a Windows application written in .NET WPF running in production.&lt;/p&gt;

&lt;p&gt;The process was difficult. There were bugs, pressure, unfamiliar APIs, operating system restrictions, and many moments when the next step was not obvious.&lt;/p&gt;

&lt;p&gt;But production software is often built that way.&lt;/p&gt;

&lt;p&gt;You learn, solve one problem at a time, test constantly, and continue until the product becomes real.&lt;/p&gt;

&lt;p&gt;This experience gave me more confidence in my ability to move beyond web development and build deeper, system-level software.&lt;/p&gt;

&lt;p&gt;Try TimoDesk&lt;br&gt;
TimoDesk is built for remote teams, agencies, companies, and professionals who need better visibility into projects, time, and productivity.&lt;/p&gt;

&lt;p&gt;You can use it to:&lt;/p&gt;

&lt;p&gt;Track project time&lt;/p&gt;

&lt;p&gt;Monitor productivity&lt;/p&gt;

&lt;p&gt;Review application and URL usage&lt;/p&gt;

&lt;p&gt;Capture periodic screenshots&lt;/p&gt;

&lt;p&gt;Manage remote team activity&lt;/p&gt;

&lt;p&gt;Understand how working hours are spent&lt;/p&gt;

&lt;p&gt;You can explore TimoDesk at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://timodesk.com" rel="noopener noreferrer"&gt;https://timodesk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This native rewrite is only the beginning. The next stage is to make TimoDesk faster, smarter, more efficient, and capable of becoming the complete work platform remote teams can rely on every day.&lt;/p&gt;

&lt;p&gt;This version uses Markdown-compatible headings, lists, and a clickable link.&lt;/p&gt;

&lt;p&gt;bro markdown in # or whatever&lt;/p&gt;

&lt;h1&gt;
  
  
  From Electron to Native Desktop Apps: How I Rebuilt TimoDesk for macOS and Windows
&lt;/h1&gt;

&lt;p&gt;Over the last month, I have spent most of my time rebuilding TimoDesk.&lt;/p&gt;

&lt;p&gt;This was not a normal update or a small feature release. TimoDesk needed a complete desktop application rewrite.&lt;/p&gt;

&lt;p&gt;The previous application was built with Electron and React. It worked well, but after running for long periods, we faced problems such as higher memory usage, larger application bundles, occasional performance issues, and an experience that did not always feel fully native.&lt;/p&gt;

&lt;p&gt;Because TimoDesk is designed to run silently in the background for many hours, efficiency matters.&lt;/p&gt;

&lt;p&gt;So I made a major decision.&lt;/p&gt;

&lt;p&gt;I rebuilt the macOS application using Swift and the Windows application using .NET WPF.&lt;/p&gt;

&lt;p&gt;Both applications are now in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Was a Big Challenge for Me
&lt;/h2&gt;

&lt;p&gt;Before starting this work, I had never written a single line of Swift in my entire development career.&lt;/p&gt;

&lt;p&gt;I also had no native desktop application running in production.&lt;/p&gt;

&lt;p&gt;My background was mainly in JavaScript. JavaScript was one of my first loves in programming. Over the years, I wrote production applications with React, worked with Vue around 2020 and 2021, used Node.js, and learned enough Electron to understand how desktop applications could be created with web technologies.&lt;/p&gt;

&lt;p&gt;However, knowing how to create a basic Electron application and building a production-grade desktop application are two very different things.&lt;/p&gt;

&lt;p&gt;TimoDesk was my first serious desktop product.&lt;/p&gt;

&lt;p&gt;During the rewrite, I had to learn new technologies, understand operating-system-specific behavior, handle background services, manage performance, and make sure the applications could work reliably for real users.&lt;/p&gt;

&lt;p&gt;I built both native applications myself while working under constant pressure and learning completely new technology stacks at the same time.&lt;/p&gt;

&lt;p&gt;Seeing both applications reach production is a major personal achievement for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What TimoDesk Does
&lt;/h2&gt;

&lt;p&gt;TimoDesk is a complete time tracking and productivity platform for remote teams, companies, agencies, and professionals.&lt;/p&gt;

&lt;p&gt;The desktop application runs in the background and can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track working time&lt;/li&gt;
&lt;li&gt;Record applications used during work&lt;/li&gt;
&lt;li&gt;Track visited URLs&lt;/li&gt;
&lt;li&gt;Capture screenshots at configured intervals&lt;/li&gt;
&lt;li&gt;Synchronize time-tracking data with the backend dashboard&lt;/li&gt;
&lt;li&gt;Associate tracked time with projects and tasks&lt;/li&gt;
&lt;li&gt;Operate silently without interrupting the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For organizers, team managers, and company owners, TimoDesk also provides real-time visibility into team activity.&lt;/p&gt;

&lt;p&gt;Managers can view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which team members are currently active&lt;/li&gt;
&lt;li&gt;Who is idle or inactive&lt;/li&gt;
&lt;li&gt;Which task each person is working on&lt;/li&gt;
&lt;li&gt;Current project activity&lt;/li&gt;
&lt;li&gt;Logged time and productivity information&lt;/li&gt;
&lt;li&gt;Periodic screenshots and application usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also provide browser extensions for Chrome and Mozilla Firefox. These extensions help connect browser activity with the broader TimoDesk productivity system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Moved Away from Electron
&lt;/h2&gt;

&lt;p&gt;Electron helped us build the original version quickly because it allowed us to use JavaScript and React.&lt;/p&gt;

&lt;p&gt;For many applications, Electron is still a practical choice. However, TimoDesk has requirements that make native development especially valuable.&lt;/p&gt;

&lt;p&gt;A time-tracking application may remain active for an entire working day. It continuously handles timers, background synchronization, application monitoring, URL tracking, screenshots, and local system events.&lt;/p&gt;

&lt;p&gt;Over long working sessions, every unnecessary resource matters.&lt;/p&gt;

&lt;p&gt;The Electron version performed well in many situations, but we also experienced challenges such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher memory consumption&lt;/li&gt;
&lt;li&gt;Larger installation packages&lt;/li&gt;
&lt;li&gt;Resource pressure during long sessions&lt;/li&gt;
&lt;li&gt;Less direct operating system integration&lt;/li&gt;
&lt;li&gt;An interface that did not always feel completely native&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The native rewrite gives us greater control over performance, background processing, memory usage, system permissions, and operating system integration.&lt;/p&gt;

&lt;p&gt;The goal is to make TimoDesk lightweight, reliable, efficient, and closely connected to the operating system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the macOS Version with Swift
&lt;/h2&gt;

&lt;p&gt;The macOS version was developed using Swift.&lt;/p&gt;

&lt;p&gt;This was one of the most challenging parts of the project because Swift was completely new to me.&lt;/p&gt;

&lt;p&gt;I had to learn how macOS handles permissions, application monitoring, screenshots, background tasks, local storage, synchronization, system events, and user interface behavior.&lt;/p&gt;

&lt;p&gt;macOS has strict privacy and security requirements, especially for applications that interact with screen recording, accessibility features, and application activity.&lt;/p&gt;

&lt;p&gt;Building these features properly required more than simply translating JavaScript code into Swift. I had to redesign many parts of the application around the macOS environment.&lt;/p&gt;

&lt;p&gt;The result is a native application that feels more closely integrated with macOS and gives us a stronger foundation for future development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Windows Version with .NET WPF
&lt;/h2&gt;

&lt;p&gt;For Windows, I rebuilt TimoDesk using .NET and WPF.&lt;/p&gt;

&lt;p&gt;The Windows application needed to handle many of the same responsibilities as the macOS application, but Windows has its own APIs, lifecycle behavior, installation requirements, background processes, permissions, and system-level challenges.&lt;/p&gt;

&lt;p&gt;The WPF version gives us greater access to the Windows environment and allows us to optimize the experience specifically for Windows users.&lt;/p&gt;

&lt;p&gt;Instead of maintaining one general desktop application for every operating system, we can now improve each version based on the strengths and behavior of its platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux May Be Next
&lt;/h2&gt;

&lt;p&gt;I am also considering building a native Linux version.&lt;/p&gt;

&lt;p&gt;The long-term goal is to make TimoDesk highly efficient across all major operating systems.&lt;/p&gt;

&lt;p&gt;Linux presents its own challenges because desktop environments, display systems, permissions, and application packaging can vary significantly.&lt;/p&gt;

&lt;p&gt;However, a native Linux version would allow TimoDesk to serve more developers, technical teams, remote companies, and organizations that rely heavily on Linux workstations.&lt;/p&gt;

&lt;h2&gt;
  
  
  TimoDesk Is Becoming More Than a Time Tracker
&lt;/h2&gt;

&lt;p&gt;Time tracking is only one part of the larger vision.&lt;/p&gt;

&lt;p&gt;We are building TimoDesk as a complete work operating system for remote teams.&lt;/p&gt;

&lt;p&gt;Our team is actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project management&lt;/li&gt;
&lt;li&gt;Task management&lt;/li&gt;
&lt;li&gt;Payroll management&lt;/li&gt;
&lt;li&gt;Remote team operations&lt;/li&gt;
&lt;li&gt;Productivity analytics&lt;/li&gt;
&lt;li&gt;Mobile applications&lt;/li&gt;
&lt;li&gt;AI-powered recommendations&lt;/li&gt;
&lt;li&gt;Cost and performance insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is simple: teams should not need to move between many disconnected platforms to manage their daily work.&lt;/p&gt;

&lt;p&gt;A company should be able to manage projects, assign tasks, track time, monitor productivity, calculate payroll, review team performance, and communicate important work information from one connected system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile Applications Are Also Coming
&lt;/h2&gt;

&lt;p&gt;We are also developing mobile applications for TimoDesk.&lt;/p&gt;

&lt;p&gt;The mobile application will make it easier for users and managers to stay connected to their work from anywhere.&lt;/p&gt;

&lt;p&gt;Managers will be able to review team activity, tracked hours, projects, tasks, notifications, and productivity information without always opening the web dashboard.&lt;/p&gt;

&lt;p&gt;The mobile experience is an important part of making TimoDesk a complete work solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Features for Better Productivity
&lt;/h2&gt;

&lt;p&gt;We are also working on AI-powered features.&lt;/p&gt;

&lt;p&gt;The purpose of these features is not simply to add AI because it is popular. The goal is to use existing work data to generate useful recommendations.&lt;/p&gt;

&lt;p&gt;Based on how teams already use TimoDesk, the platform may be able to suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better task allocation&lt;/li&gt;
&lt;li&gt;More accurate project estimates&lt;/li&gt;
&lt;li&gt;Productivity improvements&lt;/li&gt;
&lt;li&gt;Potential workflow problems&lt;/li&gt;
&lt;li&gt;Time-consuming activities&lt;/li&gt;
&lt;li&gt;Opportunities to reduce project costs&lt;/li&gt;
&lt;li&gt;Work patterns that may affect delivery&lt;/li&gt;
&lt;li&gt;Better planning for future projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is to help teams make better decisions using the work information they already generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This project reminded me that developers should not be limited by the technologies they already know.&lt;/p&gt;

&lt;p&gt;A month ago, Swift was completely unfamiliar to me.&lt;/p&gt;

&lt;p&gt;Today, I have a native macOS application written in Swift and a Windows application written in .NET WPF running in production.&lt;/p&gt;

&lt;p&gt;The process was difficult. There were bugs, pressure, unfamiliar APIs, operating system restrictions, and many moments when the next step was not obvious.&lt;/p&gt;

&lt;p&gt;But production software is often built that way.&lt;/p&gt;

&lt;p&gt;You learn, solve one problem at a time, test constantly, and continue until the product becomes real.&lt;/p&gt;

&lt;p&gt;This experience gave me more confidence in my ability to move beyond web development and build deeper, system-level software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try TimoDesk
&lt;/h2&gt;

&lt;p&gt;TimoDesk is built for remote teams, agencies, companies, and professionals who need better visibility into projects, time, and productivity.&lt;/p&gt;

&lt;p&gt;You can use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track project time&lt;/li&gt;
&lt;li&gt;Monitor productivity&lt;/li&gt;
&lt;li&gt;Review application and URL usage&lt;/li&gt;
&lt;li&gt;Capture periodic screenshots&lt;/li&gt;
&lt;li&gt;Manage remote team activity&lt;/li&gt;
&lt;li&gt;Understand how working hours are spent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can explore TimoDesk at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://timodesk.com" rel="noopener noreferrer"&gt;https://timodesk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This native rewrite is only the beginning. The next stage is to make TimoDesk faster, smarter, more efficient, and capable of becoming the complete work platform remote teams can rely on every day.&lt;/p&gt;

</description>
      <category>timodesk</category>
      <category>productivity</category>
      <category>monirsaikat</category>
      <category>timetrackersoftware</category>
    </item>
    <item>
      <title>How to Run a Successful Software Business in 2026</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Fri, 10 Jul 2026 06:29:36 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-run-a-successful-software-business-in-2026-3675</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-run-a-successful-software-business-in-2026-3675</guid>
      <description>&lt;h2&gt;
  
  
  Executive summary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Assumption:&lt;/strong&gt; this article is written for founders and senior product and technology leaders building a horizontal software business in 2026, typically B2B SaaS with some prosumer lessons where useful. No specific industry vertical is assumed.&lt;/p&gt;

&lt;p&gt;The strategic reality of 2026 is not that “every company needs AI.” It is that every software company now operates in a market where AI is widely adopted, buyers can research products faster, and the winning firms are those that turn AI from a demo into a governed, repeatable workflow advantage. McKinsey’s late-2025 survey found that 88% of organizations report regular AI use in at least one business function, 62% are at least experimenting with AI agents, and yet only about one-third say they have begun scaling AI across the enterprise. In other words, AI is mainstream, but scaled value is still scarce. That is the opening for disciplined software companies. citeturn20view0turn0search6&lt;/p&gt;

&lt;p&gt;The market is also moving from experimentation to budgeted spend. Menlo Ventures estimates enterprise generative AI spending rose from $11.5 billion in 2024 to $37 billion in 2025, with $19 billion going to the application layer alone. Gartner forecast worldwide AI spending at nearly $1.5 trillion in 2025 and $2.52 trillion in 2026. Stanford’s 2026 AI Index reports that global corporate AI investment more than doubled in 2025 and that generative AI reached roughly 53% population-level adoption within three years of mass-market launch. citeturn29view0turn0search12turn0search2turn19view0turn30view0&lt;/p&gt;

&lt;p&gt;The practical implication is straightforward: do not compete on “having AI.” Compete on proprietary context, workflow embedding, distribution, trust, and economics. The strongest business models in 2026 combine one of four patterns: bundled AI to defend the core suite, premium AI add-ons for governed enterprise workflows, seat-plus-usage hybrids for variable-cost workloads, and freemium-to-premium upgrades where AI expands supply and engagement. Current company behavior from GitHub, ServiceNow, Zoom, Atlassian, and Duolingo shows all four patterns working when tied to clear customer outcomes. citeturn24view4turn24view9turn25view0turn24view0turn24view2turn24view5turn19view4turn26view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In 2026, software is being sold into an environment where “deep research” is no longer a specialist capability. Knowledge workers can ask AI systems to compare vendors, synthesize customer references, summarize filings, inspect documentation, and pressure-test claims in minutes. That compresses information asymmetry and makes surface-level feature differentiation easier to copy and easier to expose. At the same time, agents are spreading into enterprise applications: Gartner projected in 2025 that 40% of enterprise apps would feature task-specific AI agents by 2026, while McKinsey found that agent use is most commonly reported in IT and knowledge management. citeturn0search6turn20view0&lt;/p&gt;

&lt;p&gt;That changes the definition of a successful software business. The winning company is not the one with the flashiest model. It is the one that owns a high-frequency job to be done, sits on the system of record or system of action for that workflow, makes trustworthy decisions with proprietary context, and monetizes value without letting inference cost outrun gross margin. If 2024 was the year of pilots and 2025 the year of broad adoption, 2026 is the year of operational discipline. citeturn20view0turn29view0turn19view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Market trends from 2024 to 2026
&lt;/h2&gt;

&lt;p&gt;Three signals matter most. First, adoption is broadening faster than enterprise value is compounding. McKinsey reported 78% of organizations using AI in at least one business function in its March 2025 survey, up from 72% in early 2024 and 55% a year earlier; by November 2025, that figure had climbed to 88%. Yet only 39% reported any enterprise-level EBIT impact, and McKinsey’s “AI high performers” represented only about 6% of respondents. That gap between usage and measurable company-level value is exactly where durable software businesses can win. citeturn19view5turn20view0&lt;/p&gt;

&lt;p&gt;Second, budgets are moving decisively toward applications. Menlo estimates the application layer captured $19 billion of enterprise generative AI spending in 2025, more than half the total, and coding alone represented $4.0 billion of departmental AI spend. Menlo also found that enterprises now prefer buying to building: 76% of AI use cases were purchased in 2025, versus an almost even split in 2024. Founders should read that as a distribution and packaging opportunity, not proof that in-house AI teams do not matter. citeturn29view0&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pie showData
    title 2025 Enterprise Generative AI Spend
    "Application layer" : 19
    "Other layers" : 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Menlo’s estimate that the application layer accounted for $19 billion of $37 billion in enterprise generative AI spend is a strong signal that the most immediate software value is still being captured in products that sit closest to the user and the workflow, not in raw model infrastructure. citeturn29view0&lt;/p&gt;

&lt;p&gt;Third, the agent era is raising the bar for product design and governance. McKinsey found 62% of organizations were at least experimenting with AI agents by late 2025, and Gartner projected that task-specific agents would spread rapidly into enterprise applications by 2026. At the same time, Stanford’s AI Index warns that investment and capabilities are accelerating faster than governance and measurement frameworks. That means “agentic” is not a moat by itself; the moat is safe orchestration, grounded context, and measurable business outcomes. citeturn20view0turn0search6turn19view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Business models, pricing, and case studies
&lt;/h2&gt;

&lt;p&gt;The most resilient 2026 business model is usually a &lt;strong&gt;hybrid monetization stack&lt;/strong&gt;: a base software subscription, optional premium AI add-ons where governance or specialization matters, and measured usage for expensive or autonomous workflows. Pure seat-based pricing works best when AI is lightweight and broadly used. Pure consumption works best when the customer already understands unit economics. Most companies should avoid copying API-style pricing blindly and instead price around the customer’s scarce unit of value: a developer seat, a workflow, a resolved case, a converted lead, or a high-intent research task. This synthesis reflects what we see in GitHub, Zoom, ServiceNow, Atlassian, and Duolingo. citeturn24view4turn24view9turn24view2turn25view0turn24view5turn19view4&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;th&gt;Primary risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundled AI in core plans&lt;/td&gt;
&lt;td&gt;Collaboration and suite products&lt;/td&gt;
&lt;td&gt;Drives adoption fast and defends the base product&lt;/td&gt;
&lt;td&gt;Hidden inference costs if usage spikes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seat + usage credits&lt;/td&gt;
&lt;td&gt;Developer tools and power-user workflows&lt;/td&gt;
&lt;td&gt;Aligns margin with higher-intensity workloads&lt;/td&gt;
&lt;td&gt;Billing complexity can slow adoption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium AI add-on&lt;/td&gt;
&lt;td&gt;Enterprise workflow products&lt;/td&gt;
&lt;td&gt;Best for governance, ROI proofs, and upsell&lt;/td&gt;
&lt;td&gt;Requires strong sales enablement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freemium + premium AI tier&lt;/td&gt;
&lt;td&gt;Prosumer and consumer education/productivity&lt;/td&gt;
&lt;td&gt;Expands funnel and converts power users&lt;/td&gt;
&lt;td&gt;High support and compute costs at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outcome-based automation&lt;/td&gt;
&lt;td&gt;Narrow, high-value workflows&lt;/td&gt;
&lt;td&gt;Strongest ROI narrative&lt;/td&gt;
&lt;td&gt;Harder contracting and measurement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This comparison synthesizes current market patterns visible in Zoom’s no-extra-cost AI bundling, GitHub’s seat-plus-credit plans and 2026 usage-based extension, ServiceNow’s premium AI ACV growth, Atlassian’s Rovo bundle-plus-standalone pricing, and Duolingo’s freemium-to-premium conversion strategy. citeturn24view2turn24view3turn24view4turn24view9turn25view0turn24view0turn24view5turn19view4&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; is the clearest lesson in category creation and monetization evolution. Microsoft said in May 2025 that 15 million developers were already using GitHub Copilot; GitHub later reported that Copilot code review usage had grown 10x and accounted for more than one in five code reviews on GitHub. GitHub’s organization plans are seat-based, but in 2026 the company extended usage-based billing for heavier workloads. Lesson: start with simple adoption pricing, then add consumption when agents materially increase variable cost and delivered value. citeturn24view7turn24view8turn24view4turn24view9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ServiceNow&lt;/strong&gt; shows how to sell AI as governed enterprise workflow expansion rather than as a generic assistant. Its 2025 annual-report disclosures said Now Assist surpassed $600 million in ACV in 2025 and aimed to exceed $1 billion ACV in 2026; Q1 2026 results said customers spending more than $1 million in ACV on Now Assist grew more than 130% year over year. Lesson: premium AI monetizes best where the software already owns approvals, workflows, and compliance-sensitive operations. citeturn5search2turn24view0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zoom&lt;/strong&gt; demonstrates the strategic logic of bundling. Zoom repeatedly emphasized that AI Companion remains available at no additional cost for paid Zoom Workplace accounts, while also launching customization and bring-your-own-data paths. Lesson: if AI strengthens the core suite, protects retention, and creates a future add-on market, bundling can be smarter than immediate monetization. citeturn24view2turn24view3&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duolingo&lt;/strong&gt; is a useful reminder that AI should expand supply, not just trim labor. The company reported 12.2 million paid subscribers and 52.7 million DAUs as of Q4 2025, and said AI let it publish 20,500 skills in Q1 2026 versus 7,100 per quarter in 2025 and 1,800 in 2024. Even while expanding higher-cost AI features, it reported Q2 2025 gross margin of 72.4%, with lower-than-expected AI costs helping margins. Lesson: the best AI businesses use automation to widen their content or service frontier while protecting monetization and margin. citeturn19view4turn26view0turn26view1turn30view1turn30view2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atlassian&lt;/strong&gt; shows why the context layer matters. By late 2025, Atlassian said Rovo had rolled out to every paying cloud customer at no extra cost, that AI usage had more than doubled across its customer base, and that a standalone Rovo offer was coming at $5 per user. Its FY26 investor forum materials also highlighted faster ARR growth among customers using Rovo, while its GA MCP server emphasized admin controls, auditability, and open connectivity to external AI clients. Lesson: in the deep-research era, the product that wins is the one with the best permissions-aware knowledge graph, not merely the best chat box. citeturn24view5turn12search0turn24view6&lt;/p&gt;

&lt;h2&gt;
  
  
  Product strategy and AI integration
&lt;/h2&gt;

&lt;p&gt;A robust 2026 product strategy starts with a narrow wedge: one painful, frequent, expensive workflow where the product can prove a measurable before-and-after delta. The second design rule is architectural: separate the &lt;strong&gt;system of record&lt;/strong&gt;, the &lt;strong&gt;retrieval and data layer&lt;/strong&gt;, the &lt;strong&gt;orchestration layer&lt;/strong&gt;, and the &lt;strong&gt;execution layer&lt;/strong&gt;. For dynamic knowledge tasks, retrieval-augmented generation remains the default because it improves updateability and provenance; for action-taking systems, tool use matters because model quality alone is not enough. The original RAG paper explicitly frames explicit memory as a way to improve factuality and update knowledge, and Toolformer formalizes model use of external tools and APIs. citeturn16search16turn23view4&lt;/p&gt;

&lt;p&gt;The technical stack most founders should assemble looks like this: a product event and application database; a permissions-aware retrieval index over first-party content; model routing across at least a small, fast model and a stronger reasoning model; prompt and workflow versioning; offline eval sets; online experimentation; audit logs; and policy controls for data handling and action execution. The warning from Google’s “Hidden Technical Debt in Machine Learning Systems” still applies: in ML systems, complexity compounds silently, which is why prompt chains, retrieval adapters, evaluation code, and fallback logic must be treated as first-class production assets. citeturn23view2turn16search3&lt;/p&gt;

&lt;p&gt;Safety and explainability are not “governance extras”; they are product features. NIST’s AI RMF defines trustworthy AI in terms that include validity, safety, security, transparency, explainability, privacy enhancement, and fairness, and organizes execution around GOVERN, MAP, MEASURE, and MANAGE. For LLM applications specifically, OWASP’s current guidance highlights prompt injection, insecure output handling, data poisoning, denial of service, supply-chain issues, and sensitive-information disclosure as core design risks. A production product should therefore show sources when possible, constrain tool permissions, sandbox actions, support human approval for high-impact steps, and log what the model saw, inferred, and executed. citeturn23view0turn23view1&lt;/p&gt;

&lt;p&gt;Evaluation also needs to be tougher in 2026 than “the demo looked good.” SWE-bench and SWE-bench Verified matter beyond coding because they illustrate the broader point: realistic AI evaluation requires messy, long-context, multi-step tasks and human-validated benchmarks, not just synthetic prompts. In practice, that means every software company should maintain a living eval suite for its own top workflows: grounding accuracy, task completion, latency, safety violations, action reversals, and user acceptance. citeturn23view5turn23view6&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI delivery checklist&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tie every AI feature to a single workflow KPI before launch.
&lt;/li&gt;
&lt;li&gt;Default to retrieval and tools before fine-tuning.
&lt;/li&gt;
&lt;li&gt;Ship citations, audit logs, and approval gates early.
&lt;/li&gt;
&lt;li&gt;Version prompts, policies, and eval sets like code.
&lt;/li&gt;
&lt;li&gt;Track gross-margin impact per account, not just global token spend.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Go-to-market, legal, organization, and operations
&lt;/h2&gt;

&lt;p&gt;Go-to-market in 2026 should sell &lt;strong&gt;workflow economics&lt;/strong&gt;, not abstractions. McKinsey’s data show that cost benefits are most often reported in software engineering, manufacturing, and IT, while revenue gains are most often reported in marketing and sales, strategy and finance, and product or service development. The same research shows that high performers redesign workflows and set growth or innovation objectives alongside efficiency. So the best sales motion is a short, instrumented value proof with baseline metrics, redesigned process steps, and a buyer-visible dashboard of time saved, quality improved, or revenue unlocked. citeturn20view0&lt;/p&gt;

&lt;p&gt;On pricing, founders should think in layers. Bundle lightweight assistance that improves core retention. Sell governed or specialized AI as a premium add-on. Add usage pricing only where autonomous or high-volume workloads create real variable cost or outsized customer value. GitHub’s shift toward usage-based billing for heavier Copilot workloads is a good signal that agentic features eventually need economic separation, while Zoom and Atlassian show the complementary logic of broad AI bundling to accelerate adoption and defend the suite. citeturn24view9turn24view2turn24view5&lt;/p&gt;

&lt;p&gt;Legally, privacy and AI compliance now have to be designed in from day one. If you process personal data, GDPR applies in the EU, and California’s CCPA gives consumers rights over personal information collected by businesses. The European Data Protection Board’s December 2024 opinion on AI models addressed anonymity, legitimate interest, and the consequences of unlawful personal-data processing in AI development and deployment. Separately, the EU AI Act entered into force on August 1, 2024; prohibited practices and AI literacy obligations started applying on February 2, 2025; GPAI obligations applied from August 2, 2025; and the Act became broadly applicable on August 2, 2026, with some embedded-product obligations deferred further. For GPAI providers, the Commission’s code of practice centers on transparency, copyright, and safety and security. citeturn15search13turn21view4turn21view3turn21view0turn21view1turn21view2&lt;/p&gt;

&lt;p&gt;Intellectual property remains unsettled enough that you should operate conservatively. The U.S. Copyright Office’s Part 2 report says copyrightability of AI outputs turns on the nature and extent of human contribution and maintains the human-authorship baseline; its Part 3 training report describes ongoing debate and unresolved litigation over the use of copyrighted works in model training. The practical response is not paralysis. It is provenance logs, documented dataset rights, customer contract clarity, output review for high-risk content, and indemnity language you can actually stand behind. citeturn22view1turn22view2turn21view5turn21view6turn22view3&lt;/p&gt;

&lt;p&gt;Organizationally, the best setup is usually a compact cross-functional pod per wedge: a GM or PM, design lead, engineering lead, applied AI engineer, data or ML engineer, platform engineer, and a part-time security/privacy partner, plus a solutions engineer for customer feedback loops. McKinsey reports that software engineers and data engineers are among the most in-demand AI-related roles, that half of AI-using organizations need more data scientists, and that workforce reskilling is increasing. Infrastructure-wise, keep cost discipline through model routing, caching, retrieval optimization, asynchronous work queues, batch jobs, and hard spend guardrails. Ethical risk management should be reviewed monthly at the product-operations level: not only bias and privacy, but also inaccuracy, explainability gaps, over-automation, and customer deception. citeturn19view5turn20view0turn23view0turn23view1&lt;/p&gt;

&lt;h2&gt;
  
  
  A 12–18 month tactical roadmap with milestones and KPIs
&lt;/h2&gt;

&lt;p&gt;The roadmap below assumes a company with an existing core product and a modest product-engineering base. The aim is not to launch ten AI features. It is to create one durable wedge, prove economics, then scale safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gantt
    title 12–18 Month Roadmap
    dateFormat  YYYY-MM-DD
    axisFormat  %b %Y

    section Foundation
    Select wedge workflow and baseline metrics      :a1, 2026-08-01, 45d
    Data contracts, permissions, logging, eval set  :a2, after a1, 45d

    section First product
    Build RAG + tool orchestration MVP             :b1, 2026-11-01, 60d
    Pilot with design partners                      :b2, 2027-01-01, 60d

    section Commercialization
    Launch paid beta and sales playbook             :c1, 2027-03-01, 60d
    Add premium governance/admin features           :c2, after c1, 60d

    section Scaling
    Model routing, caching, cost controls           :d1, 2027-05-01, 60d
    Expand to second workflow and partner channel   :d2, 2027-07-01, 90d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Milestones and KPIs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the first 90 days, define the wedge and instrument it. The only acceptable launch criteria are a clear benchmark and a clear denominator: time to complete task, resolution rate, acceptance rate, conversion rate, or expansion signal. By month six, the pilot should show both user value and economic viability. By month twelve, the product should have a repeatable sales narrative and a cost envelope. By month eighteen, the company should be able to scale a second workflow without rewriting the platform. This sequencing mirrors what the strongest AI performers do: redesign workflows, scale selectively, and invest behind use cases that already show measurable value. citeturn20view0turn29view0&lt;/p&gt;

&lt;p&gt;A practical KPI stack for 2026 is: activation-to-first-value in under one day for self-serve or under 30 days for enterprise; weekly active teams; net revenue retention; pilot-to-production conversion; model-grounded answer rate; citation coverage on knowledge tasks; human acceptance rate of generated outputs; auto-resolution rate for target workflows; p95 latency; inference cost per active account; gross margin by plan; security or policy incidents; and percentage of workflows with auditable logs. For enterprise AI, a board-level metric that matters more than raw MAUs is &lt;strong&gt;revenue or cost impact per redesigned workflow&lt;/strong&gt;. citeturn20view0turn23view0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Founder checklist for the next quarter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick one workflow where the product can own both context and action.
&lt;/li&gt;
&lt;li&gt;Choose a pricing model that maps to customer value, not vendor token pricing.
&lt;/li&gt;
&lt;li&gt;Stand up evals, observability, and privacy reviews before general availability.
&lt;/li&gt;
&lt;li&gt;Require every AI feature to show one adoption KPI and one margin KPI.
&lt;/li&gt;
&lt;li&gt;Treat legal clarity and user trust as growth levers, not overhead.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A short conclusion: the successful software business of 2026 is not an “AI wrapper,” nor a traditional SaaS product with a chatbot bolted onto it. It is a software company that uses AI to turn proprietary context into better decisions, better workflows, and better economics than competitors can match. In a deep-research market, the firms that win will be the ones that are easiest to trust, easiest to prove, and hardest to replace.&lt;/p&gt;

</description>
      <category>software</category>
      <category>business</category>
      <category>aibusiness</category>
      <category>coding</category>
    </item>
    <item>
      <title>The Future of Software Development: What Developers Should Expect</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 23 Jun 2026 18:52:27 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/the-future-of-software-development-what-developers-should-expect-177c</link>
      <guid>https://dev.to/moniruzzamansaikat/the-future-of-software-development-what-developers-should-expect-177c</guid>
      <description>&lt;p&gt;Software development is changing faster than ever.&lt;/p&gt;

&lt;p&gt;Over the past decade, we have seen the rise of cloud computing, mobile applications, DevOps, containers, and artificial intelligence. Technologies that once felt revolutionary have become standard tools in a developer's workflow.&lt;/p&gt;

&lt;p&gt;As we look toward the future, one question continues to emerge:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will developers still be needed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The short answer is yes.&lt;/p&gt;

&lt;p&gt;However, the role of developers is evolving. The future will not belong to developers who simply write code. It will belong to developers who can solve problems, understand business requirements, leverage AI effectively, and continuously adapt to new technologies.&lt;/p&gt;

&lt;p&gt;Let's explore what the future of software development may look like from a developer's perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Will Become a Standard Development Tool
&lt;/h2&gt;

&lt;p&gt;Artificial intelligence is already transforming how developers work.&lt;/p&gt;

&lt;p&gt;Tools such as AI coding assistants can generate boilerplate code, explain complex functions, write tests, and even suggest bug fixes.&lt;/p&gt;

&lt;p&gt;Many developers fear AI will replace programmers.&lt;/p&gt;

&lt;p&gt;In reality, AI is more likely to replace repetitive tasks than developers themselves.&lt;/p&gt;

&lt;p&gt;Future developers will spend less time writing basic code and more time focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;li&gt;Architecture decisions&lt;/li&gt;
&lt;li&gt;Security considerations&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning how to collaborate with AI may become as important as learning a programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding Will Become More Accessible
&lt;/h2&gt;

&lt;p&gt;Historically, software development required deep technical knowledge.&lt;/p&gt;

&lt;p&gt;Today, low-code and no-code platforms allow non-technical users to build simple applications.&lt;/p&gt;

&lt;p&gt;This trend will continue.&lt;/p&gt;

&lt;p&gt;Businesses will increasingly use visual development tools for straightforward applications and workflows.&lt;/p&gt;

&lt;p&gt;However, complex systems will still require experienced developers.&lt;/p&gt;

&lt;p&gt;Enterprise software, financial systems, healthcare platforms, and large-scale SaaS applications cannot rely entirely on drag-and-drop tools.&lt;/p&gt;

&lt;p&gt;Developers will continue to play a critical role where complexity exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Demand for Problem Solvers Will Increase
&lt;/h2&gt;

&lt;p&gt;Companies do not hire developers because they need code.&lt;/p&gt;

&lt;p&gt;They hire developers because they need solutions.&lt;/p&gt;

&lt;p&gt;As AI becomes better at generating code, technical implementation becomes less of a competitive advantage.&lt;/p&gt;

&lt;p&gt;Understanding the problem becomes more valuable than writing the solution.&lt;/p&gt;

&lt;p&gt;Future developers who can bridge the gap between technology and business will stand out.&lt;/p&gt;

&lt;p&gt;This means developing skills such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Critical thinking&lt;/li&gt;
&lt;li&gt;Product understanding&lt;/li&gt;
&lt;li&gt;Requirements analysis&lt;/li&gt;
&lt;li&gt;Leadership&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to solve real-world problems will become a major differentiator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Stack Skills Will Become More Valuable
&lt;/h2&gt;

&lt;p&gt;The boundaries between frontend, backend, infrastructure, and operations are becoming increasingly blurred.&lt;/p&gt;

&lt;p&gt;Modern developers often work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend frameworks&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Cloud services&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Monitoring tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While specialization will remain important, developers who understand the entire software lifecycle will have significant advantages.&lt;/p&gt;

&lt;p&gt;The future favors developers who can see the bigger picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Will Become Everyone's Responsibility
&lt;/h2&gt;

&lt;p&gt;Cybersecurity threats continue to grow every year.&lt;/p&gt;

&lt;p&gt;In the past, security was often handled by dedicated teams.&lt;/p&gt;

&lt;p&gt;Today, secure development practices are becoming part of every developer's responsibilities.&lt;/p&gt;

&lt;p&gt;Future developers will need a stronger understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Data protection&lt;/li&gt;
&lt;li&gt;Secure coding practices&lt;/li&gt;
&lt;li&gt;Vulnerability management&lt;/li&gt;
&lt;li&gt;Compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security awareness will no longer be optional.&lt;/p&gt;

&lt;p&gt;It will be a core development skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote Development Is Here to Stay
&lt;/h2&gt;

&lt;p&gt;The global software industry has proven that remote teams can build world-class products.&lt;/p&gt;

&lt;p&gt;This has created opportunities for developers worldwide.&lt;/p&gt;

&lt;p&gt;A talented developer in Bangladesh, India, Nigeria, or Brazil can now compete for opportunities that were once limited to specific geographic regions.&lt;/p&gt;

&lt;p&gt;The future workforce will be increasingly global.&lt;/p&gt;

&lt;p&gt;Developers who can communicate effectively, collaborate asynchronously, and work independently will thrive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Learning Will Be Mandatory
&lt;/h2&gt;

&lt;p&gt;One constant in software development is change.&lt;/p&gt;

&lt;p&gt;Programming languages evolve.&lt;/p&gt;

&lt;p&gt;Frameworks change.&lt;/p&gt;

&lt;p&gt;New tools emerge.&lt;/p&gt;

&lt;p&gt;Entire technology stacks can become obsolete within a few years.&lt;/p&gt;

&lt;p&gt;The most successful developers will not be those who know a particular framework.&lt;/p&gt;

&lt;p&gt;They will be those who know how to learn quickly.&lt;/p&gt;

&lt;p&gt;Adaptability will become one of the most valuable skills in the industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Productivity Will Increase Dramatically
&lt;/h2&gt;

&lt;p&gt;Modern tools are already helping developers accomplish more with less effort.&lt;/p&gt;

&lt;p&gt;In the future, developers may build applications in days that previously required weeks or months.&lt;/p&gt;

&lt;p&gt;AI-assisted development, automation, cloud services, and mature frameworks will continue to accelerate software delivery.&lt;/p&gt;

&lt;p&gt;This does not mean developers will work less.&lt;/p&gt;

&lt;p&gt;Instead, expectations will increase.&lt;/p&gt;

&lt;p&gt;Businesses will expect faster development cycles, quicker releases, and higher quality products.&lt;/p&gt;

&lt;p&gt;Developers who leverage modern tools effectively will have a major advantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Skills Should Developers Focus on Today?
&lt;/h2&gt;

&lt;p&gt;If you want to prepare for the future, focus on skills that remain valuable regardless of technological changes.&lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;li&gt;Software architecture&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Security fundamentals&lt;/li&gt;
&lt;li&gt;Cloud computing&lt;/li&gt;
&lt;li&gt;AI-assisted development&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Business understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technologies may change.&lt;/p&gt;

&lt;p&gt;Fundamental skills remain valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The future of software development is exciting, not threatening.&lt;/p&gt;

&lt;p&gt;AI will change how we write software.&lt;/p&gt;

&lt;p&gt;Automation will eliminate repetitive work.&lt;/p&gt;

&lt;p&gt;New tools will make development faster than ever before.&lt;/p&gt;

&lt;p&gt;But technology alone does not create successful software.&lt;/p&gt;

&lt;p&gt;People do.&lt;/p&gt;

&lt;p&gt;Developers who embrace change, continuously learn, and focus on solving meaningful problems will remain in demand for years to come.&lt;/p&gt;

&lt;p&gt;The future does not belong to the developers who write the most code.&lt;/p&gt;

&lt;p&gt;It belongs to the developers who create the most value.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>coding</category>
    </item>
    <item>
      <title>How to Use AI to Achieve 10x Productivity</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 23 Jun 2026 18:47:47 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-use-ai-to-achieve-10x-productivity-57of</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-use-ai-to-achieve-10x-productivity-57of</guid>
      <description>&lt;p&gt;A few years ago, being productive meant working longer hours.&lt;/p&gt;

&lt;p&gt;Today, it means working smarter.&lt;/p&gt;

&lt;p&gt;Artificial Intelligence has become one of the biggest productivity multipliers available to developers, entrepreneurs, designers, marketers, and business owners. The people getting the most value from AI are not using it to replace their work. They are using it to eliminate repetitive tasks, speed up decision making, and focus on high value activities.&lt;/p&gt;

&lt;p&gt;In this article, I will share how I use AI to dramatically increase productivity and how you can do the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Thinking of AI as a Chatbot
&lt;/h2&gt;

&lt;p&gt;Most people open ChatGPT, ask a random question, get an answer, and close the tab.&lt;/p&gt;

&lt;p&gt;That is not where the real productivity gains come from.&lt;/p&gt;

&lt;p&gt;Think of AI as a digital assistant that can help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research&lt;/li&gt;
&lt;li&gt;Writing&lt;/li&gt;
&lt;li&gt;Coding&lt;/li&gt;
&lt;li&gt;Planning&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Customer support&lt;/li&gt;
&lt;li&gt;Content creation&lt;/li&gt;
&lt;li&gt;Data analysis&lt;/li&gt;
&lt;li&gt;Brainstorming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to ask better questions occasionally.&lt;/p&gt;

&lt;p&gt;The goal is to build workflows where AI becomes part of your daily process.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use AI for Research
&lt;/h2&gt;

&lt;p&gt;Research can consume hours.&lt;/p&gt;

&lt;p&gt;Instead of opening twenty browser tabs, start with AI.&lt;/p&gt;

&lt;p&gt;For example, instead of searching:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is Laravel queue processing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Explain Laravel queues like I am a junior developer. Include practical examples and common mistakes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You get a structured overview within seconds.&lt;/p&gt;

&lt;p&gt;This does not replace verification, but it drastically reduces the time needed to understand a topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Turn AI Into Your Personal Writing Assistant
&lt;/h2&gt;

&lt;p&gt;Writing documentation, emails, proposals, blog posts, and social media content takes time.&lt;/p&gt;

&lt;p&gt;AI can generate first drafts almost instantly.&lt;/p&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog outlines&lt;/li&gt;
&lt;li&gt;Product descriptions&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Client emails&lt;/li&gt;
&lt;li&gt;Meeting summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest productivity boost comes from eliminating the blank page problem.&lt;/p&gt;

&lt;p&gt;Instead of starting from zero, start with a draft and improve it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use AI for Coding
&lt;/h2&gt;

&lt;p&gt;This is where many developers experience massive productivity gains.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Generate boilerplate code&lt;/li&gt;
&lt;li&gt;Explain unfamiliar code&lt;/li&gt;
&lt;li&gt;Debug issues&lt;/li&gt;
&lt;li&gt;Create database schemas&lt;/li&gt;
&lt;li&gt;Write test cases&lt;/li&gt;
&lt;li&gt;Generate documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, instead of spending thirty minutes creating a CRUD structure, you can generate the foundation in minutes and focus on business logic.&lt;/p&gt;

&lt;p&gt;The key is understanding the code before using it.&lt;/p&gt;

&lt;p&gt;AI should accelerate development, not replace engineering judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Automate Repetitive Tasks
&lt;/h2&gt;

&lt;p&gt;Every repetitive task is a candidate for AI assistance.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatting data&lt;/li&gt;
&lt;li&gt;Creating reports&lt;/li&gt;
&lt;li&gt;Summarizing meetings&lt;/li&gt;
&lt;li&gt;Generating content variations&lt;/li&gt;
&lt;li&gt;Writing support responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you perform the same task more than three times per week, ask yourself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can AI help me do this faster?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is often yes.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use AI as a Thinking Partner
&lt;/h2&gt;

&lt;p&gt;One underrated use of AI is brainstorming.&lt;/p&gt;

&lt;p&gt;Whenever I am stuck on a problem, I ask AI to challenge my assumptions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give me five alternative solutions to this business problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What risks am I missing in this project?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This often reveals ideas I would not have considered on my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Build Prompt Templates
&lt;/h2&gt;

&lt;p&gt;Many people waste time rewriting the same prompts.&lt;/p&gt;

&lt;p&gt;Create reusable templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blog Post Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as a technical writer.

Write a detailed blog post about [TOPIC].

Target audience: [AUDIENCE]

Include:
- Introduction
- Practical examples
- Common mistakes
- Conclusion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have a library of prompts, your productivity increases significantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Focus on Output, Not Activity
&lt;/h2&gt;

&lt;p&gt;AI changes how we measure productivity.&lt;/p&gt;

&lt;p&gt;Being busy is not the goal.&lt;/p&gt;

&lt;p&gt;Producing results is.&lt;/p&gt;

&lt;p&gt;If AI helps you complete a task in 10 minutes instead of 1 hour, that is not cheating.&lt;/p&gt;

&lt;p&gt;That is efficiency.&lt;/p&gt;

&lt;p&gt;The most productive professionals are not necessarily the hardest workers.&lt;/p&gt;

&lt;p&gt;They are often the best at leveraging tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Blindly Trusting AI
&lt;/h3&gt;

&lt;p&gt;Always verify important information.&lt;/p&gt;

&lt;p&gt;AI can make mistakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Vague Prompts
&lt;/h3&gt;

&lt;p&gt;Poor prompts lead to poor outputs.&lt;/p&gt;

&lt;p&gt;Provide context, goals, and constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trying to Automate Everything
&lt;/h3&gt;

&lt;p&gt;Not every task should be delegated.&lt;/p&gt;

&lt;p&gt;Focus on repetitive and low value work first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI is not a magic button.&lt;/p&gt;

&lt;p&gt;It will not automatically make you productive.&lt;/p&gt;

&lt;p&gt;The real advantage comes from integrating AI into your daily workflow and using it consistently.&lt;/p&gt;

&lt;p&gt;Start small.&lt;/p&gt;

&lt;p&gt;Choose one repetitive task you do every day.&lt;/p&gt;

&lt;p&gt;Use AI to reduce the time required for that task.&lt;/p&gt;

&lt;p&gt;Then repeat the process.&lt;/p&gt;

&lt;p&gt;Over time, the small improvements compound.&lt;/p&gt;

&lt;p&gt;That is where the real 10x productivity gains come from.&lt;/p&gt;

</description>
      <category>coding</category>
      <category>ai</category>
      <category>claude</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 29 Sep 2025 03:58:20 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/-bdn</link>
      <guid>https://dev.to/moniruzzamansaikat/-bdn</guid>
      <description></description>
    </item>
  </channel>
</rss>
