back

by ed_balls·6y ago·view on hn ↗
Great post about testing, it's pretty much all you need to develop a robust app.

BUT TeamCity UX is the worst UI from all CI systems that I have used. From first version of Jenkis to managed stuff like CircleCI. People hate is so much that someone added a Slack icon :teamshitty: at work.

12 comments
I recently had to switch from Jenkins to TeamCity, and while my very first thought fiddling with TC was that it's unnecessarily complex for my needs, I found myself creating the build jobs much faster and more straightforward than with Jenkins. Jenkins plugins are very often deprecated/unmaintained with tons of security vulnerabilites and a bad UI/UX which results in inconsistent UX when using several plugins.

Also, with Jenkins you're forced to use groovy for pipeline code :/...

I honestly find the Groovy aspect the worst part of Jenkins.
This actually wouldn't be too bad if it was full Groovy instead of a severely hampered subset of Groovy.
Groovy seems to get an awfully bad rap from Jenkins. Seems about 95% of people encounter it there in a broken state and assume the language itself is that bad. I really wonder why they have deployed it in such a way as presumably a build server can do pretty much anything so why it would be necessary to constrain groovy scripts behavior I can't understand.
I've used TeamCity (the UI has changed many times), Jenkins (including blue ocean), Bamboo, a few others... TeamCity is by far the best I've experienced.

Jenkins seems to suffer from too many cooks/anything goes mentality. It's clearly not well focused. It's feels like a handful of pet-projects lumped into one umbrella.

When it comes to functionality, TeamCity is constantly improving and innovating.

Based on the OP, I suspect their experience is with an old version or maybe misused or misconfigured.

I moved to TeamCity from Jenkins a few years ago.

At first, I thought TeamCity's UI was batshit crazy. In retrospect, I think it was just that it's not organized at all like Jenkins is, and I needed to re-adjust my mental model for how the build server should work. Or something like that. All I know is that, at some point along the way, I came to use TeamCity to automate more things, while still spending less time futzing with it than I did with Jenkins.

That said, I feel like TeamCity is also distressingly full of partially implemented features and flaky UX. It's just that its warts tend to accumulate on the periphery, rather than directly between me and the thing I'm trying to get accomplished before I can go home.

I hated Jenkins on first sight but loved Teamcity. Its model is exactly how I imagined an ideal CI system to work. We use it in a minimal way though - a common git+ssh+make workflow that gets inherited to all project builds with only 3 params set in case a default doesn't work.

So, I think it's about mental model as you wrote, plus where your techstack is in terms of unification (containerization helps there tremendously).

TeamCity UI worse than Jenkins? Yeah, we'll have to agree to disagree on that one.
Have not used TC, but I'll agree solely based on the fact that Jenkins UI is so bad.

Someone else mentioned groovy with a frown face, but tbh I much preferred writing all jobs in JobDSL, rather than in the Jenkins UI.

Maybe not worse than the "first version of Jenkins" but it's quite bad and I have never ever heard "I like TC UI" from anyone in any job, they all disliked it or outright hated it (myself included). And after so many years, it's still bad and complicated. The base is solid though, it'd just be so much better with proper UX.
I like the TeamCity UI. There I said it and mean it.

Sure, TC has had issues (especially when it came to scaling), but they fixed a lot of those and honestly, it's doing well now.

Issues usually came from people who didn't know how to make robust pipelines or leverage TC's functionality and felt like they had to reinvent everything. And that was in a company with thousands of employees, thousands of TC configurations and hundreds of agents.

To be fair I expect that somebody outside my circle would like it at least! Now that being said:

>Issues usually came from people who didn't know how to make robust pipelines or leverage TC's functionality and felt like they had to reinvent everything

Blaming the end user is almost never the answer, even less when the average TC user is somewhat technical or very technical. If a tool throws hundreds of things to your face and call it a day, then people will end up reinventing everything since they didn't have a chance to discover how to make sense out of it (without tons of free time and guessing that is). I haven't used the very latest version though so things may have improved further but I believe it'd require a major overhaul to put things in order.

