Use a Deployment for stateless workloads: web servers, REST and gRPC APIs, background workers, anything where one replica is interchangeable with another. This covers the large majority of services people run on Kubernetes.
Do not use a Deployment when pod identity or stable storage matters. Databases, Kafka brokers, and anything needing stable network names or per-pod persistent volumes belong in a StatefulSet. Node-level agents like log shippers or monitoring agents belong in a DaemonSet, and run-to-completion jobs belong in a Job or CronJob.
The main trade-off of the RollingUpdate strategy is that two versions of your code run at the same time during a rollout, so your app and database schema must tolerate that overlap. If you cannot, you can set the strategy to Recreate, which kills all old pods before starting new ones, accepting a short downtime in exchange for never mixing versions.
Deployments also do not give you advanced release patterns out of the box. Canary and blue-green rollouts are possible by juggling multiple Deployments and Services, but most teams reach for tools like Argo Rollouts or Flagger once they need fine-grained traffic shifting.