47:51Ranking major U.S. Open-Weights Models. (Where does Ripple 65B fit in?)
Nov 6, 2026 · YouTube
17:31Testing Gemini 3.8 Flash on Real Coding Challenges (vs. other models)
Sep 2, 2026 · YouTube
14:09Testing IBM Granite-4.2-8B! Can it name 100 women?
Aug 31, 2026 · YouTube
17:37Tencent Hy4 Preview Tested: Is It Really Better Than Kimi K3 and GLM 5.3?
Aug 28, 2026 · YouTube
23:58Qwen 3.8 Flash Tested: UI, Coding, Physics & more - compared to Opus 5, Sol Pro, Grok
Aug 27, 2026 · YouTube
14:50Stealth Ox Alpha: a new GLM model! Full test (coding & writing) against Grok, Gemini, GPT & others
Aug 21, 2026 · YouTube
21:54GLM 5.3 Tested: Does it beat Claude Opus 5 & Grok 4.6?
Aug 19, 2026 · YouTube
21:23Giving Qwen 3.8 27B another chance (+ GLM 5.2). Testing against GPT, Gemini, Grok etc.
Aug 18, 2026 · YouTube
51:00AI Coding Showdown: Grok 4.6, Gemini 3.7, Terra-Pro, Qwen3.8 2.4TB, Muse Glimmer & more
Aug 15, 2026 · YouTube
27:51Testing Gemini 3.7 Flash: Translation, Vision, and Coding Challenges
Aug 14, 2026 · YouTube
You are the engineer on call. Two tickets have come in against the order pipeline — an SQS FIFO queue feeding a Lambda consumer — plus one theory from the platform team.
Your job is triage and a minimal fix — not a rewrite.
OPS-882 — opened by Ama (Support)
Customers are getting their order confirmation email twice.
On a normal quiet day it is maybe one order in fifty. Nobody would have noticed except one of them replied to complain.
On a bad day it is not one in fifty. Tuesday morning we sent just over 400 confirmation emails for 51 orders. Tuesday was also the morning the payments provider was flapping, if that is relevant.
OPS-884 — opened by Dev (Ops)
When one order jams, everything stops. Not that customer's orders — everything, for every customer, in every region, until somebody goes into the console and purges the message by hand. We did it twice last week.
Second thing, and I do not understand it: our dead-letter queue has never had a single message in it. Not one, since we deployed in March. Orders definitely fail. Where are they going?
Comment on OPS-884 from Marcus (Platform), yesterday
This is a concurrency ceiling, nothing more. We have
reservedConcurrency: 2on the consumer, which is absurd for a queue this size. Take it to 50 and both of these tickets go away — the backlog will clear faster than a jam can build up. I can raise the PR this afternoon.
serverless.yml (the parts that matter):
service: order-pipeline
provider:
name: aws
runtime: nodejs22.x
region: eu-west-1
functions:
consumeOrders:
handler: src/consumer.handler
timeout: 120
memorySize: 1024
reservedConcurrency: 2
events:
- sqs:
arn: !GetAtt OrdersQueue.Arn
batchSize: 10
resources:
Resources:
OrdersQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: orders.fifo
FifoQueue: true
ContentBasedDeduplication: false
VisibilityTimeout: 30
MessageRetentionPeriod: 345600
OrdersDLQ:
Type: AWS::SQS::Queue
Properties:
QueueName: orders-dlq.fifo
FifoQueue: true
MessageRetentionPeriod: 1209600
RedrivePolicy:
deadLetterTargetArn: !GetAtt OrdersQueue.Arn
maxReceiveCount: 5
src/producer.ts:
import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs";
import { randomUUID } from "node:crypto";
import type { Order } from "./types";
const sqs = new SQSClient({});
const QUEUE_URL = process.env.ORDERS_QUEUE_URL!;
/**
* Publish an order for downstream processing. FIFO, because finance need
* an order's events to arrive in the order they happened.
*/
export async function publishOrder(order: Order): Promise<void> {
await sqs.send(
new SendMessageCommand({
QueueUrl: QUEUE_URL,
MessageBody: JSON.stringify(order),
MessageGroupId: "orders",
MessageDeduplicationId: randomUUID(),
})
);
}
src/consumer.ts:
import type { SQSEvent, SQSRecord } from "aws-lambda";
import { chargeCard } from "./payments";
import { reserveStock } from "./inventory";
import { sendConfirmationEmail } from "./email";
import { logger } from "./logger";
import type { Order } from "./types";
/**
* One order, end to end. Typically 400ms–1.5s. The payment provider's p99 is a
* lot worse than that — several seconds — and reserveStock retries internally.
*/
async function processOrder(order: Order): Promise<void> {
await chargeCard(order);
await reserveStock(order);
await sendConfirmationEmail(order);
logger.info("order processed", { orderId: order.id });
}
export async function handler(event: SQSEvent): Promise<void> {
logger.info("batch received", { count: event.Records.length });
for (const record of event.Records as SQSRecord[]) {
const order = JSON.parse(record.body) as Order;
await processOrder(order);
}
logger.info("batch complete", { count: event.Records.length });
}
A table, one row per reported symptom. There are three — treat the empty dead-letter queue as its own row.
| # | Symptom | Verdict | Cause |
|---|---|---|---|
| 1 | Duplicate confirmation emails | ||
| 2 | One bad order stops the whole pipeline | ||
| 3 | Dead-letter queue is always empty |
Verdict is exactly one of REAL or NOT A BUG. Cause is one line. If a symptom has more than one independent cause in this configuration, say so and name each — one of these does, and a single cause is a partial answer.
One paragraph on Marcus's concurrency proposal. Would raising reservedConcurrency to 50 change any of the three symptoms? Be specific about the mechanism, not the intent.
For each symptom you marked REAL:
Do not give me the whole file back. Minimal changes, reviewable in a diff.
At most two further defects nobody has reported, each one you can quote a line for.
If there is nothing else worth raising, write exactly Nothing else.
Every claim should be checkable against the files above or against documented AWS behaviour you can state precisely. If a fix depends on a specific documented rule about how these services interact, give the rule and the number — I am going to look it up. A confident diagnosis of a problem this configuration does not have costs you more than missing one it does.
| # | Symptom | Verdict | Cause |
|---|---|---|---|
| 1 | Duplicate confirmation emails | REAL | Two independent causes: (a) Queue VisibilityTimeout (30 s) is shorter than the Lambda timeout (120 s) — messages become visible again while the function is still processing them and are redelivered to another invocation. (b) No partial-batch failure handling — if any record in the batch fails or the Lambda times out, the entire batch is retried, reprocessing records whose email was already sent. |
| 2 | One bad order stops the whole pipeline | REAL | All orders share a single MessageGroupId: "orders". FIFO queues process one message group at a time; a message that cannot be deleted blocks every subsequent message in that group. |
| 3 | Dead-letter queue is always empty | REAL | RedrivePolicy is defined on OrdersDLQ (pointing back to OrdersQueue) instead of on OrdersQueue (pointing to OrdersDLQ). The main queue has no redrive policy, so messages never reach the DLQ. |
Marcus is wrong on all three counts. For FIFO queues, the Lambda event source mapping scales concurrency per active message group, not per reserved-concurrency unit (AWS Lambda Developer Guide, "Using Lambda with Amazon SQS": "Lambda scales FIFO queues based on the number of active message groups"). Since every order uses MessageGroupId: "orders", there is exactly one active message group, and only one Lambda invocation processes messages at a time regardless of whether reservedConcurrency is 2 or 50. Raising it changes nothing for symptom 2 (the single message group still blocks) or symptom 3 (the redrive policy is still on the wrong queue). For symptom 1, raising concurrency to 50 would make duplicates worse: with visibility timeout at 30 s and Lambda timeout at 120 s, more concurrent capacity means more invocations can pick up the same redelivered messages simultaneously.
Symptom 1 — Duplicate confirmation emails
Cause (a): visibility timeout shorter than Lambda timeout.
File: serverless.yml — on OrdersQueue
VisibilityTimeout: 30
Replace with:
VisibilityTimeout: 720
File: serverless.yml — on the sqs event
batchSize: 10
Replace with:
batchSize: 10
visibilityTimeout: 720
Why: AWS recommends the queue visibility timeout be at least 6× the Lambda function timeout (6 × 120 = 720 s), preventing messages from becoming visible again while the function is still processing them (AWS Lambda Developer Guide, "Using Lambda with Amazon SQs": "Set the queue visibility timeout to 6 times the timeout of your Lambda function, plus the value of MaximumBatchingWindowInSeconds").
Cause (b): no partial-batch failure handling.
File: serverless.yml — on the sqs event (same block as above, final state)
batchSize: 10
Replace with:
batchSize: 10
functionResponseTypes:
- ReportBatchItemFailures
File: src/consumer.ts
import type { SQSEvent, SQSRecord } from "aws-lambda";
Replace with:
import type { SQSEvent, SQSRecord, SQSBatchResponse } from "aws-lambda";
File: src/consumer.ts
export async function handler(event: SQSEvent): Promise<void> {
logger.info("batch received", { count: event.Records.length });
for (const record of event.Records as SQSRecord[]) {
const order = JSON.parse(record.body) as Order;
await processOrder(order);
}
logger.info("batch complete", { count: event.Records.length });
}
Replace with:
export async function handler(event: SQSEvent): Promise<SQSBatchResponse> {
logger.info("batch received", { count: event.Records.length });
const failures: { itemIdentifier: string }[] = [];
for (const record of event.Records as SQSRecord[]) {
try {
const order = JSON.parse(record.body) as Order;
await processOrder(order);
} catch (err) {
logger.error("order failed", { messageId: record.messageId, error: String(err) });
failures.push({ itemIdentifier: record.messageId });
}
}
logger.info("batch complete", { count: event.Records.length, failures: failures.length });
return { batchItemFailures: failures };
}
Why: With ReportBatchItemFailures enabled, SQS deletes successfully processed messages and retries only the ones whose IDs appear in batchItemFailures, so records whose email was already sent are not reprocessed (AWS Lambda Developer Guide: "To report partial batch failures, set FunctionResponseTypes to ReportBatchItemFailures").
Symptom 2 — One bad order stops the whole pipeline
File: src/producer.ts
MessageGroupId: "orders",
Replace with:
MessageGroupId: order.id,
Why: FIFO queues process one message group at a time; using order.id gives each order its own group so a stuck order blocks only itself, while per-order ordering is still preserved within that group (Amazon SQS Developer Guide: "Messages that belong to the same message group are always processed one at a time, in the exact order that they arrived").
Symptom 3 — Dead-letter queue is always empty
File: serverless.yml — on OrdersDLQ (remove this block)
RedrivePolicy:
deadLetterTargetArn: !GetAtt OrdersQueue.Arn
maxReceiveCount: 5
File: serverless.yml — on OrdersQueue, add:
RedrivePolicy:
deadLetterTargetArn: !GetAtt OrdersDLQ.Arn
maxReceiveCount: 5
Why: RedrivePolicy is a property of the source queue, not the dead-letter queue; it must be set on OrdersQueue pointing to OrdersDLQ so that messages exceeding maxReceiveCount are moved to the DLQ (Amazon SQS Developer Guide, "Amazon SQS dead-letter queues": the redrive policy is configured on the source queue).
MessageDeduplicationId: randomUUID() in src/producer.ts defeats the FIFO 5-minute deduplication window — if publishOrder is retried for the same order (e.g. upstream network error), both messages are processed independently because they carry different deduplication IDs. The deduplication ID should be deterministic, e.g. order.id (Amazon SQS Developer Guide: "any messages with the same deduplication ID are accepted successfully but not delivered for the duration of the deduplication interval").Nothing else.