The ways that we usually set up “cross-functional” teams doesn’t really help us with this, but it’s crucial for each member and role in a product development team to ask these questions on a regular basis:
“How are our features doing in the production?”
“Are they meeting users’ needs?”
“How do we know that that’s the case?”
“Are they solving the problem that they were supposed to solve?”
“Is the work and effort we’re putting in delivering value or we’re just spinning our expensive wheels?”
Actually, most often they hurt predictability because of a narrow focus on achieving the short term goal of meeting an estimate and piling up cruft, which then hurts predictability.
I have a feeling that decision making in organizations in which everyone is so busy that they have no time to build relationships with other people in the company and talk about the topics that are not related to the task at hand will necessarily grind to a halt.
Because the cost of code review when pairing/mobbing is literally zero (reviewer immediately available next to a developer typing the code), it is more likely to both:
get the feedback in a timely manner (as you type the code) and
get very rich feedback (which tends to be the case because it’s verbal and immediate, in context)