Kurniadi Ahmad Wijaya
Forward Deployed AI Engineer
Built production-grade AI and software for banking, fintech and enterprise.
Technical Consultant, Software & AI · Metrodata (PT Mitra Integrasi Informatika)
Skip to content
Kurniadi Ahmad Wijaya

About and contact

I started learning Android development at a vocational school in Malang and opened my GitHub account in 2016. Through school and Telkom University, I earned 20 competition placings, including seven first places, in work ranging from chatbot prototypes to data science and capture-the-flag.

I helped lead a 200-student programming club, trained an IndoBERT model for campus sentiment analysis and supported myself with part-time e-commerce backend work. At MNC, Jatis and Jenius, I built travel payments, multi-tenant SaaS and digital-banking integrations. In 2026, I joined Metrodata's Microsoft AI practice. I now write the specs, direct AI coding agents in parallel and review their work before merging. I build voice agents that callers can interrupt mid-sentence, a security platform that opens fix PRs and document AI that must not guess. Alongside that, I build Indonesian-language Terminal-Bench tasks for LILT AI that test whether frontier AI agents handle Indonesian conventions. Evaluation determines which changes I release.

How this site was built

Working approach

I define each feature in a written spec with acceptance criteria. GitHub Copilot, Claude Code and Codex implement much of the code in parallel; I remain responsible for design, review, verification in a deployed environment and the merge. I use gold sets, A/B tests, CI gates and shadow mode to evaluate changes, and report metrics with their measurement method. Exact logic stays in deterministic code, and an LLM feature is done only when it is evaluated, guarded and observable.

  1. Define the Spec First

    Before implementation, I write a numbered spec with acceptance criteria and a constitution: the working rules every agent must follow.

  2. Delegate Implementation, Own the Review

    AI coding agents implement much of the code in parallel. I am responsible for design, review, verification in a deployed environment and the merge decision.

  3. Evaluate Before Release

    I evaluate changes with gold sets, A/B tests, CI gates and shadow mode. I record negative results and leave changes disabled when they do not help.

  4. Design for Recovery

    I plan for failures and build a recovery path rather than assume the system will always work.

  5. Report Metrics with Context

    I publish a metric only when I can explain how it was measured: in the lab, offline or live.

How I run AI in production

I treat observability as part of the feature, not an afterthought. The AI services I run on Azure are instrumented with OpenTelemetry, mostly through the Azure Monitor distro, on Python (FastAPI, Functions) and Node (Next.js), across App Service, Functions and Container Apps.

  • LLM telemetry with GenAI conventions. Each model call records token usage (including reasoning and cached tokens), model, provider and agent, so cost and latency can be traced per feature.

  • Alerts as code. Alert rules, action groups and diagnostic settings live in Bicep next to the app and ship with azd: 44 rules in production today, covering daily and month-to-date spend, reasoning-token spikes, 429 throttling per deployment, judge latency and failed evaluation gates.

  • Telemetry governance. Personal data is redacted before export. Noisy spans are sampled, and ingestion has a daily cap with an alert at 80 percent.

  • Self-hosted when it fits. For a ticketing marketplace backend I provisioned Prometheus and Grafana as code, with black-box probes on the public API every 5 seconds plus Postgres, Redis and host metrics.

This site is also monitored: an anonymous performance beacon, nightly performance runs, and public visit stats at the Visitor Observatory in the Lobby.

Proof from production

  • OpenTelemetry

    100%

    of surveyed AI services

  • Alert rules as code

    44

    in production, defined in Bicep across 7 repos

  • LLM token telemetry

    3

    production AI services

  • Traced dependency calls

    ~1.2M

    per month on one queue-based scanner

  • API probes

    10

    public endpoints every 5 s

Grafana Blackbox Exporter dashboard: an HTTP probe overview table with every endpoint up and returning 200, above a chart of probe duration per endpoint, all under 65 ms.
The Blackbox probe dashboard provisioned for the ticketing marketplace backend, rendered locally from its monitoring config with a demo target and demo traffic. Hosts and routes are placeholders.
Alert rule as code (masked)
param databaseAccountName string
param actionGroupId string

@description('429 responses per 15 minutes that fire the alert.')
param throttleThreshold int = 50

resource database 'Microsoft.DocumentDB/databaseAccounts@2025-10-15' existing = {
  name: databaseAccountName
}

resource throttling 'Microsoft.Insights/metricAlerts@2026-01-01' = {
  name: '${databaseAccountName}-throttling'
  location: 'global'
  properties: {
    description: 'Cosmos DB returned 429 TooManyRequests above the threshold in 15 minutes.'
    severity: 3
    enabled: true
    scopes: [database.id]
    evaluationFrequency: 'PT5M'
    windowSize: 'PT15M'
    autoMitigate: true
    criteria: {
      'odata.type': 'Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria'
      allOf: [
        {
          criterionType: 'StaticThresholdCriterion'
          name: 'throttled'
          metricNamespace: 'Microsoft.DocumentDB/databaseAccounts'
          metricName: 'TotalRequests'
          dimensions: [{ name: 'StatusCode', operator: 'Include', values: ['429'] }]
          operator: 'GreaterThan'
          threshold: throttleThreshold
          timeAggregation: 'Count'
        }
      ]
    }
    actions: [{ actionGroupId: actionGroupId }]
  }
}

One alert rule as code, masked: Cosmos DB 429 throttling from the AI code security platform. Names are placeholders.

Related case studies

Skills

  • AI and LLM

    • Microsoft Agent Framework
    • LangGraph
    • LangChain
    • Azure OpenAI (incl. Realtime)
    • Prompt Shields
    • Hugging Face
    • RAG
    • Hybrid/Vector Search
    • LLM evaluation
  • Data science and ML

    • pandas
    • NumPy
    • Matplotlib
    • Seaborn
    • Plotly
    • Streamlit
    • Jupyter
    • scikit-learn
    • PyTorch
    • Hugging Face Transformers
    • Keras
    • Sastrawi
  • Azure

    • Azure AI Foundry
    • Azure AI Search
    • Cosmos DB
    • Document Intelligence
    • Azure Container Apps
    • Azure App Service
    • Azure Functions
    • Service Bus
    • Key Vault
    • Managed Identity
    • Microsoft Fabric
    • Azure Monitor
  • Languages

    • Python
    • TypeScript
    • JavaScript
    • Go
    • Java
    • PHP
  • Backend

    • FastAPI
    • Spring Boot
    • Express.js
    • Gin
    • Echo
    • Laravel
    • CodeIgniter
    • Flask
    • Django
    • GraphQL
  • Frontend

    • Next.js
    • React
    • Vue
    • Nuxt
    • Tailwind CSS
  • Data and messaging

    • PostgreSQL
    • MySQL
    • MongoDB
    • Firebase
    • Redis
    • Kafka
    • RabbitMQ
    • Elasticsearch
  • DevOps

    • Docker
    • Bicep
    • GitHub Actions
    • Jenkins
    • AWS
    • LiveKit
    • k6
    • SonarQube
    • Sentry

Certifications

  • AI-103Microsoft, Sep 2026
  • AI-901Microsoft, May 2026
  • AZ-900Microsoft, May 2026
  • ETS2024
  • IARC x APTIKOMDec 2021
  • Kominfo x IBMJul 2021
  • AB-100Microsoft, Nov 2026In progress

Visits

Visits counted by the site itself and AI question totals: today live, earlier days refreshed every hour.

Loading visit stats

CV kiosk

Read my CV here, or download the PDF.