What is stopping you from being a KICKASS Developer?

This blog is about how to kick asses and how not to get our asses kicked!  I have tried to compile a list of things which may stop you directly or indirectly from being a kickass developer and hinder your desire to reach your full potential.

Many blogs will try to motivate you and explain to you what to do but I am here to warn you by sharing what not to do! (most of the things from my own learnings and personal experience :P)

  • Not planning your progress

Sometimes we are limited by our thoughts, ideologies, fears and inherent beliefs! Every developer has this phase when he is neither a senior and nor a junior anymore. This is the time when he has to plan things for himself. Once a wise guy suggested me that, you should not try to achieve each and everything simultaneously; pick your battles, fight them, struggle and shine! These battles should be carefully chosen; they should prepare you for BIGGER battles which you will face in near future some day!

some meme found over the internet!
some meme found over the internet!

You should accept that Rome was not built in a day!  If you try to do too many things in a single shot; you will eventually fail and feel demotivated. Set a target for yourself; plan a progressive scheme for yourself; divide the bigger task into smaller doable subtasks and then conquer! Slogging hard randomly will work for you on some occasions but if you really want to achieve something big in long run then plan your work; play your career like a Test match rather than a T20.

  • Just working on office stuff

We all work on tight schedules; there is always a possibility that we might have to work on office stuff or commitments even after office hours. Try to define this complex term called office hours.

It is always necessary to have a good work ethic but you should be selfish sometimes in terms of what you do after these office hours. This is your personal time; your sacred shell which can only be utilized for your personal goals.

This time can be utilized for developing your hobby, hitting a gym, playing recreational sport, biking or taking an online course to add or enhance a skill! This is very important because all round development is very important in long run. For example; if you are hitting a gym you should work on chest, biceps, legs, shoulders etc equally!

Each of your personal/ professional skill will connect the dots in your personality; they will complement each other and after some time eventually, you will be more groomed, confident and focused.

  • Not failing enough / not breaking things

What is more damaging than failure; it’s your fear to fail! When we get something good or when we become better as a person; we somehow become defensive of what we have achieved! This is a trap! Don’t fall into this trap! Failure is the greatest teacher; don’t fear to fail rather learn from it. You should know WHAT NOT TO DO in long run? 😛

breaakthings
some motivating shit from zuck!

Don’t care if people judge you or laugh at you! Do what you like and learn from your mistakes.

Shake, break and make something fruitful out of the situation!

  • Not having a perspective on anything / Not knowing things

Having a perspective on anything indirectly means that you know about something, you have tried learning that thing or at least heard about that thing from someone else.

Whenever a new task is assigned in terms of software development; managers and CTO’s look for the guys who have tried something on their own or someone who has at least some sort of the idea behind the new feature. So it’s important to know things and having an independent opinion. It is a quality of a thinking developer.

knowthings
I like him! So I am putting him on my blog for no apparent reason!
  • Comparing yourself with others (in a negative way)

It’s okay to feel intimidated sometimes; there will be always someone who knows more than you and do things better than you. Your aim is to bridge the gap and compete with yourself.

Try to outdo yourself every day; try to be better than what you were yesterday. Eventually, you will harness that confidence and skill set which will make you outstanding amongst others. Don’t get demotivated if you performed bad or if someone is better than you. Just keep working on yourself, and keep believing that you will shine one day.

  • Not challenging yourself enough

Sometimes we get too comfortable with our situation, surroundings and our own self! There is a saying that,

The one who sweats more in peace; bleeds less in war.

Life, job, and circumstances will always challenge you from time to time; you need to be ready for this war. Prepare yourself for this battle by practicing stuff when you have time; sharpen your swords, add some new weapons in your artillery, work on your stamina and be war-ready.

In the current context, try learning new programming languages, work on random algorithmic problems, publish apps, read and write blogs; all these things will add on to your knowledge, skill set, and confidence.
Try to achieve something complex; it’s okay if you fail. Keep improving; keep working on yourself!

challenge
some more motivation!
  • By allowing your personal life to affect your professional goals

On an average, most humans are irrational and emotional fools (unlike robots and aliens)! Our lives, emotions, mental well-being, physical strength, ability to make decisions, etc. is synchronized with each other.
If even one of these things goes wrong, it will directly or indirectly affect our performance and confidence. It’s hard to compartmentalize everything and keep everything disassociated.

giphy
Get your fucking shit together bro!

There will be times when things will be topsy-turvy; at this time you need to take a step back, calm down, realign your goals by prioritizing most important battles. Once you do this, back yourself, start working and hope for the best!