True, but all CI systems allow you to run arbitrary shell scripts. This is often the source of e.g. hard-to-debug broken builds, because you can’t necessarily run the bits locally, or at least it’s inconvenient.
I think you should consider that groupthink gets established very easily inside companies. It only takes one brash but senior engineer (even if only in the "been there a long time" sense) to loudly proclaim a tool sucks and how much they hate that tool, and pretty quickly you can get a chorus of "me too" and people who disagree just decide they have better things to do than pick a fight.

I've seen this happen a bunch of times, and when investigated the opinions are often not based on much thought, or are actually flat out wrong.

My company has just migrated from TC to Jenkins except for the project I run, which is still on TC. Why? Because I've actually read the TC user guide and so understand how it works, what it can do. Plus I like the GUI.

The justification for migration was idiotic, something like "Jenkins has a big community, look at how many plugins there are". Well guess what - Jenkins has more plugins than TC because it needs more to match the feature set. A lot of things that are built in with TC are unmaintained crappy plugins in Jenkins that you have to assemble yourself.

The other day I saw one of the instigators of this migration complaining on Slack that the build queue priorities plugin they were using had gone unmaintained and had serious bugs. Build queue priorities are built in to TC for a long time and JetBrains doesn't ship broken features very often, so my guess is it works. I had to resist engaging in a told-you-so moment ... why bother, the damage was done already.

In another case another senior guy decided on nearly his first week that a major piece of software we use sucks. For years he has constantly made claims of the form "$PRODUCT can't do X" or "feature Y is broken" and when the user guide is checked, in fact it can do X and when asked what is broken about feature Y he can't point to any actual concrete bug reports he can or will file. But nothing will shake his view on this and other junior devs pick it up and echo it to make themselves seem discerning and informed.

Time and time again I've seen stupid product choices in companies done for no better reason than someone formed a snap opinion without bothering to read the user guide. TC works great. It's one of the best CI systems out there. Spend an afternoon reading the user manual from cover to cover and it will pay huge dividends - also note that it's free if you only need 3 agents.

If you don't read the documentation, sure, it's hard to guess how things work, but it's hardly the responsibility of the tool maker to change that.

If people try to reimplement things in arbitrary broken shells scripts (the user issues) that can't be run locally, then it's not the CI tool's responsibility either.

That's surprising to me. I used TeamCity for ~4 years at my last job and thought it was pretty decent (compared to experiences with Jenkins, Circle, and Travis).
Weird. I used all of those and came back to TeamCity.
While I agree that TeamCity UI is not the best, I disagree with the order. Jenkins is much worse that TeamCity.
It's because they never mention doing any actual usability testing or user research. Yes, their software can "perform" across all of these tests, but if the information architecture isn't intuitive or doesn't match what people want, it's not going to be good.
All there E2E tests have effectively cemented their UI in place. Which makes it much slower to iterate on user feedback...
But TC is in the middle of replacing their GUI with a totally new one, the 'experimental' UI, which each release fleshes out in more screens. It's a full redesign.

So yeah perhaps they'd have done the new experimental UI in one fell swoop if they had less testing, who knows. But I'd rather they have a well tested product than ultra-fast UI replacement.

Care to elaborate on that?
Isn't that essentially start happenning in the EAP phase?
Personally, prefer it over Gitlab much easier to use. Find the documentation much clearer compared to Gitlab. Do like the pipeline yaml but something similar is possible with Teamciy but then its Kotlin I think.
I didn’t get to use TC for long, but I can say that none of them has pissed me off as much as Bamboo. Have you used it much and if so, how does it compare for you?
Having never used TeamCity (but being intrigued), what's so bad about it?
As somebody who does like TeamCity - it can be a bit clunky to navigate around. It’s much like Zabbix in that once you figure it out it’s not a problem, but the learning curve for anything beyond basic use can be steep.

I pretty much use Gitlab CI these days for anything outside my day job though, and the stuff at work is all Azure Pipelines (via Azure DevOps) now.

Variable scope and templates can get a little weird.

At work we're experiencing several issues with triggers that don't kickoff when there are changes in the repo. Builds stuck for 2 hours or more on "Collecting changes". Builds that build from the default branch, even though they were called with a specific branch to build from. I could go on.

I personally don't have any problems with the TeamCity UI. I've used it in anger over extended periods of time. It's appropriately complex given what it does, and presents things efficiently.
Came here to say the second part. I left a job because I hated TeamCity so much. It wasn't a super fun job but I'd have stayed for Jenkins.