This document provides lessons learned from running three AppSync projects in production over 18 months. It discusses preferences for using VTL over Lambda resolvers for CRUD operations due to VTL being faster, cheaper and simpler. It also recommends per-resolver caching over full request caching. Other tips include not leaving logging on full in production, handling user errors gracefully, planning for nested CloudFormation stacks for large projects, and modeling multi-tenancy using Cognito groups and attributes.