Development with AWS Services
What you must know
Lambda sits at the center of most developer questions: know the three invocation models. Synchronous (API Gateway, ALB) surfaces errors to the caller and never retries. Asynchronous (S3, SNS, EventBridge) retries twice and then routes to a dead-letter queue or destination. Poll-based (SQS, Kinesis, DynamoDB Streams) batches records, and partial batch failures need ReportBatchItemFailures. Remember the hard limits: 15-minute timeout, 10 GB memory, 512 MB to 10 GB of /tmp, and a 6 MB synchronous request payload ceiling.
For data, know DynamoDB key design, that Query needs a partition key while Scan reads everything, and that reads are eventually consistent unless you request otherwise (which doubles read capacity cost). Know SQS standard versus FIFO, visibility timeout, long polling, and DLQs; SNS fan-out; Step Functions for orchestration with built-in retries; and EventBridge rules for event routing.
Traps
Assuming Lambda retries a synchronous call; forgetting that async retries are automatic; treating SQS visibility timeout as message retention; using Scan for a lookup pattern; and ignoring idempotency when any retry path exists.
Rule of thumb
Set the queue visibility timeout to at least six times the consumer Lambda timeout so a message is not redelivered while it is still being processed. Then make the consumer idempotent: write to DynamoDB with a conditional put using attribute_not_exists(pk) so a duplicate delivery becomes a no-op instead of a double charge.