6 Lessons On Work Ethic I Learned In One Year Of Professional Career

vagnini_101317_4227_hero_lg

Time flies. Recently I had completed one year as a full-time employee at my current employer Squad. A year has passed, and I decided it was time to revisit instances, memories, and experiences and to recollect what I had learned as a professional in this past year.

It was also a wake-up call to reassess and redirect the ship named professional career to make sure it doesn’t get stuck in a whirlpool.

After all, our career is our responsibility and we all should make efforts to “Own our story!”.

This is going to be a list of 6 important lessons in professionalism and work ethic that I learned working as a Product Engineer at one of the most innovative startups in India.

1. Know your field

Do you know what a facade pattern is? Do you know what sprint and story points are? Do you know how to work your way with the debugger your IDE provides?

A wealth of ideas, disciplines, techniques, tools, and terminologies have decorated the last fifty years of our field. And if we want to be a professional we want to know a sizeable chunk of it.

The motto that I believe in is, “If you want to see far, stand on the shoulder of the giants”.

 

2. Continuous Learning

The frenetic range with which the industry is changing, it means that we as engineers also need to learn colossal amount just to keep up.

Read books, read articles, watch talks. Keep adding deltas to your learning daily.

 

3. Practice

This stuck me around 2 months back. Tennis is my favorite sport, and players believe that playing in the tournaments continuously actually makes their game less polished.

It’s the deliberate practice of doing things right, which makes it gleamy again.

Is it true about our jobs also? Cutting corners to meet deadlines, working on the outdated stack at the company, working with legacy code, can all this make us less sharp.

At least I find it to be true, and practice to deliberately improve your craft is a vital component of one’s work ethic.

 

4. Know your domain

It is the duty of every software developer to understand the domain of the solutions that they are programming. If you are writing software for healthcare, get at least a basic understanding of healthcare, if you are writing for sales, know about sales.

Read a book or two on the domain, ask the domain experts.

We should be able to know enough about the domain to question the product direction and feature requests that we get.

 

5. Collaboration and mentoring

We all must make special efforts to collaborate, mentor and get mentored by other developers.

Whatever I have learned in this course of one year, a major portion of it due to learning from others.

 

6. Humility

Programming is an act of creation. It feels like magic when we can write code that can do things that can produce tremendous value.

We all should take pride in our work, but never be arrogant about it. We should be confident in our abilities and take risks.

But we must know that we will fail. Things that we create will break, risks will be proven wrong and we will be called upon for these mistakes.

And when all this will happen, all we can do is be humble and take Howard’s advice, laugh and move on.

 

That’s all, folks!

 

Advertisements

Tracking Metrics to Surface and Solve Problems: Metric Tracking Practices I’ve Learned So Far

It is a nice pleasant evening, you are sipping coffee and reviewing your code one final time, just so that you can gather enough confidence to hit the deploy button.

But a fact of life as a software engineer is that things can go wrong. Small changes may result in unexpected outcomes, including outages, errors or negatively impacting customers.

And when problems occur, either we can do random checks and validations that may or may not solve the problem or we can have a disciplined problem-solving approach that relies on data rather than intuitions.

Metrics and Telemetry

To enable a disciplined problem-solving method, we need our software to track the right metrics and the right places. We need to design our systems so that they are continually creating telemetry.

What is Telemetry?

The DevOps handbook defines telemetry as,

An automated communication process by which metrics are collected at remote points and are sent over to receiving equipments.

When designing systems, it is a high leverage activity to include creating telemetry as a first-class citizen to enable and ease tracking metrics at all the levels needed, right from business level metrics to deployment pipeline level.

Levels Of Metrics Tracking

As engineers, the software we write impacts the organization at multiple levels, from infrastructure to the product, to business. Thus, to resolve problems quickly, we need to track metrics all these levels.

Following levels of metrics have been really useful for me to keep a checklist for adding the right metrics in the software that I write.

1. Business Level Metrics:

These metrics directly affect the business. Thus are really imported to keep an eye on.

Examples include sales transactions, numbers of items clients sent, total successful items processed, hourly processing rates, etc.

2. Application Level Metrics:

These metrics track the functioning of the application.

Examples include latency of the APIs, response time of queries, number of errors etc.

3. Infrastructure Level Metrics:

These metrics track the infrastructure that runs our application.

Examples include CPU usage, available memory, IOPS spikes etc.

4. Product Level Metrics:

