Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
18 Sep 2026 · 23 mnt baca ·Artikel 48 / 208
Go

AWS Kiro Golang: Spec-First IDE Setup dan Workflow Lengkap

Deep dive AWS Kiro untuk Go developer. Spec-first workflow built-in, steering documents, agent hooks, spec vs Spec Kit perbandingan, dan cara menggunakannya untuk Golang project.

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

AWS Kiro: Spec-First IDE untuk Go Developer

AWS Kiro untuk Golang adalah tool yang paling provocative di landscape 2026 — bukan karena fitur-fiturnya saja, tapi karena secara filosofis ia mengambil stance yang bold: kamu tidak seharusnya langsung coding tanpa spec tertulis yang jelas. Untuk tim Go yang sudah familiar dengan SDD dari topik sebelumnya, ini bukan sesuatu yang aneh — ini adalah validation.

Di artikel ini kita bedah setup Kiro untuk Go, steering documents sebagai project memory, spec-first workflow yang built-in, agent hooks untuk quality automation, hingga perbandingan jujur dengan GitHub Spec Kit.


08.1 Philosophy AWS Kiro: Spec-First by Design

Hampir semua AI coding tool didesain untuk menjawab pertanyaan “bagaimana saya bisa coding lebih cepat?” Kiro didesain untuk menjawab pertanyaan yang berbeda: “bagaimana saya memastikan saya build hal yang benar dengan cara yang benar?” Perbandingan alur berikut memperlihatkan bedanya secara konkret.

text
 1Traditional AI coding workflow:
 2  Developer → Prompt → AI generates code → Developer reviews
 3
 4Kiro workflow:
 5  Developer → Describe need → Kiro asks clarifying questions
 6  → Kiro generates spec → Developer approves spec
 7  → Kiro generates plan → Developer approves plan
 8  → Kiro implements → Kiro verifies against spec
 9
10Perbedaan yang kelihatan kecil tapi impact-nya besar:
11  → Requirement ambiguity terdeteksi SEBELUM implementation
12  → Implementation tracked against spec secara explicit
13  → Spec jadi single source of truth
14  → Onboarding developer baru: baca spec, bukan baca kode

Inti perbedaannya ada di satu titik: ambiguitas requirement tertangkap sebelum implementasi, bukan sesudahnya. Ini persis prinsip SDD yang kita anut sepanjang seri — hanya saja Kiro menjadikannya default, bukan disiplin manual.


08.2 Instalasi dan Setup

Sebelum menikmati spec-first workflow, kamu perlu memasang Kiro dan menyambungkannya ke AWS account. Perintah dan langkah berikut menutup instalasi lintas platform, login, hingga verifikasi dukungan Go.

bash
 1# Download Kiro dari kiro.aws
 2# Install sesuai platform:
 3# macOS: open Kiro.dmg, drag ke Applications
 4# Windows: run KiroSetup.exe
 5# Linux: AppImage atau .deb package
 6
 7# Login dengan AWS account
 8# Kiro button di sidebar → Sign in with AWS
 9
10# Verify Go support:
11# Kiro otomatis detect go.mod → setup Go toolchain
12# File Go akan punya AI hints tanpa perlu config tambahan
13
14# Setup Bedrock model (jika enterprise):
15# Kiro Settings → AI Model → Amazon Bedrock
16# Region: pilih yang paling dekat
17# Model: Claude 3.5 Sonnet atau Claude 3 Opus
18
19# Create project:
20# Kiro → New Project → Go → Next
21# Atau: open existing Go project folder

Karena Kiro otomatis mendeteksi go.mod dan menyiapkan toolchain, setup untuk proyek Go nyaris tanpa friksi — cukup buka folder proyek dan Kiro langsung sadar konteks bahasanya.


08.3 Steering Documents: CLAUDE.md untuk Kiro

Steering documents di Kiro mirip CLAUDE.md tapi lebih terstruktur dan bisa dipecah per-topik. File pertama berikut mendefinisikan overview, standar arsitektur, error handling, dan type safety proyek.

markdown
 1# .kiro/steering/project.md
 2# Kiro menggunakan semua file di .kiro/steering/ sebagai persistent context
 3
 4## Project Overview
 5Santekno Shop — Go 1.22 e-commerce, high-traffic, Clean Architecture.
 6Stack: Echo v4, pgx/v5, Redis, Kafka.
 7
 8## Architecture Standards
 9Clean Architecture layers:
