Three years ago today, I joined Newfangled. I was thrilled — the opportunity to work with such smart, talented people was exhilarating. But, I was also terrified, certain I’d be exposed for the mediocre code-wrangler that I was. Dave handed me a stack of materials, and among the first-day standards was my very own copy of The Pragmatic Programmer: From Journeyman to Master, by Andy Hunt and David Thomas.
I read it in fits and starts, between learning my way around the NewfangledCMS (early version 5) and figuring out what was making that strange, sort of weepy sighing noise (the coffee maker). I read it, but I didn’t absorb it. I nodded along through the passages I understood, but at the time, it didn’t leave a mark on my psyche.
As the new year dawned this past January, I undertook a program of self-improvement, as one does. I decided to set aside half an hour each day to read something. From a book, not just the firehose of RSS feeds. My first selection was The Pragmatic Programmer. I made myself a calendar appointment and each day at 11:30, I grabbed my book, some earplugs, and a beverage and made my way to one of the comfy chairs in the front room of our new office.
Among the practical, software-development-centric tips sprinkled throughout the book are wonderful philosophical gems that are helpful no matter what your job title is. Some resonated louder than others; many felt directed at me specifically. Here are a few of the tips I’ve taken to heart, but you can see all of them at pragmatictips.com or, better yet, visit http://pragprog.com/the-pragmatic-programmer for the whole enchilada.
Care About Your Craft
As the children say: this. I love what I do, where I do it, and who I do it for. Continue to care about every task. A bug fix isn’t as sexy as working with something new and shiny, but they’re both equally important to the client.
Think! About Your Work
“Never run on autopilot.” It’s easy to take routine tasks less seriously, but at the other end of whatever I’m working on is a client who needs something and deserves my whole attention.
Provide Options, Don’t Make Lame Excuses
As the developer, frequently only I can tell a client or project manager if what they want is possible, but it should never really be impossible. I need to spend more time thinking about how I can make their request a reality instead of thinking of all the reasons why it can’t be done. More roads, fewer roadblocks.
Remember the Big Picture
The daily details can become a blur of bugs on the leaves on the trees in the forest. See the forest and remember that’s ultimately what the client cares about.
It’s Both What You Say and the Way You Say It
Project managers are word wizards, but I have to give them the answers they need in a timely and coherent fashion so they can do what they do best.
There Are No Final Decisions
Projects change. Needs change. I will change with them and help them change.
Prototype to Learn
This is the Newfangled way. I rely on the wonderful prototypes produced by my colleagues to bring projects to life. They are vital to our business and I appreciate the care and attention devoted to this aspect of our work life.
Fix the Problem, Not the Blame
Does it really matter why or how it broke? At the moment, no. It only matters that it’s broken and someone can’t do what they need to do. Get to work fixing the issue with the knowledge that if not this time, then sometime soon, the problem will be one of my own causing.
Don’t Panic When Debugging
This one might as well read, “Don’t Panic When Debugging, Lisa,” because this is my initial response, almost always. It’s not productive. It’s not helpful. It doesn’t solve the problem. It gets in the way. So maybe just don’t. As I write this, my playlist shuffles in “Resist” by Rush (my colleagues are not shocked), which features the following lyric: “I can learn to get along with all the things I can’t explain.” And so I will.
Don’t Assume It – Prove It
“But that can’t happen.” Well, it is happening, so move on. We write complex, living code, and no piece of it can be taken for granted or seen as infallible.
You Can’t Write Perfect Software
Bugs are a part of software development, and the best I can do is learn and make the next project better. But not perfect.
Figuring out that a small component doesn’t work before deployment is far preferable to an entirely broken system. Crash small so you don’t crash big.
Finish What You Start
In development lingo, this means freeing up resources when you are done with them. In life, this means do what you say. In this way, others can rely on you for what they need.
Start When You’re Ready
For a born procrastinator, these can be dangerous words, but knowing the scope of a task before beginning prevents failures in communication, expectation, or worse, a project that doesn’t answer the question for which it was intended.
Sign Your Work
I’m proud to say “I built this” when a project launches. Thanks, Facebook and Twitter!
Deadlines exist, but with apologies to our resourcing department, sometimes they are less important than the work at hand. It takes the time that it takes; this was a hard lesson for me to learn. Communication about deadlines is an absolute, the deadline itself isn’t always.
Acknowledge (and Learn from) Failures
My first responsive retrofit was an epic failure. I was unhappy, to say the least, but the things I learned on that project helped me understand much more about responsive design than any other single task I’ve undertaken. Fun? No. Important? Absolutely.
Learn to Estimate
I’m still challenged by getting my mind around the scope of a project with many moving parts and “unknown unknowns.” I get better by doing it more and trusting my experience and instincts, asking questions and being realistic.
Put the Mouse Down and Step Away from the Keyboard
I get frustrated. I feel like I should know the answer and don’t. This prevents me from seeing a way around or through the problem I’m working on. Time away is just as important as time spent in deep concentration about the issue. I’m not solving it by getting angry at it, so I might as well go consider the view for a moment instead. Also, chocolate.
I started working on the web at a time when you could wrap your arms around the whole of it. That makes me old, but that’s fine. I learn what’s next and keep learning as the landscape changes.
Do Lots of Deliberate Practice
Don’t just do, ask questions and find out “Why?” or “And then what?” Ask Dave, he’ll help.
During this read, I was able to take to heart more of the universal truths and understand more of the development tips. I’m still learning and, hopefully, becoming more pragmatic in my approach to work and life.