It’s an antipattern to assume that the smallest resource size available to your function will provide the lowest total cost. If your function’s resource size is too small, you could pay more because of a longer execution time than if more resources were available that allowed your function to complete more quickly.
You don’t need to implement all use cases through a series of blocking/synchronous API requests and responses. If you are able to design your application to be asynchronous, you might find that each decoupled component of your architecture takes less compute time to conduct its work than tightly coupled components that spend CPU cycles awaiting responses to synchronous requests. Many of the Lambda event sources ...