How to not lose big with outsourcing – Kirill Pertsev – Medium


Hoe groot te verliezen met outsourcing

Een niet-technische oprichterhandleiding

Laten we de verwachtingen meteen stellen: de titel zegt "hoe je niet groot kunt verliezen" en niet "hoe te winnen." Dit is een serieuze en risicovolle onderneming en er zijn geen garanties. Probeer dit alsjeblieft thuis. Uw kilometerstand zal variëren.

Volledige openbaarmaking: uitbesteding is een "commercieel gevoelige" kwestie, vanwege het gebrek aan beter woord. Het web zit vol bullshit, geschreven door mensen die proberen je diensten te verkopen. Sommige van deze onzin bevat eigenlijk nuttige informatie, maar zonder de kennis om het kaf van het koren te scheiden, is het nog steeds onzin. Ik heb het grootste deel van mijn professionele leven en aan beide kanten van de tafel in de outsourcing gewerkt. Vandaag heb ik geen huid in het spel, maar ik heb behoorlijk wat ervaring opgedaan die sommigen nuttig kunnen vinden. Ik heb nooit gewerkt in / voor / met een massale outsourcing, Infosys-stijl, BPO doen voor grote westerse bedrijven. Toen ik in mijn outsourcing werkte, gebruikte ik deze branche om aan verschillende moeilijke en interessante projecten te werken, een topdollar te verdienen en mijn planning in te stellen. Toen ik een klant was, Ik huurde uitbesteders in om geld te besparen op toptalent. Ik geloof dat dit mijn ervaring behoorlijk relevant maakt voor het probleem: hoe een tech-startup (moeilijk en interessant project) uitvoeren terwijl het technologiedeel wordt uitbesteed.

Dit bericht werd voornamelijk gemotiveerd door de veelvoudige postings op Founderdating forums van niet-technische stichters die een ultiem antwoord proberen te vinden op een ultieme vraag: "Hoe begin ik als ik niet weet hoe ik moet coderen?".

Een van de opties is om een ​​zogenaamde "technische mede-oprichter" te vinden en de andere is om uit te besteden (u kunt beide doen, ze sluiten elkaar niet uit). Het onderwerp van deze functie is uitbesteden, maar omwille van een betere framing: medeoprichter (technisch of niet) is iemand die jouw passie deelt. Als je erin slaagt een technische man te vinden die bereid is om de beloning in aandelen te nemen, dan is het nog steeds outsourcing. En mogelijk onderzoek je serieuze problemen. Het werkt misschien, maar vaker wel dan niet.

Advies nummer één: communicatie

The main problem in outsourcing is communication. I need to say this twice; there’s nothing even close in importance to communication in this business (from both sides). If you can solve the communication problem 5 out of 5, you seriously can consider yourself already in the top league. I have seen a lot of promising projects failed, and almost all of them failed because of one or the other communication problem (or a combination of such problems). With a good team and good communication protocols, you can pull almost any project, and I am not exaggerating. However, communication is very hard to build right and especially with offshore outsourcing teams. Forget about “do these guys know Ruby well enough for my project" type of questions (or, God forbid, “do they have certifications"); they do not matter much. Decent developers may develop your project in many different languages/tools/frameworks, even if they did not do exactly that before. Commercial programming may look complex on the outside, but it is not rocket science. The fundamental dilemma that needs to be ultimately solved is that many very decent developers suck badly at communications, but developers good at communications are typically quite good in the technical domain. And they’re not necessarily very expensive because developers tend to overvalue the technical knowledge and undervalue their social skills. And your ultimate goal is to find exactly these people: developers, genuinely good at communications (not just sales).

Probably the best starting rule for someone who never worked with the outsourcing team is to imagine that this team sits with you in the office, and you can meet with them twice per day (or how often you feel comfortable) and ask any questions. You need to achieve this level of comfort with the remote team whatever the cost. This is your goal and the goal of someone who runs the remote team. If they do not want to give you this level of comfort — move on. Without even talking to the outsource teams first, just think what you would love to pay money for — written reports? Daily calls? Video? Screen sharing? Imagine that you are going to live this way for several months and a few weeks, in the beginning, you will have nothing but these reports and calls, you would not even have a prototype to look at. You have to be 100% comfortable.

