TeamCity is a build server from JetBrains built around two ideas that distinguish it from a scripted CI system: the server understands the relationship between builds, and configuration is structured rather than free-form. A server holds all configuration, history and artifacts and schedules work; agents execute it. Work is organised as projects containing build configurations, each attached to one or more VCS roots and composed of ordered build steps that invoke runners for Maven, Gradle, MSBuild, dotnet, Docker, PowerShell, command line and dozens more.
The build chain is the central concept. A snapshot dependency ties build configurations to a consistent set of source revisions, so a chain of builds all see the same code state; an artifact dependency passes outputs from one build to another without rebuilding. Together they let the server treat a pipeline as a graph it can reason about — reusing a shared stage across several downstream builds, running independent branches in parallel, and showing the chain as one unit rather than as unrelated jobs that happen to trigger each other.
Structure comes from parameters and templates. Parameters are typed and come in three kinds — configuration, system and environment — with specs that control how they are presented and validated; templates and meta-runners let hundreds of build configurations share definitions instead of drifting apart. Build failure conditions can fail a build on a metric rather than only an exit code. Test history is first-class, with per-test results over time, flaky test detection, muting and investigation assignment. And versioned settings store the whole project configuration in its own repository as Kotlin DSL or XML, synchronised in one or both directions, so pipelines are reviewed and branched like application code. Underneath it is a Java server with an external database, an agent fleet, artifact storage that can be pushed to object storage, and an upgrade path that has to be planned.
Why this skill matters now
CI servers stopped being background utilities and became the constraint on delivery. When a build chain takes forty minutes and agents are saturated, every engineer waits, and the cost is visible enough that someone is asked to fix it. On a licensed agent model the answer cannot simply be more agents, so it has to be better routing, better reuse and better dependency structure — which is a design skill rather than an administrative one.
Configuration drift is the second pressure. A server that has accumulated hundreds of build configurations edited in a web interface over years has no review trail, no consistency and no way to recreate itself. Versioned settings solve that, but adopting them on a live server is a migration with real decisions — which direction synchronises, how secrets are handled, what happens to configurations that were edited by hand yesterday — and doing it badly is worse than not doing it.
The third pressure is that most organisations now run more than one CI system, usually TeamCity alongside Jenkins or a hosted service, and someone has to decide what belongs where and how artifacts and credentials flow between them. That combination — throughput design, configuration as code, and multi-system coexistence — is what current TeamCity demand actually consists of, and it is a long way from knowing how to add a build step.