TeamCity is JetBrains' build server. One server holds every project, build configuration and result and decides what runs; build agents do the running, and the number of agents you are licensed for — rather than the number of machines you own — is usually what decides how long the queue is at nine in the morning. Work is modelled as projects containing build configurations, each attached to one or more VCS roots and composed of ordered steps that call runners: MSBuild, the .NET runner, NUnit, NuGet and PowerShell on the Microsoft side, Maven, Gradle and Ant on the JVM side, plus command line, Docker and many more.
What separates TeamCity from a job runner is the build chain. Snapshot dependencies tie a set of configurations to one consistent source revision, artifact dependencies pass outputs downstream, and the server understands the result as a graph it can schedule, visualise and re-run rather than as a script that happens to call other scripts. Around that sit the features teams lean on daily: agent requirements that route a build to a machine able to run it, shared resources that stop two builds fighting over a node-locked toolchain, typed parameters, failure conditions on measured metrics rather than exit codes alone, and per-test history with flaky detection.
TeamCity is also configurable as code. Versioned settings store a project's entire configuration in its own repository as Kotlin DSL or XML, so a pipeline change is reviewed in the same pull request as the code it builds instead of being clicked into a web interface by whoever had the tab open. Templates and meta-runners keep dozens of near-identical configurations from drifting apart. Underneath all of it is a Java server with an external database, artifact storage governed by cleanup rules, an upgrade path across server and agents, and a backup that has to be provably restorable.
Why this skill matters now
TeamCity demand in Pune is narrow, specific and stable, and it follows the city's Microsoft-stack and JetBrains-tooling population: enterprise product engineering around Baner, Balewadi and Viman Nagar, and the .NET captives in Kharadi and Magarpatta whose developers already spend their day in the same vendor's IDEs. Those teams own their build server, which means they also own its problems, and the problems are rarely about writing a first build configuration. They are about a chain of forty configurations that nobody can reason about, and about a queue that does not move because the estate is licensed for six agents and everything requests the same one.
Agent economics is therefore where most of the engineering effort lands here. Pools, requirements-based routing, build priority, parallel test splitting and cleanup policy decide throughput far more than hardware does, and where a Pune team builds for an external customer, isolating that customer's builds, artefacts and logs behind project-level roles turns into a procurement commitment rather than a nicety.
The second driver is reviewability. Teams that have adopted pull-request discipline for application code will not accept a pipeline that changes by an unlogged click, so versioned settings in the Kotlin DSL comes up in almost every enquiry. The third is migration, and it runs in both directions — consolidating several open-source controllers onto TeamCity, or being asked by a customer to move the other way — which makes translating build logic, credentials and retention a skill in its own right.