10  delivery/http/handler → usecase → repository → domain
11
12Rules (STRICT):
13  - handler: import ONLY usecase interfaces
14  - usecase: import ONLY domain types + repository interfaces
15  - repository: import ONLY domain types + drivers
16  - domain: ZERO external imports
17
18## Error Handling
19Repository not-found: (nil, nil) — NOT error
20Error wrap: fmt.Errorf("package.Method: %w", err)
21HTTP errors: {"error": "UPPERCASE_SNAKE_CASE"}
22
23## Type Safety
24Monetary: int64 cents ONLY
25IDs: UUID (github.com/google/uuid)
26```

File steering kedua fokus khusus ke standar testing, sehingga Kiro tahu framework, pola penamaan, dan struktur suite yang diharapkan. Contoh berikut menetapkannya secara eksplisit.

markdown
 1# .kiro/steering/testing.md
 2
 3## Testing Standards
 4Framework: github.com/stretchr/testify/suite
 5Mocking: go.uber.org/mock/gomock
 6
 7## Test Naming
 8Pattern: Test[Domain]_[Scenario]_[ExpectedResult]
 9Example: TestCancelOrder_WindowExpired_ReturnsError
10
11## Test Suite Structure
12type [Name]Suite struct {
13    suite.Suite
14    ctrl     *gomock.Controller
15    mock[Repo] *mock.Mock[Repo]
16    uc      *[Name]UseCase
17}
18
19func (s *[Name]Suite) SetupTest() {
20    s.ctrl = gomock.NewController(s.T())
21    // setup mocks
22}
23
24func (s *[Name]Suite) TearDownTest() {
25    s.ctrl.Finish()
26}
27```

Memecah steering menjadi beberapa file bertema (project, testing, go-conventions) membuat konteksnya mudah dirawat dan divalidasi — Kiro membaca semuanya sebagai satu kesatuan guardrail persisten.


08.4 Kiro’s Spec-First Workflow: Step by Step

Fitur inti Kiro adalah alur enam langkah dari deskripsi kebutuhan hingga verifikasi terhadap spec. Transkrip berikut mengikuti satu fitur cancel order melewati klarifikasi, spec, plan, implementasi, sampai skor kepatuhan.

text
 1Step 1: Describe the need
 2> "Customer perlu bisa cancel order yang masih PENDING dalam 30 menit"
 3
 4Kiro generate clarifying questions (mirip speckit.clarify):
 5  Q1: Apa yang terjadi dengan stock saat cancel?
 6  Q2: Siapa yang bisa cancel — customer saja atau admin juga?
 7  Q3: Bagaimana jika cancel window sudah expired?
 8  Q4: Apakah perlu Kafka event untuk cancel?
 9
10Step 2: Answer questions → Kiro generate .kiro/features/cancel-order/spec.md
11
12# CancelOrder Feature Specification
13## Acceptance Criteria
14AC1: Customer bisa cancel order dengan status PENDING
15AC2: Order harus dibuat maksimal 30 menit yang lalu
16AC3: Stock di-restore secara atomic dalam database transaction
17AC4: Event ORDER_CANCELLED dikirim ke Kafka (best-effort)
18AC5: Respons: 204 No Content untuk sukses
19AC6: Error codes: ORDER_NOT_FOUND, ORDER_NOT_CANCELLABLE, CANCEL_WINDOW_EXPIRED
20
21Step 3: Review and approve spec (bisa edit langsung di IDE)
22
23Step 4: Generate plan → .kiro/features/cancel-order/plan.md
24## Files to Create/Modify
251. internal/domain/order/entity.go — add CanBeCancelled() bool
262. internal/domain/order/errors.go — add error types
273. internal/usecase/order/cancel_order.go — new file
284. internal/repository/postgres/order_repository.go — add methods
295. internal/delivery/http/handler/order_handler.go — add handler
30
31## Implementation Order (dependency-first)
32Phase 1: Domain (entity + errors)
33Phase 2: Repository interface + PostgreSQL impl
34Phase 3: Usecase + tests
35Phase 4: Handler + router
36
37Step 5: Implement → Kiro implement semua files sesuai plan
38
39Step 6: Verify terhadap spec:
40  AC1: ✅ — handler ada, usecase check status
41  AC2: ✅ — CanBeCancelled() check 30-minute window
42  AC3: ✅ — CancelWithStockRestore dalam transaction
43  AC4: ⚠️ — Kafka publish ada, tapi error handling perlu review
44  AC5: ✅ — handler return 204
45  AC6: ✅ — semua error codes ada
46Score: 95/100

Yang membedakan Kiro dari tool lain ada di Step 6: setiap AC diverifikasi eksplisit terhadap implementasi dan diberi skor. Ambiguitas dijawab di Step 1, bukan ditemukan saat production — inilah inti nilai spec-first.


08.5 Agent Hooks: Automation yang Powerful

Agent hooks adalah fitur Kiro yang tidak ada di tool lain — otomasi yang berjalan pada trigger tertentu. Hook pertama berikut menjalankan rangkaian quality check (build, vet, test, lint) setiap kali file Go disimpan.

yaml
 1# .kiro/hooks/go-quality.yaml
 2
 3name: "Go Quality Automation"
 4description: "Otomasi quality checks setiap kali file Go di-save"
 5triggers:
 6  - type: file_saved
 7    pattern: "**/*.go"
 8    exclude:
 9      - "**/*_test.go"
