Ask HN: In which areas have you compared 3+ tools and formed strong preferences?

127 points by tikkun ↗ HN
For example:

I've used 3+ code editors on MacOS and prefer sublime text over VScode, coteditor, xcode.

I've used Chrome, Firefox and Safari all within the past year, and I prefer Chrome and Safari.

I've used 3+ voice transcription apps, the ones I prefer are 'just press record' and Otter.ai, I can't remember the names of the others I used - but I downloaded a bunch of Whisper based ones and non-whisper based ones on the iOS app store.

I've used 3+ messaging apps, I like iMessage and Telegram, I prefer those over Signal and WhatsApp.

I've used 3+ interfaces for GPT, and I prefer the OpenAI playground over ChatGPT, chatbot-ui, typingmind, openplayground, Poe, and a few others I can't remember.

I think it's important to note that for me these are all preferences. I'm not saying one of these tools are objectively better. I am saying that for me they are better, and I prefer them.

What are areas of products, tools, developer tools, APIs, anything, where you've personally used 3+ tools, and what did you prefer, and what did you not prefer, if you can still remember?

206 comments

[ 2.5 ms ] story [ 315 ms ] thread
I am used 3+ Vector Databases (Pinecone, qdrant, and pgvector). I prefer Pgvector by miles.
that's bizarre. What's your QPS and corpus size?
It's slower, but once you are out of the toy project stage and you are trying to sync 2 databases - where relations get changed and logic gets updated, it is really hard to keep multiple DBs synced.

Factor it dev vs. production DB setups, on boarding new developers and growing pains of a startup and having one DB as source of truth with a small performance penalty (and a large cost savings) - it's a no-brainer.

What kind of queries over structured data do you use Postgres for? We're looking to see how we should broaden our metadata filtering to potentially support usage patterns for developers like yourself.
I have used 3 types of money: cash, digital money and bitcoins. Digital money is an ugly idea, a lot of times the vendor took my funds out from me.
React state management solutions, here's my comment from last year: https://news.ycombinator.com/item?id=34133879

tl;dr prefer Context but wish I could move everything to Mobx.

It's funny, I actually prefer Redux + Thunks the "hard way" (not RTK). I find it's far easier to reason with the state, transitions and events that way. It takes a bit more cognitive overhead getting started, but the complexity doesn't grow as features do.
Redux (even with RTK) has so much boilerplate it's not worth it anymore. I'm stuck with a bunch of legacy code but slowly moving it to Context.

If you want actions and reducers just use the hooks versions for those + Context.

I find that using Context+useReducer is similar, but in the end you wind up with a lot of useContext and/or overlapping usage of different context/providers that the general single redux context is often better overall. Not to mention, that you still have to deal with the action generation and state in the scope of context, which gets even more messy with different Context usage in practice.

At least that's been my own experience. I don't fault people for going different routes, I just find that the boilerplate kind of fades into the background after it's established.

My issue is that in the worst case you end up with Redux-like constructs. If your context setup gets so complicated as to require global-like store and extraction of actions and reducers into specific files, you end up with Redux.

In the mean time, you can avoid that.

> but the complexity doesn't grow as features do.

That is exactly why I don't like it. Rather than doing as simple as possible and expanding when needed, you default to the most complex answer. The fact that it can handle anything means you don't need it for everything.

I’ve used 3+ text editors on macOS (BBEdit, Sublime, VS Code, PyCharm), and prefer Sublime for my day-to-day work writing Python/JavaScript web apps, mainly because of fast code navigation and relatively fast typing speed.

BBEdit I still use for multi-file search & replace since I prefer its interface for that. It also has the fastest typing speed.

PyCharm I use exclusively for identifying & removing unused imports in Python.

VS Code I don’t use at all. Relatively slow typing speed. Relatively slow navigation.

Any professional engineer choosing a solution has to do this and discuss the trade-offs. For example I was involved in a migration from Tensorflow and pyTorch and Go to Java at one big company.

Personally, I'm playing with new browsers and search engines. SigmaOS, Arc, Firefox. Dropped Chrome, gave up on Safari.

Search engines: phind, chatgpt by API, kagi, you, perplexity

Not sure how useful this question is...

I've used 3+ dictionary apps and I prefer this Webster's Writer's Dictionary app: https://apps.apple.com/us/app/websters-writers-dictionary/id...

The definitions, while slightly archaic, are evocative of the etymological valences in ways that other dictionary apps (Merriam-Webster, Oxford Dictionary, Dictionary.com) lack. The WWD also has a pleasingly clean UI, smooth interaction, and no ads.

Special mention of Etymonline's etymology app.

You can install the Webster 1913 dictionary as one of the dictionaries in MacOS and then use it anywhere the dictionary is available, including the cmd-crtl-D shortcut. https://github.com/cmod/websters-1913

I agree 100% about the etymologies.

Do you have any experience using Wiktionary, and if so, where does it fall on your spectrum? I personally use Wiktionary a lot because it seems adequate from what I tell and it covers all the multiple languages that I'm interested in.
I frequently use Wiktionary on desktop. I find it invaluable for tracing certain elements of etymology, but still largely prefer Etymonline.

It's worth noting that I access these things most frequently on mobile, so an app (with a clean, ad-free, streamlined UI) is paramount.

Your comment sparked me to seek out whether Wiktionary has an app— and apparently someone has built this iPhone app for a reader view, which at first use appears identical to the desktop view: https://apps.apple.com/ca/app/wiktionary-reader/id984975341

OLTP databases. I've used Oracle, MySQL, and Postgres in anger (in that order, historically), plus DynamoDB and MongoDB if you want to count those. I have to admit Oracle has some technical superiority but the pricing is insane. MySQL is a joke. MongoDB has zero use cases. Just Use Postgres.

