Current flexing algorithm choses to use either positive or negative flexibility for all items, which helps to ensure it will finish with any combination of flexibility and min/max sizes. This approach doesn't allow to optimize layout by shrinking a large item that is far from both its min and its max sizes, and growing a small item that is close to its preferred size. It may be possible to get a better result by calculating penalties based on actual size change, flexibility settings and where there calculated size is relative to min/max/preferred sizes.
Example to consider:
<div style="flex:1 1 auto">long description of something important that is about to happen</div>
<button style="flex:1 1 auto">I agree</button>