A developer’s day in life

I have meet and worked with few developers. I have always found it common theme that they are always better at there task and programming however struggle with time management, project management and client understanding. Everyone is not in this category, its a mix and a match. Let me list out few example of true stories you may be able to relate.

Stories of developer struggles:

  1. Important and urgent emails are not replied for 2 days, especially when the email is from Exec/Director who is asking for some status directly to the developer (When its a flat structure).
  2. The Client has requested for apples and he gets apples tasting like oranges. Most common reason miss understanding of requirement
  3. The projects completes on time but gets over budget, due to number of hours spend by developers.
  4. Or the worst of them all not communicating back to the team when the task is done and there are half a dozen people who are eagerly waiting for it.
  5. so on…

Before even going further and giving my 2 cents blanket advice to budding developers. Here is the principles on which it has been derived. As a developer you much be aware why principles and patterns works out best and we don’t have to reinvent the wheel again. This is a 4 quadrant principle from the book “The Seven Habits of Highly Effective People” by Stephen Covey.

four-quadrants

As such the above image is self explanatory short detail about this is given here

Quadrant 1 is what you must be doing already, because your boss or client is keeping a watch on it. Quadrant 2, honestly if you are struggling as programmer or developer. You don’t bother its not on your books at all or only occasional thought. However remember this is most important quadrant for your career. The time we are saving will be invested in here.

Lets talk about Quadrant 3, mostly likely this will be your major time consuming activity. Some ones else priority, meeting that you need not attend, overthinking and over-designing a simple programming problem, creating generic frameworks in tight deadline and so on.

And your most common friend, Quadrant 4. Checking social media feeds again and again and again. Long coffee breaks and charts, playing games on your smart phone. Checking stock price every minute, Checking on news of countries you don’t belong. Have you ever thought of switching your phone for an hour and working on a programming task. Think about it.

Now that you have got a glimpse about possible struggle and resolving principles. Lets plan a day for you. Its cannot be repeated each day however it will work like a framework to bring yourself in track. Reminder I am not Nostradamus and I don’t have a crystal ball. Use your common sense!

The framework for your EPIC day:

  1. Your day starts at 5 minutes on previous night before you sleep. You know what are the big deadlines of your project. You pick 1 big task for a day, which will take around 90 to 120 minutes to finish. You also pick 2 small task which takes 30 minutes each. So you know your must complete task for the following day.
  2. Good morning! You don’t start with your day with your emails (No-Email). You pick your first task and complete it on the basis which you decided on the previous night. If you are scared of not checking your email first thing in the morning then come 2 hours early then your regular time. So to begin with you check your email as you used to check on your normal day.
  3. Once your big task is done you will already feel more accomplished for your day and you will find you are in control.
  4. You move on to your next 2 task once the first task is complete and the only other activity you can do to bend this rule is quadrant 1 task which is like Server crashed, Application down or fire in the building.
  5. Till you complete all 3 task for the day you will not take up any quadrant 3 task. If some one ask for help or your boss interrupts. Ask politely if you can do that post lunch, since you are middle of a billable task and in a zone. Most sane bosses will understand.
  6. Once you are done will all 3 task hope fully by your first half. Check your email before you take a lunch break. Reply to all the emails which will take less than 2 minutes. There are few example listed here. This tip form the book “Getting Things Done the art of stress free productivity” by David Allen
  7. So you had your lunch and you completed your BIG 3. Already feeling like ready to go home. Note: You have not spent an single minute on Quadrant 4 activity also being able to not do it for rest of your day. Being professional and giving your employer a bang for the buck.
  8. Now is the time for finishing your Quadrant 3 activity. Ideally in a time slot of 60 minutes each. Don’t take more than 2 task mentioning you are already working on some things else. which is already in your plate. Again use common sense in case of crisis and any quadrant one task.
  9. You need to take 10 mins of your planning this will help you if you are on course with your 3 months deliverable, your monthly deliverable, weekly deliverable and all your communications and dependencies.
  10. Planning: So I would recommend you to split it like 1st and 15th of the month check your Monthly deliverable. However 1st of every 3rd month check your 3 months deliverable. Every Friday check your weekly deliverable. Rest of the days check your daily goals. If you have time left check all the gaps of your communications. Like of you are waiting for some decisions or task. send a reminder. If you have completed a task send a notification. This time should be only for planning what to do. So the actual sending of email will be coming next. This time slot is only for brain work. Make good decisions here or I like to say thinking time.
  11. Now you again go back to your email to reply to all the long emails that you will have to read and reply and planned communication you did in previous step. Remember on a good non crisis day you would have spent only 10 minutes of your time on email before you reach at this 3rd email checking event. You keep a slot of 20 minutes to reply all Quadrant 1 and Quadrant 2 email. The main is quadrant 2 email especially relationship building with your clients and boss.
  12. For those you cannot reply answer them back you will reply them by tomorrow end of the day. Then you pick them up same time tomorrow in your 30 minute slot.
  13. The most fun time slot of your day begins, You will divide it into 2 slot, the First named as AutoBot and the second as MyWisdom each one about 45 minutes.
  14. AutoBot: This will be a time where you will add automation to your developer life. You will think of ways which you will do your task faster. Few example: Increase your programming speed by adding auto complete code snippet or some command script to automate your build, unit test and dev-deployment process. We are just following Do not repeat principles in our process. The out come of this time should be towards your long term goals, Should be able to used by your organization or your future team.
  15. MyWisdom: You should spend this 45 minutes for learning some thing new. Ideally by practicing it in a code base or setting up the tool in your computer. If possible avoid consuming articles or video during this time but actually getting hands dirty and making mistakes while learning new stuff. Asking important questions which you don’r know and then learning new things.
  16. If you count till now you will add up to 7 hours. the remaining 1 hour will be taken up by a 30 min status meeting, stand-up or some other meetings. The remaining 30 minutes will be taken up by context switching. Also quadrant 1 task can come up any time.
  17. Happy programming!

 