OLAP databases/query engines. Redshift, Athena/Presto, Snowflake, BigQuery, ClickHouse. It's complicated, actually. I guess my strong opinion is that Snowflake is massively overrated and it will perform worse and cost you more than you expect.

DAG frameworks. make, Luigi, Drake, Airflow, DBT, Prefect, NextFlow, others I'm forgetting. Airflow is hot garbage. It's frankly an indictment of Data Engineering as a specialty that we've formed a consensus around such a poorly-designed piece of software. In fairness, no one has really gotten this right yet. I like Luigi but it has its own shortcomings and continued development is an open question. Sadface.

Could you link some resources on critiques of Airflow? I have some colleagues using it and knowing of any impending footguns would be helpful.
Color me very interested about footguns in Airflow as well.

We're currently considering it as a self-hosted process engine to automate technical business processes and to coordinate a few automation systems like jenkins. Crap like, trigger a database restore via system A, wait until complete, update tickets, trigger some data migration from that database via System B, update tickets. Maybe bounce things back to human operators on errors and wait for fixing / clarification. Trigger a bunch of deployments in parallel and report on success.

Systems in this space are either (a) huge, hugely expensive enterprise applications designed to consume all business processes, which is a bit overkill for our current needs (Camunda, SAP, Stackstorm, ...), (b) overfitted onto a very specific data analysis setup (aka: if you don't have hadoop, don't touch it) or (c) overly simplistic and offering no real benefit beyond investing into self-hatred, guiness and making jenkins work.

Airflow seemed like a bit of a decent middle ground there for workflows a bit beyond what you can sensibly do via jenkins jobs.

Jenkins is honestly Really Good as a scheduling system. The best, frankly.

If you can combine it with a library- or tool-style DAG system (vs. server-style like Airflow), like make or Luigi or NextFlow or even Step Functions, that is a great sweet spot.

In my experience Jenkins is like shell scripting- in the hands of hands of someone who understands its strengths and weaknesses and is very disciplined in how it is used and maintained, it's both performant and flexible. If you follow the path of least resistance it becomes a mess.
I agree. For some reason, Airflow really sucks at running something on a cron-like timer. I can't remember the all issues I had with it exactly (this was several jobs ago), but getting it to run a job at the same time everyday was a nightmare. One issue I do recall was that it treated the first run differently, basically ignoring your defined schedule. And I think "first run" meant every time Airflow was restarted. So if Bad Things happened if that job ran the wrong time of day, you had to add extra logic into the job itself to abort if it was being called at the wrong time. How they managed to make this so difficult is mind boggling. By contrast, Jenkins will reliably execute a job on a timer without issues.
Use makefiles for as long as you can..

If your DAGs get too complicated for makefiles, it's time to rethink and restructure your DAGs

Please don't do this.

If you want an Airflow-ish approach without punishing your future self, pick Prefect. Otherwise go with Temporal. Above all do not adopt Airflow for the use cases you describe in 2023

Prefect seems like a really good suggestion, thank you.

We're pretty much committing to python as our language of choice in the infra-layer. Most of the team is sent onto courses over the next month, too. So I have a whole lot of python scripts popping up over the infrastructure.

And this approach of slapping some @task and some @flow onto scripts or helper functions seems to work really well with what the team is doing. It took me like 30 - 40 minutes to convert one of those scripts into what seems a decently fine workflow. very intrigued.

The Prefect guys wrote this https://www.prefect.io/guide/blog/why-not-airflow it's something but far from comprehensive.

There's not a lot of writing about this. Folks seem content to fight Airflow's deficiencies. Most of them are too young to know any better. The critiques you'll find are generally written by competitors, or folks adopting a competitor.

Here's the big one I see lots of folks get wrong: do NOT run your code in Airflow's address space.

Airflow was copied from Facebook Dataswarm and comes with a certain set of operational assumptions suitable for giant companies. These assumptions are, helpfully, not documented anywhere. In short, it is assumed that Airflow runs all the time and is ~never restarted. It is run by a team that is different from the team that uses it. That ops team should be well-staffed and infinitely-resourced.

Your team is probably not like that.

So instead of deploying a big fleet of machines, you are probably going to do a simple-looking thing: make a docker container, put Airflow in it, then add your code. This gives you a single-repo, single-artifact way of deploying your Airflow stuff. But, since that's not how Airflow was designed to work, you have signed yourself up for a number of varieties of Pain.

First, you are now very tightly coupled to Airflow's versioning choices. Whatever version of Python runs Airflow, runs your code. Whatever versions of libraries Airflow uses, you must use. This is bad. At one point I supported a data science job that used a trained model serialized with joblib. That serialization was coupled to Python 3.6 and some precise version of SciKitLearn. We wanted to upgrade Python! We couldn't! Don't use PythonOperator. You need separation between Airflow itself and Your Code. Use a virtualenv, use another container, use K8s if you must, but please please do not run your own code INSIDE Airflow.

Second, you cannot deploy without killing jobs. Airflow's intended "deployment" mechanism is "you ship DAG code into the DAG folder via mumble mumble figure it out for yourself". The docs are silent. It is NOT intended that you ship by balling up this mega-container, terminating the Airflow that's running, and starting up the new image. You can do this, to be sure. But anything running will be killed. This will be fine right up until it isn't. Or maybe not, maybe for you it'll be fine forever, but just please please realize that as far as Airflow's authors are concerned, even though they didn't say so, you are Doing It Wrong.

