<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://roushtech.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://roushtech.net/" rel="alternate" type="text/html" /><updated>2026-06-03T01:50:50-04:00</updated><id>https://roushtech.net/feed.xml</id><title type="html">RoushTech</title><subtitle>RoushTech designs, builds, and operates custom software, SaaS platforms, and infrastructure for healthcare, e-commerce, manufacturing, and SaaS teams.</subtitle><author><name>RoushTech, LLC</name></author><entry><title type="html">Postgres is my go-to database and I&apos;m tired of pretending there are other options</title><link href="https://roushtech.net/blog/postgres-is-my-goto/" rel="alternate" type="text/html" title="Postgres is my go-to database and I&apos;m tired of pretending there are other options" /><published>2026-05-08T00:00:00-04:00</published><updated>2026-05-08T00:00:00-04:00</updated><id>https://roushtech.net/blog/postgres-is-my-goto</id><content type="html" xml:base="https://roushtech.net/blog/postgres-is-my-goto/"><![CDATA[<p>Ok, hot-take title aside: this is specifically with regards to <em>relational</em> databases (and hybrid document stores if you use Postgres that way), obviously if you need time series, graph, key-value, there are better engines…</p>

<p>But without further ado.</p>

<h2 id="yes-just-use-postgres">Yes Just Use Postgres</h2>

<p>The idea to write this came from a Reddit post: <a href="https://www.reddit.com/r/dotnet/comments/1t67sr7/why_does_postgresql_net_feel_so_much_better_than/">Why does PostgreSQL + .NET feel so much better than SQL Server these days?</a></p>

<p>Here at RoushTech we average shipping a new mainline market product about every 2 years, with smaller products dotted around, it's just how the work comes in, but regardless when it comes down to database choice we always "evaluate what our options are", then we choose Postgres, we really should cut out the middle man on this.</p>

<h2 id="what-about-other-engines">What About Other Engines?</h2>

<p>OK, again keeping this fair and sticking to <abbr title="Relational Database Management System">RDBMS</abbr> platforms, let's talk about our options:</p>

<ul>
  <li>Microsoft SQL Server - <em>Okay</em>, I'm going to be honest, I love MSSQL… until I have to license it. It's an <em>extremely</em> powerful engine, a good set of tools, some really nice failover options. Two major downsides: we've seen massive performance degradation when running on Linux due to how Microsoft got it to actually <em>run</em> on Linux, and secondly, the biggest one… Licensing. In the past we'd easily drop thousands or <em>tens of thousands</em> on licensing. It's become a major barrier. 2 months of development for an MVP or your SQL server license?</li>
  <li>MySQL/MariaDB - A <em>very</em> outdated engine, InnoDB hasn't seen meaningful improvements in forever, Oracle is effectively doing nothing with it (and no, MariaDB isn't different enough to warrant its own line), and my favorite deal-breaker in why we almost never run it. <em>ALTER TABLE STATEMENTS ARE IMPLICIT COMMITS</em>, that's right! When your software is running a migration, if it fails, it'll leave the DB in an invalid state because every table alter breaks out of your transaction! That's great!</li>
  <li>Oracle - Did you look at Microsoft's license and determine you were a glutton for punishment beyond that?</li>
  <li>[Insert Scale-Out DB Here] - Platforms like CockroachDB are cool, but scale-out DBs are a completely different class, complexities change a lot, design options are limited, latency floors are usually pretty high.</li>
  <li>SQLite - OK I love SQLite but only really great for local/embedded DBs.</li>
</ul>

<h2 id="ok-but-how-does-postgres-stack-up">OK But How Does Postgres Stack Up?</h2>

<p>This is the wonderful part, and some of the <em>really fun</em> parts people miss out on:</p>

<ul>
  <li>It's extremely performant in a lot of cases, we've shoved a <em>ridiculous</em> amount of traffic through it.</li>
  <li>You can use it as a doc store! Yeah, okay, I usually don't opt for using engines "incorrectly" but Postgres has come a long way, the ability to dig and index into JSON columns is great.</li>
  <li>You can beat the <em>everliving snot</em> out of an <abbr title="Relational Database Management System">RDBMS</abbr> if you're a half-decent engineer. We've had single-instance Postgres systems doing tens of thousands of non-trivial transactions per second, and yes, that's even after someone trots out the "well this key-value or document store can do 400k/sec" comparison everyone loves, sure, but those 400k are <em>trivial</em> ops on a single key or document. One non-trivial Postgres transaction is doing joins, constraint checks, and atomic writes across multiple tables. They're not the same unit and the comparison only flatters them if you pretend they are.</li>
  <li>Has a good amount of tuning options allowing you some decent influence on performance.</li>
  <li>Has a healthy extension market with a lot of additional bells-and-whistles you can add (PostGIS for spatial, pgvector for embeddings/RAG, TimescaleDB for time-series).</li>
  <li>The <abbr title="Multi-Version Concurrency Control">MVCC</abbr> system is complex but powerful.</li>
