How to hack your way to being a super productive engineer

Their energy, motivation and productivity levels greatly determine how well a project is delivered.

We at Indiez, work with some of the best engineers from across the world who have worked in companies like Google, Microsoft, Apple and the likes.

There is something something remarkable about the way they work.

They know how to operate super efficiently and maintain high productivity levels!

This is something that truly sets them apart. It’s the reason why they are able to drive excellent results!

Image Credits : Quantstart.com

Let’s face it — Every engineer goes through these phases of lack of productivity.

And it takes time and a lot of learning to get better and start working upto your full potential. Sometimes, it’s just plain frustrating.

You might have been there too!

Have you ever had a feeling where you felt that you are not doing enough? You feel unproductive and feel bad about yourself? Every single day?

If you haven’t, I can tell you that it hurts. It hurts bad!

“There was a time when I was super unproductive. The entire day would pass and I would feel like I hardly got anything done. Despite trying hard all day, I wasn’t meeting my own expectations.

Without that feeling of accomplishment at the end of the day, it just gets frustrating. And, it amplifies 10X when you work remotely.

After I had had enough of being in this unproductive state, I got into my hacking mood and decided to hack my way towards ultimate productivity.

I researched and read 100s of articles and several books. And, I learnt a lot!

Post that exercise, I was a different person. I am better programmer now, I complete my deliverables in time and most importantly I feel happy and accomplished at the end of every single day.

— One of our community members, previously an Engineer at Google.

So what changed for him and the others who had a similar journey? We spent time talking to them and improving our understanding.

Following are the few gems from the learnings shared by our awesome community members. Applying them has helped them improve and this has got me excited to share it with you.

1. Solve challenges on your own

Credit : www.functionalimperative.com

Work flows breaks every time you stop and think.

It breaks every time you do quick Google Search about something you don’t know. It breaks when you find answers to your queries on Stack overflow.

If you do this often, believe it or not, it’s your worst crime as a engineer!

Why?

Because your deep flow state of work is what you should preserve. It takes a lot of energy and focus to get into that and it would do you well, to stay in that unless it’s absolutely necessary to break away from it.

“I know that it’s common to have doubts. Every now and then, you might come across a tricky situation. But, rather than rushing to the internet to find an answer, refer to the documentation.” — Amrose, Co-founder and CTO at Indiez

While this might seem to slow you down at the beginning, over time as you work on this as a habit, you will see it doing wonders for you.

You will gain more in-depth knowledge that you will retain. You won’t get distracted by a dozen other things that you see online while trying to find answer to a query.

Most importantly, this will become a part of your work flow.

2. Type Smart. Type Quick!

Image Credit : AndroidAuthority.com

There has been a lot of talk about whether typing speed matters for a programmer or not.

Is it important to know touch typing? How much difference does it really make?

“Here’s my take on it — If you want to become a great programmer, become a great typist first!

The fundamental reason why typing speed matters so much when it comes to programmers is — When you’re a fast, efficient typist, you spend less time between thinking that thought and expressing it in code.”
 — 
One of our community member, previously an Engineer at Microsoft.

This is a great way to remain in that deep workflow state.

When all your conscious thoughts go into the code rather than going on the process of getting it on the computer, it’s one less step that your brain needs to perform. So yes, it does boost your overall efficiency.

If the keyboard is your primary method of communication you shouldn’t have to think about it (much less look at it) any more than you should need to think about pronunciation while speaking in your native language.

There are resources and tips to learn touch typing. For instance, you can useTyping.io to get started.

3. Automate

Equally important as keyboard usage is the approach to automate as much as possible.

Computers were built to automate simple, repetitive tasks very fast and make our lives easy. It’s a waste if we don’t use them for that!

Stand back once in a while and reflect which tasks and actions you’re doing the whole day and what can be automated and improved.

This may be launching applications, using menus with the mouse instead of shortcuts, manually applying the same actions or typing the same commands all over again, typing long shell commands a lot of times instead of using aliases, and so on.

Try to be lazy here; that’s a good thing in this case.

As the system gets larger, engineers tend to spend more time fixing bugs. Eventually it gets to the point where they not productive at all. Through Continuous Integration (CI), you can catch many bugs as soon as they happen.