Thank you for this, this is a helpful guide to looking into some of these things further.
> MongoDB has zero use cases. Just Use Postgres.

I kinda am on that bandwagon but at a new job we're using mongoose and mongo for our database, because the consultors that implemented the webapp before us decided so.

How do I convince mgmt that we might want to switch that? When? Is it even worth it or possible now that it's already our default?

"Just use Postgres" is advice for choosing a database for a new project, it does not apply when you're already running something else in production successfully. In general I don't think it would be worth switching unless Mongo is causing significant tangible problems in your specific environment that Postgres would solve.
I think it deeply depends on how much variation in code is actually there to support the database(s). Along with how much data, how many collections, and how would you handle the migration and/or scaling with your proposed alternative? Is it worth stopping all feature development for weeks/months to migrate? How profit driven or constrained are you?

There's a lot that I like and dislike with MongoDB. As a developer, it can be a relatively nice experience. As an administrator, I hate it beyond words. It really depends on your needs, entrenchment and the skills of your staff.

Depends on your data and how it needs to be modeled and used, imo. If it’s sparse and interconnected then obviously SQL makes a lot of sense. But for data that is very document-like e.g. 10Ks you’d get from SEC EDGAR, then document based is suitable. I’ve found even with relational databases, sometimes you need to denormalize the data a bit to achieve performance benchmarks for complex queries, and there’s a tipping point where you may want to sync your data into something document-based like Elasticsearch to get improved search capabilities, too.
For one, compare https://jepsen.io/analyses/postgresql-12.3 and https://jepsen.io/analyses/mongodb-4.2.6 - similar vintages, entirely different levels of reliability.

From a migration perspective, the presence of JSONB fields in Postgres, and much of the modern tooling around them, mean that you can even put a highly nested document structure directly into Postgres and have a clear migration path without rewriting code.