</ul>

<h2 id="where-am-i-going-to-get-bit">Where Am I Going To Get Bit?</h2>

<ul>
  <li>I've had the query planner lie to me about costs, just straight up <em>lie</em>, "this is cheap" then thread-spins.</li>
  <li>Like any <abbr title="Relational Database Management System">RDBMS</abbr>, beware of locking, a sloppy ALTER TABLE statement may be the difference between something that takes 100ms and 100 <em>minutes</em> (or longer). Learn how the engine allocates data.</li>
  <li>There are <em>many</em> ways to set up clusters, each with their own pros and cons.</li>
  <li>Postgres uses a process-per-connection model (every client connection forks its own backend OS process), which gets expensive at scale. PGBouncer is your friend, and your enemy. There is no free lunch with connection limits and port limitations, PGBouncer can make these logistics <em>easier</em>, but port exhaustion is still a thing.</li>
  <li>If you need something truly scale-out, it likely isn't here, but you should also be making $100+m/yr, why are you even here?</li>
  <li>Postgres is case-sensitive by default, unlike basically every other DB engine on the face of the planet. Configure case-insensitive collations on day one or you'll be patching application bugs forever.</li>
  <li>Run <code class="language-plaintext highlighter-rouge">VACUUM FULL</code>, you'll have a good time (<em>insert massive amounts of sarcasm here</em>). Imagine a hard drive defrag from back in the day but it locks your hard drive while doing so. MSSQL got online index rebuilds right at least, at least if you're paying for Enterprise.</li>
  <li>Major version upgrades can be annoying, not super bad though.</li>
</ul>

<h2 id="i-hate-to-say-it">I Hate To Say It…</h2>

<p>But yeah, just use Postgres, our options have narrowed over the years, and I agree, it's annoying, I almost feel like I'm not doing my job, but Microsoft's licensing and Oracle's lack of caring for MySQL did that for me.</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[Why we always end up choosing Postgres, and what to watch out for if you do too.]]></summary></entry><entry><title type="html">New Look, Old Us</title><link href="https://roushtech.net/blog/new-look-old-us/" rel="alternate" type="text/html" title="New Look, Old Us" /><published>2026-04-23T19:00:00-04:00</published><updated>2026-04-23T19:00:00-04:00</updated><id>https://roushtech.net/blog/new-look-old-us</id><content type="html" xml:base="https://roushtech.net/blog/new-look-old-us/"><![CDATA[<p>We went ahead and deployed our new website, we're back on Jekyll on Cloudflare Workers, the process is pretty quick, I've always liked Jekyll for a lot of reasons (good basis, doesn't mix up a bunch of SPA concerns, lightweight, extensible with Ruby, front-matter is a first-class concern)</p>

<p>So with the new site comes some major new changes, we have some new pages better describing what we do, we have some regional pages up and we'll probably have more in the future, we have a list of our projects publicly (we used to have a hidden portfolio a couple of sites ago)</p>

<p>One of the major changes: public pricing</p>

<h2 id="okay-but-public-pricing">Okay, but public pricing?</h2>

<p>Along with us using Claude with a lot of our development, Claude has helped a bit with this site – Claude constantly complained "Don't put up pricing", "it doesn't allow you to drive higher margin if people know what you charge"</p>

<p>Yes Claude that's the point, we're not like every dev house where your pricing fits your business size (oh, you got lots of money, guess our hourly rate went up…). We work backwards from what we pay our engineers, since that's the basis that we have to clear as a business, we put a few levels of margin on top of that which represent our different discount tiers, and that's it. Nothing else special.</p>

<p>I mean Exhibit A of our MSA that shows our rates is basically the same for everybody (there are some edge cases where people get some slightly tweaked rate sheets but mostly driven by stability of the contract).</p>

<h2 id="weird-so-why">Weird, so why?</h2>

<p>There is a significant number of customers that appreciate that we just shoot straight, someone asks what we think something will cost, we'll throw some numbers based on our experience, not based on me having to come back and figure out what we can squeeze them for, just honest off-the-cuff assessments of what they're trying to do.</p>

<p>Of course we're generally in agreement: I'm giving <em>examples</em>, details can drive differences, but I get a lot of "I can't get a vendor to just shoot straight with me, Will"… well we should really do that up-front too. If the pricing makes you a bit skittish, if you're unsure of how or why we do things, talk to us, I'm more than happy to discuss how this makes sense.</p>

<p>Or hang around for more articles. Along with industry insights, I'm planning to explain a lot of the ethos behind why we do what we do and where these systems and theories come from, some maybe more hot takes than others…</p>

<p>See ya around!</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[New website design, why we're doing it, what comes next.]]></summary></entry></feed>