Development

How to Work at Breakneck Speed Without Breaking Your Neck

By Michael Santelia

"I don't know, I just do." That's my standard answer, but I won't leave it at that.

I've had coworkers wonder how I'm able to do so much in such a short time, often thinking (jokingly) that I must be secretly working 80-hour work weeks, or I outsource my work like the guy from Verizon (https://www.cnn.com/2013/01/17/business/us-outsource-job-china/). But the answer is actually short and sweet: Work smarter, not harder.

That ("Work smarter, not harder") is a saying I coined about 20 years ago, and I've used it in my email signatures ever since. The key to speed is not working long hours to get more done, but rather being more efficient and thoughtful with how you use your time. A similar saying I like is, "A good developer can write good code; a great developer writes a script to do it for him."

By nature, I end up following the same principles of Lean Software Development (https://en.wikipedia.org/wiki/Lean_software_development#Lean_principles):

  • Eliminate waste
  • Amplify learning
  • Decide as late as possible
  • Deliver as fast as possible
  • Empower the team
  • Build integrity in
  • Optimize the whole

I like to challenge myself. I'm really big on efficiency, and no matter what I'm doing—whether cooking, cleaning, coding, or anything else—I challenge myself to see how fast I can do it or find ways to make it more efficient every time I do it. Everything in life is a contest for me. Everything. Here are some tips and tricks that allow me to work at breakneck speed without breaking my neck:

Learn your lessons

Experience is obvious, but it's not just about repetition; it's about lessons learned and all the little tricks, shortcuts, and pitfalls you have encountered based on decisions made.

See the forest, not the trees

I like to know the whole picture of what we are building, even if it’s months or a year away, because it could shape how I develop a feature or functionality or even organize and set up code. This helps prevent costly refactoring later, which speeds up future development. Familiarity with common design/UX patterns and the functionality they require is beneficial because it allows future features to be in the back of your head and influence your current decisions.

Don't reinvent the wheel

With vast information available online, you don’t need to master every library or framework. Know they're there, what they are, what they're good for, and when to use them. Another saying I have is, “we aren’t solving any problems that haven’t already been solved.” There are frameworks, libraries, and answers online for just about any challenge you could face these days. The key is to not have the “not invented here” mindset. You don't need to prove that you can write something from scratch; prove that you can put together a rich set of features that make for a great user experience.

Bootstrap it

Often, I will be creating features in one app that I have already done somewhere else. I like to store code in GitHub repos, whether templates, boilerplates, or snippets, because it allows me to quickly reference and reuse code. Bootstrapping your project with your own, or an open source library/template/boilerplate can dramatically improve your time to market.

Test as you go

AKA: Don't pull your hair out. Some people approach this differently. A process term was created for those who forget to do this; “test-driven development.” This is analogous to “mobile-first” design, a term created for those who forget to do responsive designs. It doesn't matter how you do it, just ensure you do it, consistently. When I write a function, I immediately test it and don't move on until I know it works. This makes debugging a lot easier because if something breaks, I know it’s only within the piece I’m currently working on, not something I did two days or a week ago that I didn't test. This also gives me peace of mind that everything I’ve written up to this point works 100%.

Do the boring stuff

Documenting, testing, and refactoring are not glorious, but they can be invaluable in the long run and save time for future development, even for other projects. Being efficient and fast is a strategic build-up. It’s all about the long game. Every time I open a file for an edit, even if it's to touch one line, I look through all the code to see if I can improve any piece in there, no matter if it was code I wrote last week, month, or year.

Cheat off other people

Whether I’m on the fence about a decision or think I’ve done it optimally, I like to see how someone else approached a similar issue. It either validates what I’ve done or offers a chance to learn new ways and improve so next time I’m writing optimal code from the start. I like to search GitHub for projects similar to the one I’m working on to see how they approach things, whether it's file/directory/code organization or how they wrote a certain feature/functionality. This is what open source is all about. Sharing is caring.

Know thyself

Understand how and when you work best. Do you work best after you fuel up with some food, or do you get a food coma and work better on an empty stomach? Music or quiet? Early starter or slow starter? I’m an introvert, so I work hardest in the morning when my energy is high and try to schedule all meetings in the afternoon to avoid interruptions. Half my time is spent thinking, researching, and planning; the other half is actually coding. I don’t like to sit in front of the magic silver box and strain and spin my wheels. I like to have a clear plan. Often I'll have the entire code/process/functions laid out in my head before I start coding. Sometimes, I take breaks and do errands/exercise/something non-work related to clear my head and come back with a solid solution.

Be selfish with your time

I group tasks based on my workflow and style. I might tackle tasks out of order if it’s more efficient for me and my coding style. I also like to have solid blocks of uninterrupted time, so I try to group calls and meetings together in the afternoons to help maintain morning focus. Sometimes this even means closing email and messaging apps (or setting the status to “away”) so there are no distractions. Context switching and distractions take time and brain power away from focusing on the task at hand.