Buck up.. bitches!!!
Life is this… I like this! – Harvey Specter

Don’t deem yourself unworthy of anything; go for what you deserve. Don’t let the mediocrity creep into your lives! Get out in the real world and kick some asses (literally :P)

Share this blog

Why Capital Punishment is necessary?

*Image is used just for representation purpose from google search. Copyright infringement is not intended if any.

We live in a socialized, economy driven democracy. We call ourselves civilized; we take pride in our rich cultural heritage and yet we see lots of crime committed every hour in each and every part of this country. Why these criminals commit these crimes without any fear and guilt? What boosts their confidence when they commit any crime? Why don’t they think before they commit any crime?  The answer is simple – lack of strict rules and lack of ability to implement them. I would like to discuss the idea of capital punishment here without politicizing it or connecting it with a particular incident/ religion/ person/ crime.

I strongly believe in philanthropy, my parents have taught me that love and forgiveness are the best virtues of a good human-being. Mistakes are part of a person’s life, every person commit mistakes. If a person’s mistake is not severe and if it doesn’t affect or hinder other person’s life, health and property, then the person must be given a chance to ameliorate himself but if a person commits an unpardonable offence like terrorism, rape, murder etc. then he/she must be punished severely.

Many people believe in ‘An eye for an eye and a tooth for a tooth’; but I am not one of them. I believe in justice more than revenge. Nowadays the rate, intensity and severity of crimes has increased to an alarming level in our society. Every day in newspaper, we read about cases of kidnapping, cold blooded murders, acts of terrorism, cases of sexual harassment etc. So, it is the ask of the time to strictly implement capital punishment to suppress the increasing level of criminal activities occurring in the society.

Hundreds of criminals are caught, tried and put into jails; most of them serve their time and are freed. It is important to observe them after they are freed. Some of these are habitual offenders; they can commit crimes even after they are punished/ penalized. In the cases of rape, terrorism, murder; capital punishment may not be 100% ethical but can be justified.

We are a bunch of religious morons; so I will explain this in a religious context. The Garudpuranas of Hindus and the Bible of Christians also suggest that punishments are must for a sin, and their strictness should be decided depending on the nature of sin committed. I would like to mention the punishments for the seven deadly sins as depicted in the bible: pride – a person is broken into pieces on the wheel, envy – a person is freezed to death in cold water, gluttony – a person is forced to eat rats and snakes, lust – a person is smothered in fire, wrath– a person will be dismembered alive, greed – a person will be boiled alive in oil and sloth – a person is thrown into snake pits.

Well, we should not implement everything from these mythological books; but the point I would like to prove here is, the capital punishment is simply a society’s way of concluding that a particular individual deserves to die because of the severity of crimes committed by that person. The punishment should be justified by the nature of crime committed. It is about setting a right example for others, if a person is pardoned for his crime or guilt, then it might encourage some egocentrics to commit same crimes for satisfying their selfish motives.

Ideally we would want to fix this criminal ideology right from the root of its inception through ethical and moral upbringing, proper education, social awareness and discipline. But we have already missed this part and now we are at that stage where we will have to unfortunately instigate fear of punishment for stopping these heinous crimes.

I would like to conclude saying that, capital punishment may not be ethically acceptable but it is axiomatically desirable!  Jay Hind!

Share this blog

Criticizing SCRUM Constructively!

Scrum Process Image
Scrum

Constructive criticism by definition means the process in which valid and well-reasoned opinions are offered which are backed by rational thinking, usually involving both positive and negative comments, in a decision oriented manner to improve the process or outcome as a whole without any bias.

We all know the power of scrum and agile development; if it is implemented and executed with certain tweaks then it can do wonders for the product and team working on it. As far as I understand scrum; it can be divided into 6 steps explained below.

1 – Creation of Product Backlog by Product Owner

Product Backlog is created by product owner to list out all the new tasks/ stories and divide them into groups according to their priority level.

2 – Couple of Grooming Sessions 

In grooming, task/ story details are discussed with the entire team and divided into sub-tasks. This step is very important because in this step entire team becomes familiar with the story requirement and expectation. Ideally story should be broken down into sub-tasks as small as possible. Product owner should try to be as specific as possible about the requirements.

3 – Assigning story points and locking sprint stories

This is the step where most of the errors occur. In this step entire team sits together and decides the story points based on it’s complexity and effort required to finish that story. Team has to decide and lock the stories which they will pick up in current sprint. Some teams overestimate (this is acceptable to some extent); while most of the teams underestimate (this is not acceptable at all)!

4 – Implementation planning of sprint