10      - "**/mock_*.go"
11  - type: before_commit
12
13actions:
14  - name: "Build check"
15    run: "go build ./..."
16    on_failure:
17      message: "🔴 Build failed — fix before continuing"
18      stop: true
19
20  - name: "Vet check"
21    run: "go vet ./..."
22    on_failure:
23      message: "⚠️ Vet issues found"
24      stop: false
25
26  - name: "Test changed packages"
27    run: |
28      CHANGED_PKG=$(dirname $KIRO_CHANGED_FILE)
29      go test ./${CHANGED_PKG}/... -race
30    on_failure:
31      message: "🔴 Tests failing in changed package"
32      stop: true
33
34  - name: "Lint"
35    run: "golangci-lint run $KIRO_CHANGED_FILE"
36    on_failure:
37      message: "⚠️ Lint issues"
38      stop: false

Hook kedua berjalan pada event PR ready dan memicu audit spec compliance, sehingga kepatuhan terhadap spesifikasi ikut terjaga otomatis. Konfigurasinya seperti berikut.

yaml
 1# .kiro/hooks/spec-compliance.yaml
 2
 3name: "Spec Compliance Check"
 4triggers:
 5  - type: pull_request_ready
 6
 7actions:
 8  - name: "Run spec audit"
 9    run: "specify audit --all --fast"
10    on_failure:
11      message: "❌ Spec compliance issues detected"
12      create_issue: true
13      stop: false

Hook ketiga menutup celah maintenance yang sering terlupa: regenerasi mock otomatis setiap kali interface repository berubah. Contohnya sesingkat ini.

yaml
 1# .kiro/hooks/mock-generation.yaml
 2
 3name: "Auto Mock Generation"
 4triggers:
 5  - type: file_saved
 6    pattern: "internal/domain/**/repository.go"
 7
 8actions:
 9  - name: "Regenerate mocks"
10    run: "go generate ./internal/domain/..."
11    on_success:
12      message: "✅ Mocks regenerated"

Dengan agent hooks, disiplin quality (build, test, lint, mock regen, spec audit) ditegakkan oleh tooling secara otomatis pada momen yang tepat — bukan bergantung pada kedisiplinan manual developer yang mudah lupa.


08.6 Kiro vs GitHub Spec Kit: Detailed Comparison

Kita sudah familiar dengan Spec Kit dari topik sebelumnya, jadi wajar membandingkannya dengan Kiro secara jujur. Tabel berikut menyandingkan keduanya dari interface hingga pricing, lalu memetakan kapan memakai masing-masing.

text
 1                    GitHub Spec Kit    AWS Kiro
 2─────────────────────────────────────────────────────
 3Interface           CLI                IDE-embedded
 4Installation        npm install        Desktop app download
 5Trigger mechanism   Manual command     Automatic + IDE integrated
 6Output location     .specify/          .kiro/
 7Spec format         Markdown (open)    Markdown (.kiro proprietary)
 8Portability         Any tool           Kiro-specific workflow
 9LLM                 Configurable       Claude (via Bedrock)
10Agent hooks         ❌                 ✅ Built-in
11Quality automation  Via CI only        Built-in + CI
12Open source         Yes                No (proprietary)
13AWS integration     ❌                 ✅ Native
14Pricing             Free (API cost)    Free beta; TBD post-beta
15Go-specific support via config         Good out-of-box
16
17When to use Spec Kit:
18  → Already using Claude Code (CLI workflow)
19  → Tool-agnostic requirement (not locked to one IDE)
20  → Want open source + full control
21
22When to use Kiro:
23  → Want spec-first INSIDE IDE (no CLI)
24  → AWS-heavy infrastructure
25  → Want built-in agent hooks for quality automation
26  → Team onboarding with built-in spec guidance

Garis pemisahnya jelas: pilih Spec Kit jika kamu butuh portabilitas dan kontrol penuh via CLI open source; pilih Kiro jika kamu ingin spec-first melebur ke dalam IDE dengan agent hooks bawaan dan infrastruktur AWS.


08.7 AWS Kiro untuk Go + AWS Infrastructure

Nilai Kiro melonjak untuk proyek Go yang deploy ke AWS. Contoh pertama menunjukkan Kiro menghasilkan Lambda handler dengan signature AWS Lambda Go SDK yang benar — bukan HTTP handler generik.

go
 1// Prompt: "Implement cancel order sebagai Lambda function"
 2package main
 3
 4import (
 5    "context"
 6    "encoding/json"
 7    "github.com/aws/aws-lambda-go/events"
 8    "github.com/aws/aws-lambda-go/lambda"
 9)
10
11type CancelOrderRequest struct {
12    OrderID string `json:"order_id"`
13    UserID  string `json:"user_id"`
14}
15
16func handler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
17    var input CancelOrderRequest
18    if err := json.Unmarshal([]byte(req.Body), &input); err != nil {
19        return events.APIGatewayProxyResponse{
20            StatusCode: 400,
21            Body:       `{"error":"INVALID_REQUEST"}`,
22            Headers:    map[string]string{"Content-Type": "application/json"},
23        }, nil
24    }
25
26    // ... business logic via dependency injection
27
28    return events.APIGatewayProxyResponse{
29        StatusCode: 204,
30    }, nil
31}
32
33func main() {
34    lambda.Start(handler)
35}
36// Kiro tahu Lambda Go SDK pattern dengan benar
37// Tools lain sering generate generic HTTP handler

Contoh kedua memperlihatkan Kiro membangun repository DynamoDB dengan SDK v2 yang tepat, termasuk konvensi not-found (nil, nil) sesuai steering docs.

