I see engineering as being about resolving tensions between different requirements, trading -off.
For example we might trade-off code complexity agaist flexibility.
So there are two parts to this.
1). We understand the forces. We understand the implications of the design alternatives. Note for example that the GOF Design Patterns explicitly have a consequences section.
2). We make tough decisions - here's where the judgement comes into play.
As for specific check-lists, often it's the non-functional requirements that come in to play: scalability, mainatainability, operability, performance ...
Make a nice scalable architecture, but it's more complex to operate. Is that appropriate? It becomes a judgement call. Experienced engineers make such calls, but it's extremeky difficult to codify the weightings they are applying when making such calls.