Thinking in trade-offs
When making decisions, it's easy to start by looking at the upside: what will I get by doing X? But considering the downside is just as important: If I do X, what am I giving up?
As a software engineer, I've seen my ability to think in these terms evolve. In the early days, I wasn't always aware of the trade-offs I was making. Hammering out a data model, for example, could corner me in ways that weren't yet clear to me. The trade-offs were implicit.
With experience (read: mistakes), I've gotten better at identifying these trade-offs. So even if a current decision is sub-optimal, clear trade-offs make it easier to design with resiliency.
When faced with a decision, take some time to identify the trade-offs and make them explicit.** Future you will thank you.