These metrics track the product progress and results. As product engineers, it’s a high leverage task to track product-related metrics too.

Examples include A/B test results, feature toggling results, product progress, product extensibility, and configurability etc

By having telemetry coverage in all these areas, we will be to see the health of everything that our software relies on or things that rely on our software.

Conclusion

With the limited time that I’ve spent in the software industry, I’ve come to realize the importance of metrics. Even the parts that don’t involve any software must be tracked and measured. The key idea here is that you can not improve what you don’t measure.

With right telemetry built into the software that we write, we’ll be able to not only solve the problems they arise but also surface the latent ones before they catch fire.

That’s all, folks!

 

7 Tips On Making Your Engineering Workflow Faster

One of the most important thing that I like about pair programming with other awesome engineers is you get to see their workflows. How they get things done? How they get find and make their way around tools, terminal, and editors?

After witnessing and getting awestruck by many such experiences I realized that having an effective workflow can increase your day to productivity many folds.

The next step was to take action, and while doing so, I have compiled few tips to make your engineering flow faster too.

1. Identify waste:

lean-manufacturing-identifes-waste-in-workflows

According to the Toyota Principles:

A waste is any hardship and drudgery that doesn’t align itself with what customer requires and is willing to pay for.

The First step towards developing a ninja workflow is to do an audit and identify waste.

Identifying waste is the first step towards eliminating it.

Ex. My workflow had many wastes like not automating enough, not harnessing the power of IDEs, waiting for the large codebase to reload etc.

2. Get proficient with your IDE:

8rljtzts_400x400

Today, IDEs are super power packed. To develop an awesome workflow, we must learn how to harness the power of our IDEs.

I use PyCharm for my day to day work and have witnessed very considerable efficiency increase once I took steps to become proficient with it.

Features like:

  • Custom live templates
  • Smarter code navigation
  • Custom keyboard shortcuts
  • Debugger
  • Distraction free mode
  • Plugins

All make you a power user. It’s worth investing time given the return on investment.

3. Get familiar with Unix shell commands:

Getting familiar with Unix shell commands is a game changer. First, it makes you look smart and second it helps you automate stuff.

I noticed that I used to do a set of repeated tasks every day when I started working.

  1. Login to office WiFi network
  2. Open browser
  3. Open Slack in tab
  4. Open mail in a tab
  5. Start the IDE
  6. Activate virtual environment
  7. Checkout VCS repository etc.

And now all it looks like is:

~$ startwork

You get the idea. Invest some time and become a Unix power user.

4. Automate your manual workflows:

Developing skills to automate takes time. Whether they are using shell scripts, browser extensions or little code snippets.

Investing time in automating workflows is a high leverage activity.

Ex. You don’t need to manually follow a certain flow of the app to test out something every time, which takes 2-3 mins.

Can we automate this and do this in 2-3 seconds.

How much time will it save if suppose we do this 25-30 times on average?

Ex. Or automating generating search tags for blog posts 😛

5. Prefer keyboard over mouse:

Screenshot from 2018-04-23 01-02-17

We all will agree. Using mouse is slow. Using keyboard over mouse helps decrease the time it takes to perform actions by many folds.

The action that was buried under 3 sub-menus can now be performed just by pressing a key combination.

Personally, for this, I would highly recommend a plugin for JetBrains IDEs called key promoter. It’ll help big time in getting over our mouse addiction.

6. Learn at least one productive high-level language:

Getting things done in a language like Python is way faster than something like say,  Scala.

Learning at least one high-level language allows us to quickly test out ideas and implement them.

No more resistance of writing a 20 line class just to test out an API call to a service.

Move fast and test out ideas on an interactive interpreter instead of compiling code files.

7. Make it easy and fast to run the unit tests associated with just your current changes:

Screenshot from 2018-04-23 01-22-07

Running the entire test suite or even the test suite of the module you touched can be time-consuming. Life is too short for that.

To quickly validate things, make it super easy and fast to run the unit tests of just your current changes.

Personally for this, I use the copy reference feature of PyCharm a lot, and obviously, I use the keyboard shortcuts to do so.

Conclusion

With this post, I wanted to share some ways that I’ve been consciously working on to making my engineering workflow as efficient as possible. Still, there is a big room for improvement, but hopefully, this article would’ve been of a little help at least.

That’s all, folks!

 

Fail Fast: Hone Your Ability to Recover and Respond Quickly