1 ) Scenarios for common anti patterns

2 ) Puzzle to choose which is right and wrong when you have to choose between two task

 

Advertisements

How to search for quality remote work?

time-hop-holiday

Remote working is something which is gaining traction across the global. The trend of growing tech entrepreneurship and individual professional. Made the increase in demand of co-working place. There are company who have remote work options like wordpress.com, basecamp.com and upworthy.com. There are portal which cater only remote working jobs. Also there is a who book written about remote working called “remote” by the team at Basecamp. Below are the few location where you can find good quality remote work.

Places you can search for remote work:

  1. http://stackoverflow.com/jobs : Want to work remotely? The top developer website in the world has something to offer you.
  2. https://www.toptal.com/careers : Top quality technical freelancer. Why 3%? As a network, we have a very rigorous screening process to identify the best. We are experts in our domains, and we look for great problem solvers with passion and drive — the types of people we want to work with (and learn from) ourselves. Of the thousands of applications Toptal sees each month, typically fewer than 3% are accepted.
  3. https://weworkremotely.com/ : We Work Remotely is the best place to find and list jobs that aren’t restricted by commutes or a particular geographic area. Find the most qualified people in the most unexpected places

Here are few links that talk about the companies that offer remote work and there are more than 100 companies

  1. Remote
  2. These 7 amazing companies let you work remotely from anywhere
  3. 100 top companies with work from home jobs

Having given all this information there is an article about “How to Work Remotely and Still Be the Best” It covers following topics:

  1. The Remote or Home Office Setup
  2. Software Tools
  3. Remote Work Best Practices: Bug Tracking
  4. Remote Work Best Practices: Team Communication
  5. Making Your Presence Felt: Don’t Go Invisible

Details can be read here @ https://www.toptal.com/freelance/how-to-work-remotely-and-still-be-the-best

Happy Remote working

2015 in review

The WordPress.com stats helper monkeys prepared a 2015 annual report for this blog.

Here’s an excerpt:

A San Francisco cable car holds 60 people. This blog was viewed about 320 times in 2015. If it were a cable car, it would take about 5 trips to carry that many people.

Click here to see the complete report.

The year could have been better. However I am happy and next year will put in lot of efforts because with my first year of Entrepreneurship I have lot of information to share on teams, practices and small business. 

Happy Blogging!

 

A letter to a young developer less than 3 or 4 years experience

So you have been into the world of software for more than couple of years now and you write code either in Ruby, nodejs, java, DotNet or some other trendy language. You have already passed the entry gate and feel much confident at your work. You solve the problems thrown at you in very controlled and timely fashion. You are considered as rock-star developer among your peers younger than you. Seniors like you and count on you. So if you have any of the above traits this letter is for you.

