Developer Mindset

"We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard." - JFK

There are many aspiring software developers in the world. Some achieve the dream of becoming a software developer, but unfortunately many don't. To become a software developer, one needs to develop a developer mindset. Here are some of the characteristics of the mindset that developers need to understand and grow.

  • Code is like poetry - Software development is not easy.
    • Incredibly creative endeavor and hence very frustrating yet very rewarding and fulfilling at the same time.
    • Read books, watch videos, read blogs, and write code.
    • Get comfortable getting uncomfortable.
    • Embrace the struggle, make it a challenge.
    • Sometimes the problems you are trying to solve will take minutes, hours, days, months, or years. Be patient.

  • Focus - Great software development does not happen without great focus.
    • Use Pomodoro technique to increase the productivity. Set a timer for 25 minutes, eliminate distractions, close email or any other messaging applications, and work intensely. Take 5 minute break and start again.
    • When your teammates or others need your attention, politely ask them to wait till your pomodoro or 25 minute time period ends. Sometimes, this may not work. You may have to stop everything and address a very important issue then your own judgment.

  • Discipline - Good software developers are very disciplined.
    • Keep regular work hours.
    • Get to work early. It is very important to get to work early because the morning time is the period when you are most productive.
    • In the classic book, Art of War, Sun Tzu says "Whoever is first in the field and awaits the coming of the enemy, will be fresh for the fight; whoever is second in the field and has to hasten to battle will arrive exhausted"
    • If you get into the habit of getting to work late you will start to carry a guilty feeling. It's like you are trying to run a race with additional weight strapped on your back.
    • Work regularly for 8 hours and spend rest of the time with your friends, family, loved ones, and on yourself.
    • Wheels of time are constantly churning. Respect the time of your employer by giving your best everyday. Also respect your time by relaxing and enjoying every moment.

  • Leaving work at work - Good software developers know how to relax.
    • Once you are home, unplug, relax, and let go the stress about upcoming tasks and deadlines.
    • Don't dump your work stresses on your friends, loved ones and family members.

  • Give honest reasonable estimates - Good software developers have courage to tell the truth.
    • Do not give unreasonable estimates to impress the management.
    • Do not rush to any judgment. Take time and think about various steps needed to finish the work.
    • At the same time, do not be timid. Be confident and measuredly optimistic when giving an estimate.
    • If you are pressured into unrealistic estimates, explain it clearly why it will take more time. 

  • Be prepared for meetings - Good software developers are well prepared.
    • You are more likely to give better estimates and contribute well in your meetings if you are well prepared.
    • Think and write down various points you would like to talk about.
    • Let others speak and listen. Do not rush to blurt out your ideas.

  • Workout regularly - Good software developers take care of their body.
    • Programming is a thinking job. Your mind will work well if you workout.
    • After each pomodoro (25 min time minute time block), get up and stretch.
    • During the lunch, walk fast for about 30 minutes, or go up and down the stairs.
    • Continuous sitting in front of the computer for 8 hours is not good for your body, eyes, or your mind in general.
    • Prehistoric humans walked a lot to find food and survive. Humans are not meant to be sedentary.
    • Go to gym, lift weights, do yoga, play sports, garden, and involve in many other activities to stay active.

  • Get good sleep of 8 peaceful hours - Good software developers take care of their mind.
    • Sleep is very important. You need a good sleep for your body to heal and recuperate from day to day stresses.
    • Make getting good night's rest a priority.
    • As a good developer, sometimes you may want to stay up, in order to write additional lines of code. Write it down on the paper what you want to do so you don't forget the burst of creativity, sometimes you suddenly get. Then, get some good night sleep.
    • Focus on the long term. Do not forgo sleep. Communicate with your management if you cannot meet the deadline. Do not stay up all night trying to meet it.
    • Nights of missing sleep get you stuck in the negative feedback loops.
    • You stay up all night and meet one deadline, but as a result of missing sleep, your productivity will decrease in long run. 
    • Give your 100 % every day and get to work early. Your management will understand.
    • Practice meditation.

  • Eat healthy - Good software developers fuel their body right.
    • Eat healthy vegetables, fruits, lean meats etc. Vegetarians make sure that you are getting enough protein from soy, lentils, etc. Consume healthy fats from nuts like almonds, pistachios etc, oat meal and whole grains.
    • Avoid unhealthy, fried, saturated fats, trans fats, white flour carbs, too much salt, and sugars.
    • In IT industry, when it's time for software release, sometimes you will have to work late. During the crunch time junk food might be ordered anticipate those situations and avoid them by preparing your meals in advance or by just ordering a healthy take out meals.
    • If you eat well, your mind will work well.
    • Unhealthy junk will make you feel drowsy and reduce your productivity.

  • Growth mindset- Good software developers have right mental attitude to grow and handle adversity.
    • Growth mind is a concept that states, you have the ability to learn everyday. Your knowledge and skills are always not fixed entities you can grow them. You will always have challenges in life. You may not have the talent or skill you want today, but if you are willing to work at it, you can learn it.
    • Cultivate a growth mindset. When you take on a new job or project or task, see what you have learnt from it, irrespective of success or failure.
    • They have found IQ was not related to test scores, but grit did. Patience matters a lot. There have been instances where doggedly trying different approaches at the problem gives you solution.
    • Doing well in life depends more on your ability to learn quickly, passion, perseverance, and sticking towards long term goals.
    • Talented individuals do not follow success. They embrace the journey and grow incrementally. You are on a learning curve.
    • The growth mindset will help you learn how to cope with challenges and difficulties. Take on tough challenges and treat them as learning experiences.
    • Raise your hand up and do the project that every one is scared of doing. Probably, you will fail. Failure is as much part of life as the success.
    • Embrace both, positive and negative, emotions and every time you push out your comfort zone, you create new neural connections. Your brain gets smarter and your problem solving skills get sharper. Eventually, sooner or later, you will become the valuable employee of your team.
    • Research more about Growth Mindset by Carol Dweck and learn about it.

  • Mental mindset - Good software developers know how to execute.
    • When you are working and trying to get your work, there are some things that will greatly help you. These mental mindset lessons are from US Navy Seals, one of the best fighting forces in the world.
    • In the course of their training, they have found that a recruit from poor rural part of the country can pass the training while the one from a top ivy league school could not pass the training. Here are some of the lessons they teach, and these can be adapted for software developers mindset, as well.
      1. Goal Setting- Set small achievable goals. Say, if you have to create a screen in the application, split it into smaller steps, like creation of database table, creation of business logic, then user interface, and test case. Focus intensely on just one step at a time. Your mind will wander - accept it. Don’t be judgmental. Patiently, bring it back to the task at hand.
      2. Visualization- Visualize how you will solve the problems. Mind is incredibly powerful. Mental reps matter.
      3. Positive Affirmations- You mind races sometimes. Your inner voice is many times faster than your talking voice. Sometimes, your inner voice becomes negative as you are trying to solve the problems that you have never done before. You are your own best friend. If you lose your own friendship, it will be hard to solve the problem. Use positive self talk, like “I can get it done”, and even better - “I am a super hero. I can easily get it done".
      4. Arousal Control- Sometimes, even after you have done your best, you will be in tough situations, and you may get real stressed out. In those situations, watch your breathing, count to 10, and relax.

  • Online Reputation - Good software developers market themselves and give back to the community.
    • Build your online reputation. Having good reputation online will help the recruiters to find you or make hiring managers comfortable when they are hiring you as you have built online reputation over time.
    • LinkedIn: Keep it updated, ask your co-workers for recommendations if you honestly feel you have helped them. Add your certifications, training, blog posts, etc.
    • Twitter and Facebook: Follow thought leaders and trendsetters in your field and interact with them. Check in when you attend tech meetings. Share on Facebook or tweet whatever cool technologies you are learning.
    • Blog: Give back. Write and share the knowledge you have learnt over the time.
    • Hootsuite: Sometimes, posting to multiple social media sites can be tough. You can schedule the posts to multiple social media sites with hootsuite.
    • Stack Overflow: Try answering questions and building your reputation on this site.
    • github: Use, follow, and contribute to the various projects on github.
    • Quora: There is so much awesome knowledge here. Be well rounded and learn about other things, like arts, sciences biology, business, not just programming.

  • Information Overload- Good software developers can find a needle in haystack.
    • We live in the time of information overload. There is a lot of information on search engines, blogs, video learning, youtube, and tutorial websites, like khanacademy, pluralsight, codeschool, codeacademy, udacity, udemy, coursera etc. many to list here.
    • We research for a problem and immediately get too many search results.
    • When you see a problem, do not hit the search engine, immediately. Think for a minute or two. Try your own theory/ies. Then, try search engine to find various solutions to your problems.
    • Make hypothesis, make a sample project, test it if it does not work. Move on.
    • Trust your instincts but remember, facts rule.

  • Constant Learner - Good software developer learn constantly. These are additional skills they need to learn.
    • Research what skills to learn, from Google trends, job search engines, meetings etc. Stay ahead in technology adoption life cycle. It's awesome if you are an innovator, or at least try to be an early adopter, or early majority. Do not be a laggard.
    • Shorten the memory of failures or stresses in life. Do not worry for upcoming work or the quality of  the work you have done before.
    • You will make mistakes; apologize. Learn and fix them and move on.
    • Email trail. If you are getting pulled into the projects or tasks that were/ weren't planned, take permission of your manager and keep an email trail how you have helped others.
    • Do not take on the responsibilities of others without your manager knowing what you are doing
    • You have best leverage at the start of the job or project. Negotiate the factors needed for you to succeed and to bring about the change. That would be the use of new technology or any other issues.
    • When stuck at a problem and you have tried every thing you can think of but not making progress, walk away. Exercise, walk, take a shower, play sports, do something different. Now, come back and solve the problem.
    • Learn typing. Download a typing software and practice on it. You do not want to be typing the code with one keyboard stroke with one finger. Your mind thinks really fast, so your fingers should keep up.
    • When learning software development and also when you are doing day to job, try to type. Do not copy and paste the code samples.
    • Do not check in the code that you do not understand.
    • Ask a questions ask a lot of questions. Ask your teammates questions, your managers questions, be curious. Knowing why you do certain things is very important. Read blogs ask yourself questions, read software documentation ask questions, go through your tasks, stories you will work on ask questions. Its only to not know but its not ok to not ask why. Do not blindly take in information.
    • Collect interview questions and test yourself to see how much you remember.
    • Listen to podcasts, read blogs, attend meetings, attend hackathons and code with friends. You grow faster when you are coding with friends, rather than when you code alone.
    • Focus on the process, not the end results.
    • Practice. You are software developer, keep building. Be creative.
  • Challenge
    • It is awesome that you guys have made it so far in this article. I want you guys to watch these two videos. Post in the comments how many of these ideas in this article and videos are valid. Also, point out any additional points that I might have missed.

Additional reads and references

  • https://www.goodreads.com/quotes/22043-we-choose-to-go-to-the-moon-in-this-decade
  • http://lifehacker.com/productivity-101-a-primer-to-the-pomodoro-technique-1598992730
  • http://classics.mit.edu/Tzu/artwar.html
  • http://www.health.harvard.edu/mind-and-mood/exercise-can-boost-your-memory-and-thinking-skills
  • https://en.wikipedia.org/wiki/Technology_adoption_life_cycle
  • https://www.khanacademy.org/
  • https://www.codeschool.com/
  • https://www.codecademy.com/
  • https://www.udacity.com/
  • https://www.coursera.org/
  • http://www.ted.com/talks/jeff_iliff_one_more_reason_to_get_a_good_night_s_sleep