StackShareStackShare
Follow on
StackShare

Discover and share technology stacks from companies around the world.

Product

  • Stacks
  • Tools
  • Companies
  • Feed

Company

  • About
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2025 StackShare. All rights reserved.

API StatusChangelog
  1. Home
  2. Companies
  3. Thumbtack
Thumbtack logo

Thumbtack

Verified

The future of home care 🚀

Remotethumbtack.com
69
Tools
2
Decisions
17
Followers

Tech Stack

Application & Data

24 tools

PHP logo
PHP
TypeScript logo
TypeScript
GraphQL logo
GraphQL
InfluxDB logo
InfluxDB
Python logo
Python
PostgreSQL logo
PostgreSQL
Golang logo
Golang
R Language logo
R Language
Apache Spark logo
Apache Spark
JavaScript logo
JavaScript
Swift logo
Swift
Kotlin logo
Kotlin
Android SDK logo
Android SDK
Snowflake logo
Snowflake
Amazon Redshift logo
Amazon Redshift
Google BigQuery logo
Google BigQuery
Apache Parquet logo
Apache Parquet
sql logo
sql
Objective-C logo
Objective-C
RxJava logo
RxJava
Next.js logo
Next.js
Scala logo
Scala
C lang logo
C lang
pgDoctor logo
pgDoctor

Utilities

4 tools

Elasticsearch logo
Elasticsearch
Slack logo
Slack
Google Analytics logo
Google Analytics
Okta logo
Okta

DevOps

1 tool

Grafana logo
Grafana

Team Members

Marc Bollinger
Marc BollingerInfra & Data Eng Manager
Nathan Wong
Nathan Wong
Jess Wills
Jess WillsSenior Technical Sourcer

Engineering Blog

Stack Decisions

marcoalmeida
marcoalmeida

Sep 13, 2018

One important decision for delivering a platform independent solution with low memory footprint and minimal dependencies was the choice of the programming language. We considered a few from Python (there was already a reasonably large Python code base at Thumbtack), to Go (we were taking our first steps with it), and even Rust (too immature at the time).

We ended up writing it in C. It was easy to meet all requirements with only one external dependency for implementing the web server, clearly no challenges running it on any of the Linux distributions we were maintaining, and arguably the implementation with the smallest memory footprint given the choices above.

387k views387k
Comments
marcoalmeida
marcoalmeida

Sep 13, 2018

Running PostgreSQL on a single primary master node is simple and convenient. There is a single source of truth, one instance to handle all reads and writes, one target for all clients to connect to, and only a single configuration file to maintain. However, such a setup usually does not last forever. As traffic increases, so does the number of concurrent reads and writes, the read/write ratio may become too high, a fast and reliable recovery plan needs to exist, the list goes on…

No single approach solves all possible scaling challenges, but there are quite a few options for scaling PostgreSQL depending on the requirements. When the read/write ratio is high enough, there is fairly straightforward scaling strategy: setup secondary PostgreSQL nodes (replicas) that stream data from the primary node (master) and split SQL traffic by sending all writes (INSERT, DELETE, UPDATE, UPSERT) to the single master node and all reads (SELECT) to the replicas. There can be many replicas, so this strategy scales better with a higher read/write ratio. Replicas are also valuable to implement a disaster recovery plan as it’s possible to promote one to master in the event of a failure.

4.13k views4.13k
Comments