When problems are over constrained it can be hard to make progress. It can help to remove or relax requirements and get more clarity on what solutions look like. All of these seem like worthwhile things to design for, but some of them might be irrelevant depending on what the solution looks like.
When constraints get in the way, design something that works well without regard for the constraints, then apply constraints while attempting to maintain the design.
A bitcoin history example: Bitcoin "removed" dynamic emissions from b-money that Wei thought were necessary. The requirement was so burdensome on its own it obscured solving things that were more important.