Monday 20 June 2016

5 things I’ve learnt from outsource

I’ve been developing software for more than 13 years and today I’d like to share with you 5 things I’ve learnt from working for outsource companies.
  1. Always follow Pareto principle also known as “80-20 rule".
    Simply saying, first, implement really small piece of software that covers the most common use-cases of the feature you are developing. Then ask for feedback from your client and your boss - these are usually different persons in outsource. Be ready to have a negative feedback. Your client may say that this is absolutely not what he expected. And it’s ok, because our clients are usually not good in expressing their requirements. Moreover they maybe not aware of what they really need until you show them something. Don’t let your clients fool you - they are not sure about anything. On the other hand your boss may say that the solution you’ve chosen is too expensive or risky. And that’s ok too because your boss’s job is to make money and he has his own business perspective on what you’re doing. If you are following Pareto principle you will be ok to rework or even throw away what you’ve just done because you’ve done just a small piece. 
  2. You should always have a plan.
    It’s absolutely necessary to have a plan. You may also call it vision, strategy, backlog or whatever. You should stick to your plan and always act according to your plan. Your clients, your boss and even your own colleagues will try to change your plan. Don't let them do that! Protect your plan, fight against any attempt to change your plan. But once your killing arguments are not heard anymore - just step back and elaborate a new plan. Don't waste too much energy on protecting your original plan because it's completely against Pareto principle. Just get your client's confirmation or your boss's approval written down to rework your vision, strategy, backlog or whatever. Now you have a plan again. Your plan. A better plan. So stick to your new plan and protect it. For a while.
  3. It’s all about tradeoff between your clients, your boss and you.
    Most probably you have a crystal clear vision how to build a perfect product. You know exactly what your client needs. You know a technology stack of bleeding edge frameworks that perfectly solves your client’s problem with minimum number of lines of code in the most modern programming language. Now wake up. Your client also has a vision of what you should deliver him at the end of the sprint. Your boss also has a vision how much your solution should cost him as well as what effort will be required to maintain your solution and how fast he will able to find a replacement for you (yes, you are not irreplaceable!) who knows that modern programming language. So you three must seat and negotiate and believe me none of your three visions has any chance to be brought to life as it was originally fantasied.
  4. Programming is easy. Communication is a killer.
    I can assure you that all my bosses, clients and colleagues are great people. No kidding. These guys know best practices, modern technologies and programming languages. They follow design patterns and constantly care about performance. They work according to perfect software development lifecycle, write tests and minutes. They improve visibility, providing feedback and proactively facilitating all day long. They just can't communicate to each other effectively. Seriously, they simply can't clearly formulate their ideas and thoughts to be non-ambiguously understood by others.
  5. Your job is not created for you to have fun and grow as a professional.
    You should realise one simple thing. This job you have was not offered to you to let you learn and apply all these new technologies and programming languages. It was not even intended to be interesting and joyful. This job is not for you and it's not about you. As a developer you simply build software for your clients to solve their problems, to let them make money or to let them get rid of their headache with respect to tightened timelines and budget. If you want to learn something new or enjoy - do it in your spare time. You may contribute to open-source projects or kick off a startup. That’s simple. Your current job should not contribute to you anything. 
Now my question is to you, my dear startupers and employees of product companies. Do you find any of the things above familiar or close to you and do you follow some of these principles at your exciting non-outsource work?