(Do note however that Postgres' JSONB overrides the key order of objects to have canonical object identity - it thus avoids pitfall #1 in https://devblog.me/wtf-mongo but legacy code may rely on that behavior.)

MongoDB was great when it worked; I've still never experienced as fluid a workflow as Meteor enabled, where either a client update or a batch process could update a document in MongoDB and it would immediately propagate to every other interested client. RIP - while there's an active community, the Meteor team went on to do Apollo GraphQL, whose real-time support is a shadow of that original developer experience.

That said, on that same project, I can say anecdotally that I was bitten hard by some of the disaster recovery and divergent-oplog issues mentioned in the meme-y https://aphyr.com/posts/284-jepsen-mongodb - granted, the software has improved significantly since then. But I'm of the opinion that a company developing database products can only shift its internal culture so much; such a "cowboy" mentality, one that led to releasing a database product with these glossed-over problems and unreliable defaults, never truly goes away.

Rewrites always require a cost-benefit analysis. Modern MongoDB (you are running a modern version, right?) may have addressed enough concerns that it's the right decision to stick with. But even for document database needs, there's no reason not to use Postgres for green-field projects.

Doing the work to switch off may well be a worse idea than starting on it in the first place.

There are many, many companies for which this decision won't matter too much.

Re OLAP: 100% agreement on Snowflake being a poor performer. BigQuery is Google-scale I guess which might be necessary but feels way over-complicated for most uses. I've only dabbled with ClickHouse but at every turn I've been impressed with their offering.
I’m surprised that naming a poorly-performing database “Snowflake” didn’t seem like an obviously bad marketing decision…
have you tried mage ai for DAG/elt?

I haven't yet used it, we are evaluating it though, and I'd love to hear from HN'ers that tried it

Can confirm that Airflow is a terribly designed system. So inflexibile and gotchas that only arise after a ton of development. AWS Step Functions are infinitely better and more simple.
I've put a lot of time into Airflow and feel similarly that it's a huge pain and a risk to rely on it. I've replaced it with Temporal (https://temporal.io/) and while I don't have the breadth of experience with the frameworks you listed, I do think Temporal is a great replacement for Airflow.
How much did you pay for Oracle? Is it a one time payment or annual?
We were paying over $1M/yr for it inclusive of support. One real production instance (with Veritas Cluster), one reporting instance, 3 dev/QA instances. This was circa 2012, when the company had roughly $300M/yr in revenue.

I heard that a year or two after I left the company got an Oracle Audit and ended up paying a huge penalty.

Not one time and based on different things. Don't look that way
Some older context is they price per CPU core and I remember something like $10k/CPU core per year. This is from years ago and there were "enterprise" agreements in place and many millions of dollars being spent. I can't imagine they lowered prices other than maybe cloud offerings.

The support contract costs more than the "license" if my memory serves me, but its very expensive. If you're doing anything remotely complicated, using their advanced tools beyond a basic RDBMS (replication, clustering, etc.) then you need that support contract.

I worked in Data Engineering for 6 years before recently deciding to at least take a siesta to write some "normal" software as a product engineer.

I really like data engineering in general - writing spark jobs, manipulating huge amounts of data, concerting pipelines, writing SQL... I just like it all a lot. I like SQL - there, I said it!!

But damn do the rough edges just burn you out. Airflow is one of those edges. IMO part of the problem is that everyone wants to hold it in a slightly different way, and so you end up with Airflow being this opinionless monster thing that lets you use it any way you want as long as it "works". And everything built on top of this opinion-less mess is of course also kind of a mess. And plus at a certain scale, Airflow itself needs to be maintained as a distributed system.

Spark is another one of those things with lots of rough edges. Some of it might've been the places I worked at were holding it all wrong, but Spark and all its adjacent context are so damn complicated you either have a small group of experts writing all spark code and you have to heavily prioritize what they work on, or you have a bunch of non-data-engineer folks writing spark jobs and kind of making it work sorta but it's all as inefficient as possible while still making it work, and it's really brittle as they don't know all the ways they need to think about things scaling.

Notably, I got really tired of people coming to our team and going "we wrote this big spark job, it worked fine up until it didn't, can you please help us fix it, it's mission critical". And it's just an OOM because they're pulling data into memory and have just been bumping -Xmx every 2 weeks for six months. or perhaps even worse, they were doing some wonky thing that wouldn't scale and then now they're running into weird errors because they used the feature so wrong (like, having a small dataframe with 1-2 partitions that then gets used in a subsequent stage that's HUGE and all the executors absolutely swamp the poor node or two that's hosting those partitions).

Anyway, it's easy to write a spark job that works at the time of writing, and really hard to make a spark job that will work 6 months from now.

Add to the fact that Spark is a giant money firehose, data engineering departments are constantly asked to sacrifice reliability to increase efficiency (just run everything hotter! who needs slack or buffer space?) and it just makes all the above issues worse.

> I like SQL - there, I said it!!

SQL is the only, only tech thing I love. Other stuff might be fine tools to accomplish various goals but SQL is Good and Beautiful and True.

> I guess my strong opinion is that Snowflake is massively overrated and it will perform worse and cost you more than you expect.

Are there specific use cases or experiences that prompt you to say this? I've seen a lot of examples (such as web analytics or SEIM) where teams have built very capable stacks on ClickHouse or similar analytic databases. Basically if you have a focused use case it's often possible to built a custom stack with open source on Kubernetes that outperforms Snowflake along axes like p95 response, cost-efficiency at scale, and data ownership. It would be interesting to hear more about your experience.

It's trivially easy to beat Snowflake on latency because its latency is truly awful. It often takes 1-4 SECONDS end-to-end to run a query that touches just a few thousand (not million!) rows. In theory this is fine for OLAP but when you have a Looker dashboard with 20+ tiles, it becomes a serious problem. ClickHouse absolutely thrashes Snowflake at this, routinely running millions-of-rows queries in hundreds of milliseconds.

Anyway the specific thing I'm remembering about cost is a case where a data team I joined had built a (dumb) CI process that ran a whole DBT pipeline when a PR was opened. After a month or so we got a bill for something like $50k.

Snowflake's rack-rate pricing is $2/credit and an XS warehouse is 1 credit/hr. That XS warehouse is, allegedly, an 8-core/16GB(?) instance with about a hundred gigs of SSD cache, from a "c" family if you're on AWS. Of course since your data is in S3 (cache notwithstanding), you're likely to be network-constrained for many query patterns. BigQuery, which is unquestionably faster than Snowflake, proves that this can be done efficiently. But compare to Redshift (non-RA3) or ClickHouse where you have data in locally-attached disks, Snowflake just gets smoked. The only lever they give you to get more performance is to spend more money which is great for their bottom line but bad for you.

The pitch is that because you can turn it all off when you're not using it (which in fairness they make very easy!), the overall costs end up low. Ehhhhhhhhhhh, maybe. It only takes one person leaving a Looker dashboard open with auto-refresh enabled to keep a warehouse constantly online, and that will add up fast. Plus if you are being silly and building DW data hourly, as is popular, it's going to need to be on anyway. (Do daily builds! You don't need more than that!) Point being, the cost model you will get from sales reps makes very optimistic assumptions about utilization, and it is very likely you will be hit with a bill larger than expected. In practice while it is technically easy to control utilization, it is not actually easy because there are humans in the loop.

Thank you. Much appreciated! I work on ClickHouse, and it's definitely the cat's meow for user facing analytics.
Agree with this. Snowflake has best-in-class dev experience and performance for Spark-like workloads (so ETL or unconstrained analytics queries).

It has close to worst-in-class performance as a serving layer.

If you're creating an environment to serve analysts and cached BI tools, you'll have a great time.

If you're trying to drive anything from Snowflake where you care about operations measured in ms or single digit seconds, you'll have a bad time and probably set a lot of money on fire in the process.

Here is another workflow orchestrator for you to try: Flyte!
It's on my list for sure. The hard requirement of running on K8s makes me sad in advance, though.
An inherent problem with data engineering dag frameworks is that they are not directly integrated with the nodes, they live above the nodes. The nodes don’t know about the DAG and depending on the software they’re running they’ll have different semantics for checking if something is stuck, cancellation, etc.

I think there’s a lot of room for innovation here. Given 1+ data streams or ingestion locations, a bunch of SQL scripts, a DAG to orchestrate the scripts, and 1+ data destinations there are many different execution models that could be used but aren’t. You’ve only specified the pipeline semantics rather than implementation, so smart tooling should be able to automatically implement patterns like streaming or intermediate queueing without much further input. IMO that’s what DAG frameworks could be: “compilers” for your data pipeline, rather than orchestrators. There’s progress in the area but nothing that quite gets there yet AFAIK

(comment deleted)
Can you share for what kind of tasks you use DAG frameworks such as temporal?
My first database was Informix, and that was a wonderful product. Better than Oracle in many ways. They had a great CLI interface and API. Unfortunately, Oracle had the mindshare and IBM acquired it.
I love Postgres, but 100% of my humble use cases are better served by SQLite and I wish I realised that sooner.
I have a coworker who wanted to use RDS to store a single configuration table with a dozen or so rows.

I told them to please investigate using SQLite with an d3 bucket for storage. Their tools will run about 1x a month on automation, they don't need a full DB.

Due to some unfortunately placed warnings about SQLite in production (context matters too) they were discouraged from this path.

I didn't argue I just said "fine, use aurora" and I'm sure this will bite us in some unforseen way down the road, but that will be Infra issues and then it's my teams job to handle it.

Over the years I've had many of those but I often ended up preferring some for some tasks but overall using most of them.

Examples (including dead products and random tools you might not always put in the same league):

  Desktop Environments: 
Aqua over GNOME3, GNOME3 over DWM/Windows, DWM/Windows over KDE, KDE over non-DWM/Windows

  Terminal Emulators: 
Terminal.app over gnome-terminal over iTerm2 over urxvt over xterm over Windows Terminal over CMD.exe

  Editors: 
Sublime Text over Atom over vim over BBEdit over VSCode over nano over Notepad++

  IDEs: 
IntelliJ over Xcode over NetBeans over KDevelop over Eclipse over Visual Studio

  Browsers: 
Safari over FireFox over Chromium over Chrome over Edge over Edgeium

  Shells: 
bash over zsh over csh over powershell over command.com

  Databases: 
Postgres over FoundationDB over MySQL over MongoDB over SQLite over Neo4J

  IaC: 
Terraform over SaltStack over Ansible over Chef over Puppet over PS DSC

  Public Clouds:
AWS over GCP over Azure

  Communication Collaboration:
Slack over IRC over Matrix over Signal over smoke signals over tin cans with a string over not communicating at all over MS Teams

  Workload Orchestration:
Kubernetes over Nomad over CloudRun over ECS over systemd units over Swarm
Where IaC is distinct from configuration management, what would be your preference for that?
I would use Terraform for anything that is provisioning and probably SaltStack for everything else.

There are some scenarios where there is no 'one tool for everything', like creating a complex OCI image, a VM image using Packer, a VM using Vagrant, configuring a network appliance or configuring an end-user workstation.

Example: super complex OCI images that attach to a CI pipeline would be better served by native packaging tools (like Jib for Java projects), but re-packaging of existing applications might depend on how green the build is. You could do a bunch of shell scripting in a Dockerfile, but once that gets big enough you'll start to need to use functions and perhaps even function libraries that you source in, but at that point you're doing a re-invention of something like Ansible and SaltStack, so depending on existing modules, knowledge, time, experience etc. you might use those instead.

Compare that to non-packaged-deliverable things like network switches and routers; those tend to be long-lived (non-ephemeral) systems, and they tend to have various inconsistent APIs between vendors, models and generations. But you may want to exchange configuration inputs and outputs with other systems so your Cloudflare rules, AWS ALBs, AWS SGs, on-prem Palo Alto firewall and on-prem Cisco switch agree on the configuration, and in such a way that it can be validated and audited constantly and consistently. Not a single named vendor does it all, especially not in a consistent and useful way. But as long as there are providers for Terraform, you can (with Terraform).

Perhaps the best way to describe how I balance it (or try to) is: the more modern the API, the more declarative I'd want to manage it in code. Cloud APIs tend to sit on the most-declarative end of the spectrum and end-user workstations on the least-declarative (or: most-imperative) end.

What makes you prefer Terminal.app over iTerm2?
Mostly the default availability and native stability and compatibility with very Mac OS X and macOS release so far. I don't really need the terminal emulator to do much (i.e. I don't need to have it integrate with tmux or screen, do things with the prompt or 'react' to what's happening in the shell.

While I have a couple of personal devices where I could go and customise everything as much as I like, it wouldn't port over to anyone I work with or any system I write software for, or any presentation I give, documentation I write etc.

Being more portable gives be better results overall than being specifically tailored to my preferences. I do default to light foreground and dark background colours wherever I go, but that is supported everywhere as far as I know, and has been the default on many platforms for long enough. (that said, I sometimes consult for complex/crazy situations and whenever you spot an xterm with black-on-white you know it's pain 'o clock).

Why do you dislike KDE? It's a great conventional DE with everything customizable.
These opinions are useless if the reasons are not stated. For example, you prefer iMessage over WhatsApp. Ok. Why? The UI? The exclusivity of the platform? Or is it just a whim?
They're not useless? If someone likes A > B and nobody likes B > A then you should give A a second look.
That's disingenuous. I don't believe you would pick something just because someone likes it. Almost everything that has been built is liked by somebody.

Are flip phones worth a second look just because my parents prefer them over smartphones?

However, if someone told me their anxiety vanished the moment they switched to a flip phone, they might be worth a second look. Maybe.

Of course I wouldn't pick it just because someone likes it, but it's still... data. Data that I'll combine with other sources of data. It provides a small but non-zero amount of weight to one side. Aka it is not useless. If you see patterns in people's unjustified recommendations, it starts to be a lot more than non-zero.

Your take appears to be: "for an idiot reader who will do exactly what they're told, this information is useless". Well! The readers aren't idiots. Easy.

Who said anything about picking something just because everyone likes it? No, the statement was about trying something because everyone likes it.

If everyone thinks A > B, and you seem to be the only person using B, then it might be worth your time to try out A. Sure, maybe you're happy with B, but there might be something you're missing that you don't know you're missing. If you try out A and decide you actually do like B more, that's fine.

Eh, I just look at the rotten tomato number and rarely dig into reviewer details. I'm looking for a decent comedy that most people think is decent. I usually don't need your thesis.
Because there's always a reason for different tools. I prefer nails over screws, but that doesn't mean you should only use nails for all your projects because some peeps on HN say they're superior.

Most people do prefer a Phillips screw over a slot screw, or PNG over BMP, but nobody has stated that here because the superiority is clear. If you like BMP over PNG, or MS Teams over anything, then you probably should explain.

There's culture too. I think Telegram, WhatsApp, and Viber, WeChat are all roughly equal. Similar goes for the browsers. Some countries are strongly Viber, while others are strongly WhatsApp, but this is more a product of marketing.

The opinions are useful if you're a proactive person on the lookout for alternatives to try and have the time to spare to discover things on your own.

Though I kinda agree. The question was worded in a way to promote terse responses...

3+ testing tools for websites - Selenium, Cypress, and Playwright.

Selenium is a little old and verbose - the biggest issue, imo, is having to handle waiting for elements. Also managing webdrivers suck. Cypress is great for E2E tests but falls apart on edge cases, for example it can't handle multiple domains. Just requiring npm and not needing webdrivers is really nice for CI. Playwright is sort of a combination of both - fixes a lot of issues in Selenium but has the ease of use of Cypress. It is much less documented than Selenium though.

If I was starting a new project I'd use Playwright.

I'm with you on this... I'd just assume use simple test/assertion library along with Playwrite/Puppeteer. May even push for straight up Deno as the test base and runtime for that matter.
I agree with this, after you get past the simple happy path testing, working with Cypress is mostly just wrestling with Cypress and its limitations.

Most of the limitations are around 2 things - Cypress has its own JS runtime separate from the node process which causes weird (non-intuitive) behavior. The other thing is the hand-wavy way Cypress tries to pretend the code is not async. You can’t just write JavaScript and have it work the way you expect, you have to write Cypress-flavored JavaScript, which sets up lots of footguns for junior engineers and causes you to have to be extra vigilant on code reviews.

I have worked heavily with Cypress for years, and if I were starting a new project I would 100% choose Playwright.

> [Cypress] can't handle multiple domains

It has for well over a year.

https://www.cypress.io/blog/2022/04/25/cypress-9-6-0-easily-...

Not really, it was experimental and only released recently (end of last year?). You can't really build experimental features with potentially breaking changes or even a complete removal into a CI pipeline without a lot of risk.

The main issue with Cypress handling this is, from what I understand, one browser per domain which can cause huge memory usage (which Cypress already has an issue with). Once you try parallelising multi-domain tests you run out of memory on developer laptops pretty quickly :(

But yes ultimately you are right, multi-domain is available, it's just those edge cases that get you once you go beyond simpler cases.

Hi, I work on Cypress (but not the multi domain feature).

I agree memory usage is an issue, I sure hope we can fix that. It's a hard problem with the frontend execution heavy model Cypress uses, along with the DOM snapshots consuming a ton of memory.

There is a `experimentalMemoryManagement` feature that might be of interest to you [0]. The reason this one is experimental is the implications are not fully understood yet, and as a mature software product, we can't just throw out a big feature and "see what happens", so to speak.

I understand not wanting to use experimental features, but this might be useful to your existing Cypress projects, even if you aren't using it for your new projects anymore.

[0] https://docs.cypress.io/guides/references/experiments

Thanks for the info! I’ll check it out :)
GCP over azure and AWS. I got to greenfields my company into the cloud, but as such I felt compelled to cost/benefit comparison the three main cloud providers. I also looked into Heroku and Serverless as alternatives.

It’s a close race between AWS and GCP, but we wanted serverless because we didn’t want the hassle of touching anything kubernetes related. Unfortunately, AWS Lambda had some goofy limitations, like requiring every method to be post and only supporting single routes per container (this was my understanding at the time, it may have changed). On the other hand, GCP Cloud Run is built on top of Knative, which allows you to do serverless services.

Also, fuck Jeff Bezos.

Performance testing. I'm familiar with gatling, jmeter, locust, but k6 is definitely the winner. Take locust if you strongly prefer Python over JS, TS or Go. If no preference towards Python, k6 is your answer.
Note taking apps.

I've used Evernote, OneNote, Apple Notes, and Notion.

I prefer Notion hands down.

I dislike OneNote. Poor syncing. Hard to keep formatting consistent. Can't link to notes easily. Web app is inferior to installed app.

I used to love Evernote, but then it got slow, which led me to eval the others. This ultimately led me to Notion.

Out of curiosity have you ever looked into Obsidian? Not that I think it's a replacement or superior but I feel that it's in the same space.
Not GP commenter, but I've used Apple Notes, emacs org-mode, Evernote, Notion, Coda, Obsidian, and Google Docs. I prefer Apple Notes for personal notes, and Google Docs for shared notes, and Notion for ones that I publish as web pages.
Is there a strategy in apple notes to better organize/reference other notes? I'm pretty new to the Apple ecosystem and don't really grok it.

Agreed on Google Docs (at least for design documents).

Tbh I reference other notes by manually writing their name. I don’t do it much, if I was going to do a lot of that I’d use obsidian.
I have used it and if you take time to customize it, it surpasses all the other options simply because you can do whatever you please with your data.

Sometimes I edit my markdown files in other editors like Bear (or web interfaces). Sometimes I draw handwritten notes on my ipad and insert them as images.

It all works pretty well.

I liked notion but then it too got slow as it added enterprise features.
Notion introduced (me to) the idea of slash commands and block-based editing. Now there's many others.
Yeah to me the block system thing just makes a lot of sense
Methinks it's all boiling down to some kind of lingua franca for document structure. Altho things like footnotes and tables of content will not fit. Not RSN anyways.
The majority of software I have come across can be put into three categories:

The first is the 'de facto', which are widely adopted for various reasons, mostly marketing, market share, and marketing.

The second is the "alternative" options that serve as alternatives to the previously mentioned choices.

The remaining software falls into the third category, where the focus is on implementing improvements to the other two categories.

What are the benefits of categorizing software this way? Does this help in forming preferences?
Cloudformation, SAM, Terraform, AzureRM. Terraform by miles and miles, then SAM. I mostly won't work in CF anymore.

Rider, Visual Studio, VSCode. Just use Rider.

AWS, GCP, Azure. Never Azure. The rest doesn't matter.

A more obscure ref but Airbyte, Fivetran, Hevo. Totally avoid Airbyte and Hevo. Begrudgingly use Fivetran.

Operating systems. I use Linux, Mac and Windows regularly. I've decided that I prefer Linux, tolerate Windows and regret Macs.
As someone who prefers Linux, tolerates Windows, and has never used MacOS, I'm curious to hear why you regret MacOS.
Not the person you asked, but I'm in the same boat. I prefer Linux, but tolerate Windows because I'm a gamer, and I can't fucking stand MacOS. I'll give you my reasons.

- Can't disable mouse acceleration via the UI. You have to use the terminal to enter a command to change a setting that sometimes gets overwritten on a system update. You can't disable scroll wheel acceleration at all without using 3rd party software.

- I hate the dock bar. I want each window of an app to be its own entry on the bar so I can easily switch from one window to a specific window with a single click. In MacOS, starting a second instance of an application that doesn't have a native method to do so is a total pain in the ass. Going to the Launcher to start the program just shows the existing instance of the application.

- Shitty defaults in general. Scroll wheel direction is backwards. Scrollbars auto-hide. The screen color shifts throughout the day.

- MacOS is based on UNIX but always feels like it's trying to hide that from you. The "root" user isn't capable of everything. There are directories in your home directory that even root can't access.

- Home/End keys move the cursor to the beginning/end of the document, not the beginning/end of the current line. As someone who uses those keys a lot in Windows, that behavior is aggravating. There IS a way to change this, but it's very non-obvious, and doesn't work in all programs.

- Muscle memory of using CTRL+X/C/V to cut/copy/paste will screw you up as a Mac uses their Command key which is where Alt is on a PC keyboard.

- Finder sucks. You can't cut/paste a file to move it, but you can copy/paste a file to copy it. To move a file in the Finder, you have to open two windows and drag it. The Delete key doesn't delete files.

Often times, things feel different just for the sake of being different and not because the designer thought it could actually improve UI/UX. Apple seems to very much tend to subscribe to the mentality that removing features is a feature.

Regarding mouse acceleration, the upcoming macOS Sonoma adds the option to disable that to the UI.
I recently started a new job and opted for a mac thinking "it's a unixy system, so it'll be more like my home linux setup". I have some regrets. The forced scroll acceleration is particularly intolerable; I had to find LinearMouse to get rid of that.

Another infuriating weirdness is window focus. Alt(sorry, _command_)-tabbing to a window brings all windows of that application to the front, possibly obscuring other windows you have around. And if you switch virtual desktops to one with a fullscreen window while you have another window of that application open on another monitor, it won't focus the fullscreen one you just switched to but rather the other window.

You can actually cut/paste in finder - just little different. You copy a file with Cmd+C, then paste it somewhere with Cmd+Option+V (instead of usual Cmd+V) and voila you have cut the file.

Yeah, it sucks.

I suspect parent meant he regrets the mac hardware. As in not being easier to use another OS on it.
I've got a few.

Text editors: I've used emacs, pico, nano, jed, vim, AE (UniData), ED (UniVerse), Sublime Text, VSCode, BBEdit, and countless others that I've forgotten. Sublime Text wins for simple edits of single files, vim wins when I'm ssh'd somewhere or at a terminal, and VSCode wins when I'm editing a collection of related files or doing development. ED and AE have a special place in my heart.

Databases: PostgreSQL, MySQL, UniVerse, UniData, OpenQM/ScarletDME, Sqlite, Oracle, MSSQL, Access. For relational databases, PostgreSQL for personal use and Oracle when someone else is paying for it. For MultiValue databases (UniVerse, UniData, OpenQM/ScarletDME) I like them all, but UniVerse was my first one and will always be special.

Browsers: I use Chrome, Edge, Firefox, and Safari roughly interchangably. Each one works better (for me) than the others in different contexts.

Spent the past few months on:

Observability platforms - Elastic / DataDog / Splunk / new era platforms

Incident management and alerting - PagerDuty / OpsGenie / FireHydrant

Status Pages - Atlassian / PagerDuty / new era platforms

Would be really keen to read someone's experience on Jira on-prem / Cloud / alternatives considered.

I would love to hear your opinion on observability platforms, this is something I am starting to investigate.
Not really an apple to apple comparison but I've used many programming language package managers (e.g. npm, pip, maven, bundler, cargo) and cargo is hands down the best one I've worked with.
I've used all sorts of sit/stand desks and chair & swiss balls in all sorts of combos, but I've learned over time that I prefer a static height desk and a padded piano bench to sit on. Sitting on a bench rather than a chair with a back encourages much better posture [for me]. It also encourages me to get up and move around more because it's trivially easy to get up & sit back down from any angle.

Virtual meeting platforms: Webex is by far the worst. Zoom is amazingly clunky given how much money they have to spend on it, but at least it generally works across various desktop & mobile environments. Meet is the most basic, but it "just works", and the features on web & mobile are identical (unlike some of the options). It also seems to have been undergoing the most consistent feature development over the past 18mo. Teams is perfectly fine on desktop if you're already bought into O365, but it's hot garbage from ChromeOS or if you're a guest.

Collaboration/productivity software for enterprise: O365 contains too many products, is too complicated, and afaict, nobody actually knows which is the right tool for the job. If it was just Word/PowerPoint/Excel/Access/Outlook + Teams it would be fine, but add in Sharepoint/Viva/OneNote/OneDrive/Forms/PowerBI/Publisher/Project/Bookings/Planner/Visio and nobody knows which tool is the right one for the job. Google Workspace can't hold a candle to Word/PowerPoint/Excel but arguably is much easier for normal people to grok. Trying to find files at an O365-using company is nearly impossible.

> I prefer a static height desk and a padded piano bench to sit on.

I have a similar setup, though with a height-adjustable desk. Instead of a piano bench, I got a simple stool from Ikea [1], which apparently they classify as "standing support". Works the same for me as you describe with the piano bench.

[1] https://www.ikea.com/us/en/p/nilserik-standing-support-black...

> Trying to find files at an O365-using company is nearly impossible.

100% agree. Microsoft's work has created millions of jobs in the "Sharepoint archeology" sector. David Graeber must be rotating in his grave.

I was thinking about trying it too, don't your lower back hurt? Or you get used to it?
SharePoint is the quintessential example of feature creep run rampant. It's like MS didn't know what SP was supposed to be, so they let it be everything, and as a result, it's clunky and slow.
Web browser: on the desktop, Safari still smokes everything else for speed, efficiency, and ergonomics.

Text editor, desktop: vim, still. I try new ones all the time. Vim is still most efficient at getting my thoughts out, particularly in editing.

Text editor, iPad: IAWriter. Very simple and clean markdown editor. I tried a _ton_ of these things, and I love IAWriter. You point it to a cloud storage folder.

VPN providers.

I trialed a variety of VPN providers for a month rather than read reviews endlessly. I became a fan of Mullvad but I've have to switch recently because of their port forwarding changes.

  Databases:
    PostgreSQL, mySQL, MongoDB, DynamoDB, SQL Server, SQLite.
    Preference: SQL Server for big stuff, SQLite for small stuff or prototyping.

  Editors:
    Notepad++ (Linux), TextEdit (macOS), Sublime (macOS, Windows, Linux), Nano, Vi, Vim
    Preference: Sublime followed by vi/vim if stuck in a shell.

  File Finders:
    PathFinder (macOS), Directory Opus, Finder, Windows Explorer (10 & 11), and a few different ones on Linux.
    Preference: Directory Opus on Windows, PathFinder on Mac

  Desktop Operating Systems:
    Windows 10 Pro, Windows 11 Pro, latest macOS, Ubuntu, CentOS, FreeBSD.
    Preference: Windows 10 Pro, followed by macOS, and Linux a distant 3rd.

  Desktop user interfaces:
    Windows 10 Pro, Windows 11 Pro, latest macOS, KDE, GNOME, couple of others in Linux.
    Preference: Windows 10 Pro, followed by macOS, and Linux a distant 3rd.

  Calculators:
    Speedcrunch, OpalCalc, SoulVer, Windows Calculator, bc.
    Preference: SoulVer, OpalCalc, Speedcrunch.
    Honorable mention: RealCalc on mobile.

  One-to-one messaging:
    Telegram, WhatsApp, iMessage, SMS, Google Messages
    Preferemce: Telegram

  Group or work messaging:
    Slack, Discord, Teams
    Preference: Teams, then Slack.

  Version Control:
    Mercurial, SVN, CVS, Git, Perforce, AlienBrain (defunct now)
    Preference: Perforce followed by AlienBrain followed by Mercucrial

  DVCS repo websites:
    Gitlab, self-hosted gitlab, Perforce self-hosted, Perforce hosted, github
    Preference: Perforce self-hosted, followed by github.

  VM hosts:
    VMWare Workstation, VMWare Fusion, VirtualBox, ProxMox, VMWare ESXi
    Preference: VMWare Workstation followed by ESXi.

  Chrome, Firefox, Edge, Safari, Brave.
  Preference: Firefox & Firefox mobile, Chrome

  Search Engines:
    Kagi, Google, DuckDuckGo, Bing, a few others.
    Preference: Kagi

  PDF Readers:
    Chrome, Firefox, Adobe, Foxit, PDF Reader Pro, Edge
    Preference: Edge

  Languages (only those I've used in the past 2 years):
    C, C++, C#, ARM Assembly, Rust, Python, Ruby, Typescript, JavaScript, VisualBASIC.
    Preference: Typescript, Ruby, C#, Python (and I never thought I'd ever put a "scripting" language before my beloved C/C++/C# languages)

  Coffee:
    Starbucks, Trader Joe's, Illy, Groundworks
    Preference: Groundworks, with Illy in a pinch.

  Shells:
   fish, zsh, bash, csh, few others
   Preference: Fish and fish in Bash compatibility mode.

  Code Editors (just those in the past 2 years):
    Jetbrains (pycharm, rubymine, intellij, dataspell, Rider, etc, etc), VSCode (Linux, macOS, Windows), Visual Studio 2017 & 2019 & 2022, XCode
    Preference: Visual Studio 2022 with latest intellicode disabled, followed by Jetbrains
   
  Clouds:
    AWS, Azure, GCP
    Preference: AWS
Now watch all the Linux lovers/Windows haters down vote personal preferences.
I'm not saying you're wrong, but I bet you're the only person on HN with a preference for Teams over, say, semaphore flags.
VS22 > jetbrains is surprising to me. Care to share why? I'm also curious why Linux is so far down and windows is your favourite.
Why SQL Server?
Most of what you've listed I would consider rather mainstream surface-like things, which could be swapped out for another without much impact. When I think tools, I think frameworks, databases, programming languages.

Also listing that you have a strong preference for one over others isn't helpful without reasoning as to why.