DEV Community

Shipmind Labs profile picture

Shipmind Labs

Senior software engineering team that designs, builds, and runs payment systems, crypto rails, and marketplace backends — backend to DevOps, one accountable partner since 2018.

Location Distributed team Joined Joined on  Personal website https://shipmindlabs.com/r/pdv github website

Work

Shipmind Labs — shipmindlabs.com

A promo usage limit needs compare-and-set, not a read then a write

A promo usage limit needs compare-and-set, not a read then a write

Comments
7 min read

Want to connect with Shipmind Labs?

Create an account to connect with Shipmind Labs. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
A blocked tag left on the page is one line of code away from running

A blocked tag left on the page is one line of code away from running

Comments
6 min read
A money input that regroups on every keystroke eats a digit

A money input that regroups on every keystroke eats a digit

Comments
7 min read
Where a discount belongs: the invoice or the line, never both

Where a discount belongs: the invoice or the line, never both

Comments
7 min read
Order per entity, not per queue, in an offline write queue

Order per entity, not per queue, in an offline write queue

10
Comments
6 min read
A deep link that arrives before login: park it, replay it once, expire it

A deep link that arrives before login: park it, replay it once, expire it

Comments
7 min read
Make a staging OTP shortcut fail at startup, not at verification

Make a staging OTP shortcut fail at startup, not at verification

Comments
6 min read
An unanswered question is not a no

An unanswered question is not a no

Comments
6 min read
Withdrawing consent should be the same call as granting it

Withdrawing consent should be the same call as granting it

Comments
7 min read
Split five cents three ways: allocation that sums back exactly

Split five cents three ways: allocation that sums back exactly

Comments
6 min read
A credit note is a type code, not a minus sign

A credit note is a type code, not a minus sign

Comments
6 min read
A deep link routing table is an authorisation boundary

A deep link routing table is an authorisation boundary

Comments
6 min read
Consent is a log bound to the notice it answered

Consent is a log bound to the notice it answered

Comments
6 min read
Deduplicate notifications by the caller's key, not the message text

Deduplicate notifications by the caller's key, not the message text

Comments
5 min read
Accessibility evidence belongs to the build it was taken on

Accessibility evidence belongs to the build it was taken on

Comments
6 min read
A money field should refuse an ambiguous amount, not guess it

A money field should refuse an ambiguous amount, not guess it

Comments
7 min read
The offline write path is a storage problem, not a network problem

The offline write path is a storage problem, not a network problem

Comments
6 min read
A discount has a VAT rate: EN 16931 totals from the bottom up

A discount has a VAT rate: EN 16931 totals from the bottom up

Comments
7 min read
Why a six-digit code is safe: entropy, attempts and the pepper

Why a six-digit code is safe: entropy, attempts and the pepper

Comments
6 min read
A notification template is a contract, not a string

A notification template is a contract, not a string

Comments
6 min read
Overlapping delivery zones resolve by explicit priority

Overlapping delivery zones resolve by explicit priority

Comments
6 min read
An accessibility statement your audit trail can support

An accessibility statement your audit trail can support

Comments
6 min read
Invoice numbers that cannot skip or repeat

Invoice numbers that cannot skip or repeat

Comments 1
6 min read
Courier dispatch: refusal cooldown instead of a penalty score

Courier dispatch: refusal cooldown instead of a penalty score

Comments
6 min read
A permission check should return a denial, not False

A permission check should return a denial, not False

Comments
6 min read
The order lifecycle belongs in a table, not in your endpoints

The order lifecycle belongs in a table, not in your endpoints

Comments
7 min read
Promo code rejections belong in the type system

Promo code rejections belong in the type system

Comments
7 min read
Notification Fan-Out Needs a Stop Condition, Not a Retry Loop

Notification Fan-Out Needs a Stop Condition, Not a Retry Loop

Comments
6 min read
An audit trail is a typed changeset, not a log line

An audit trail is a typed changeset, not a log line

Comments
6 min read
Review queues for compliance teams: leases, not row locks

Review queues for compliance teams: leases, not row locks

Comments
6 min read
Expand and Contract: Changing a Payments Column Without Downtime

Expand and Contract: Changing a Payments Column Without Downtime

Comments
6 min read
Queue Topology: One Broker, Several Queues, No Shared Pool

Queue Topology: One Broker, Several Queues, No Shared Pool

Comments
5 min read
Extracting a Service From a Monolith Without a Code Freeze

Extracting a Service From a Monolith Without a Code Freeze

Comments 4
6 min read
Testing Money Paths: Four Tests Our Review Gate Requires

Testing Money Paths: Four Tests Our Review Gate Requires

Comments
6 min read
One payment protocol for every provider: hold, capture, refund

One payment protocol for every provider: hold, capture, refund

Comments
6 min read
Catching money bugs with ledger invariants, not error logs

Catching money bugs with ledger invariants, not error logs

Comments
6 min read
loading...