Skip to content
cccskills
FreePublished on GitHub

backend-language-decision

Use when starting a backend task that could be built in more than one language - follow the repository's stack, or for a greenfield service choose between Go, Java, C#/.NET, TypeScript on Node.js and Rust from the task's shape

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md4.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Backend Language Decision

Overview

You write Go, Java, C#/.NET, TypeScript on Node.js and Rust. The wrong choice is not a style preference — it fights the grain of the problem and the repository for the life of the code. Decide deliberately, at the start of the task, before writing anything.

Core principle: the repository's existing language wins by default. Only a greenfield service, or the analiz task's explicit direction, opens the choice.

The Decision

digraph decide {
    "Repo or component already has a backend language?" [shape=diamond];
    "Follow it" [shape=box];
    "Analiz task names a language?" [shape=diamond];
    "Use it" [shape=box];
    "Team already runs a backend language elsewhere?" [shape=diamond];
    "Prefer that one" [shape=box];
    "Task shape?" [shape=diamond];

    "Repo or component already has a backend language?" -> "Follow it" [label="yes"];
    "Repo or component already has a backend language?" -> "Analiz task names a language?" [label="no / greenfield"];
    "Analiz task names a language?" -> "Use it" [label="yes"];
    "Analiz task names a language?" -> "Team already runs a backend language elsewhere?" [label="no"];
    "Team already runs a backend language elsewhere?" -> "Prefer that one" [label="yes, and it fits"];
    "Team already runs a backend language elsewhere?" -> "Task shape?" [label="no"];
}

How to tell what the repository is: the manifest (go.mod, pom.xml / build.gradle(.kts), *.csproj / *.sln / Directory.Build.props, package.json with a server dependency, Cargo.toml) and get_project_brief's stack for your component.

Task shape, for a greenfield service

ShapeFirst choiceWhy
High-QPS API, streaming, fan-out, background workers, small I/O-bound serviceGo (Fiber, hexagonal)simple concurrency, fast builds, small binaries
Rich domain: many entities, invariants, business rules, a JVM shopJava (Quarkus first, Spring Boot when Quarkus does not fit)mature OOP modelling and framework ecosystem
Rich domain in a Microsoft or Azure shop, or next to existing .NET servicesC#/.NET (ASP.NET Core)the same strengths as Java with the team's own platform
Thin API or BFF beside a TypeScript frontend, shared types with the client, a team that writes TypeScriptTypeScript on Node.js (Fastify; NestJS for a larger domain)one language across the product
Latency- or memory-critical path, CPU-heavy processing, a component where a crash or a data race is unacceptableRust (axum on tokio)predictable performance and memory safety, at a higher cost to write

When two rows fit, take the one the team already operates — a language nobody else on the board maintains is a cost the task does not pay for.

Then load the stack's own skills: go-hexagonal-architecture and fiber-rest-api; quarkus-service-architecture or spring-boot-fallback; dotnet-aspnetcore-service; node-typescript-service; rust-axum-service — and the matching testing skill.

Hard Rule

Never introduce a second language into a single-stack repository or component. If a Go repository needs a capability that "would be nicer in Rust", that is a question for the architect's analysis, not a unilateral stack addition — say so in a task comment and build it in the repository's language.

Common Mistakes

  • Picking your favourite language instead of the repository's.
  • Rust for a CRUD endpoint with no performance requirement — the borrow checker is a cost, not a feature, there.
  • Node.js for a CPU-bound job that will block the event loop.
  • Go or TypeScript for a domain with dozens of interacting business rules, then hand-rolling what Java or .NET would have given you.
  • Choosing by a benchmark instead of by who will maintain it.

Red Flags

  • You are about to go mod init, dotnet new, npm init or cargo init inside a repository whose manifest says another language.
  • Your choice has no reason beyond preference.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

See all skills by makifbaysal

Report a problem with this skill