Here’s a collection of the high-level concepts I’ve adopted over the years. I think they add human value—to customers & teammates alike—and GTD value. All while keeping me happy with my career in the otherwise often bitter IT ecosystem.
“First make it possible. Then make it beautiful. Then make it fast.” Suffering-oriented programming.
“Functionality is an asset, code is a liability.” Additional code is the enemy. Do whatever I can to be lazy & code less.
Stop myself from charging into a discussion or problem. Instead step back & admit, “I don’t know what I’m doing.” It’s the first step toward a better solution.
For better or worse, programming is about learning & doing something new everyday. It’s a tricky, imperfect balance to improve at my job with breadth & depth. With that in mind:
- Breadth: don’t judge books by their covers. Yet accept you can’t learn everything.
- Depth: don’t be zealous about the technologies you do study deeply. You sound like a dick, and blind yourself to complementary tech and better solutions.
Defining but not bulletproof themes
Make illegal states unrepresentable
i.e. an ounce of prevention is worth a pound of cure. Why publish interfaces (for consumers or devs) that let users get into trouble, especially after it’s too late (e.g. “runtime”)?
In programming, this is commonly associated with advanced static type systems. Meanwhile, less expressive or dynamic type systems make this a pain to enforce. For example, languages where any reference can be
Yet there are no bug-free applications. Q: What do all bugs have in common? A: They got past your type checker and your tests. In light of this, when the cost to implement prevention is high, is it wiser to focus on easing production issue diagnosis? Using simpler, composable functionality?
Tools that let you focus on what makes your app special
For example, every webapp these days needs user accounts, a login page, a change password page, pagination, etc. Frameworks like Rails & Django provide all this functionality for you. Rolling these features for yourself is over. Do you, homie.
Not to say monolithic frameworks like these don’t come with a developer cost. You want to customize one of these components to be slightly different? Gonna have a bad time.
Twitter to keep on top of things.
Twitter’s just an example; use any mix of interest-based discovery with some social filtration, so you don’t have to troll myriad RSS feeds. Let relevant content come to you.
Follow posters who seem to know what they’re talking about yet don’t coincide with your point of view. This is the best way I’ve found to engage with topics you’ve never heard, or thought were laughable before. It says something there are people smarter than you strongly clinging to these foreign ideas.
Trim the subscriptions down to just the ones that enrich your knowledge and life, without overwhelming you. No hurt feelings in cutting off subscriptions. It’s an interest network, not a friend network.
Avoid online arguments; they tend to make you bitter
I can’t say categorically avoid all discussions—open discussion moves us forward—but there is just something generally unproductive about Internet comments.
There’s a lot of nuance in expressive thought that most cannot capture in a few paragraphs. Or, much worse, 140-character chunks, where you only have enough space to come off as a single-minded, self-serving jerk.
“Arguments aren’t about who wins. They’re about learning something.” But many don’t know that.
“Show the data.” — Edward Tufte
- Avoid implementing interfaces that hide their data, especially across different input devices and accessibility issues.
Jakob Nielsen’s 10 Usability Heuristics for User Interface Design.
Avoid interaction & modes.
- Most software is information software and should minimize interaction & modes.
User Testing, Field Studies, or, Get In Front Of The User ASAP
Design meetings, static mocks, paper prototypes, interactive prototypes, dogfooding are all waste if your customer ends up hating the design or not using it.
Therefore it is prudent to introduce the user as early as possible.
Unfortunately it’s often an uphill battle to introduce user testing to an organization, despite usability’s known ROI. It’s hard to make people want something, when they think they have it covered.
So if you can’t get dedicated user testing, investigate how to deliver an interface cheaply and ASAP, knowing you might have to trash the work that went into it. Agile™ isn’t right for everyone. Facebook’s move-fast-and-break-things isn’t either. If you think Waterfall is dead, it took us to Mars. The point is, projects and companies are different. Spend the time to investigate what’s right for your team.
Nielsen Norman Group to keep on top of things.
Don’t listen to Secret to Success posts.
The Secret to writing a "Secret to Success" essay: 1) Succeed 2) Cherry-pick from your experience that which confirms your biases.— potch (@potch) October 14, 2013