veteran-turned-software-engineer-e1485204975427

It’s close to midnight and you are about to wrap your day off. Suddenly you get a pager-duty to resolve a critical bug that’s failing some of the automated reporting emails.

You go on to check the logs in the log management tool. This is not the ideal time to find out that logs are not getting streamed to the log management service properly.

Next, you decide to check the performance metrics of the email API and you realize that you don’t know the new monitoring tool well enough to get the right metrics quickly.

That sets the theme to why as effective engineers we should fail fast and hone our abilities to recover and respond quickly to failures.

Another post I wrote on failing fast:

https://priyankvex.wordpress.com/2017/07/08/philosophy-behind-the-offensive-programming/

“The best defense against major unexpected failures is to fail often.”

Netflix knows its way around when we talk about creating reliable systems. What engineers at Netflix have done may sound counter-intuitive, but they have made a tool called Chaos Monkey. It randomly kills services in their own infrastructure.

It turns out that this strategy helps Netflix to increase site’s reliability. Failing services during office hours when all the engineers are available, helps them perform recovery drills effectively and prepares them well enough for actual emergencies.

Why is it so important to prepare for failures?

As software engineers, our systems are bound to fail at some point and some releases certainly will have some bugs. In such scenarios, learning and investing time in the ability to recover quickly becomes a high leverage activity. It gives you the confidence to move fast with your product having peace of mind that you are ready to tackle problems if they arise.

Few reasons to invest time in recovering from failures:

  1. Prepares the team to write scripts for success via mock drills.
  2. Surfaces gaping holes in the systems used for monitoring and debugging.
  3. Helps develop better tools and processes to handle emergencies.
  4. Helps control stress and panic in the cases of actual failures.

Write your contingency plans

what-if-800x435

Ask yourself “what if” questions and work-through contingency plans:

  1. What if a critical bug gets deployed with a release?
  2. What if a user raises an urgent ticket?
  3. What if my message broker goes down?
  4. What if my systems face a spike in usage?

This can be applied to even more aspects of software engineering:

  1. What if the due date for a feature gets preponed?
  2. What if a critical team member goes sick?
  3. What if there is a dilemma in the product plan and prioritization?

Conclusion

No matter how careful we are and what we are working on, things will go wrong some of the time.

The better our tools and processes for recovering quickly from failures, and the more we practice using them, the higher our confidence and the lower our stress levels will be. This allows us to move forward much more quickly.

That’s all, folks!

 

2018, New Year: Let’s Set The Rhythm For What Lies Ahead

Here are the 9 things I would love to incorporate into my life as I set myself to see the sun of 2018.

1. Stop chasing the long dream, start conquering the micro-goals:
Start cultivating a passionate dedication to the pursuit of short-term goals, being micro ambitious.
Putting my head down and work with pride, whatever is the job in the hand.
If we see too far in front of us, we won’t see shiny thing right in front of us.
Develop the habit of doing small things the great way.

2. Stop waiting for being ready:
Stop waiting for the moments of the future to be ready or to define oneself.
People, places, our choices all have already shaped us into who we are today.
These moments have already happened, and they will happen again.
You won’t be ready, untill you start.

3. Excercise :
Run, play a sport, do yoga or whatever. Take care of my body. I am certainly going to need it.

4. Be a teacher, share what I know:
Don’t take for granted what you know. Rejoice in what you learn and spray it.

5. Read, read and read more:
I am always going to be on the dumber end of the spectrum. Read as much as you can to cross the chasm to get to less dumber side.

6. Constantly work on the weaknesses:
Each day, every day, keep hitting the weaknesses by yourself.
Hopefully, they wont suck that much when the year ends.

7. Remeber it’s all luck, have gratitude:
Understand truely that you cant take all the credit for your success, nor we can blame others for their failures.
Be more humble and more compassioante.
Emptahy is intuitive but it’s also something that we can work on intellectually.

8. Define myself from what I love:
Not by what I hate. If someone asks us what music we like, we go “I hate EDM”, what food you like, “I hate Chinese”. From this year, I’ll try to define my choices because of why I love them, not why I hate the others.
Be demonstrative and generous in the praise for those you admire.
Be pro-stuff, not just anti-stuff.

9. Don’t rush:
You don’t have to know what you are going to do for the rest of your life. Don’t panic. Let the river inside you flow at its own pace.

 

PS: Note to self

