Programing Best Practices Violation Fear

Imagine a man named Bob who has a fatal disease and he has a very low chance of living more than a year. Expensive and regular treatment may save him.

Bob needed a new laptop so that he can earn some money from home, he bought one with $400 which comes with 1 year warranty. The sales girl asked him if he needs additional protection plan for $100 which will give him 3 more years of warranty? Bob thought that’s a great deal, it will make his laptop secure for 3 more years and he won’t have to worry about it anymore, but then he thought, even his life is not guaranteed for one year, why would he care about 4 years? It is much better for him to spend $100 on his treatment, it’s the priority now. Bob did not buy the additional protection plan. Smart decision, right?

Now Imagine a Startup

A startup is trying to build a software product on a budget. The developers are very excited, they outlined project idea, wrote user stories, UML diagrams look cool, discussions on high scalability and high availability make them feel smarter than ever, they want rigorous automated testing so they don’t accidentally break anything. Does it ring a bell?

So after a few weeks they started writing unit tests before writing the actual code (because TDD says so).
You know why it’s taking so long? Because they want the project to be maintainable for years to come. Smart decision, right?

Dear sir, it’s a startup building a product, who guaranteed that the startup will exist for years to come, let alone the product? Most of the time, chances are very low that the product will succeed. Just compare this situation with Bob’s situation.

How often do you hear or think a startup or product died because it was buggy, it was poorly coded or it didn’t have unit tests?

What If We Are Building Something That’s Not Gonna Die Soon?

Then you’ll have a budget that’s not gonna die soon. Company will have the resource to decouple you (the developer) from the burden of best practice and architecture.

If you’re just a developer and you think *more* about the architecture than actually writing code and building things, then you’re doing it wrong. It’s a signal that you’re in a team or situation where architecture doesn’t matter too much, if it really mattered then there would have dedicated software architects, you didn’t have to worry too much about it.

Remember, theories of programming are not invented out of air, they exist in our daily life from years. Consider “Single Responsibility Principle”. If a company doesn’t care about it too much in human and you(the employess) have multiple responsibilities like software architecting, development, maintenance, testing then what’s wrong if this company’s codebase has a damn Class named UserAuth having a damn method named userProfile()? Now don’t shout “OMG! OMG! It’s a clear violation of Single Responsibility Principle.”
One masterpiece quote from me to rule’em all:

Break your class’ responsibility according to your responsibility as a team member.

Here comes the disclaimer

I’m not against the best practices, rather I follow many of these practices most of the time. I am against following these blindly, I am against following these out of guilt. These are just rules, and you can break a rule if you need, you can break it when it’s not a priority.

We developers are already much prone to anxiety disorders, writing a line of code and feeling guilty for 10 minutes is nothing less than an Obsessive Compulsive Disorder.

Wish you a guilt-free coding life.

There is a very interesting discussion going on about this post on Reddit,
check it out.

My Lifestyle – Apps and Productivity

Since my childhood, I have always been obsessed with technology. Today I am gonna share with you, how I handle my day to day life using technology. This article just covers some productivity tools that I use. If you find this article helpful then leave a comment down below. If it seems that it’s helping many people then in future I will write about how I handle work, communication, finance, health etc.

I & Setup

I am a software engineer at Vegan Cuts, working remotely from, Sylhet, Bangladesh.

MacBook Pro (Retina, 15-inch, Late 2013), OSX Yosemite
Nexus 5, Android Lollipop

I work from home.

Productivity Tools

Pocket Casts

A great app (not free) for keeping up with and listening to podcasts. When I have time or sometimes when I’m in commute I plug my earphones. Some of the channels I usually follow:
http://www.fiveminutegeekshow.com/
http://www.entrepreneuronfire.com/
http://fullstackradio.com/

Wunderlist

For grocery todos to travel abroad todos, this app is great. It’s a really simple and clean app, but there is also power inside. When I have something in my mind, I just say “Okay Google, make a note to do something” and I can forget about it. I always keep a Wunderlist widget in my home screen.

Rescue Time
It always keeps track of my time, I can see where I spend most of my time when I am in my computer or phone.

Pocket
Most used app in my phone. Have you found a great article and don’t have time to read it right now? Just click the Pocket button. Later you can read it in the comfort of your couch in a nice pleasing-to-eye view. When I like an article so much and I think it’s worth keeping in my library then I share this to Evernote and it saves the whole article for me.

Google Fit
It automatically keeps track of my workouts. Whenever I take a walk or ride my bike with my phone in pocket, this app records it. I don’t have to click play-pause or anything. I can see some stats, like how close I’m with my daily goal.

1Password
Now I don’t have to remember any password. I just press Cmd + \ . The more we can declutter our brain the more we can install creativity. And did I say it’s secure?

Sleep as Android
I have to face captcha if I want to dismiss an alarm.

Blogs and Books

Lifehack.org (not to be confused with lifehacker).
I always follow this blog, they publish some really great articles about productivity and lifestyle in general.

I really admire Sandeep Maheshwari, he is an Indian entrepreneur and motivational speaker. I always watch his videos. Almost all his videos are in Hindi though.

Personally I don’t like much detailed books, so it’s my lacking that I don’t read many books. But some of books I read and I strongly recommend:
Rework
Think and Grow Rich
Remote