go
 1import (
 2    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
 3    "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
 4    "github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue"
 5)
 6
 7type OrderDynamoRepository struct {
 8    client    *dynamodb.Client
 9    tableName string
10}
11
12func (r *OrderDynamoRepository) GetByID(ctx context.Context, id uuid.UUID) (*domain.Order, error) {
13    result, err := r.client.GetItem(ctx, &dynamodb.GetItemInput{
14        TableName: &r.tableName,
15        Key: map[string]types.AttributeValue{
16            "PK": &types.AttributeValueMemberS{Value: "ORDER#" + id.String()},
17        },
18    })
19    if err != nil {
20        return nil, fmt.Errorf("orderDynamoRepo.GetByID: %w", err)
21    }
22    if result.Item == nil {
23        return nil, nil  // not found
24    }
25
26    var order domain.Order
27    if err := attributevalue.UnmarshalMap(result.Item, &order); err != nil {
28        return nil, fmt.Errorf("orderDynamoRepo.GetByID unmarshal: %w", err)
29    }
30    return &order, nil
31}

Kiro juga bisa menghasilkan artefak infrastruktur seperti ECS task definition langsung dari konfigurasi service Go. Contoh berikut adalah output yang selaras dengan environment dan health check service.

json
 1{
 2  "family": "cancel-order-service",
 3  "networkMode": "awsvpc",
 4  "containerDefinitions": [
 5    {
 6      "name": "cancel-order",
 7      "image": "your-ecr.amazonaws.com/cancel-order:latest",
 8      "environment": [
 9        {"name": "GO_ENV", "value": "production"},
10        {"name": "DB_MAX_CONNECTIONS", "value": "10"}
11      ],
12      "secrets": [
13        {"name": "DATABASE_URL", "valueFrom": "arn:aws:secretsmanager:..."}
14      ],
15      "healthCheck": {
16        "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
17      }
18    }
19  ]
20}

Ketiga contoh ini menegaskan keunggulan situasional Kiro: untuk stack Go-di-AWS, ia sadar pola SDK dan artefak infrastruktur secara native — sesuatu yang membuat tool generik sering menghasilkan kode yang “hampir benar” tapi tidak idiomatik AWS.


08.8 Kiro’s Spec Quality: Jujur Assessment

Kiro menghasilkan spec yang baik untuk fitur standar, tapi tetap punya batas. Penilaian jujur berikut memilah apa yang Kiro kerjakan dengan baik, apa yang perlu di-review, dan apa yang sering ia lewatkan.

text
 1✅ Yang Kiro lakukan dengan baik:
 2  - Basic CRUD features: sangat baik
 3  - Error handling patterns: automatically include standard error codes
 4  - AWS service patterns: native awareness
 5  - Acceptance criteria structure: well-formed
 6
 7⚠️ Yang perlu developer review:
 8  - Business rules yang complex: perlu manual verification
 9  - Cross-service dependencies: sering over/under-specify
10  - Performance requirements: kadang generic ("response time < 200ms")
11  - Edge cases: tidak selalu comprehensive
12
13❌ Yang Kiro sering salah atau miss:
14  - Domain-specific business rules (cancel window = 30 menit)
15  - Security requirements (authentication, authorization)
16  - Data consistency requirements di distributed system

Rekomendasinya tegas: selalu review spec yang di-generate Kiro sebelum approve. Perlakukan sebagai starting point yang perlu refinement, bukan artifact final — terutama untuk business rule domain-specific dan requirement security.


08.9 Onboarding Tim dengan Kiro

Kiro sangat berguna untuk onboarding developer baru ke project Go. Perbandingan hari pertama berikut menunjukkan bedanya antara tanpa Kiro dan dengan Kiro yang dibekali steering docs yang baik.

text
 1Developer baru bergabung ke tim Santekno:
 2
 3Day 1 tanpa Kiro:
 4  "Baca codebase selama beberapa hari dulu"
 5  → Developer bingung, tidak tahu mana yang penting
 6  → Minta review ke senior untuk setiap langkah kecil
 7
 8Day 1 dengan Kiro + steering docs yang baik:
 9  Kiro baca semua steering docs:
10    - .kiro/steering/project.md (architecture)
11    - .kiro/steering/go-conventions.md (patterns)
12    - .kiro/steering/testing.md (test patterns)
13
14  Developer: "Implement CRUD untuk Product Review"
15
16  Kiro: "Berdasarkan architecture dari steering docs,
17   ini spec yang saya propose untuk Product Review CRUD:
18   [spec sesuai Clean Architecture convention tim]
19   Plan: [plan sesuai layer pattern yang tim pakai]"
20
21  Developer productive dari day 1,
22  karena Kiro pakai steering docs sebagai guardrail.

Kuncinya bukan Kiro-nya, melainkan kualitas steering docs: begitu konvensi tim tertulis, Kiro menjadikannya guardrail yang membuat developer junior productive sejak hari pertama tanpa terus-menerus mengganggu senior.


08.10 Kiro Beta: Apa yang Diexpect