After selecting all the stories which have to be picked up in current sprint; it is important to plan and jot down the story deadline on a sprint calendar. It is very important to plan a sprint in such a way that everybody gets ample amount of time and a bit of buffer (for unexplainable set of time consuming events which may occur) for each and every story assigned to them.

5 – Daily scrum calls

After the sprint starts; it is very important to keep track of all the stories. Individual assignees should report entire team about daily targets and status of current story. Scrum master should act as a facilitator (rather than a dictator) making sure that sprint progresses smoothly.

6 – Retrospective meeting

After the end of the sprint; team again sits together and jots down all the positives and negatives of the concluded sprint. All the stories should be carefully reviewed in this meeting. There will be some areas where the team can improve upon; all these areas should be identified and an actionable plan should be carried out to avoid repeating same mistakes in next sprint.

On paper, above points gives a very solid and neat impression. But to be honest, implementing scrum can be quiet challenging sometimes.

Inspite of all the timely meetings and thorough plannings there are some concerns, inherent flaws and mistakes often committed which I would like to point out.

1 – Pressure to over-commit in sprint planning

An individual team member should not be pressurized directly or indirectly to over-commit. Everyone has his/her own limit. Scrum masters and product owners should adopt a balanced approach in which proper freedom should be given to team members to pick stories of their choice. Only that Developer should assess what he/she can accomplish in the upcoming Sprint. Undoubtedly, there should always be some kind of regulation or minimum points which he/she has to pick but no one should be forced to stretch. Whenever this thing happens; it will directly impact the mindset of team members. It will indirectly attractresentment, inefficiency and low quality work in long run.

2 – Working on interdependent stories

Sometimes different teams work on same set of modules. This results in utter chaos in most cases if there is an absence of proper documentation and planning. It has been observed frequently that in such cases defects/bugs are dodged from one team to another team and it creates ownership issues. Every team member will say that it’s not his/her bug and nobody will fix it. Ultimately the one who worked most recently will be unanimously chosen as scapegoat and he/she will have to fix that bug. Well, fixing bug is not a problem here and it will result in a better product eventually, but this unplanned work will affect the sprint performance of the scapegoat and his/her stories will spill or will eventually take a hit on quality aspects also. So, this situation should be avoided. In some extreme cases if it’s unavoidable then it’s better to spill a story then to push half-baked code to production.

3 – Unavoidable interruptions

Some teams work very closely with customers and production support teams, in such scenarios there can be unplanned interruptions in terms of client requests and production support issues. These issues are of high priority and can’t be dodged on to next sprint. Such teams should plan sprints defensively keeping in mind the average number of support requests they receive per day/ per week/ or per sprint (choose whatever metric you are comfortable with). All the issues/ requests should be properly examined and it’s priority should be cross checked with product owner. A proper demarcation should be made between issues and feature requests and should be dealt with accordingly.

4 – Degradation of quality

In scrum environment, there is high pressure of release cycles on each and every team. Everyone counts points  (if not everyone; most of them ); this sometimes pushes teams to deploy unoptimized and potentially breakable code to production. This will result in production defects and bugs; which will again have to be tracked by some defect logging system and will have to be fixed on high priority. Nobody will realize that it will affect current sprint and this is a never ending cycle. Deadlines are very important; that’s why sprint planning should be precise and concise without compromising on quality and coding standards.
5 – Check-points over shadows innovative solution

The strongest concern I’d pose here on Scrum is that we sometimes become excessively focused on checking the boxes to say that we are done with something, rather than being focused on finding innovative solutions to the problems which we were handed.
PS : I am not an expert on SCRUM and AGILE development; I am just another guy who can code a bit and slowly  evolving to be better at it. These are just my personal observations; most of them which I have faced over the course of my short professional career. But frankly, yes, I am quite critical of SCRUM and above are my justifications for the same.

Happy Coding ( and happy sprinting!)

Share this blog

How to choose a right startup to work for?

imageHi friends,

Last week I wrote a blog stating the positives of working at a startup. This time around I want to write about ‘the other side of this coin‘; I am hardly two years into tech & startup industry; I am still learning and evolving as a developer and as an individual. I will try to present my views with whatever limited knowledge I have.

Indian startup ecosystem is on adrenaline. It is booming day by day; funds are coming in from venture capitalists, angel investors and adventure seeking biggies.

The list of prestigious unicorn 1 billion club is increasing at a very fast pace.
Lots of Indian companies are making their debut in this list. From an overall perspective we can say that; this is a very good time to work for startups.