There are many such letters out there on internet, couple mentioned in the end of this blog. The reason I am writing this is to help the fellow members out in community which we have learned a hard way. Let me explain this with some crude example. What you currently know is syntax, few debugging skills and some design understanding. Let me correlate it with hammer and screwdriver and you are able to build a store room as one of the assignments under complete home and may be even the roof of the store room. You feel confident and as soon as you get more experience you are expected to build the whole house or a complete floor. Now to build it you need to know how to use drills, understand floor plans, other gadgets etc. But since it a small project you try to complete it with hammer and screwdriver. It works and everyone is happy. But think what will happen when you are given in-charge to creating a whole building (5 stories and above) and your team members are using hammer and screwdriver to build it (its an metaphor).

So here are your drills as a programmer

  1. Understand the design principles, patterns and rule of the game.
  2. Solving same problems with multiple diffrent ways.
  3. Going to some developer meetups or watching some on YouTube.
  4. Learning multiple programming language for alternative paradigm.
  5. Reading hardcore technical blog, Not like this one.
  6. Contributing to opensource project. Git is your friend.
  7. Doing Code Kata. You don’t know what it is. Ouch!
  8. Working on a problems related to performance and scale.
  9. Participating in code hackathon from a learning perspective.
  10. People don’t like this but read books, Really read it!

Few good other articles

Happy Programming !

5 Agile and other practices for developing MVP (Minimum Viable Product)

As we are heading to the Startup Weekend this Friday. Thought of how we can implement some of the known Agile and other practices to help us during MVP development.

  1. Time box
    • Keep it small
    • Keep a check
    • Re-evaluate
  2. Feedback loop
    • Some Tests
    • Ask team member
    • Ask potential customer
  3. Keep moving
    • Discuss challenges
    • Frequent  stand-ups
    • Ask for help
  4. Kanban board
    • Measure of progress
    • Small wins
    • Have control
  5. Why Reinvent the wheel?

Happy Collaborating!!

Real experience of adding first sets of Tests to existing code base

I recently joined a team of very skilled and talented people. We wanted to put in Tests for an application which was running in production for quite some time. I cannot specify the details of the project but it had tens of thousands of line of code in it. It was developed in Microsoft Dot Net and SQL Server and a web application.

I would like to share some insight and recommendations:

  1. Long running tests and writing long dependency tests setups is the norm
  2. Adding technical debts in tests will be needed but keep it as clean as possible.
  3. Don’t worry of Unit Tests in the beginning. It will be lot harder to do it.(Add Integration tests, refactor code in smaller units, add unit tests later)
  4. Some types of test that will help you during this initial testing phase :
    1. Pinning Tests : http://c2.com/cgi/wiki?PinningTests
    2. Characterization Test : http://c2.com/cgi/wiki?CharacterizationTest

You must be thinking you already know all this stuff above. But the view point I want to share here is some real world numbers and facts. Firstly add  a automated code coverage to get the results of your tests with just one click. (a simple .bat file worked for me)

  1. I was working with the code for first time.
  2. It took me 16 hours to put in first 6 tests.
  3. These where clean, re factored and commit ready to Git.
  4. Code Coverage was 6% after 6 tests.
  5. When I added 5 more tests the code coverage was 15%
  6. Tests were covering different classes of different modules.

This stats may be controversial and its true that code coverage doesn’t signify that your code has 100% automated tests for all possible scenarios, However here are some reasons to go with it.

  1. It give some numbers to go for during initial stage of adding tests.
  2. It will help you to add test harness for different areas of applications.
  3. You can share reports with team and get feedback on what’s next.

Happy Coding!

Agile Manifesto over a decade

It has been over a decade few developers got together and coined a name “Agile“. It was definitely a developer centric software development methodology. I am a novice to speak any further about agile movement. I saw different version of Agile manifesto over the past years, I listed 10 of them here.

  1. The Original :http://agilemanifesto.org/
  2. Kent Beck version : He was one of the person in the initial signatory of Agile manifesto. He gave one for Lean Start up read it here.
  3. Uncle Bob’s lead version: He was also one of the person in the initial signatory of Agile manifesto. It was a part of Software Craftsmanship movement : http://manifesto.softwarecraftsmanship.org/
  4. Agile Scout : They are people who practice agile. This was written as a retrospection after 10 years of Agile movement, read it here.

Let see some opposite views of Agile. I don’t know them so won’t give any brief about them :

  1. Dark Manifesto: http://darkagilemanifesto.org/
  2. Anti Agile: http://antiagilemanifesto.com/
  3. Half arsed: http://www.halfarsedagilemanifesto.org/
  4. Programming M*****F*****(bad language BIG NO, I am sorry to add a link with this language however he has a point): Obfuscated Url 

