Many though not all of these patterns are useful even in a small company.
I’m on a tiny team building an application that’s unlikely to ever average more than a handful or two of concurrent active users.
We’re using DB replicas for redundancy and failover and may eventually use the read replica to remove load off the primary. We’re using caching (which comes almost “for free” with our framework) to save slow/resource-intensive expensive DB and third-party API queries for lookups against rarely changing data sets.
We run background jobs and need at-least-once processing, which means consumers must be idempotent; not to mention idempotent handling of webhooks from one of our vendors. In fact, I can’t think of a small company I’ve worked at beyond proof of concept stage that hasn’t needed idempotence and benefitted from caching some things.
My last small company dealt with high volume and needed rate limiting and outboxes. In other highish volume contexts I’ve pre-computed expensive data structures (idempotently) and cached them in a document database.
Next time you’re at a small company might be a time to look around and ask yourself if any of these patterns is needed or would improve your software’s reliability or performance.
Somewhere on the order of $25M, adjustable for inflation. Enough to live darn comfortably off the interest for one’s entire life even in a mediocre stock market, and to leave a heck of a legacy for one’s dependents. Not enough to single-handedly change the course of an entire democracy just by throwing money around.
Set up an overnight job that sanitizes snapshots of prod data — replacing PII or other sensitive data with randomly generated cruft — and loads that into a pre-prod environment for use in debugging. For easiest troubleshooting, have it preserve primary keys; and have customer service look up the PKs of affected users’ records.
This won’t work for all classes of bug, but helps a lot.
Also helpful: extensive logging, telemetry, and exception capture with not just stack but context; session recordings to video (the service we use for that blanks out user inputs for privacy purposes but lets you see where things went wrong).
In fact, for some people high contrast is headache-inducing.
I’ve installed a utility on my laptop that supports “sub-zero” display dimming for nighttime use because monitors are now over-optimized for max brightness, with min brightness being retina-searing for eyes adjusted to a dim room.
Yup. Or people with temporary disabilities — who have simply broken limb or had a surgery. Most places are hellish to navigate on crutches. Heavy doors alone make so many places nearly inaccessible, and that’s before you even get to stairs.
Not to mention luggage. I find it hard to believe that it’s a coincidence that rolling luggage became common shortly after curb cuts and wheelchair ramps did.
The rolling luggage is primarily useful in the vicinity of airports. Inside airports there were no curbs. And I don't think people are going on long journeys through downtown areas with their luggage. I think you have a better argument asserting that rolling bags were facilitated by cheap polyurethane skate wheels.
There were fewer ramps and more stairs in airports and their parking garages prior to the 90s, due to the ACA.
And people drag luggage around on city streets all the time. Many tourist destinations are pedestrian cities even outside their most central downtown areas. And luggage also needs to be dragged around hotels — and in suburban areas their absurdly large parking lots.
The skate wheels are a plausible argument, though.
Regulators were able to restrict CFC use because the patents had expired and the manufacturers were ready to move on to the next compounds they’d already developed anyway.
I’m on a tiny team building an application that’s unlikely to ever average more than a handful or two of concurrent active users.
We’re using DB replicas for redundancy and failover and may eventually use the read replica to remove load off the primary. We’re using caching (which comes almost “for free” with our framework) to save slow/resource-intensive expensive DB and third-party API queries for lookups against rarely changing data sets.
We run background jobs and need at-least-once processing, which means consumers must be idempotent; not to mention idempotent handling of webhooks from one of our vendors. In fact, I can’t think of a small company I’ve worked at beyond proof of concept stage that hasn’t needed idempotence and benefitted from caching some things.
My last small company dealt with high volume and needed rate limiting and outboxes. In other highish volume contexts I’ve pre-computed expensive data structures (idempotently) and cached them in a document database.
Next time you’re at a small company might be a time to look around and ask yourself if any of these patterns is needed or would improve your software’s reliability or performance.
reply