The AI-Native SDLC

Every phase of software delivery is being reshaped by AI. Here's what the new lifecycle actually looks like — from requirements to production.

/ Dylan G Harbour / 8 min read
aiengineeringsdlc
scroll

I’ve spent the last decade building software across Africa and Europe — leading teams, shipping platforms, and refining how we deliver. In the past two years, AI hasn’t just become a tool I use. It’s become a collaborator that’s reshaping every phase of how we build.

This isn’t a hype piece. This is a practitioner’s view of what the software development lifecycle looks like when AI is embedded at every stage — not as an afterthought, but as a first-class participant.

Requirements & Discovery

The traditional requirements phase is a graveyard of misaligned expectations. Stakeholders describe what they want in natural language. Engineers translate that into specifications. Meaning gets lost.

AI changes this dynamic fundamentally. Today, I use AI to:

  • Interrogate requirements — feeding user stories into a model and asking it to identify ambiguities, missing edge cases, and contradictions
  • Generate acceptance criteria from high-level descriptions
  • Simulate user personas to stress-test whether a feature actually solves the stated problem

Here’s a real example. Given a brief like “users should be able to export their data,” an AI collaborator immediately asks:

What formats? CSV, JSON, PDF? What data — just their profile, or activity history too? Do they need to schedule exports or is it on-demand? What about data that references other users?

These are the questions that used to surface three sprints into implementation. Now they surface in minutes.

Architecture & Design

This is where the leverage gets serious. AI excels at exploring the solution space — quickly generating architectural options, trade-off analyses, and implementation sketches.

A typical workflow:

# Prompt context I provide to the AI
context:
  system: 'Event-driven microservices on AWS'
  constraints:
    - Must handle 10k events/sec at peak
    - GDPR-compliant data residency
    - Team is 4 engineers, 2 senior
  question: 'Design the data pipeline for user analytics'

The response isn’t a final architecture — it’s a starting point for conversation. The AI might propose three approaches:

ApproachThroughputComplexityCost
Kinesis + LambdaHighLowMedium
MSK (Kafka) + ECSVery HighHighHigh
SQS + Step FunctionsMediumLowLow

What previously took a senior engineer half a day of whiteboarding now takes fifteen minutes of structured prompting. The engineer’s job shifts from generating options to evaluating them — a much better use of experience.

Implementation

This is the phase that gets the most attention, and rightfully so. AI-assisted coding isn’t autocomplete — it’s a fundamentally different way of working.

The key insight: AI is best at the boring parts. Not because they’re easy, but because they’re well-defined. Boilerplate, CRUD operations, test scaffolding, data transformations — these are patterns the model has seen millions of times.

# What I write
def process_user_event(event: UserEvent) -> AnalyticsRecord:
    """Transform a raw user event into an analytics record.

    Handles timezone normalization, PII stripping, and
    enrichment from the user profile cache.
    """

# What AI generates (and I review, refine, ship)
def process_user_event(event: UserEvent) -> AnalyticsRecord:
    normalized_ts = normalize_to_utc(event.timestamp, event.timezone)

    stripped_payload = strip_pii(
        event.payload,
        fields=PII_FIELDS,
        strategy=HashStrategy.SHA256
    )

    profile = user_cache.get(event.user_id)
    enriched = enrich_record(
        stripped_payload,
        segment=profile.segment if profile else "unknown",
        region=profile.region if profile else event.geo_ip_region,
    )

    return AnalyticsRecord(
        event_id=event.id,
        timestamp=normalized_ts,
        data=enriched,
        version=SCHEMA_VERSION,
    )

The human writes the intent. The AI writes the implementation. The human reviews, adjusts, and owns the result. (The quality of that intent — the context you provide — is what separates good AI-assisted code from bad.)

Where AI falls short in implementation

It’s not all acceleration. AI-generated code has predictable failure modes:

  • Over-abstraction — building factory patterns when a simple function will do
  • Stale patterns — suggesting deprecated APIs or libraries
  • Missing context — not understanding your team’s conventions or the broader system
  • Confident incorrectness — generating plausible-looking code that subtly breaks in production

The craft is knowing when to trust and when to verify. This is where experienced engineers earn their keep.

Testing & Verification

Here’s where AI genuinely shines. Testing is repetitive, combinatorial, and exactly the kind of work that benefits from exhaustive pattern matching.

# AI-generated test cases from the function signature alone
class TestProcessUserEvent:
    def test_normalizes_timezone_to_utc(self):
        event = make_event(timezone="Africa/Johannesburg")
        result = process_user_event(event)
        assert result.timestamp.tzinfo == timezone.utc

    def test_strips_pii_from_payload(self):
        event = make_event(payload={"email": "[email protected]", "action": "click"})
        result = process_user_event(event)
        assert "email" not in result.data
        assert result.data["action"] == "click"

    def test_enriches_with_profile_when_available(self):
        user_cache.set("u123", Profile(segment="enterprise", region="EU"))
        event = make_event(user_id="u123")
        result = process_user_event(event)
        assert result.data["segment"] == "enterprise"

    def test_falls_back_to_geo_ip_when_no_profile(self):
        event = make_event(user_id="unknown", geo_ip_region="ZA")
        result = process_user_event(event)
        assert result.data["region"] == "ZA"

    def test_handles_missing_optional_fields(self):
        event = make_event(payload={})
        result = process_user_event(event)
        assert result.event_id == event.id

I didn’t write those tests. But I reviewed them, and they’re exactly what I would have written — minus the twenty minutes of typing. More importantly, the AI suggested edge cases I might have skipped under time pressure.

Deployment & Operations

The ops side of the lifecycle is perhaps the most underappreciated area for AI integration. Three patterns I use daily:

1. Infrastructure as Code generation. Describe what you need, get a first draft of Terraform or CloudFormation that’s 80% correct.

# "I need an SQS queue with a dead-letter queue,
#  encrypted at rest, with a Lambda trigger"
# → AI generates the full IaC module

2. Incident response augmentation. Feed error logs, metrics, and recent deployments into a model. It can correlate signals faster than a human scrolling through dashboards at 3am.

3. Runbook generation. AI can transform tribal knowledge in Slack threads and post-mortems into structured, version-controlled runbooks.

The pattern is consistent: AI handles the synthesis — pulling together information from multiple sources into a coherent picture. Humans handle the judgment — deciding what to do about it.

The Craft Remains

Here’s what I believe most deeply after two years of building this way: AI amplifies craft. It doesn’t replace it.

The engineers who thrive in this new world aren’t the ones who type the fastest. They’re the ones who:

  • Ask the best questions
  • Recognize when AI output is subtly wrong
  • Understand systems deeply enough to evaluate architectural trade-offs
  • Communicate intent clearly — to humans and to models
  • Know when to trust automation and when to reach for manual precision

The SDLC hasn’t been disrupted. It’s been accelerated. Every phase still matters. Requirements still need to be right. Architecture still needs to be thoughtful. Code still needs to be reviewed. Tests still need to be comprehensive. Deployments still need to be safe.

What’s changed is the ratio of thinking to typing. And in my experience, that shift produces better software — not just faster software.

The craft remains. The tools have evolved. And for those willing to adapt, the best work of our careers is ahead of us.