I remember while reading Think and Grow Rich, I drew images of some of my dreams as instructed in the book, then I took action. Within 15 months my dreams were fulfilled.

I use the Kobo app for buying and reading books on my phone, I prefer it over Nook because Kobo is available in my country. For reading digital books bought from outside Kobo I use the Kindle app in my phone. I also like paper books but availability and shipping cost matter where I live.

Stay productive!

Why Many Good Developers Don’t Get a Good Job

I have seen a lots of really good developers looking for work and they don’t find good work for months or years. On the other hand I’ve seen some really good companies looking for developers and they don’t find good developer for months or years. What’s the problem? After looking at the situation of some of the developers and companies I have tried to find out the reason behind it. Let me share my thoughts with you.

What Made Me Think?

First of all let me tell you what made me think about it. I work for Vegan Cuts, a company based in Canada and I work from Bangladesh. I am really very happy working with them, they are very good guys, they pay well and they have everything to attract a really good developer. They are also very happy with me and they want to keep me.

Recently my company invited me for a meeting in New York, we also attended a conference where I met a lots of good PHP developers. Most of them were amazed to hear about me that I’ve made it here from the other side of earth, Bangladesh(which is a least developed country). Some of them wanted to hear my story, how I joined Vegan Cuts. As I am an isolated, homesick guy, for the first time I realized that my situation is not ordinary. I met some really great developers, who are struggling to find work. They have better programming skills than me and they’ve very good open source activity, they’re from a mature economy with many social and other benefits. It made me think, something is there.

Nature of Developers

“Yay! TheKoolLibrary released version 54.4598 today, which adds bunch of cool features. One feature is, now you can open things in a single click instead of double click, wow! Let’s tweet about it, write an article on it.”
A typical day of a developer usually starts like this. We developers love cutting edge technologies. Like a kid, we want to play with a new toy everyday then the next day we throw it away for another toy(is that why the term “cool kid” is so popular among us?). And the problem is we want the companies be like us. Out of 100 toys we play with, only a few survive after a year.

Wow! Grunt is cool.
After few months, OMG! Gulp.

IDE’s are bloated, Sublime Text is insanely cool and Vim is hot for showing off.
After few months, JetBrains PhpStorm is powerful and highly customizable.

Fortrabbit hosting is awesome, `git push` to deploy.
After few months, go back to Digital Ocean, I can write a 5 line script for `git push` deploy.

Trello! It’s free.
After few months, wait, Asana is insane! Too complicated, go back, pay Basecamp.

There are hundreds of examples.

Well, I am not against learning new technologies, but we need balance on everything, sometimes we just need to shut up and go to work with what we currently have.

It really reminds me a chapter of Rework: Focus on what won’t change. In one place it says:
“That’s fool’s path. You start focusing on fashion instead of substance. You start paying attention to things that are constantly changing instead of things that last.” – Rework

Nature of Companies

End of the day it’s all business. Asset maximization, this is the goal of a company.
What a company looks in you is, value, how much value you generate for the them. How serious you are to help them achieve their goal, how much you think this is your own business, even if it’s not. How quickly you can provide proper solution to a problem.

Well, if a company is using CodeIgniter for 4 years and the application is stable and generating a good value for company, no company will ever want to build it anew. But a usual good developer will burn out of hell working with CodeIgniter. But if this developer had owned this company his view would have been different.

So a good company, when hiring, mainly looks at your seriousness not coolness. They also take skills into consideration but it’s only when you’re serious. If you’re serious for your work, you’ll be generating good value for your company.

Here are few write ups from some company co-founders:
Leo Widrich of Buffer says in his article:
“Of course we need to know that you’ve got the skills and experience for the position in question, but that’s a secondary element for us.”

Jason Fried of Basecamp/37signals says, in his article that they look at the approach/effort of an applicant when hiring.

Solution

I won’t suggest companies to change rather I would suggest developers to change.

  • We’re so busy becoming a good developer that we forget to be a good worker.
  • We’re so busy learning every shiny, new thing that we forget to think about what we currently have, which gonna last for years. That’s our current work and current technology, let’s focus.
  • We’re so busy thinking about the next big thing that we forget to generate value for our current company.

Of course, you’ve to be a good developer, but that’s not all, you’ve to be a good worker too.
When you’re in a sports team, your main target is to make your team win, even if you performed your best and your team lost you’ll go bed unhappy. Let’s apply sports rules to our work:

  • Play your best and enjoy the game.
  • Play to make your team win.
  • Keep practising.
  • Obey your captain/coach, definitely you can suggest.
  • Don’t try to change the rule of the game with something new, play your best with what you have.
  • Invent or introduce new strategies.

I want to end with few quotes:

I had feedback from my current employer and previous employers, which are quite similar, if I sum up these feedbacks it stands something like this:
“You’re not a just good developer but a smart developer, if one task is assigned to you we don’t have to worry about this anymore.”

“Remember, fashion fades away. When you focus on permanent features, you’re in bed with things that never go out of style.” -Rework
(Sorry, for too much Basecamp stuff)

“Perhaps the world isn’t giving you what you want because based on all your distractions … it’s simply unclear what you are asking for.” -Brendon Burchard