Remember that voice calls and videos usually do not leave trails. Once something was said, it could be easily dismissed later and taken back. Or, assuming the lack of malicious intent, just forgotten. Unless you are willing to run 100% recording, which is almost always uncomfortable and sometimes illegal. Build your communication in such a way that you always have a “paper trail" of all important aspects. Do not report bugs over the phone. Do not accept commitment dates and budget numbers during the shared screen design session. Capture screenshots and publish them on the wiki or elsewhere. If the remote team agrees to use recordings then record everything and publish the recordings on the wiki for everyone to refer to if necessary. Which will build the next thing I am going to discuss:

Number two: trust

It sounds pretty natural to me: “never rely on someone you do not trust", but for whatever reason so many people risk their businesses, their savings and hopes, engaging in relationships with complete strangers, just because these strangers are 40% cheaper than someone with established reputation. At the same time, saving 40% is tempting, isn’t it? Established reputation is something already available to you, as off the shelf goods. And, naturally, it has the price sticker attached to it. However, if something is not available off the shelf, you can create it. Assess the reputation of your prospective partner by carefully selecting the tasks and evaluating results. In my experience, considering typical startup technology tasks, I had only marginally worse results with people and teams without established reputation than with ones with such. The key to the successfully assessed reputation is fine granularity of tasks, which is good advice even when working with reputable teams. Which, in turn, leads us to the next

Number three: project management

Never, ever, give anyone a task like “build a website" or “design the database". This is nonsense, especially in a startup. Consider it sort of a “game of assumptions." You can not assume everything, and your goal is to assume as less as you can. The more you assume, the higher is the risk. The phrase “build the website" is “assume everything" and the risk is 100%. The complete content of the website (including the markup, images, and styles) assumes nothing and the risk is zero. You need to find a sweet spot and it means that you need to do as much work yourself as possible except the purely mechanical work. If you can design the website in Photoshop — do it, but converting this big image into smaller images and HTML markup is trivial work and could be easily outsourced. There’s still a risk, but this risk is capped at few hundred dollars and not “toxic", which means that failure at creating the markup does not throw you back a lot.

When evaluating risk always remember that you carry a handicap, a penalizing coefficient to risk, because you are not a technical person. Do not jump from one slippery boulder to another, laughing and being proud of yourself. Choose small steps and less risky routes. You are going to be much more proud of yourself in the end. Your goal is to get from A to B, not to become a hero.

Bootcamp

So, let’s design a website using the outsourced person or team. Remember, reputation goes both ways, and both are equally important for the success of your project. Your goal is to grind the vague “build the website" job into small, cheap and short tasks. Each task should be “fully functional" — for each task description there should be one and only one correct answer. This allows you to evaluate the result immediately, and if the result is not what you expected then you have only two options: you either suck at describing what you want or the outsourcer you work with suck at their job. Give feedback to your outsourcer, discuss it and if they sound convincing either accept defeat if the result is usable or grind the task finer and repeat. Improve your task grinding skills. If the outsourcer does not want to discuss, says something “trust us, we are engineers," just turns on radio silence or (worst case) tries to ridicule you or manipulate you emphasizing their technical excellence then move onto the next outsourcer. This one suck at communications, and you do not want to bet your venture on them.

You can ask any other person, technical or not, to read your task description and tell you if they understood what it calls for. If they did, ask them to explain it back to you in their own words, and if it mostly matches, you did a good job.