And to end up here are few Enterprise version for Agile

  1. IBM : A version by one of the IBM consultant, read it here.
  2. Enterprise : A version by a guy called David, read it here.

I hope you take a full advantage of Agile and consider it as another tool in your tool box.

Get started! Write code.

In Indian software world from where I come, we mostly work as vendors to the clients. Challenges we have as talked with Siddesh, on how client’s expectation is very high, ambiguous requirements and sharp deadlines, it might sound all too familiar in any part of the world.

Since Indian software clients are growing and maturing, it will be very important to experiment and spike with different solutions to see what works mutually with the client and the software team working with them.

Here is my take on it. It is just an personal opinion and there will be many arguments against it. But here is my point of view. The first primary challenge is to get confirmation if the contract is with us or not. But as soon as you get in touch with any technical details, start creating a spike. A version of spike’s meaning can be found here. You may argue that how can we start writing code without complete analysis. I am talking here about non production code.

Listen to this discussion on a idea of Test Driven Development between Jim Coplien and Robert C Martin in YouTube. They talk about writing production code of a telecom application (app size 2 million lines of code). They need half an hour to start writing the code. I think we can definitely write up some code to get a better understanding about requirement and gain some confidence.

At organization level, we can have repositories of all such spikes so that in future we spend less time in creating those. Such situation could arise for example when we end up giving the project to other teams with in the organization or if the project goes on hold. We will always have working executable code as our knowledge base. Thus, we will have information on the uncertainty of the requirement + the existing knowledge of business as usual. It is easy in theory then actually doing it. But that’s the challenge.

Happy Experimenting!

Pair programming Dojo Experience

I and my friend did a Dojo last month you can find it here. Below are the experience we had.

Gautam’s learning:

  1. How much the experiences of the 2 developers worked in different environments differ from one another. His way of coding, ways of finding & implementing solutions etc.
  2. Working with Vikram also forced myself to think of different ways to prove my point and to keep patients when there is discussion on a particular topic (Specially when we discussed about the starting point of the tests execution.)
  3. As far as coding is concerned I learn few shortcuts from tools and learned a better technique of renaming variables and functions which I knew how to do it but never thought of implementing not sure why.
  4. Above all I did my first TDD during this Dojo so got to learn a lot about it. Also learned about how keep your excitement in control while implementing various functionalists while working with TDD.
  5. Overall it was a small session of about 2 hours but we learned a lot from each other and looking forward to continue this Dojo.

My learning:

  1. How a solution approach is different of a person for instance: Gautam was insisting to add few more test cases to make sure the code is working were as I wanted to follow the rules that was instructed.
  2. The names of methods came lot better with 2 pairs of eyes.
  3. When we pair up with new individual how we must slow our self and the fellow member while learning new skills. Patience is the key.
  4. Learned a handful of key shortcuts which was a normal habit for the fellow member
  5. Adapting to work with new laptop with some of the keys placed totally difference from mine.

Even though most of our experience are alike, but adding it explicitly made a lot more sense of understanding.

Happy Pairing!

Android Apps for software developers

Here is a list of three apps I frequently make use during/for my software development activity.

3 Android apps I use are :

  1. Stack Overflow
  2. Pomodoro
  3. Twitter

Stack Overflow : It doesn’t need any introduction. If you really care about your craft try to contribute to the community. Answer the questions out there in a more human way possible. When I am not in front of my computer. I just have to see it on the app with the notification coming on the top. Thus letting know any progress in my previously answered or edited question. It helps to keep the score.

Pomodoro : Its is a time management technique. A very simple one but not easy to practice. In crisp it helps you to focus on a task for 25 minutes. Its a timer that goes of every 25 mins followed with a 5 minute break called as Pomodoro time. The apps give you a sticky note to write down your current task. The main challenge here is to focus on your working during those 25 minutes. Initially you can make a list of distractions during the Pomodoro time. Later have action plan to overcome the distraction. Find details on Pomodoro Technique.

Twitter : WHAT!! Yes you must be wondering how on earth can twitter help you become a better developer? But really if you use the tool effectively it is really helpful. It can play a role of aggregator of information. You can select people whom you want to follow, be it technical, leadership, personal development or entrepreneur. Make sure that they don’t spam your tweet feed. Also remember you can always un follow people. Go through your tweet feed when you are waiting for something. The wasted time could be converted into learning. And yes you can follow me @vikramshettyc

Also share your list of Android app on your mobile phone.

Happy learning!!!