Automate tests to avoid manual assertions as well as manual repetitive testing.

4. Use Terminal and Vim

Vim is an extremely powerful text editor and can become a full-fledged IDEby any measure of the word, when combined with other tools such as:

  • Terminal multiplexers: e.g. tmux + vimux. This makes it easy to execute files, send selected to text to consoles, run tests, etc. without leaving the terminal.
  • Language and framework specific plugins: e.g. rails.vim (vim-rails). This provides framework specific commands for file navigation, refactoring, and Rake/Ruby on Rails scripts.
  • Version control plugins: e.g. fugitive.vim (vim-fugitive). Allows execution of any Git command within Vim.

The power of vim is huge. Very small number of people actually do know how to use most of it.

I’m certainly not one of them.

Refer to this list of productivity hacks by Approache Blog —

My favourites are:

Remap your CapsLock key to Control

Why? Because the Control key is located extremely inconveniently while CapsLock is right under your baby-finger. All the time.

How? Follow this guide.

Use Vim jumps

Why? A lot of times you need to jump forth and back between 2 place or go to where you’ve been a minute ago. A log of people just find that line/file again. It’s a waste of time.

How?

  • Ctrl-o and Ctrl-i to go to the previous/next location you jumped to.
  • `` (two backticks) — jump back to where you were.
  • gi — go to the last place you inserted a text.

Use appropriate Vim navigations

Why? Typing l (move right one symbol) or similar multiple times is waste of time.

How?

  • { and } — jump paragraph back and forth.
  • Ctrl-F/B — move one screen back and forth.
  • Ctrl-E/Y — scroll the screen.
  • * (star) — search for the word under cursor, then n/p to jump to next/previous.
  • add imap jj <Esc> to your .vimrc and don’t use Esc anymore.

Changing case and repeating a command

Why? Because a lot of things can be done much more efficiently.

How?

  • ~ (tilde) — toggle the casing of a letter/selection (upper-case/down-case).
  • . (dot) — repeat the last set of commands (use in a combination with search, such as *, and jumps).

Temporarily map commands you run

Why? Because you don’t want to type the same command over and over again.

How? One example is nmap <leader>s :! bundle exec rspec % — colour — focus<cr>. This will run the current spec file when you press ,s (in my case).

Rule of thumb: if you do something more then twice in the terminal outside of Vim, map it using nmap. Don’t switch windows, don’t lose your context.

For Terminal productivity,

Use iTerm2

Why? At least because you can split window without losing the context.

How? Install it from the iterm2.com site (or even use tmux!).

Use Ctrl-D/Ctrl-Shift-D (while in Vim or any iTerm tab/window) to split the current terminal window opening a new shell but still being able to see what you are currently working on.

Use !! (double bang) or arrow up

Why? Because it repeats the previous command that you should have mapped in Vim but didn’t.

How? Just type !! and it will execute last command. This is simple, but strangely enough I can see people are actually retyping commands.

Enable Vim mode in bash

Why? Because you navigate in the terminal too. And Vim mode makes it seamless.

How? Create an inputrc file and add set editing-mode vi to it.

6. Eliminate decision fatigue when starting out

Sometimes the problem is “I have no idea what code to start writing.”

Have you ever been stuck in this state of decision fatigue? Where you just can’t seem to decide which piece of code should you start writing first?

This happens when you have a huge project in hand.

The simplest solution is to break your big application into a set of small applications or user story. The idea here is to build one piece in its entirety and then move on to next.

Write code wherever you can, start with simple classes or functions.

For instance, if it is a YouTube app that you need to code, start with the video player. Think of it as an exercise in continuous delivery — write the code that would actually make a product first, no matter how silly or small that product is. A video player without any other UI is a product that does something useful (play video), even if it’s not a complete product yet.

We are confident that applying these simple hacks will help you scale your productivity levels.

At Indiez, we are always on the lookout for super awesome talent.

Apply to Indiez to enter into a remote work culture where we guarantee you freedom and fulfilment and you help us deliver awesome results. Just go on and our fill our application form.

Let's talk about how Indiez can help you build your business.