Kiro di mid-2026 masih berstatus beta dan gratis, dengan sejumlah keterbatasan yang perlu kamu antisipasi. Ringkasan berikut memisahkan limitasi beta saat ini dari estimasi biaya pasca-beta.

text
 1Status Kiro mid-2026: Beta (gratis)
 2
 3Known beta limitations:
 4  - Spec verification kadang false positive
 5  - Agent hooks masih experimental di beberapa edge cases
 6  - Large monorepo support masih beta
 7  - Beberapa AWS services belum di-cover (layanan baru)
 8
 9Post-beta expectations (best estimate):
10  Pricing: $15-30/dev/bulan (estimate)
11  Bedrock cost: terpisah (~$5-20/dev/bulan untuk moderate usage)
12  Total: ~$20-50/dev/bulan

Strategi yang masuk akal: adopsi sekarang selagi gratis untuk mengevaluasi nilainya, lalu tentukan keputusan final ketika pricing pasca-beta diumumkan. Ingat bahwa Bedrock cost dihitung terpisah dari lisensi Kiro.


08.11 Troubleshooting Kiro untuk Go

Beberapa masalah umum muncul saat memakai Kiro untuk Go, dan hampir semuanya berujung pada steering docs yang kurang detail. Untuk kasus Kiro tak mendeteksi fitur Go 1.22, tambahkan constraint versi eksplisit seperti berikut.

markdown
1# .kiro/steering/go-version.md
2## Go Version Requirements
3This project uses Go 1.22 ONLY.
4Features available: generics (basic), for-range variables, maps.Must
5NOT available: range-over-func, slices.Collect, iter.Seq (Go 1.23+)
6```

Jika spec yang di-generate tidak mengikuti Clean Architecture, perinci aturan layer khusus untuk spec generation di steering doc. Contohnya seperti berikut.

markdown
1# .kiro/steering/architecture.md
2## Layer Rules for Spec Generation
3
4When generating spec for ANY feature:
51. Handler layer ONLY calls usecase (via interface)
62. Usecase layer ONLY calls repository (via interface)
73. Repository layer ONLY accesses database/cache
84. No direct DB access from handler or usecase
9```

Untuk mock yang tidak ter-regenerate otomatis, pasang agent hook yang memantau perubahan file repository. Konfigurasi minimalnya seperti ini.

yaml
1# .kiro/hooks/auto-mock.yaml
2triggers:
3  - type: file_saved
4    pattern: "internal/domain/**/repository.go"
5actions:
6  - run: "go generate ./internal/domain/..."

Pola solusinya konsisten: hampir setiap masalah Kiro diselesaikan dengan memperjelas steering docs atau menambah agent hook — investasi awal di konteks tertulis terbayar dalam bentuk output yang jauh lebih patuh.


08.12 Kiro + Spec Kit: Kombinasi yang Bisa Dipakai

Kalau tim sudah memakai Spec Kit dan ingin mencoba Kiro, keduanya tidak harus saling menggantikan. Dua opsi kombinasi berikut memungkinkan kamu mengambil yang terbaik dari masing-masing.

text
 1Option A: Spec Kit untuk spec generation, Kiro untuk IDE implementation
 2  1. specify feature → generate .specify/features/x/spec.md
 3  2. Copy/reference spec ke .kiro/features/x/spec.md
 4  3. Kiro: "Implement berdasarkan spec ini"
 5  4. Agent hooks Kiro untuk quality automation
 6
 7Option B: Kiro untuk spec, Spec Kit untuk audit
 8  1. Kiro → generate dan implement feature
 9  2. specify audit → verify compliance (audit Spec Kit lebih mature)
10  3. CI: specify audit di GitHub Actions
11
12Best of both worlds: Kiro's IDE-embedded workflow + Spec Kit's mature audit tools

Kombinasi ini menurunkan risiko adopsi: kamu memanfaatkan workflow IDE Kiro yang mulus sambil tetap menyandarkan verifikasi akhir pada audit Spec Kit yang lebih matang.


08.13 Kiro dalam Konteks Tim yang Sudah Pakai SDD

Bagi tim yang sudah menjalankan SDD dari topik sebelumnya, adopsi Kiro sebaiknya gradual. Peta adopsi per-sprint berikut menunjukkan jalur berisiko rendah dari sekadar “IDE companion” hingga full workflow.

text
 1Sprint 1: Kiro sebagai "IDE companion" untuk workflow yang sudah ada
 2  - Gunakan Kiro untuk inline coding (mirip Cursor)
 3  - Belum pakai spec feature Kiro
 4  - Setup steering docs dulu
 5
 6Sprint 2-3: Coba spec feature untuk fitur baru
 7  - Biarkan Kiro generate spec (tetap pakai Spec Kit untuk audit)
 8  - Compare: Kiro spec vs manual spec dari Spec Kit
 9
10Sprint 4+: Full Kiro workflow untuk satu project
11  - Kiro untuk spec + implementation
12  - Spec Kit hanya untuk audit (specify audit --all)
13  - Agent hooks untuk quality automation