This morning as I was going through my Facebook news-feed, I came across this article; I was astonished to see that a promising startup with good funding had to lay-off hundreds of employees! Everyone may have their own perspective but, if we believe this article we can say that they made this move trying to make what they call a big structural and organisational change (basically trying to save few more bucks). May be the management was forced to do this thing; but I feel it is very bad and atrocious for those employees which are getting fired for no fault of theirs. I understand that in startups margin of mistake is very minimal; you are expected to perform continuously; sometimes employees get sacked due to under performance but laying them off without a solid reason cannot be accepted.

This raises a few questions…

– As a fresher or an aspiring developer should I join startups?
– What should be the minimum criteria of a startup?
– What things should I look forward to after I join a startup?

1) As a fresher or an aspiring developer should I join startups?

Hell yes, you should always look for such opportunities. A startup not only plays a crucial role in developing your technical abilities but also sculpts your attitude & approach towards a problem. It teaches you to handle pressure and perform under stressful environment. In bigger companies you won’t get to build something from scratch; but in startups you will probably get this chance. Building something from scratch gives you an insight in entire development cycle of that product; right from step 1 (step 0 in some cases!). You are the owner of that product and that product is your responsibility. It gives you immense technical prowess, exposure and satisfaction. You learn and adapt things very quickly. (You have to; you don’t have any other choice!)

Hell no, if you want a structured job with fixed and defined requirements. Most of the startups don’t define things clearly; their structure can be ambiguous. Working at a startup will always require a dedicated and passionate effort from your side. You can’t just log hours and chill around. You are expected to deliver in short deadlines. Sometimes you don’t have a road-map for navigation; you have to start and finish journey on your own; making mistakes and evolving from them and eventually learning a new lesson daily! Most of the startups provide good (industry-standard) salaries but they don’t provide important perks like health insurance, travel allowance etc. These things can be very important sometimes!

2) What should be the minimum criteria of that startup?

The startup should have a decent technology stack; you should not be working on outdated things. Your profile should reflect the type of work you will do in future (atleast a close estimate!). The startup should be well funded; atleast to a level where your monthly salary is guaranteed. Transparency is the key; you should be blatant in asking right questions in a right manner at right times and you should expect (honest) answers from the management. It is about your career; you should have full knowledge of what you are getting into. Most of the startups have a cool culture; but you should find yourself culturally fit among other peers. You will spent most of the time working your ass off over there; so it should be enjoyable for you and the people around you. You can’t ask for fancy things; but they should provide atleast a bare minimum (e.g., a good system to work on, office-desk essentials, public holidays 😛 etc.).

You should get whatever is promised (if not more!). In other words you should make sure that the terms of your contract are followed.

3) What things should I look forward to after I join a startup?

Get ready for one heck of a ride!!! It will be a journey of great learning and adventure if you have chosen a right startup. There will be times when everything may (and will) go wrong; you will have to persevere through all the insecuritiesand nervousness. It won’t be easy to work among coding-rockstars; you will face a great amount of peer pressure. Every one in the team will have a story to tell; you will wonder that when you will reach at their level. In the start, you may feel down or low in confidence (if you are joining as a fresher). It will be a big shift for you in terms work-ethics, ideology and routine for you. Suddenly you will be held accountable for anything that is not working or anything that is not built properly! You will find yourself working in stress sometimes but most of the times you will work passionately to kind of prove yourself (and others) that you can do better! Meanwhile there will be a lot of boozing, terrace parties and eating hangouts. In no time you will find yourself being recognized (if you work hard enough!).

Happy startup-hunting!

Share this blog

What it is like to work at a startup?

Ahoy mates!

– Every day is a roller coaster ride.

– You are not a valued employee. You are a pirate or a jedi instead.

– You work with a great bunch of motivated, talented and coolest geeks who are not shy to use F*** word a bit too frequently.

– Action may speak louder than words but code definitely speaks louder than any action!

– You are always updated about the coolest technical stuff happening all around the globe; thanks to the crazy folks all around you!

– You are not just a developer. You are a scrum-master, a deploy-king, a tester, a code-reviewer, a recruiter, an interviewer and sometimes you even get to pitch for your company! (If you are lucky enough..)

– You may feel intimidated and nervous at times!

– You learn the meaning of ownership and accountability.

– You continuously learn a lot of things simultaneously. Sometimes in a hardest way possible!

– Your mind suddenly gets tweaked to engage itself in provoking new thoughtsand ideas.

– You are free to choose and explore new technologies. Start-ups don’t believe in legacy tech!

– Your ideas  and grievances are heard effectively and immediately.

– You are expected to work hard and trained to work smart.

– You might get addicted to caffeine and beer in long run. 😀

Share this blog