
Travel Review Platform: Moderation, Fraud, and the Recency Problem
Running a travel review platform at scale — review eligibility, fraud detection, ranking that resists gaming, and the moderation workflow that makes it trustworthy.
Practical writing and lessons from building systems where correctness, reliability, and recovery matter.

Running a travel review platform at scale — review eligibility, fraud detection, ranking that resists gaming, and the moderation workflow that makes it trustworthy.

Why a global SQL database is really a problem of agreement and time, how Google solved it with TrueTime, GPS, and atomic clocks, and how CockroachDB reaches a practical design on ordinary infrastructure.

A story-led explanation of Tasks, compiler-generated state machines, continuations, threads, I/O completion, exceptions, cancellation, contexts, and practical async design in .NET.

A plain-English walkthrough of how an ASP.NET Core application starts, builds its middleware pipeline, accepts traffic through Kestrel, selects an endpoint, and returns a response.

An end-to-end migration article covering compatibility, partition mapping, dual running, cutover, rollback, and the operational model after Kafka.

A story-led, end-to-end guide to CockroachDB changefeeds, Kafka records, and a practical C# consumer, including offsets, ordering, duplicates, recovery, and production design.

Asynchronous replication separates primary commit, standby receipt, durable flush, and replay. Read-your-writes depends on replay; failover loss depends on what reached the promoted standby.

OFFSET makes the executor process and discard rows before the page, so deep pages grow linearly even with an index. Keyset pagination bounds that work, and a unique tiebreaker makes the cursor unambiguous.

How to remove database round trips without confusing batching, transactions, preparation, concurrency, and bulk-loading behavior in Npgsql and PostgreSQL.

The N+1 is not a slow query, it is a correct query repeated thousands of times, and because it works in development with ten rows the only reliable defence is a query count assertion in the test suite.

A soft-deleted row still holds its unique value, so the second registration of the same email fails on a constraint nobody expected to fire. The fix is a partial index, and the decision about whether to use one is upstream of that.

A JSONB column lets you add an attribute without a migration, which is a real win. The mistake is treating that freedom as a licence to put everything in it, and the mature answer is a hybrid.

How many database connections you actually need is arithmetic, not intuition, and the real risk is that your pod count multiplies a per-instance default into more connections than Postgres has.

How PostgreSQL foreign keys use child-side access paths and parent-row locks, how to audit composite indexes, and how validation differs from enforcement.

Why a five millisecond metadata change stalled a site for forty minutes, how a queued ACCESS EXCLUSIVE lock blocks every query behind it, and why lock_timeout is the setting that makes a migration safe.

A deadlock needs a cycle in the wait-for graph, which is why consistent lock ordering removes an entire class of incident, and why the database picking a victim is the good outcome.

Why the ANSI isolation table describes symptoms rather than mechanisms, what MVCC changed, and how snapshot isolation still lets two correct transactions corrupt each other.

How PostgreSQL separates writes, WAL flushes, synchronous commit, hardware truthfulness, and group commit—and where each durability promise can fail.

Why an LSM engine saturates a disk with no user traffic, how write stalls turn a background merge into a latency incident, and why the disk needs headroom a capacity graph will never show.

The RUM conjecture frames an access method as a trade among read overhead, update overhead, and memory or storage overhead—not as a theorem about range scans.

Why a matching index still costs one random read per row, how INCLUDE columns turn that into an index-only scan, and why a stale visibility map quietly puts the heap read back.

Sargability, stale statistics, the leftmost prefix rule, correlated columns, and the cost settings that make a planner reject an index it should have chosen.

Random UUIDs spread B-tree inserts across leaf pages; time-ordered UUIDs improve locality. The effect differs sharply between InnoDB's clustered table and PostgreSQL's heap.

A key-to-node map, frequency buckets, and a minFreq pointer that advances on promotion and resets on insertion, plus concurrency and aging limits of exact LFU.

Revenue management for travel — demand forecasting, price fences, the difference between dynamic and surge, and why published prices must be honoured.

Aircraft seat maps as a constraint problem — legality, preference, family adjacency, and the concurrent reservation race that a seat map is uniquely bad at.

Price alert infrastructure — polling strategies, trigger thresholds, alert fatigue, and the honesty problem when the price moves after you alert.

Short-term rental platforms at scale — the 365-night calendar, host reliability, dynamic pricing integration, and local regulation as a first-class constraint.

Running a two-sided accommodation marketplace — supply onboarding, ranking that serves both sides, payments in a regulated flow, and the disputes problem.

Using DRY to keep business knowledge authoritative across rules, contracts, data, operations, and documentation without forcing unrelated code into one abstraction.

Hotel booking as an overbooking-and-allocation problem — room types, allotments, cancellation policy state, and the race between hold, book, and confirm.

Flight search at scale — GDS and aggregator fan-out, result caches that age gracefully, and the itinerary-combinatorics problem that makes searching hard.

Building navigation at map scale — road-graph routing, map matching from GPS traces, live traffic estimation, and incremental rerouting.
Package tracking as a scan-event pipeline — status models, exception handling, the ETA problem, and why carrier webhooks are the hard part.

Last-mile delivery route design, density-based territory planning, failed delivery recovery, and the operational details that dominate the economics.

Freight dispatch with capacity, hours-of-service, and multi-depot realities — the parts of dispatch that a load board does not solve.

Multi-day itineraries as constraint satisfaction, with travel time, opening hours, reservations, and the user's own trade-offs made explicit.