Back to our website: what is the natural cutting direction for websites? Pages. So start with a single page and of course it would be the first page (or front or “index" page). Is the front page fine grained enough? No. The front page is a big, complex and important project by itself and needs to be ground further. What the page logically consists of?

1. Layout

2. Style (colors, fonts, decorative elements)

3. Content (informative images and text).

Okay, can we grind further? It appears not. Style elements largely depend on each other; the layout is a single elementary thing itself, and the content is again a separate project. Content conveys a message you are trying to convey, and this message needs to be built independently from the design part (that is why you see a bunch of these “lorem ipsum" words in any design template).

So, let’s go over these tasks one by one and outsource them to someone.

Layout

Can you outsource layout? Yes, you totally can. However, should you? Not entirely. Your job is to outsource something that you do not know and don’t want to learn right now while building trust and keeping the risks low. You have probably seen a website or two already (well, if you have not, then I guess you have worse problems than lack of technical expertise like you are in prison now). You can probably imagine how you would like your website to look like, you can go to your competitor’s websites, to companies similar to yours (similar industries, similar size, and stage). There are not many choices in layouts, so you can quickly figure out what probably would work for you. Do not use much larger companies as examples; there are tens or even hundreds of people working on their websites, and these websites are often separate lines of business. Start with something as simple as possible. IT projects, especially development projects, have an incredible amount of internal complexity, complexity totally invisible from the outside. One single button or menu could potentially cost you weeks in development. You do not want that.

Many people make a mistake and go to numerous “template" sites looking for ready to use website templates as a source of inspiration. This is an obvious and wrong approach. If you do not know or have reservations about what to build you need to look at live objects, not templates. It is not even a mistake; it is a fallacy: your brain tricks you into easier task than you have at hand. Software designers fall for the same trick always too; they start choosing frameworks and libraries before they decided what exactly they want to build. Playing with ready to use toys is much easier than building a complex concept in mind trying to shape it into comprehensive and simple form. Once you decide how do you want your website to look like, you can go to the template shop and see if there is something you can use. But not the other way around.

Take the pencil and quad lined paper instead. Alternatively, if you want to get fancy and spend a few bucks, you can go to UI Stencils website and order a paper notebook specially designed for website and app prototyping. If you absolutely don’t want to touch pencils and scribble dead wood, try Balsamiq Mockups. I use both, and I love them both. However, honestly, you do not need anything beyond paper and pencil for the first year or even more. Again, do not let your brain trick you into solving simple tasks bringing immediate gratification like shopping for the best prototyping software, learning it, watching hours of videos on Youtube and so on. Your goal is to build the website as fast and as cheap as possible while getting good enough quality. Remember, people hate fancy websites.

Now, once you have got your first page roughly prototyped, make the second prototype a little more detailed. Specify all the links, buttons, and other clickable elements and create rough drafts of the pages these links lead to. Review each link and the page it leads to, do you really need this on the first page? Once you think you’re done, show this to someone not affiliated with your future business, will they be able to figure out what this is all about? Wipe and adjust as necessary.

Once you have done with this it is time for the easy part: chose the font and the color palette. Don’t get fancy with either, chose the font from what you have on your computer (and, seriously, do not chose anything except Helvetica, unless absolutely necessary) and use free Adobe Kuler for colors. Trust these guys; they know a thing or two about color. If you want some images, backgrounds or other nontext elements — find them too. They do not need to be exactly what you want, just the same size and approximately have the same theme. You can use photo banks for free, whose free images are watermarked, but you do not care at this stage. There are free icons, free backgrounds and a lot of other free resources on the internet. Once you are ready for prime time, you will replace them with “real things".

You have done your part! Now it is time to hire someone. You did the most crucial part of the work, and you took the greatest risk. The rest requires a (relatively) lot of technical knowledge but bears almost zero risk. The cost of creating an HTML page from your paper layout is about $100–300 when outsourced and this is the most risk you may have.

Hiring

Well, hiring is broken, true, true. However, for you the life is a bit easier, you are not hiring a permanent employee, even not a contractor in the more conventional sense. This person is not going to become your liability unless you do something horribly wrong.

Outsourcing not necessarily means offshore. You do not have to hire anyone across the globe; you can hire someone who lives in your city or country. Moreover, I would suggest you to do exactly so, despite the fact that you may spend some extra money. However, consider the following:

  1. 1The price difference is not that much as it looks like. Even if you live in the most expensive part of the country for the tech jobs (yep, San Francisco, the city of my love, I am looking at you) the equivalent quality job from across the globe would be not 10x cheaper but probably 2x-3x. This is not going to define your financial future considering that the job itself is about $300.
  2. 2If this is your first encounter with technical outsourcing, you want to reduce risks, remember. You do not want cultural risks, you do not want country risks, you do not want time zone risks (are you ready to wake up at 4 am to discuss your project for the $100 difference?) and so on. Many local guys with good reputation (and even more with bad one) do not do the job themselves but outsource further to their proven subcontractors. Let them do their middlemen work; they are protecting you from your risks. You do not want their job, trust me, I have been there.

Chose the site you are going to work with (I would recommend Upwork, they clearly won the battle for outsourcing, but they recently decided to start ripping their customers from both sides off, so this may change relatively soon) and start searching people using obvious keywords “HTML" and “layout." Do not get fancy on the keywords; the more fancy, the more marginal would be the people selected, and you do not want marginals. You need standard issue, run of the mill, wholesale service.

Do not chose people who have too many skills. The person who has 5 years of experience programming C++ and Java is not going to make you an HTML template. Someone who designs Teslas for a living is a very expensive and usually very bad candidate to change the oil in your car. The reason why they put a gazillion of different skills on their online profile is that they are not people but agencies behind real or fake identities, and this is not what you are looking for.

Your ultimate goal is to find someone who does exactly what you want: some design, HTML/CSS coding, some graphics work, maybe some scripting. Tweak keywords and search criteria until you get the first page of results almost perfect — you would love to work with almost everybody there, regarding skills, price, and personalities. Start drilling down on their profiles, reading reviews and, very important, project descriptions they were working on. Do not chose people with zero or one project, there are real gems out there, but not for you, they are too risky. Try to google up people which wrote the reviews, are they real? Not many of them are (they just used pseudonyms, nothing wrong with that) but some are and sometimes you can even find them online and ask for feedback. Real feedback from real confirmed unaffiliated person is pure platinum.

In a heavily male dominated industry, even in the US and Western Europe, but more so in the East, women make the best outsourcers. Do not let your feel for social justice distort your vision and distract you from your goal, though. You need to focus right now on what your objectives are. But if you selected your top five candidates and two (unfortunately rarely more) are women with everything else being equal I would start with them. Outsourcing is a rough business; it is often not very rewarding and sometimes quite soul crushing. Women who survive it are superwomen. They are much cooler than men, they do not try to compete with you, they do not try to prove that they know everything better than you (even when they do), they are much less delusional and so on. Much easier to work with on average from a standard selection of strangers, so to say. Just professional. They want to do their work, get themselves a satisfied customer, receive a flattering review and keep you in their close list of “good customers".

Initiate the conversation — publish your job description, being as specific as possible, but do not publish materials yet, just describe them (“I have this, this and this at that level of detail"). Invite your selected list of outsourcers for bidding and interviews. Let them ask you questions, answer and listen. Do questions sound professional? Is the overall tone condescending? Do they ask questions over and over again? Here is why you should be super cautious when hiring from abroad. People from many cultures sound very rude when they translate themselves into English. Not because they are rude, but because how the translation works without knowing the “target" culture.

Follow your gut feeling; you might not be technical, but you know people. Choose the ones who you will be comfortable working with. Do not hesitate saying “No," winning the outsourcing bid is a statistical process and even the best ones get a lot of declined bids. They are totally ok with this.

Always ask for time estimates and follow up on them. Blowing the estimate is, unfortunately, normal in the IT world, but not by much. 10–20% for a simple task is acceptable, and you should plan for that, but more than 30% is reserved for complex research projects, not technical grunt work. If they give you a wrong estimate, then they either lied to you, desperately trying to win the contract, or they do not know what they are doing. You do not want to work with such people.

Once you chose your finalist, release the materials (pictures, icons, paper prototypes), grant the contract and sit tight waiting and answering the questions. Review the results, provide as much feedback as possible and iterate. On a simple task like building the HTML page from mockup, you should have more than 2–3 iterations. You need to review your processes if you needed more.

Budget

Money management is easy. No, seriously. Just two simple rules:

  1. 1Even the best software development managers often run twice over the budget, and you are extremely lucky if you will make it better. So if you have allocated $50.000 for the project, consider it $25.000. You will feel much better at the end.
  2. 2Avoid hourly rates as a plague. To work comfortably with the hourlies you need a lot of experience and intrinsic knowledge of internal project mechanics. You do not have neither of it and if you will go crazy with hourly rates you would consider yourself lucky if you run over your budget less than tenfold. Don’t worry; outsourcers know about this problem, and there are enough of them accepting “fixed bid" projects. People firmly insisting on uncapped hourly rate for an entry level project are strange: either they want to scam you, or they are just overqualified for your type of project. Capped rates ($X per hour, but no more than N hours) are okay, but they do not make much sense for either party. I have never saw good honest use for such rates; they are usually used as an naive sales tactic by the outsourcers, deluding customers into thinking that it could be cheaper than $X*N. No, it is never cheaper than that, sorry.

Technical project management

Now, you iterated a few times, spend a few hundred dollars, you feel comfortable on Upwork website, you got used to strange schedule, like sleeping from 4 am to 8 am and then from 4 pm to 8 pm because that is how your outsourcers work in Russia, Taiwan, and Bangladesh. You finally built your website, app prototype or what did you choose, and you think you are ready to go full on.

Principles of lean development are twice as important for the heavily outsourced complex project lead by the non-technical project manager. You need to iterate as fast as possible using as small steps as possible. Apply the principle of “grinding" the project to smallest fractions. Once you have ground your project into smallest possible parts, sort them by importance. Here, some tool can come handy. I use Pivotal Tracker, but completely free solutions like Trello are essentially the same. Start by just putting all the tasks there in the “icebox" (PivotalTracker terminology) in no particular order and once finished, start giving them priorities (move to “backlog" and sort there). Do not assign points yet; you do not yet know. Points are a measure of complexity, and once you start giving tasks to outsourcers you will ask them for estimates, translate estimates into points system (a very simple 1–3 or 1–5 scale, depending on the tool). If you do not forget to put these points into your tracker on time and mark tasks started and finished on time, your tool will calculate “velocity", and you will start seeing the milestones predicted for you automagically. Everything will start clicking into place.

Choose the most popular technologies for your project, do not get deluded into the infinite arms race of frameworks, databases, SQL, NoSQL, languages, libraries, GPGPU computing, well, you name it. Go with something everybody knows and uses and where workforce supply is abundant. You only can cut corners with bleeding etch technologies when you know which corners to cut and if you do then why are you reading this text? For every technology, you are considering for your project go to the professional job board like StackOverflow Jobs or already mentioned Upwork and get two numbers: how many people are available with this skill and how many positions for them are open. If you see 3,5 or 10 positions for the technology you are considering, worldwide — move on immediately. Just forget it.

Tools

Contrary to what I said in the beginning about prototyping, learn to use tools. For UI prototyping you do not need much more than quad lined paper, or Balsamiq (which is as simple as paper but more convenient). However, for the administrative tasks like task management, issue management, bits of documentation, source code, contracts, etc you better use tools. Your brain has finite capacity, and you do not want to load it with tasks computer does much faster and better.

In every category, there are tools which a great and absolutely free (open source). However, for many open source tools, you will need to provide your own infrastructure, these tools need some machines to run on. So my advice is to use cheap online products developed by commercial companies, which are either free for small projects or cost a few dollars per month.

My personal recommendations, I am not affiliated with these companies, but use these products consistently. There are many similar products as good as these and probably better.

  1. 1Pivotal Tracker for project management, task management and issue management. Issue management is quite rudimentary there, but enough for a small initial project. There are free plans and paid plans start from $7/mo if I remember correctly.
  2. 2If you want more flexible issue tracker, try JIRA. This is something “the whole industry" uses. This is, of course, an exaggeration, but by not a large margin. JIRA has online (they call it OnDemand) version and is not very expensive for small projects.
  3. 3For the source control do not use GitHub if you want to save money. There are free alternatives: BitBucket and GitLab to name a couple. Yes, GitHub seems to be free, but free account does not allow to make source code repositories private, they would be open to the whole world. There is nothing wrong with that (well, much less wrong than you think) but I am a minority here. Personally, I use BitBucket historically, because I prefer Mercurial to Git version control system, and BitBucket gives you a choice.
  4. 4For documentation use Wiki. There is an abundance of hosted wikis out there, and some version control services like BitBucket or GitHub have them built in. It is enough. If you want it standalone, you can use Confluence from the same company that brought us JIRA and BitBucket. They integrate together nicely.
  5. 5For voice communications and screen sharing, I used Skype. I cannot recommend it now, though, the qualify of the product decreases literally every day. For voice, I switched to Google Hangouts but haven’t tried their screen sharing yet. I still have too many people on the Skype contact list. There are plenty of startups in this field, Zoom.us comes to mind, I used it a little, and it is very nice.
  6. 6For everything else, there is Google Docs.

Never ever even think about not using a version control system. You will thank me for this advice, trust me. Use it from day zero and put everything in it. Pictures, diagrams, literally everything. Consider that very soon you would need to give access to this version control to stranger(s) who you are going to hire. Separate repositories and do not store in the same repository files you are not comfortable to share with strangers. NDAs do not mean anything even in the United States (well, of course, they do, but do you have a legal budget for that?).

Even if you think the tools are superfluous, use them nevertheless. Never think “Oh, I do not have much yet." It is much harder to load existing data into the new tool than to start using it from the green field. You will learn terminology and would be able to speak with people from the industry in the same language. Also, knowing these tools is a marketable skill. Don’t use fancy expensive tools which require you to study, watch many videos and which are almost indefinitely configurable (so take the JIRA advice with a grain of salt, this could be too much for you).

Legal issues

Most outsourcing sites provide you with a run of the mill IP (Intellectual Property) allocation contract. It basically says that the code you paid someone to write is yours. This contract does not protect you from anything really; it will protect your investors in the future if you will manage to get ones. Your outsourcers from the remote country can take what you invented and run it for themselves, and there’s little you can do. You can ask your uncle real estate lawyer to write them aggressive cease-and-desist letter, and that is basically it. Does it happen? Yes. However, very rarely. Nobody needs your idea; everybody thinks you are an idiot, and your idea is worth shit. And this is what makes startups awesome — nobody believed it was worth something, you have built it, and now it is worth billions. Who knew, haha!

On the other side, reputed outsourcer who had stolen your code will lose their reputation, very likely will be stripped of their account on the service you used to hire them, and so on. If it was worth it, then your idea was not startuppy enough in the first place.

But it does happen. Do not invest in lawyers or fancy contracts or NDAs or anything worth more than a few dollars. Buy a book at NoLo, prepare some very basic NDA/contractor agreement (so just you would be able to say “YES!" to your future investors when they will ask you if you have IP allocation sorted out). Their lawyers will cringe at your documents, but that is okay, it is their job to cringe at everything, and then charge $500/hour to fix.

Instead, separate the work between different outsourcers in such a way that nobody would be able to build a complete product alone. But, honestly, if I would be you I would not care.

Conclusion

After about 5000 words I run out of steam and it is long enough for a blog post. But if that was not enough for you here is a perfect follow up read: https://www.groovehq.com/blog/friday-qa-march-04-2016

If you think I missed something or just plain wrong or an idiot leave this feedback in the comments. There is one clear benefit from working in outsource business for 20+ years — I have developed a very thick skin :-)

Good luck, you can do this.