Behavioural hacks to improve your design horsepower
A serious work of software is the result of a gazillion micro-decisions. Plus some big ones.
The micro-decisions are the ones that can be taught: the DRY principle, dependency injection, database design, etc.
The big ones come along (for me) 2-3 times a year; these are the feature / architectural / design turning points that determine the shape and the future success (or not) of your product or application.
There's always some way to achieve your Thing, but for these big design decisions, “good” is not enough; these are the times you have to come up with something brilliant.
Aaand there's always time pressure. Innovation and deadlines don't go together, but here are some things that work for me:
You gotta recognise when you’re wrestling with a design issue, rather than an implementation issue. Yes you, the gnarly, bulletproof software warrior - give yourself permission to back off and find some headspace. For me, knowing “when to keep plugging” versus “when to back off and grab some air” is a feel thing from 25 years of doing this stuff. But I'd welcome any better advice.
Peace, silence, and time. No kids, no partner. And no music! Sorry, but listening to music sucks neural CPU cycles. You don't see a drag racer with an air conditioning unit - all the power has to go to the wheels.
I'm no hippy (it's been a long time since dreadlocks were an option, believe me) so don't bail on me here: Lie on your back with your lower legs elevated on something. Confession: I really felt like I was taking the mickey the first time I did this, wondering whether the blood-flow-to-the-head thing had any merit. And yeah, I work from home right most times - I appreciate that this behaviour would be pinning a target to your back in most workplaces. But for me, the result is often like hitting a turbo button in my head. Don't feel guilty about letting your mind wander, I think this is your brain crawling out of the rut that has prevented you from seeing the solution before now.
NO alcohol the night before, and a full eight hours sleep. What, you thought this was all about lying around day-dreaming? Like hell. Athletes make sacrifices for the sake of performance; if you take software design seriously then so do you.
Vitamin B tablets feel like they improve my quality of thought - sometimes. I haven't researched this, I'm going from a sample space of one. But hey, I don't care if it's a placebo effect, so long as it works...
You can't innovate to a deadline .You can't make the magic happen, uh, by magic. But you can make optimal use of mental down time: wrestle with your design problem before you go to sleep/jump in the shower/go on a long run, etc, and give your subconscious a chance to do that thing that it does.
Use pen and paper. I still haven't found anything more immediate and tactile. You want all your senses lit up when you're in design mode. Plus, there's something about crossing stuff out, drawing boxes and lines, going through v2, v3 etc. It leaves an evolutionary residue in a way that deleting or changing via software does not. There's something about having access to the full history of my thought that I find illuminating.
I could go on about personality traits, the curiosity factor, creative hobbies etc, but it's most likely confirmation bias. . I'm sure there are many software designers who read nothing but software stuff and just vegetate in front of the telly at night.