How ride matching actually works — spatial partitioning, ETA matrices, batch windows, and why lowest-detour and shortest-wait pull in opposite directions.

Candidate generation, two-stage ranking, exploration, and the feedback loops that turn a travel recommender into a filter bubble.

Vehicle routing with capacity and time windows, large neighbourhood search, and why an optimal solution computed offline is worthless by morning.

OCPP, the five-system transaction, demand charges on connected capacity, idle bays, and why public charging reliability is a hardware problem wearing a software costume.

The unlock and ride lifecycle, when a ride actually starts, curb economics, battery swap logistics, and why the payment authorisation is the hardest part of a scooter.

Event time versus processing time, checkpointing and exactly-once state, backpressure, and choosing heap or disk-backed state with an explicit recovery budget.

Hours-of-service compliance, driver behaviour scoring as an employment decision, fuel leakage, and why a fleet system's real value sits in the five percent of cases that are not normal.

Designing a cursor-based long-poll endpoint in ASP.NET Core with bounded waits, replay, replica coordination, overload control, and failure testing.

Scheduling, shuffle, data skew, dynamic allocation, and the operational patterns that decide whether a 4-hour batch job is a cost centre or an outage risk.

Local-first hubs, Matter and Thread, the state machine behind automations, and why a smart home that stops working during an outage is a remote control with extra features.

Designing a .NET upload boundary that is honest about buffering, quotas, untrusted metadata, scanning, durable storage, retries, and OpenAPI.

Incremental extraction, idempotent loads, late-arriving data, backfills, and the data quality checks that decide whether anyone trusts the warehouse.

The fifteen year fleet problem, what a CAN bus will actually let you log, command safety on an intermittently connected car, and why a connected vehicle has four data subjects and not one.

Tiered storage for device telemetry, the wide-versus-narrow table decision that changes everything, and why rolling data up is cheaper than querying it raw.

A boundary-first way to decide whether shared API behavior belongs in a base controller, middleware, filters, authorization, or explicit application services.

Why the hard problem in city data is departmental ownership rather than throughput, and what to do about coordinate systems, spatial joins, privacy, and data quality you can defend.

Domain ownership, data as a product, the federated plane, and why data mesh is a reorganisation with an API in front of it.

The IT and OT boundary, the edge, OPC-UA versus Modbus, historians, digital twins, and why a control loop must never depend on a network it does not own.

Choosing and operating bounded parallelism in .NET across CPU work, asynchronous I/O, channels, dependency limits, cancellation, and production measurement.

Desired state versus reported state, bulk configuration, staged firmware rollouts, and why a two million device fleet is a control plane problem before it is a console problem.

Choosing and operating password hashing in .NET with ASP.NET Core Identity, Argon2id or PBKDF2, versioned envelopes, peppers, upgrades, and capacity controls.

Schema registries, compatibility modes, ownership as data, and why a metadata system without enforced write paths becomes a documentation site.

Modeling instants, local dates, wall-clock schedules, offsets, and time-zone identifiers explicitly across .NET, EF Core, databases, and APIs.

Connection counts, QoS, session state, provisioning, and the MQTT to Kafka bridge, written for fleets large enough that the hard problem is connections rather than throughput.

How a high-frequency sensor stream is partitioned, windowed, and turned into an alarm, including the state-size problem that decides whether a stream processor survives contact with real data.

Spans, context propagation, head versus tail sampling, and the cardinality decisions that determine whether your tracing bill is a line item or an incident.

A concrete Prometheus-style storage path—head data, WAL, encoded chunks, label indexes, blocks, compaction, and cardinality—plus where other time-series engines differ.

Steady-state hypotheses, blast radius controls, abort conditions, and the discipline that separates experiments from outages with extra steps.

Designing RabbitMQ service boundaries with owned queues, publisher confirms, transactional outbox and inbox records, bounded retries, backpressure, and recovery tests.

Weighted routing, metric gates that actually mean something, analysis windows versus sample size, and why most canary systems fail at the metric check.
How a fleet of GPS devices turns location pings into a live map, without losing positions, overwriting history, or melting the database.

Prometheus pull semantics, cardinality, recording rules, alert routing with inhibition, and the difference between a metric that explains an incident and one that pages someone.

Leader-elected scheduling, a timing wheel, DAG dependencies, and the exactly-once claim that is actually at-least-once plus idempotency.

Two identical environments, database migrations that break the contract, and the failure modes that turn a supposedly-safe switchover into an outage.

Liveness, readiness, and heartbeat are not the same test, and conflating them is how a slow dependency restarts your entire fleet.

Shared schema, database-per-tenant, schema-per-tenant, and the row-level security middle ground — with the noisy-neighbour maths that picks the tier.

xDS control plane, sidecar versus ambient, mTLS with SPIFFE identity, and the honest reasons a mesh is worth it — and the ones that are not.

Two-phase scheduling, level-triggered reconciliation, the pod lifecycle, and why a Kubernetes-style control loop is the reusable idea underneath every orchestrator.

Envelope encryption, HSM-backed roots, dynamic database credentials, and why the hard part of secrets management is revocation, not storage.

Fencing tokens, Redlock's pause problem, ZooKeeper's sequential ephemeral nodes, and the honest limits of TTL-based mutual exclusion.

Raft, linearizable reads, watch fan-out, and MVCC — how etcd and Consul actually keep fifty thousand services watching config without falling over.
No articles match that filter yet.