Life is long, tough and tiring. You’ll sometimes be happy and sometimes be sad, and then we die to get submerged into nothingness. There is only one way to make the best of our empty existence. Fill it.
Learn as much as you can. Take pride in what you do. Have compassion.  Share ideas. Demonstrate what you love.

Happy new year!

 

Contagious : Why Things Catch On : Reading Experience

We all have heard of the hilarious Panda Cheese commercial in which a panda screws everyone who says no to panda products. People loved the ad so much that the brand enjoyed world wide recognition. On the other hand commercials by GoldenPalace.com was a complete miss, it just failed to persist their brand name in customer’s mind by Fool in the pool marketing stunt.

So, what makes things popular? Why do people talk about certain products and ideas more than others? Why are some stories and rumors more infectious? And what makes online content go viral?

In the age of social media where everyday we get to see viral trends, what makes them viral?

My 2nd book of the year was, Contagious : Why things catch on.

I picked this book when I saw the author if this book Jonah Berger in a documentary The YouTube Revolution. As I am trying to set up a company, understanding the science behind virality will only help.

Contagious gives nice representation of the science behind viral things in the form of a framework he calls STEPPS.

S : Social Currency

T : Triggers

E : Emotion

P : Public

P : Practical Value

S : Stories

Each of the element of this framework represents on its own a very powerful factor of making things viral.

Book explains case studies of many products and businesses, and how the elements of STEPPS helped their brand go viral.

Be it 100$ cheese-steak that was a perfect example of social currency making a local restaurant popular or “Will It Blend?” video series on youtube making Belndtec’s blenders popular worldwide.  STEPPS can be found in every viral marketing campaign.

The thought that was intriguing was, How will STEPPS combine with traditional marketing strategies like SWOT and PEST frameworks . In my opinion it will only increase the chances of the campaign going viral.

Contagious explains very effectively, how STEPPS play major role in making people to share, to remember and to talk about something. Each element is described a great marketing campaign story that just cements the concepts in your mind.

Overall, it was a great read for everyone. Not very technical that you’ll need google to seek the meaning of marketing jargon, but still technical enough to give you knowledge you want.

My 3rd book of the year is, The Lean StartUp by Eric Ries. A nice book on how startups that are successful perform with their business models and operations.

 

 

10 Things I want to do before I graduate.

I am almost half an engineer by this time. Two and a half year and I will be a graduate. Sounds like fun. So I guess this is the best time to reveal 10 things I want to do before I die . Oh! sorry, before I graduate.

 

1. Google Summer Of Code

GSOC
Okay. First one should not be a surprise for computer students. Gsoc is like a dream for almost every computer engineering student. There is nothing better then this you get as a student. I am working with python and will try to get through with it into the Gsocers list.

2. Go to Goa

Goa
Now this should be obvious to every college student. The beach parties and the girls ;). Seems like fun.
I just want to get there and then declare it “The World Party!”.

3. Try to crack Codevita

Codevita
If you are unfamiliar with this one. It is not your fault. It is a coding contest organized by TCS. I am not that much of a hardcore competitive coder but still this thing deserves a shot.

4. Go River rafting

River Rafting
Okay! I am really excited for this one. About half a year ago we planned this but few back logs ruined the plans :'(. . Let us see when the glory comes to me.

5. Complete the Dragon Ball series

DBZ
It nothing compared to watching your favorite anime Dragon Ball and try to follow the super saiyan way of living. I have grown up watching this and want to live this awesome way my whole life. (Those good old times . I want to relive them 🙂 ).

6. Go to Sunburn

Sunburn
There is nothing more exciting and thrilling and electrifying and startling …( 😀 )then jumping with your hands flying in the air to the EDM of your favorite DJ.

7. Complete Data Science Specialization on Coursera

DS
Back to study stuff. Data science and Big Data are kind off booms in the IT industry now days. There are by now 11 courses provided by coursera on the topic and I wish to complete them all.

8. Plant a Start-Up

start up
As you guessed by the previous point, I am a techie person ( at least I consider myself as one ). It sounds thrilling and fun to start your own start-up. So just shut up and start-up.

9. Go to Bangalore for an Internship

Internship
Tech internship and Bangalore. The perfect duo. Meet new and talented people and grow yourself as well. As far as I have heard it is a very fun experience.

10. Get a Girlfriend

This one is in because I was having no other thoughts in my mind and I didn’t wanted the title to look like 9 things to do…
So if you are a girl, ping me! 😉