Tuesday, March 25, 2014

Offshore Outsourcing — is it for You?



I put together this short article to help answer a question many small software development companies and startups are faced with:“Should we continue (start) software development locally or consider expanding (moving, starting) offshore?”.

This article includes simple rules I typically use with my clients to help them reach an answer. The rules here do not cover all situations, but nevertheless can provide a company with an initial direction. Let’s dig in.

Here are several major scenarios when going offshore is beneficial for small software companies.
  • Team Expansion. Company has senior technical, process, and product resources onshore and expanding offshore to complement the local team
  • Unique Expertise. Company needs unique expertise that cannot be easily found locally but are available through an offshore vendor. The examples of expertise include specific technologies or domain knowledge.
  • Previously Done Business. Company is expanding and company principals bring in an offshore vendor that they have done business together with in the past and completely trust.
  • Prototype Development. Company needs to develop a prototype of a product or MVP (Minimal Viable Product) where delivery quality requirements are secondary (when starting on this path be prepared to rewrite the product in the future).
If at least one of the scenarios above matches your situation — then the offshore option could be beneficial assuming it is organized and managed efficiently.

If not — it may not be such a good fit. In other words, if you are a 2-person startup planning next Facebook and have decided to go with the cheapest offshore vendor based on a marketing email — think twice!

A word of caution. Even if you use the not expensive offshore vendor, you may still end up paying more than you would pay for a full scale local team. This can happen if key expertise is missing or efficient inter-team processes are not established. If you going offshore route — plan well!

Hope this helps

P.S. I intentionally kept the article short, feel free to comment or reach out to me directly if you interested in more details on the subject.
P.P.S. This article covers specifically Offshore Software Development for small companies. Outsourcing Software Testing, System Administration, Support, or Dev Ops is not in scope of this article.

About Author:
Alex Apollonsky has over 20 years of technical leadership experience in software industry. Throughout his career Alex served as CTO, VP Engineering, Architect, Technical Lead, and Technology Consultant across multiple companies and projects, holds several US patents, certified Project Manager and Scrum Master.

Attributions:
photo used courtesy of Patrick under Creative Commons License
I’d like to thank Dimitry Apollonsky for constructive criticism and help with the article preparation.

Monday, March 3, 2014

Ideas Prioritization with your Team: Agile Approach

Imagine you have a list of ideas you and your team came up with. Now you need to pick one. Or prioritize them. How would you go about doing it? The technique described below will help save you time.

The technique is very simple and based on the agile routine called "Prioritization Poker". It is designed to, well, make prioritization of any ideas by a group of people as time-efficient and emotion-free as possible.

To throw around some numbers: once the technique is mastered, it will take less than 10 minutes for a group of 5 people to prioritize a list of 10 ideas. Impressive compared to hours spent pointing fingers!

Let's dive right in.

What do you need to start:

1. Your team in a room with no-interruptions
2. A list of ideas, features, design decisions, or other line items you will be prioritizing (we will be calling them ideas going forward)
3. A set of large stickers or index cards
4. Markers
5. A surface (wall, whiteboard, large table) where you can arrange the stickers or index cards
6. Pens & paper for the team members to vote

Steps to follow:

1. Write the ideas you need to prioritize on stickers or index cards. Write a unique number at the corner of each card.

2. Put the cards or stickers on a surface (whiteboard, table) arranged at the top next to each other in random order. 




3. Review each of the written ideas with the team to ensure everybody is prioritizing the same ideas!

4. Ask each person to vote - to write down a number  (remember that unique number at the corner of each card?) of an idea they think has lowest priority. Ask participants not to show or share what they wrote. 



5. Ask everyone to hand you the written numbers. The Idea mentioned more than once must be moved to the bottom of the surface.


6. Repeat steps 4 & 5 until ideas are prioritized. On each iteration only ideas remaining at the top are participating in the voting. Also on each iteration the ideas voted down are moved above idea voted down in previous iteration.     



That's pretty much it. 

The technique works best if the number of people participating in voting is greater than number of ideas to prioritize. If it is not the case you might find situation (especially on first iteration) where none of the ideas voted down by more than one person.

If such situation occurred you have two choices.

Option 1: If the number of people participating is less than number of ideas needed prioritization, just move all voted down ideas to the bottom.

Option 2: If the number of people participating is comparable to number of ideas needed prioritization then your team is not ready to make the decision. You can either take more time discussing ideas with the team, or make executive decision.

Happy Prioritizing!


About Author:

Alex Apollonsky has over 20 years of technical leadership experience in software industry. Throughout his career Alex served as CTO, Architect, Technical Lead, and Technical Manager across multiple companies and projects, was awarded several US patents, certified Project Manager and Scrum Master.