Adopsi bertahap ini berisiko rendah karena Spec Kit tetap ada sebagai fallback dan capability audit-nya masih dipakai — tim tidak perlu meninggalkan tool yang sudah terbukti hanya untuk mencoba yang baru.


08.14 Kiro untuk Go Testing: Workflow Lengkap

Kiro punya pendekatan unik: test generation di-tie langsung ke spec. Sebelum menulis kode test, Kiro membuat test plan yang memetakan setiap kasus ke AC. Contoh test plan-nya seperti berikut.

markdown
 1# .kiro/features/cancel-order/test-plan.md
 2
 3## Test Plan: Cancel Order
 4
 5### Unit Tests (usecase layer)
 6- [ ] TC-01: Happy path — PENDING within 30 min → nil error
 7- [ ] TC-02: Order not found → ErrOrderNotFound
 8- [ ] TC-03: Order not owned by user → ErrOrderNotFound
 9- [ ] TC-04: Status not PENDING → OrderNotCancellableError
10- [ ] TC-05: Window expired (> 30 min) → ErrCancelWindowExpired
11- [ ] TC-06: Repository cancel fails → wrapped error
12- [ ] TC-07: Kafka publish fails → nil (best-effort, no error)
13- [ ] TC-08: Concurrent cancel → only first succeeds
14
15### Integration Tests
16- [ ] TC-09: Full flow via HTTP endpoint
17- [ ] TC-10: Database rollback on stock restore failure
18```

Setelah test plan di-approve, Kiro mengimplementasikan test dengan testify/suite + gomock sesuai steering doc. Cuplikan berikut memperlihatkan suite lengkap untuk skenario happy path dan window expired.

go
 1type CancelOrderSuite struct {
 2    suite.Suite
 3    ctrl          *gomock.Controller
 4    mockOrderRepo *mock.MockOrderRepository
 5    mockPublisher *mock.MockEventPublisher
 6    uc            *usecase.CancelOrderUseCase
 7}
 8
 9func (s *CancelOrderSuite) SetupTest() {
10    s.ctrl = gomock.NewController(s.T())
11    s.mockOrderRepo = mock.NewMockOrderRepository(s.ctrl)
12    s.mockPublisher = mock.NewMockEventPublisher(s.ctrl)
13    s.uc = usecase.NewCancelOrderUseCase(s.mockOrderRepo, s.mockPublisher)
14}
15
16func (s *CancelOrderSuite) TearDownTest() {
17    s.ctrl.Finish()
18}
19
20func (s *CancelOrderSuite) TestExecute_PendingWithinWindow_ReturnsNil() {
21    orderID := uuid.New()
22    userID := uuid.New()
23    order := &domain.Order{
24        ID:        orderID,
25        UserID:    userID,
26        Status:    domain.StatusPending,
27        CreatedAt: time.Now().Add(-10 * time.Minute),
28    }
29
30    s.mockOrderRepo.EXPECT().
31        GetByIDAndUserID(gomock.Any(), orderID, userID).
32        Return(order, nil)
33    s.mockOrderRepo.EXPECT().
34        CancelWithStockRestore(gomock.Any(), orderID).
35        Return(nil)
36    s.mockPublisher.EXPECT().
37        PublishOrderCancelled(gomock.Any(), orderID, userID)
38
39    err := s.uc.Execute(context.Background(), usecase.CancelOrderInput{
40        OrderID: orderID,
41        UserID:  userID,
42    })
43    s.NoError(err)
44}
45
46func (s *CancelOrderSuite) TestExecute_WindowExpired_ReturnsError() {
47    orderID := uuid.New()
48    userID := uuid.New()
49    order := &domain.Order{
50        ID:        orderID,
51        UserID:    userID,
52        Status:    domain.StatusPending,
53        CreatedAt: time.Now().Add(-31 * time.Minute), // expired
54    }
55
56    s.mockOrderRepo.EXPECT().
57        GetByIDAndUserID(gomock.Any(), orderID, userID).
58        Return(order, nil)
59
60    err := s.uc.Execute(context.Background(), usecase.CancelOrderInput{
61        OrderID: orderID,
62        UserID:  userID,
63    })
64    s.ErrorIs(err, domain.ErrCancelWindowExpired)
65}
66
67func TestCancelOrderSuite(t *testing.T) {
68    suite.Run(t, new(CancelOrderSuite))
69}

Karena setiap test case berasal dari test plan yang di-tie ke AC, coverage yang dihasilkan bisa di-trace langsung ke spesifikasi — bukan sekadar test yang “terlihat lengkap” tapi tidak jelas menutup requirement mana.


08.15 Kiro CloudFormation dan Terraform Integration

Untuk Go developer di AWS yang juga mengelola infrastruktur, Kiro sadar pola AWS resource dan bisa menghasilkan template sekaligus menyelaraskan kode Go-nya. Ilustrasi berikut menunjukkan alur dari prompt hingga template CloudFormation dan penyesuaian kode.

text
 1"Add DynamoDB table untuk orders"
 2→ Kiro generate CloudFormation template:
 3
 4Resources:
 5  OrdersTable:
 6    Type: AWS::DynamoDB::Table
 7    Properties:
 8      TableName: orders
 9      BillingMode: PAY_PER_REQUEST
10      AttributeDefinitions:
11        - AttributeName: pk
12          AttributeType: S
13        - AttributeName: sk
14          AttributeType: S
15      KeySchema:
16        - AttributeName: pk
17          KeyType: HASH
18        - AttributeName: sk
19          KeyType: RANGE
20      PointInTimeRecoverySpecification:
21        PointInTimeRecoveryEnabled: true
22
23Dan update Go code untuk match table structure:
24→ DynamoDB repository implementation
25→ Config struct dengan table name dari env var
26→ Test dengan local DynamoDB (DynamoDB Local)

Nilai jualnya di sini adalah konsistensi lintas-lapisan: Kiro tidak hanya membuat template infrastruktur, tapi juga menyelaraskan repository Go, config, dan test-nya dengan struktur tabel yang sama — mengurangi drift antara IaC dan kode aplikasi.


08.16 Adopsi Kiro di Tim: Strategi Rollout

Untuk tim yang sudah memakai tool lain, rollout Kiro sebaiknya bertahap dan berbasis bukti. Rencana empat fase berikut bergerak dari pilot kecil hingga keputusan adopsi penuh pasca-beta.

text
 1PHASE 1 — Pilot (2 minggu):
 2  Volunteer: 2 developer yang paling open-minded
 3  Task: implement 1-2 features medium complexity pakai Kiro
 4  Deliverable: retrospective dengan pros/cons konkret
 5
 6PHASE 2 — Expanded Pilot (2 minggu):
 7  Expand ke seluruh tim
 8  New feature: gunakan Kiro; bug fixes: tetap tool lama
 9  Deliverable: team survey, metric baseline
10
11PHASE 3 — Full Adoption (jika pilot positive):
12  Kiro sebagai primary untuk new features
13  Steering documents jadi team standard (commit ke repo)
14  Agent hooks di-standardize
15
16PHASE 4 — Hybrid Post-Beta:
17  Evaluate pricing vs value
18  Jika pricing OK: continue full adoption
19  Jika pricing tinggi: Kiro untuk complex features, tool lain untuk everyday

Yang penting dari rollout ini adalah keputusan berbasis metrik, bukan hype: baseline diambil di fase pilot, dan adopsi penuh hanya dilanjutkan jika pilot terbukti positif dan pricing pasca-beta masuk akal.


08.17 Fitur Kiro yang Belum Dibahas

Beberapa fitur Kiro jarang disorot tapi relevan untuk Go developer. Poin-poin berikut merangkum kapabilitas tambahan yang memperkaya pengalaman sehari-hari.

Terminal Integration: Kiro punya built-in terminal yang aware dengan AI context. Saat error muncul di terminal, Kiro bisa auto-suggest fix tanpa kamu perlu copy-paste ke chat.

Diff-based Review: Seperti Cursor, Kiro menampilkan diff sebelum apply changes, mengurangi kecemasan “AI langsung ubah kode tanpa preview”.

Workspace Management: Kiro punya konsep workspace mirip VS Code, tapi dengan AI context yang persistent — berguna untuk monorepo.

Custom Tools/Plugins: Kiro mendukung custom tools via API, sehingga tim bisa mengintegrasikannya dengan sistem internal (Jira, internal CI, dll.).

Fitur-fitur ini menegaskan bahwa Kiro bukan sekadar generator spec: ia dirancang sebagai IDE lengkap dengan preview diff, terminal sadar-konteks, dan ekstensibilitas — mendekatkannya ke kenyamanan Cursor sambil mempertahankan disiplin spec-first.


08.18 Post-Beta Prediction: Worth It or Not?

Karena harga pasca-beta belum diumumkan, keputusan adopsi jangka panjang bergantung pada skenario pricing. Analisis cost-benefit berikut memetakan tiga kemungkinan beserta rekomendasinya.

text
 1Scenario 1: Kiro pricing $15-20/dev/bulan
 2  TCO dengan Bedrock: ~$20-30/dev/bulan total
 3  Comparable dengan Cursor ($20) atau Windsurf Pro ($15)
 4  Recommendation: Worth it JIKA di AWS ecosystem
 5
 6Scenario 2: Kiro pricing $30-40/dev/bulan
 7  TCO dengan Bedrock: ~$40-50/dev/bulan total
 8  Lebih mahal dari Cursor + Bedrock combo
 9  Recommendation: Evaluate berdasarkan unique value (spec-first, hooks)
10
11Scenario 3: Kiro pricing > $50/dev/bulan
12  Tidak competitive kecuali ada fitur enterprise yang sangat compelling
13  Recommendation: Stick dengan Claude Code + Spec Kit

Kesimpulan praktisnya: Kiro layak dipertahankan pada skenario harga rendah-menengah khususnya untuk tim AWS, tapi begitu total cost (termasuk Bedrock) menembus $50/dev, kombinasi Claude Code + Spec Kit menjadi alternatif yang lebih rasional.


08.19 Benchmark: Kiro di Santekno Shop

Untuk menempatkan Kiro secara objektif, kami menjalankan lima skenario benchmark yang sama seperti tool lain. Angka berikut merangkum skor keseluruhan dan per skenario.

text
 1AWS Kiro performance di benchmark kami:
 2
 3Overall: 88/100 (rank #2 setelah Claude Code)
 4
 5By scenario:
 6  S1 (Implement dari spec): 87/100 — spec auto-generation sangat membantu
 7  S2 (Write unit tests):    91/100 — salah satu terbaik, spec awareness kuat
 8  S3 (Refactoring):         86/100 — adequate, tidak se-powerful Cursor Composer
 9  S4 (Debug race condition):85/100 — adequate, tidak se-deep Claude Code
10  S5 (OpenAPI generation):  91/100 — generate sangat aligned dengan spec
11
12Kiro's unique strength: spec-first workflow mengurangi ambiguity
13yang sering menyebabkan deviation di tools lain.

Skor 88 menempatkan Kiro di peringkat kedua, dengan kekuatan menonjol pada test generation dan OpenAPI (keduanya 91) — bukti bahwa spec awareness benar-benar mengurangi deviasi dari requirement. Kelemahannya konsisten di debugging kompleks.


08.20 Checklist Setup Kiro untuk Go Project

Agar setup terarah, gunakan checklist bertahap berikut. Ia membagi pekerjaan menjadi hari pertama, minggu pertama, dan minggu kedua hingga keempat.

text
 1Initial setup (Day 1):
 2□ Download dan install Kiro
 3□ Connect ke AWS account
 4□ Create .kiro/steering/project.md
 5□ Create .kiro/steering/go-conventions.md
 6□ Create .kiro/steering/testing.md
 7□ Setup basic agent hook (go build on save)
 8□ Test dengan simple feature
 9
10Week 1:
11□ Refine steering docs berdasarkan output yang di-generate
12□ Add more agent hooks (lint, test)
13□ Try spec generation untuk satu feature
14□ Compare spec quality dengan manual spec
15
16Week 2-4:
17□ Setup spec generation untuk setiap new feature
18□ Evaluate: apakah adoption meningkat vs Spec Kit?
19□ Decide: full Kiro atau hybrid dengan Spec Kit?

Checklist ini sengaja menunda keputusan besar (full Kiro vs hybrid) hingga minggu keempat — setelah kamu punya cukup data dari perbandingan spec dan pengalaman nyata, bukan kesan awal.


08.21 Tips & Gotchas

Beberapa pelajaran lapangan berikut membantu memaksimalkan Kiro sekaligus menghindari jebakan yang umum ditemui tim Go.

💡 Tip 1: Invest dalam steering documents — steering docs yang baik membuat Kiro jauh lebih efektif. Sama seperti CLAUDE.md untuk Claude Code, luangkan 2-3 jam di awal.

💡 Tip 2: Review spec sebelum approve — jangan langsung approve spec yang di-generate. Spec ambigu = implementasi salah. Review AC satu per satu.

💡 Tip 3: Agent hooks untuk quality automation — setup hook (build check, test, vet) sejak hari pertama untuk menghemat waktu debugging yang sia-sia.

💡 Tip 4: Gunakan selagi gratis — beta = gratis = no risk. Coba satu sprint penuh sebelum evaluasi.

⚠️ Gotcha 1: Kiro spec terlalu prescriptive — kadang Kiro memasukkan implementation detail ke dalam spec (yang harusnya di plan). Review dan sederhanakan bila terjadi.

⚠️ Gotcha 2: Non-AWS projects kurang benefit — jika proyekmu tidak di AWS, banyak keunggulan unik Kiro tidak relevan. Pertimbangkan Claude Code atau Cursor.

⚠️ Gotcha 3: Kiro masih beta — beberapa edge case mungkin belum stabil. Jangan bergantung pada Kiro untuk deadline production-critical yang ketat tanpa backup plan.

Benang merahnya: nilai Kiro berbanding lurus dengan investasi awalmu di steering docs dan agent hooks, sekaligus dengan seberapa dalam stack-mu berakar di AWS — dua faktor inilah yang menentukan apakah Kiro layak untukmu.


08.22 Ringkasan

AWS Kiro adalah pilihan terbaik untuk Go developer yang berada di AWS ecosystem, ingin spec-first workflow yang built-in di IDE (tanpa CLI), butuh onboarding terstruktur via steering docs, dan mau mencoba gratis selagi beta.

Kelemahannya: masih beta, non-AWS projects kurang benefit, dan pricing pasca-beta masih TBD.

Skor 88/100 di benchmark kami nyata dan impressive — Kiro membuktikan bahwa spec-first workflow yang built-in menghasilkan kode yang lebih patuh terhadap requirement, memvalidasi pendekatan SDD secara independen. Strategi yang direkomendasikan: coba sekarang selagi gratis, setup steering docs yang baik, evaluasi setelah satu sprint penuh, dan putuskan adopsi pasca-beta berdasarkan pricing yang akan diumumkan.

Di artikel berikutnya, kita beralih ke dark horse dari Codeium yang unggul di context retention lintas sesi: Windsurf dengan fitur Cascade dan deep contextual coding.

Artikel Terkait

💬 Komentar