Engineering Standards

How Skyshi Engineers Build Software

The same standards apply to every Skyshi talent, whichever team they join. Here is how we plan, build, test and ship, with AI-assisted coding done the right way.

AI-Assisted Development

Every Skyshi engineer uses AI to move faster, never to skip the engineering.

Engineer first, AI second

  • AI speeds up work the engineer already understands; it never replaces the fundamentals.
  • The engineer who merges a change owns it, whether AI helped write it or not.

Review and test every line

  • AI-generated code is read, understood and refactored before it is committed.
  • AI output is covered by tests and checked against the requirements before it ships.

Protect your code and data

  • Engineers follow your company's AI policy.
  • Confidential code, credentials and data stay out of unapproved tools.

Planning & Requirements

Clear requirements up front, so what gets built is what you need.

Explicit scope

  • Business processes name the real roles involved (Admin, Supervisor, Customer), never just “user”.
  • Every flow states who does what, step by step.

Supported environments, written down

  • Minimum and maximum supported Android, iOS and browser versions are agreed before testing starts.
  • Target devices (desktop, mobile, tablet) and platforms are documented for UAT.

Data changes spelled out

  • Deletes state whether they are soft or permanent, and what happens to related data.
  • Edits list which fields can change and the impact on related records.

Backend

APIs are a developer's interface: predictable, consistent and easy to use on the first try.

API design

  • Resources are plural nouns in lowercase, hyphenated URLs (/user-management/users/12).
  • Standard HTTP methods map to actions: GET, POST, PUT, PATCH and DELETE.
  • Related resources nest under their parent (/posts/12/comments).

Responses and errors

  • JSON in and out; lists return arrays, single records return objects.
  • Validation errors name the field and the message.
  • Status codes mean what they say: 400, 401, 403, 404, 409, 422, 500 and friends.

Data and performance

  • Clear, consistent table and column naming, with created, updated and deleted timestamps.
  • Key columns are indexed, and queries (including ORM-generated ones) are checked with EXPLAIN.
  • Multi-step writes run in transactions; large deletes and inserts run in batches; hot paths are cached.

Security and reliability

  • All input is validated before it reaches business logic.
  • Token-based authentication and role-based access control for multi-role apps.
  • Separate credentials per environment, background jobs separate from the main app, and automated tests.

Frontend & Mobile

Interfaces that tell users what is happening, and handle the unhappy paths as well as the happy one.

Every state handled

  • Loading, empty and error states are designed separately and always shown.
  • Users get a clear message on timeouts, lost connections or API maintenance.

Forms that help

  • Every input is validated, with the message right below its field.
  • Forms submit with Enter unless the flow calls for otherwise.

Built to maintain

  • Reusable components instead of copy-paste; configuration in one place, never hardcoded.
  • Third-party libraries are vetted for support and real need before they are added.

Production-ready

  • Real-time error reporting is set up at the start of every project, and debug logs never ship.
  • Minimal data in cookies; mobile apps optimize large images and handle splash and empty screens.

Quality Assurance

Testing follows how people really use the product, across roles, data and devices.

End-to-end scenarios

  • Flows are tested across roles, not just function by function.
  • Related data is tested together, e.g. what happens to linked records when one is deleted.

Details users notice

  • Clean, SEO-friendly URLs and consistent click targets.
  • Repeated and rapid interactions are tested so the app never crashes on them.

Lessons kept

  • Every issue is logged with its cause and fix in a shared checklist, so it does not happen twice.
  • Nothing reaches production without passing UAT.

Version Control & Code Quality

Clean history and consistent code, so any engineer can pick up where another left off.

Branching

  • Separate production, staging and development branches, with feature branches like feature/social-login.
  • Hotfixes branch from production, never from development.

Commits and secrets

  • Commit messages have a short subject (about 50 characters) and explain what changed and why.
  • Environment files, configuration and dependencies stay out of the repository.

Readable code

  • Linters enforce the team's code standard.
  • Clear naming (is/has/can for booleans, get/set for values), and shared logic in reusable functions.

Deployment & Release

Releases are planned, rehearsed and reversible.

Planned releases

  • Release dates are agreed with you and planned one to two days ahead, outside working hours.
  • A migration plan accompanies any change to configuration or data structure.

Staging before live

  • Test environments with staging data and with production-like data; every release goes there first.
  • Zero-downtime deploys on at least two nodes, with containers for fast rollback.

Staged mobile rollouts

  • Beta or closed testing first, then 25%, 50%, 75% and 100% rollout while crash rates are watched.
  • Version numbers follow major.sprint.hotfix, numbers only (1.2.0, 1.2.1).

Ready to Build Faster with
the Right Engineers?

Tell us about your project, and we'll match you with engineers who have strong fundamentals and fluency in AI-assisted coding. Schedule a free consultation with our team now!

Book a Free Consultation

Strong engineers, faster with AI. Indonesia’s best tech talent, trained to code with AI the right way.

InstagramLinkedInMediumYouTube