The weakness of Lambda is that the business logic lives in two places. One version runs in a batch framework, another in a stream processor. They must produce the same answer forever. When they drift, the merged result is wrong, and the merge hides it.
How hard the merge is depends on the aggregate. A sum or a count merges by addition. Min and max are just as easy. A percentile is different. You cannot add two p99 values and get the true p99. Medians, ranks and sessions have the same problem. For those, teams either move the whole computation into the batch layer and let freshness lag, or accept an approximation.
Twitter tried to remove the duplication with Summingbird, which compiles one piece of logic to both Hadoop and Storm. It works for aggregates that are monoids: operations that are associative and have an identity value, such as sum, count, min and max. Medians and ranks are not monoids, so for them the duplication came back.
The lesson's advice: before choosing Lambda, sort every aggregate the business needs into easy to merge and hard to merge. If most are sums and counts, the merge code is small. If many are ranks or percentiles, the merge code grows and so does the risk of silent drift.