Ask for the unread count, not the whole folder tree
The mail badge needs one integer and was fetching every folder in the mailbox to find it, which on the IMAP providers is the most expensive call the mail backen...
Stop making the inbox wait on two lookups it can see the answer to
Two round trips still sat in front of a rendered inbox, and by this point they were the only thing left there — the folder tree and the first page already arriv...
Ask earlier, ask once, and stop asking for what has not changed
Three more things standing between opening /messages and seeing mail. Nothing was requested until the bundle had landed. /messages pulls several megabytes of J...
Stop paying for a key nothing reads, and stop waiting to ask
Three things were slowing /messages down before a single message was fetched. Every email call made a round trip to /api/generate-otk first and sent the result...
Stop opening every folder, and stop refetching every message
Two round-trip problems on the /messages critical path, both invisible in the code that caused them. listFolders opened each folder read-only to read two integ...
Fetch the summary slices' to-one associations and count instead of scanning
The Overview's attention and recent slices read a title per row off a LAZY @ManyToOne, costing up to 16 extra selects per block under open-session-in-view. All ...
Refresh planner statistics after the weekly GeoLite rebuild
YugabyteDB does not auto-analyze, and the staging+rename swap replaces geolite_blocks wholesale -- so after every Sunday sync the planner had no statistics for ...
Geolite range index must be ASC, not YugabyteDB's default HASH
The IP lookup is a range scan: WHERE network_start <= ? ORDER BY network_start DESC LIMIT 1 YugabyteDB partitions the LEADING index column by HASH unless tol...
Geolite range index must be ASC, not YugabyteDB's default HASH
The IP lookup is a range scan: WHERE network_start <= ? ORDER BY network_start DESC LIMIT 1 YugabyteDB partitions the LEADING index column by HASH unless tol...
Give YugabyteDB real resources and pin its memory
It was running on LESS than the CockroachDB it replaced -- 20Gi/6cpu against CockroachDB's 32Gi/8cpu -- while needing more, because YSQL runs a separate Postgre...
Give YugabyteDB real resources and pin its memory
It was running on LESS than the CockroachDB it replaced -- 20Gi/6cpu against CockroachDB's 32Gi/8cpu -- while needing more, because YSQL runs a separate Postgre...
Hash with BLAKE3 only, so skipping the upload actually saves time
Dedup worked — the server logged 'linked WITHOUT upload' and 358 MB never left the machine — but the member still waited, because computing SHA3-256 alongside B...
Accept a BLAKE3-only claim so dedup is faster than uploading
The link endpoint demanded both hashes. A browser has no fast SHA3-256, so proving it already had a 358 MB file took ~20 seconds against an 18.8 second upload —...
Match stored content on BLAKE3 alone, so a browser can afford to ask
Proving possession required both hashes, and a browser has no fast SHA3-256 — js-sha3 is pure JavaScript at ~25 MB/s. Measured on a 358 MB video that was ~20 se...
Read the latest snapshot date without loading the history
A summary needs one date. It was reading it by loading a two-year range of snapshots and taking the max — five domains times every day of history, on every page...
One plan-matrix scan per app-catalog request
Also drops the now-unused DevelopmentStageType import and corrects the auto-provision comment, which still described the stage rule the catalog replaced.
Answer the plan-matrix question for every app in one pass
The Apps & Features tab asks whether each app appears in the plan matrix, and the per-app form scans the plan-feature and add-on tables once per app — two dozen...
Stop re-querying call history per extension when the provider is instance-wide
RingCentral's endpoint is extension/~ and ignores the argument, so it returns the same log for every extension. Once a page adds nothing new, the remaining exte...
Create mlos_doc_req_borrower_idx for the vault cross-loan reuse query
Index (borrower_uid, organization_id) for vault cross-loan reuse query
Stop per-boot customer_id FK tug-of-war in SchemaCleanupRunner
Remove the stale RetailCustomer->Account cleanup drops of commerce_carts.customer_id, **************** and **************** Those columns are now live, Hibernat...
Lower PoW difficulty (cost 1000, counter 2000-4000)
Solve cost is the product of CHALLENGE_COST x counter range; both were over-cranked (~37.5M PBKDF2 rounds, ~40-75x a stock Capcha), making the widget slow on lo...
Tier 2 — Hikari + RestTemplate timeouts + Stripe SDK + Redis cache
- RestClientConfig: single shared RestTemplate bean with 5s connect / 30s read timeouts. MediaServiceClient / NotificationDispatchService / OfacSanctionsSer...
Paged repo queries + countByStatus for hot paths
- LoanRepository: countByStatus / countByOrganizationAndStatus + Page<Loan> findByStatus(...) / **************** / **************** + **************** for...
Merge partial DTOs into local state, drop refetch-after-patch
Every edit-style autosave (name fields, employment, assets, liabilities, REO, declarations, military, HMDA demographics, originator) used to issue a full mortga...
Collapse pipeline kanban N+1 to a single grouped count query
listForOrganization() used to issue one condition-fetch per loan (201 queries at 200 loans). Now a single grouped JPQL aggregate keyed by loanFile.uid projects ...
Store geo on ticket at creation, drop GeoLite reads
**************** now captures the visitor's geo once (via GeoLookupService) and persists ip/country/city/subdivision on the SupportTicket itself. SupportTicket...
Bulk-load visitors and skip GeoLite lookup in list
The /api/support/tickets list endpoint was running, per page of 20 rows: - 20 **************** calls (N+1) - 20 calls into GeoLookupService.lookup, each of ...
Add findBySessionGuidIn for bulk loading
Used by the support-ticket list endpoint to fetch all visitors for a page in one query instead of N separate findBySessionGuid calls.
Skip DB member lookup for messages auth check
Extract getMemberIdFromRequest() that reads memberID from the Redis session without hitting the DB. Use it in getMessages() instead of getCurrentMember() — the ...
Eliminate OTK Redis overhead and proxy log noise for message fetches
- Bypass OTK generation in the MediaService proxy route: forward the *** cookie directly instead of generating a one-time key, removing 4 Redis round-trips ...
Eliminate per-request logging overhead and async TTL refresh
- k8s configmap (the actual production config): lower security/hikari logging from INFO/DEBUG to WARN, add HikariCP pool config (max 20) - KSessionService: st...
Reduce log noise and tune connection pool
- Lower Spring Security from TRACE to WARN and HikariCP from DEBUG to WARN — eliminates dozens of synchronous log writes per request - Add explicit HikariCP p...
Fetch parent message in same query to eliminate reply N+1
Alias m.msg and LEFT JOIN FETCH msg.parent so that threaded reply messages have their parent loaded in the initial query rather than triggering a separate SELEC...
Improve chat message loading performance
- Cache getCurrentMemberId() result in a ref to avoid repeated /api/user-info calls on every WebSocket message and typing indicator - Parallelize message hist...
Remove per-message logging from chat message endpoint
Remove System.out.println calls inside the message stream map that were firing once per message (100 I/O operations per request), and the final log that streame...
Fix N+1 query and add composite index for chat message loading
- Add LEFT JOIN FETCH m.msg to both repository queries to eagerly load MediaObjMsg in the same query, eliminating up to 100 extra SQL queries per chat windo...
Batch-load custom form data in getAllLeads (eliminate N+1)
Replace per-lead getCustomFormDataForLead calls (N+1 queries) with a single batch load via getCustomFormDataForLeads, grouped by lead ID using a Map lookup when...
Eliminate full-table scan and N+1 queries on leads endpoint
- LeadRepository: add findByOrganizationId JPQL query (uses ORG_ID index) instead of loading entire LEADS table and filtering in Java - LeadCustomFormDataRepo...
Remove particle effects following mouse coder to improve performance
Optimize page performance by 40-50% while maintaining visual appeal
- Lazy load Swiper background carousel to reduce initial bundle size - Memoize components (ThemeLogo, BrandIcon, LazySwiperBackground) to prevent unnecessary re...
Optimize calculator page for 40%+ performance improvement
Optimize marketing site for 40%+ performance improvement
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
