Skip to main content

Dev/QA Iteration Workflow

Learn the recommended workflow for rapid development and QA iteration using SNAPSHOT versions

This guide explains the recommended workflow for rapid development and QA iteration using Odin's versioning system.

Workflow Overview

Odin supports two versioning strategies:

  • SNAPSHOT - Mutable versions for dev/QA (e.g., 1.0.0-SNAPSHOT)
  • CONCRETE - Immutable versions for production (e.g., 1.0.0)

The typical workflow:

  1. Develop: Create and deploy SNAPSHOT version
  2. Iterate: Make changes and redeploy same SNAPSHOT version
  3. Test in QA: QA team tests the SNAPSHOT version
  4. Release: Create CONCRETE version when ready
  5. Deploy to Production: Deploy the immutable CONCRETE version

SNAPSHOT Versions

SNAPSHOT versions are mutable and designed for fast iteration:

{
  "name": "user-api",
  "version": "1.2.0-SNAPSHOT",
  "team": "backend",
  "components": [...]
}

Characteristics:

  • Can be redeployed with changes
  • No versioning history kept
  • Perfect for development and QA
  • Not allowed in production environments

Rapid Iteration

Initial deployment:

odin deploy service --env dev \
  --file service.json \
  --provisioning provisioning-dev.json

Make changes and redeploy:

# Edit service.json
# Then redeploy with same version

odin deploy service --env dev \
  --file service.json \
  --provisioning provisioning-dev.json

QA Testing

Deploy to QA environment:

odin deploy service --env qa \
  --file service.json \
  --provisioning provisioning-qa.json

QA team can test the SNAPSHOT version. If issues are found:

  1. Fix issues in dev environment
  2. Redeploy same SNAPSHOT to QA
  3. Repeat until stable

Releasing CONCRETE Versions

Once testing is complete, release a CONCRETE version:

# Update version in service.json
# Remove -SNAPSHOT suffix

{
  "name": "user-api",
  "version": "1.2.0",
  ...
}

Deploy to production:

odin deploy service --env production \
  --file service.json \
  --provisioning provisioning-prod.json

Best Practices

  1. Use SNAPSHOT for development: Fast iteration without version bumps
  2. Test thoroughly in QA: Multiple SNAPSHOT redeployments are fine
  3. Release CONCRETE for production: Guarantees reproducibility
  4. Semantic versioning: Follow major.minor.patch format
  5. Environment-specific provisioning: Different configs for dev, QA, prod

Example Workflow

1. Develop (dev environment)

# Create service with SNAPSHOT version
odin deploy service --env dev \
  --file service.json \
  --provisioning provisioning-dev.json

# Make changes, redeploy
odin deploy service --env dev \
  --file service.json \
  --provisioning provisioning-dev.json

2. Test (QA environment)

# Deploy same SNAPSHOT to QA
odin deploy service --env qa \
  --file service.json \
  --provisioning provisioning-qa.json

# If bugs found, fix and redeploy to QA
odin deploy service --env qa \
  --file service.json \
  --provisioning provisioning-qa.json

3. Release (production)

# Change version to CONCRETE in service.json
# "version": "1.2.0-SNAPSHOT" -> "version": "1.2.0"

# Deploy to production
odin deploy service --env production \
  --file service.json \
  --provisioning provisioning-prod.json

Related Guides