Pular para o conteúdo principal

Designing an AI-Assisted Software Engineering Workflow for Production Applications


Artificial Intelligence has dramatically accelerated software development. However, after using LLMs in several real-world projects, I noticed that the largest challenge was no longer generating code, it was maintaining engineering discipline.

Modern software projects require much more than implementation. Every feature introduces architectural decisions, security implications, performance considerations, operational costs, and long-term maintenance challenges (to mention some). Asking a single AI assistant to handle all these concerns simultaneously often produces inconsistent results.

This observation motivated me to build an AI-assisted engineering workflow that separates software development into specialized responsibilities instead of relying on one generic prompt.

The Motivation

One of my ongoing projects is a production-grade link curation platform lnk4st.co (https://lnk4st.co) inspired by services such as "Link Tree" and "link Bio".

Although the platform itself serves as a laboratory for experimenting with cloud-native architectures, distributed systems, caching strategies, CI/CD pipelines, media optimization, and security controls, it also became an ideal environment for improving how AI participates in software engineering.

Instead of treating AI as a code generator, I began treating it as a collection of specialized engineering roles.

From Scrum Ceremonies to AI Specialists

The workflow borrows inspiration from Scrum ceremonies.

Rather than asking an AI to "implement feature X", each request passes through independent analysis stages, each responsible for evaluating a different aspect of the work.

The objective is simple:

  • Understand the request correctly;
  • Evaluate technical feasibility;
  • Identify architectural impacts;
  • Assess security risks;
  • (Only then) Generate implementation code.

This separation reduces ambiguity and encourages more deliberate engineering decisions.

Each stage acts as a gate before the next one begins.

The Engineering Pipeline

A typical development request follows a structured pipeline.

1. Requirement Analysis

The first stage focuses exclusively on understanding the business request.

Instead of discussing implementation details, the AI validates:

  • Functional requirements;
  • Expected behavior;
  • Edge cases;
  • Assumptions;
  •  Missing information.

The goal is to eliminate ambiguity before any technical discussion begins.This stage focuses primarily on tokenizing the requested demand that will be used in subsequent steps to expedite and better guide the responses. It essentially involves training the agent regarding the specific requirements of the request. Therefore, any information that can be added (no matter how small the detail) should be provided.

2. Technical Feasibility

Once the requirement is understood, another specialized agent evaluates the engineering implications.

Typical questions include:

  • Is the feature technically feasible?
  • Does it require architectural changes?
  • Can existing services be reused?
  • Will it impact scalability?
  • Are there performance concerns?

At this point, no production code is generated.

The output is purely technical analysis. The focus of this step is to consider the need to create subtasks. E.g., if there is a requirement to upgrade a server to migrate a service from BullMQ to RabbitMQ or Apache Kafka, this phase might entail tasks requesting changes to the development, testing, and production environments.

3. Security Review

Security is intentionally isolated from implementation.

The security stage evaluates topics such as:

  • Authentication;
  • Authorization;
  • Input validation;
  • Data exposure;
  • Abuse prevention;
  • Storage implications;
  • API surface analysis;
  • Potential attack vectors.

In a way this is coplementary to the Technical Feasibility of the task. Separating security from implementation significantly improves consistency because security concerns are evaluated independently rather than as an afterthought.

4. Implementation

Only after the previous stages complete successfully does the implementation agent generate code.

Code Implementation Agent Structure

Because the earlier analyses have already defined architecture, constraints, and risks, implementation becomes much more deterministic.

Code Implementation Agent Rules
Code Implementation Agent Archtecture

The coding agent focuses on producing software aligned with predefined engineering guidelines instead of making architectural decisions on its own.

Language-Specific Engineering Standards

One interesting observation was that engineering standards vary considerably across programming languages and development teams. A Laravel project requires different conventions than a NestJS service. A React frontend follows different organizational patterns than an Angular frontend.

Instead of creating one universal coding prompt, implementation is driven by language-specific engineering guides. These guides define conventions such as:

  • Project organization;
  • Dependency management;
  • TTesting strategy;
  • Naming conventions;
  • Architectural patterns;
  • Error handling;
  • Documentation standards;
  • Maintainability rules.

This approach produces code that feels significantly more native to each ecosystem.

Why Multiple Agents?

Large prompts tend to mix responsibilities.One paragraph discusses security. Another requests code generation. A third mentions scalability. The AI continuously switches contexts. Splitting responsibilities into specialized agents produces several advantages:

  • Clearer reasoning;
  • Reduced prompt complexity;
  • Easier validation;
  • Improved consistency;
  • Reusable engineering workflows;
  • Better separation of concerns.

This mirrors how experienced engineering teams actually operate.

Architects, security engineers, backend developers, QA engineers, and DevOps specialists all contribute different perspectives.

The workflow attempts to reproduce this collaborative process.

A Real Production Environment

The AI workflow was validated using a real application rather than isolated examples.

The platform includes production-oriented capabilities such as:

  • React and Next.js frontend;
  • Tailwind CSS and Chakra UI;
  • Automated CI/CD using GitHub Actions and Vercel;
  • Redis caching;
  • Private Google Cloud Storage buckets;
  • Media optimization pipeline converting uploads into WebP assets;
  • Abuse detection mechanisms for public resources;
  • Automated unit, integration, and end-to-end testing with Cypress;
  • Visual regression testing for UI validation;
  • Container-friendly deployment architecture.

Because the project handles actual production concerns, every AI-generated proposal must satisfy practical engineering constraints rather than theoretical examples.

Current Status

At the moment, I am not planning to open-source the specialized agents themselves. They are still evolving, and many prompts, engineering guidelines, and workflows are tightly integrated with my personal development process.

Instead, I prefer sharing the concepts, architecture, and lessons learned while continuing to refine the underlying system.

As the workflow matures, I expect to publish additional articles discussing individual components in greater depth, including engineering guidelines, AI-assisted architecture reviews, prompt organization, and strategies for maintaining code quality in AI-driven software development.

Post Scriptum

One of the most important lessons from this project is that AI becomes significantly more effective when treated as a specialized engineering team rather than a single all-purpose assistant.

Separating requirement analysis, technical feasibility, security evaluation, and implementation encourages better decisions before code is ever written.

In my experience, this approach consistently produces software that is easier to review, more maintainable, and better aligned with production engineering practices than relying solely on large, monolithic prompts.

While the underlying agents remain private for now, I hope the ideas presented here are useful for other engineers exploring practical ways to integrate AI into modern software development.

Comentários

Postagens mais visitadas deste blog

Collation Confusion: Demystifying VARBINARY vs VARCHAR in Database Design

Have you ever wondered why your database sorts strings differently than expected, or why a seemingly simple query delivers "quirky" results? If you’ve worked with databases like MySQL, PostgreSQL, or SQL Server, you’ve likely stumbled across the mysterious world of collation and the subtle but critical differences between VARBINARY and VARCHAR data types. In this article I hope to unravel these concepts for you, explore how collation shapes database behavior, and dive into an experimental case study to reveal surprising insights. Whether you’re a developer or a database engineer, this deep dive will equip you with practical knowledge to avoid common pitfalls and optimize your database designs. Let’s get started! What Is Collation and Why Does It Matter? Collation refers to the set of rules a database uses to compare and sort character strings. It governs how strings are ordered (e.g., is “Apple” less than “apple”?), how accents are treated (e.g., does “é” equal “e”?), and eve...

Demystifying MySQL ALTER TABLE ALGORITHM: INPLACE vs INSTANT vs COPY

  Schema evolution is one of the trickiest aspects of database management. For developers and DBAs, the dreaded ALTER TABLE command often conjures fears of downtime, locks, and performance bottlenecks. But MySQL offers a powerful word! The "ALGORITHM" modifier that determines how schema changes are executed. In this article, we’ll break down the three key algorithms "INPLACE", "INSTANT", and "COPY" to help you understand their trade-offs, performance implications, and even some unconventional ways to use them. Whether you’re optimizing for zero downtime or experimenting with stress testing, this guide will give you practical insights and real-world strategies. IMPORTANT: Check your MySQL version: In MySQL 8.0+, many table changes are instantaneous, and the command modifications presented here are only available in this and later versions. Understanding the ALGORITHM Modifier When you run an ALTER TABLE in MySQL, you can specify the algorithm, lik...

NestJS Clustering: Advanced techniques to increase NestJS Apps response

In today’s fast-evolving digital landscape, performance and scalability have become the lifeblood of modern applications. As advanced JavaScript developers, we continuously seek strategies to optimize our code and leverage every ounce of our infrastructure. NestJS clustering promises not just incremental improvements but exponential enhancements by fully unlocking the potential of your virtual machines. This article delves into NodeJS clustering within the NestJS framework, exploring its theoretical underpinnings, offering practical, code-rich examples, and even highlighting an experimental twist that can set your application apart. Unlocking the Power of NodeJS Clustering At its core, NodeJS clustering is about taking full advantage of multi-core systems. Typical NodeJS apps run as single-threaded processes, which can be a bottleneck when you need to handle a massive number of concurrent operations. Clustering allows you to spin up multiple worker processes that share the same server ...