Ask Slashdot: Is Outsourcing Development a Good Idea?
New submitter penmanglewood writes "I am a developer at a small IT company, and we primarily make software and games for the education market. I used to work with a team of developers, but for reasons outside the scope of this question, my boss and I are the only ones left. My boss says that our new strategy is to use outsourced developers to do the 'monkey work' for us. To me, this sounds like a bad idea. Do we give the developers access to our internal libraries? How will they be able to work on parts of our product without having access to our repository. I could think of a hundred more objections, but maybe I'm looking at it the wrong way. Is there a smart way to outsource development, or is it just a bad idea?"
You get what you pay for. There's a reason those outsourced programmers are so cheap. They don't care about you, or your project, and they don't have to maintain it when it breaks.
Been there (more than once), done that, got the Tshirt, got it autographed, and gave it away.
...as if your the last two left, there isn't a company left - it's time to pull the plug. If you can't perform the service / provide the product you were created for within the organization, or even get it started - then you are just conservators of a bunch of assets, waiting for the right time to call it quits; not a software development firm.
No.
Thank you. Next question?
"Flyin' in just a sweet place,
Never been known to fail..."
You need to balance your workloads with the project timeline. If the two of you can do it on time and within your budget, then you should try to do it yourself. If not, you'll need to spend quite a bit of time managing the individual(s) or company that you outsource your project to.
If your internal libraries are proprietary, you'll need to be smart. Don't give away the source code - just the compiled libraries. If you need to issue temporary licenses for the libraries to run (if your code requires licensing), make sure they are for 'dev versions' so they can't be used for release versions.
There are lots of reasons to keep development in house, but if you can't do it all yourself you nee to pick your developers well. Make sure you get references and that you check all of them. Make sure they provide references for several years back so you can see if they tend to repeat the same mistakes.
In my experience outsourced development requires a lot of technical planning, feedback cycles, and a strong development lead. Having the 'monkey work' done for you can end up being very costly in terms of your and your boss's time and might not really produce the code you want or need. It is certainly possible but the complexity of gaining domain knowledge of your system, the size and scope of what exists, and the pitfalls of remote team management can really become a barrier to success from this approach. In short the answer is yes, but remember that you will need to spend a lot of time and energy making sure the remote team is making progress.
In short term, yes, there is a cost savings that occurs. In long term, you will lose out on quality of your product or support. Most major companies with outsourced development are feeling that pain. The company I work for lost well over 2 million dollars in the last year due to the inadequacy of the offshore development teams we had. Some of the larger tech oriented companies, like HP are slowly moving their important development back to the US because of this. HP just brought around 200 SAP development jobs back to the office a few miles from mine.
...are local.
They don't have to work on-site, but you'll find it incredibly difficult to manage the process properly without being able to visit them at will.
Loading...
Try IGDA, the Independent Game Developers Association, and find a team with a track record of a game roughly similar to, or better than, the one you want. Give them participation in the deal, so they get paid a basic price plus some fraction of sales. This will encourage them to make it good, not do a half-assed job.
Rent-a-Coder and Freelance will not help. I've never been able to get good work from there for anything above the trivial level. (I once wanted screen scrapers written for state corporation registries. I'd written one for one state, and wanted someone to write the other 49, each state being different. No joy.)
Actually it is as simple as that: If the guys are unable to move the telecommuting job type, then how are they going to manage outsourcing kind of development, which is much much more complicated and has a lot of more issues to solve!!!!! So, short answer, first try telecommuting, if it is not working for you, then don't waste your money for outsourcing.
(said the wiley coyote !!)
Better to offload grunt-work to those that are grunts !! Any high-schooler can code, and if it's one thing India/Vietnam has lots of, it is those !!
Why not try creating a non-paid or minimally paid internship?
Don't blame me, I voted for Kodos
If monkeys can do it, then just outsource it to them . I see a huge lack of perspective just from that idea alone.
"Monkey work" looks exactly as if monkeys have worked on it.
If you want a high quality product, the world is pretty flat as far as cost.
Ask Slashdot: Is Outsourcing...
NO. Outsourcing anything will never, ever be a good idea.
Want software that was functioning properly and won you a user base to decline and begin losing customer base: yes
Your current support image tarnsihed: yes
Don't care about the longevity of the project: yes
Want money right now over legacy and future dollars: yes
Some 'Ask Slashdot' questions make a lot of sense when you read the full context.
If you are a developer, and your boss thinks programming is "monkey work", I'd be looking for a different job, right now.
I know that's not the question you asked, but that's the answer I have.
These situations rarely work out well, but you're going to have to deal with it for now or find a new job. It sounds like you're going to have to think about how to organize your projects for outside development. I'll let you in on a little hint that will help you: Your software libraries aren't worth as much as you think they are. If you have specific pieces that are outright trade secrets, lock them down, but don't be overprotective of your product as a whole. That should be handled through contracts and litigation.
By all means, hire strangers who get paid in advance and have no personal stake in the outcome.
Who fights harder, people whose country is being invaded, or the mercenaries doing the invading?
The company I work for is going through the same thing (roughly). We've tried to run an in-house development staff, but talented developers who don't expect six figure salaries are few and far in be-tween. In the last 3+ years we've launched 7 in-house applications that have helped us quadruple in size (revenues, profits, and employee size). Within the last few months the owners asked for another 7 projects to be completed, and to start renting out our systems to potential clients. They did not want to hire any more developers, and tasked me with outsourcing our development. They want the work done in 1-2 weeks compared to 1-2 months. So far, our outsourcing replies have all been $10K+ and 2.5 months estimated time, for one of our smaller projects. Looking forward to reading the responses on this one!
Perhaps hire a less skilled developers/QA staff (therefor less paid) and hand over to them the dirty work without compromising vital code and be insured against any attempts for a infrastructure security breach?
Outsourcing doesnt have to be to a foreign country, it happens all the time. There are organizations with big IT departments that choose to pay outside company to do the work. Is that a good idea? It depends, as with everything. You have to realize that you will spend much more time on specifying and verifying the implementation of requirements, interfaces, etc. than if the developers were in-house. If you don't do that then you're going to fail. This increase of specification cost, is due to communication problems with external parties. If you are prepared to stop coding and start managing - why not go for it. Just be careful and precise with requirements, including non-functional ones (performance, etc.). Always mention that you won't pay if it doesnt adhere to the spec and good practices. If you are going to own their code later on, you should also enforce some standards, frameworks used, etc... You do see where I'm going? You can outsource the grunt work, not the thinking.
Your new job is to manage outsourced developers doing 'monkey work'. They will do it badly and you will have to pick up the pieces. There is a huge shortage of strong developer talent out there. Therefore you should have little trouble finding a new job that is a better alignment with your passions. If it were me, I'd be looking to leave the company you are at now.
We have an offshore team in country [X] working on feature work and bug fixing on our enterprise level software product [X]. It is a horrible nightmare. Offshore creates more problems than they solve, they don't respond to explicit direction, they double, triple and sometimes quadruple bill while simultaneously producing very small amounts of actual work. We finally had to cut off their access to source control, and all check-ins have to go through an onshore dev for approval before it can be integrated. We are letting them go in the next week or too. But seriously, it can really be a waste of time and money for all involved.
Free the code... solves the problem of having to worry about it "getting out there". You own the copyright, trademarks, etc. There still has to be a distribution mechanism to your software. Ultimately you can compete with any competitor (seems unlikely there will be one though) who tries to sell your product.
My company sells a unique product line up that any of our competitors could "rip off" easily enough. In fact we may be "stealing" one of our competitors products soon and selling it. The thing is you have to figure out how to do a better job than the competition.
I'm the 90% of this companies existence. Our operation outsources EVERYTHING. Without outsourcing we would never be able to offer the quality or level of support that we do. We have operations in the UK and in the United States all because we outsource. Our competitors can't even muster up a handful of products or provide adequate support. Us? We have hundreds of products and configurations. We aren't selling it cheap either in comparison to the competition. For something you could get for free I think we do pretty well selling it. We only sell free software products and we fund numerous projects.
The point is you should take some risks and stop worrying. Taking small gradual and thought through risks is financially rewarding.
Ohh and we outsource to places like the UK, US, and Europe. It isn't necessarily to pay the lowest possible amount for software development or other services although it ultimately saves us money for other reasons.
Ask yourself this: What are your clients paying you for?
Now, whatever you do, don't outsource that!!!
If you're really good at designing games that meet your clients needs then it may be worthwhile to outsource the actual development of the game once it's designed. In my personal experience this is unlikely, as the design and coding phases tend to be highly coupled, especially in smaller companies. Likely you don't create detailed enough design documents for an outsourced team to fully understand and execute your vision.
First off, if your company was in business to make wrenches, would it be smart to pay someone else to make wrenches and just sell them? Or, would it make more sense to be making wrenches better than other people and sell those? See, one way you are a sales company that isn't making anything and the other is you are actually making something. Same goes for software, trust me.
For a software company you might have some old products that could be pushed off onto some other folks for maintenance. Or, you could consider outsourcing accounting and bookkeeping. But outsourcing the core product(s) that establish your identity for the future is ... well, madness.
The basic problem is the folks you outsource to are looking for a paycheck and have little interest in a product. You, on the other hand, count on a product as a way of surviving into the future. To tie yourself to some folks doing this with little supervision (and don't kid yourself, there won't be anywhere near enough) for the future isn't going to work out well. I have heard of this with a number of organizations and while they can get some cheap development done, it is generally something that simply needs to be redone on a crash basis when customers start noticing defects and quality problems. Also, you will find a lot of outsourced development done exactly to specs - and done in a virtually unmaintainable manner. It does exactly what was specified, no more and no less - but to add some new feature takes a huge amount of effort because there was zero flexibility written into the code.
Yes, having developers in house is more expensive, no doubt about that. For things that are not critical to the business at hand you can outsource and get reasonable results - it may have some problems and may not be as flexible as you would like but you can live with it. Core product functionality on the other hand you better have a lot better control over and instill quality and flexibility in the development team from the start. Can't do that remotely when the team changes every week - which is common for such arrangements.
Although it's not a bad idea to outsource some portions, it's a VERY VERY bad idea to outsource any creativity.
For example. You can use a pre-existing game engine (Unreal) and a hire people to do the art assets, and a different team for the level designs, but everything else needs to be done in-house if you want it done properly.
Likewise you want to have the same people doing art, otherwise you get a lot of different people that can't produce consistent artwork. 2D artwork is much easier done than 3D in this case since most 2D artwork can be churned out by the same person, where as with 3D requires several people.
The companies that screw the pooch so to speak, in outsourcing are when they outsource the game control logic. Many Free 2 Play games that have a pay function are broken by people reverse engineering the weakest parts of the code and writing bots against it to degrade the game experience.
If there is no mutliplayer/online support, then all you have to deal with is pirates, but even then, if you didn't write the logic, then you have to use an off-the-shelf DRM , which is easy to break since the people who wrote the DRM have no incentive to protect your product, only theirs. I've seen this many times. You're always better off mildly obfuscating and destroying the import tables or statically compiling the binary than you are using an off-the-shelf DRM/anti-hacking product.
As a general rule, you don't outsource anything that would allow the outsourcer to strip your branding off and sell your product without you... to china.
Initially, this will save a few bucks. Remember, that what ever you give to someone off shore will become public domain in very short order. This unfortunate reality has been brought to you by every schmuck company that sent programming work to China expecting to gain sales of their software in China.
While cheaper, once you leave the US you no longer have protection for your IP. China does not care about the US patent system, nor does India, Vietnam, or hell even most of Europe. Do you have patent's in every overseas company you wish to sell your products/services like in the US? Get filing!
Work ethic across the pond is very different. Their deadlines are not your deadlines, and they have no vested interest in seeing you succeed. They get paid to dump code by the hour. They honestly don't care if your business dies, some other schmuck company will send them their code to modify by the hour. Also, overseas does not have deadlines like we do for the most part. When 5PM comes, or when their shift ends, they leave no questions asked. Even if a customer is sitting on the phone with them. It is a different work ethic, plus if they are late and miss the buss it's a 4 hour walk home in many cases.
Interfacing with current customers (Save your rants, this is not bias over culture, race, or nationality. It's a communication problem because of language differences) - another nightmare scenario skipped in the "but it's cheaper" logic. Plan on losing 10-20% of your customer when they realize that the person sitting in the meetings with them can only comprehend about 8% of what they are requesting. You can pay a lot of extra money for a good translator, but then so much for those big savings dumping work over seas.
Lock down everything! They will lie and tell you they need super-user access, access to every bit of code you own, access to databases they don't need, etc... They can make extra money selling your stuff, and worse, in may cases Government officials demand that they request and give them access to things they should not have.
-The wise argue that there are few absolutes, the fool argues that there are no probabilities.
My experience is that you will spend enormous amounts of your time attempting to manage this process; a process that will most likely fail. But regardless of the outcome it will take you away from development, engineering and general coding which are the skills you require to remain employed in the field of software engineering. The ability to manage off-site development as a developer yourself is not a skill that is valued highly but your tech skills are valued highly. Anything that forces the former by subtracting the later in terms of time is bad for you. So move to another company.
Now my experience with outsourcing, even with American outsourced teams, it seldom if ever works and certainly isn't cost effective. But as I say, for you that is a secondary issue. I think you are asking the wrong question.
I'll come from the other angle. I'm a consultant developer full-time. In order to be successful, don't keep the guys at arm's-length. Yes, they will need access to core libraries, and anything else that will make their project successful. You will need to put in place adequate agreements to protect your IP, however. Set milestones for them to reach, and have regular (but not overwhelming, once a week should do) contact with the developer to discuss their progress. Verify they will be using technologies that you are comfortable with. The consultant knows better their own work-pace than you do. Allow them some leeway to set their own development schedule, making sure that it fits in with your ultimate deadline. Often, you will not be their only client. It's tough as a consultant to make everyone feel special. I often have 3-5 projects I'm juggling at a time. Of course, you will need to get the warm and fuzzies that they are devoting adequate time to your project, but try to get a feel for their existing workload as well before moving forward with them. Just my two cents.
First, if your boss thinks the programming is "monkey work" then you're already in trouble right there.
With only two of you total, and only one person even potentially capable of reviewing outsourced work, you personally are going to spend all of your time attempting to integrate not-quite-compatible or not-quite-complete or worst not-quite-right pieces that you get from outside. If what you're outsourcing is self-contained pieces you may have more luck, but even there unless you're simply contracting some things out to a small group of outside folks then you're going to see a lot of variation. Finding qualified contractors is always an issue, particularly if you're in the financial constraints I suspect based on the shift from a team to two people.
I can't speak well to the domestic vs. international outsourcing question, but I will say that A) your boss who's outsourcing the monkey work is going to want to put it out as cheap as possible and B) if you're outsourcing UI/content/etc. then there's going to be a lot of cultural stuff that may be subtly wrong in ways that will hurt your products.
Without knowing more about your business this may seem presumptuous, but are you focusing on the right thing? Do you have a good framework for building educational titles/apps/games/etc.? If so, can you improve it further so you can outsource development of complete packages using your framework? Who are your customers, and are they the right customers for what you have and can build?
fencepost
just a little off
I'm curious, if you're outsourcing development what is it that the business actually does?
I mean fundamentally. What is it your company offers your market? What value does it add, if someone else is doing the work? Why wouldn't customers cut out you, the middleman? How does it control everything that matters - supply lines, production, IP, quality, direction, and so on?
An organisation is just that - an organisation. It doesn't fundamentally matter what's in-house and what's out, as long as it's organised i.e. controlled. However, it is dramatically more difficult when it's outsourced.
Consider say Apple. It outsources production but retains everything else internally. What it has outsourced can be very heavily controlled because it's all extremely highly specified and those specifications are of a nature well suited to contracts.
As an IT professional with over 25 years of industry experience, I can tell you that if you outsource you need to be very explicit about what you expect them to do and what deadlines there are. VERY explicit. You can expect no thinking outside the box. I'm going to give you an example. Let's say that due to some mistake on your part that you asked them to build you a car that blows up and kills everyone inside when you turn on the ignition. You would hope that if you did that that the outsourcing party would contact you and say "Did you REALLY want us to build a car that blows up when you turn on the ignition and kills everybody inside? Because that is exactly what you asked for." They won't. They'll either shrug their shoulders and build your death car or they simply will assume that maybe you have a very good reason for asking for a death car and it's not their job to question it.
The quality of work you get from outsourcing is arguable. I work for a Fortune 300 company who I am unwilling to name, but I can tell you that we outsource some programming to our employees in India. We're pretty selective about what we give them, but they do good work. However, the vast majority of the workforce there is not given our most crucial tasks to implement and those continue to be done in our US office. I would say that easily less than 10% of the programmers we have who actually live in India are allowed to work on truly critical tasks for us. Finally, do note that if your software needs are proprietary and a competitor might pay to have access to your code, there is absolutely nothing you can do if someone in a common outsourcing county is willing to sell dumps of your code for cash. Laws are very weak in those countries and they are always in favor of the locals rather than "rich foreigners". In a worst case you'd actually have to outbribe the judges in the country to get any justice.
If you're a company that CAN do something and you fire all your workers that do that thing and then outsource that function your company now can't do that anymore and you must outsource indifferent to the economics. Of course you could rehire those people and build that department up from scratch but that will take years to get right so you lose a lot if you outsource ALL of a given department.
If you outsource half of everything across the board you retain a little more flexibility. Your company hasn't lost any core skills this way you've just reduced overhead.
It's all well and good to call what is being outsourced monkey work but often that is monkey work that people in other parts of the company aren't good at doing. Monkey work might not be that hard but it often requires a certain stamina and precision. Sure, it's the same thing over and over. But you have to do a lot of it and you have to do it right. That isn't something people in other more cognitive departments are used to managing.
There are also major problems with outsourcing in that you are limited to the capabilities of the outsourcing companies.
Look at AMD versus Intel as an example here. AMD and Intel are both pretty good CPU makers. The biggest difference between the two companies is that AMD outsources manufacturing and Intel does it in house. And that makes a huge difference when CPU makers are always using brand new manufacturing methods to produce CPUs. AMD can't make the CPUs Intel makes no because they can't design them but because AMD doesn't have access to the Fabs Intel has built from the ground up and doesn't share with anyone. AMD has to use whatever they can find on the market and at least now that is all inferior to what Intel has built. So even if AMD designed a superior CPU they couldn't build it.
Outsourcing can be great. It's a great way of controlling costs. It's a great way of dealing with new ventures by putting some of the risk off on the outsourcing agent. It's a great of way capitalizing things by becoming a smaller project withing a much larger organization. Don't let me say outsourcing is bad. It's just not always good. You have to be careful with it.
Many companies have almost or actually destroyed themselves with outsourcing. Dell famously almost annhilated themselves with it. They went outsource crazy and not only did they build their biggest competitors up from scratch, but they also ruined their image as a company that would provide reasonable IT support. No one likes talking to a guy in India if you bought the computer in the US. If you tell them your name is "Adam" and they want you to spell it, you are in trouble. Dell nearly killed themselves with that.
So be careful. There is good outsourcing and bad outsourcing.
Here is the best general guideline I can make up on the spot. Does the outsourcing make your company more valuable or less valuable? If you're reducing the core value of your company then the outsourcing is probably bad. Do your customers like or notice the outsourcing? If an attraction of your company is that people get to talk to you, then redirecting customers to a third party they didn't contract with is not good.
Good luck.
I've decided to stop wasting my time responding to AC trolls/sockpuppets... so if you want a response from me... login.
If you don't think that the reason your company doesn't have a development team is important to this question, you're wrong.
You will not get better results by outsourcing development. There are *different* issues with outsourcing. You still have to manage them, define concrete requirements, run independent test/QA, deal with the legal contracts, handle 13.5-hour timezone differences (which makes meetings a royal PITA), etc. I'm not an accountant, but when I add all of those costs up, the $20/hour saved may not be worth it.
Is the company not willing to pay developers properly? MAYBE you'll find cheaper programmers overseas (but see above)
Is the company not wanting to invest in the next product by hiring developers to build it? In that case, you (in IT) would be well-advised to look for a company that will exist a year from now.
--Joe
The choice of out sourcing will depend on your focus on planning and documentation of your modules to be developed.
I have managed an out sourcing business for more than 8 years now, and I often advice clients NOT to out source if they do not have the resources in house to plan, document and review the code and modules.
Normally the best results I have seen is a split team, for ex. 2 developers in house and 3 "remote". Check your project budget, time for documentation and planning.
SCRUM the team over borders, and let the work build up in a controlled manner. Then manage your RISK.
As you will see, the internal cost will grow as your out sourcing resources grow. So make the right calculation on cost and make a long term plan, because out sourcing is not worth while on short projects. And will have better return of investment if the remote team work closely with your team members on a long term agreement.
'monkey work'
Leave. Now.
Contrary to the popular belief, there indeed is no God.
I wouldn't usually say this, but you need to update your resume and start looking for a new job. Its only a matter of time before he realizes that he can outsource you too.
I've seen the follow three scenarios play out, usually its number 2.
1. You find cheap professional quality developers who are available for your entire project cycle and do excellent work. Do they have anyone that can do your job?
2. You find cheap developers who hold it together long enough for them to find a better job. You'll really know your in trouble when you're on your third or fourth set of developers and the project appears to be going backwards. Ends in disaster.
3. You find cheap developers who can't find a better job and stick with your project for the entire cycle. Ends in disaster.
10: PRINT "Everything old is new again."
20: GOTO 10
Since when does Outsource = Offshore?
You are talking about outsourcing the core focus of your business. That is a big fat no. If you have a store and you want to sell things online, contract, outsource, whatever. You make your money on the margins of your merchandise.
If your business is making software, you are outsourcing your core business model. That is a recipe for disaster.
"Don't teach a man to fish, feed yourself. He's a grown man. Fishing's not that hard." - Ron Swanson
I have always thought of IT as a department within a company that does a particular buisness.
Does this mean that the OP's company performs outsourced IT tasks for companies too small to need dedicated IT staff? In this case outsourcing (not offshoring) seems quite reasonable as long as it is to someone you have a good line of communications to with well defined and measurable goals.
Now, outsourcing isn't some magic powder you sprinkle on to a project to suddenly make it more cost effective. Keeping with the presumption that the OP's company performs outsourcing tasks themselves, if they are successful they should already know how to manage contracts, and evaluate outsourced work.
I'm a good cook. I'm a fantastic eater. - Steven Brust
You probably already know this, but it sounds like your boss is basically an asshole.
If you can keep people within your grasp so you can yell into their faces, maybe it could work.
If it's a distance- how often do these things work? How many stories have we read about all the problems of outsourcing distantly.
Though it sounds like you have some more underlying issues here that may need to be examined, also. And don't forget that unless you're reviewing every line of code, you're placing a LOT of trust into these "code monkeys" who will have no loyalty to you.
Vote monkeys into Congress. They are cheaper and more trustworthy.
Ask to see the books. What are the sales been numbers doing? Sound to me like the market is telling you to put the business out of its misery. I'm going to guess that the root cause of this is that the business couldn't make enough money to pay the going rate for the developers, and so your boss is trying to get cheaper labor in India/China/Vietnam/etc to make it work. Sorry, not going to happen. A large firm can make it work by setting-up shop and importing management. For a small business anything you gain in cheaper wages will be eclipsed by additional logistical and project management costs dealing with a outsourcing firm, and the lower productivity and quality of the work done elsewhere (yes, workers in North America and Europe really are more productive).
Why does Adam Smith hate Americans?
"my boss and I are the only ones left"
Forget outsourcing, you need to figure out why there's only two of you left and whether or not the company will exist long enough to complete the product.
If you want to ignore that and concentrate on programmers think of it this way: you're either in a failing company about to go out of business so no one would want to work there, OR your in a start up that some folks might want to work there.
Failing company: you're doomed.
Start-up company: you need to get a quality programmer with incentive to write quality code and stick around long enough to see it through. Otherwise you'll get the "I won't be here next week" mentality with a contractor. And forget off-shoring it. You'll spend more time discussing the work (then correcting what they send you) than you would actually doing the work yourself.
Does your boss do the book keeping or does he hire someone external to do the work?
I am a freelance Perl programmer and companies do outsource to me. Outsourcing is just letting an external developer (in this case) do (some of the) the work. If you don't trust them with your code, you're looking at the wrong people. Outsourcing is not necessarily going to eLancer / rent-a-coder et al and trying to find people willing to do 1000 hrs of work for 20 USD.
By the way, nice attitude does that boss of yours have: 'monkey work'. No wonder he's worried about being ripped off. In the Netherlands, where I am from, we have a saying: "Zoals de waard is vertrouwt hij zijn gasten", which roughly translates to "the innkeeper trusts his guests like how he can be trusted himself".
Perl Programmer for hire
Whether outsourcing IT or software development is a good idea depends on what business you are in.
If you are in, say, the Baked Goods business, or the Tire Manufacturing business, then outsourcing either or both functions is probably a good idea.
If you are in the Software Development business, then outsourcing software development is probably not such a good idea. It would be like a bakery outsourcing the baking to another bakery. If they do that, then why do I need them? Why shouldn't I just go to the other bakery?
- - -
All that is necessary for Apple to triumph is for Google men to do nothing.
I'll see your senator, and I'll raise you two judges.
If you have specs, and can write contracts that guarantees you a quality at fixed price, then that's not too bad.
Best is if you can open a branch in a country where you also have sales offices.
And also, remember, India and China is not as cheap as they used to be.
You might be better off trying places like Bulgaria.
Also, not a good idea to treat those engineers as monkeys. Best if they get the responsibility matching their skills and experience.
Worker retention is a big problem, and if you can't keep them for a few years, you'll waste all your resources on retraining.
My company had some success outsources most of the maintenance work to India for the best part of a decade, but eventually, their prices went up,
their best engineers went on to bigger things, and they eventually learned how to take advantage of our incentive system.
If your company is small, then managing the outsourcing might cost you more than you gain.
Outsource only the things that are not vital to you, and that others might do better such as back office functions, accounting, pay roll, tele sales etc.
Localization is also well suited for outsourcing, if you already have done a good job internationalizing our code.
Subcontracting is also an option, especially if you have a large but temporary project off shore.
Core development in a small IT company does not sound like a good outsourcing option, but could work well for maintaining and supporting older versions of your products. Once they get good at that, you can start letting them have responsibility for parts of your core R&D.
I've been through outsourcing at two companies, and it just doesn't work, especially for smaller groups. I could see it working if you have a large team, you have some repetitive, cookie-cutter development tasks, you've done this task a million times yourself, and you know exactly how to give the task to someone else. And you already have the tests to verify that the product actually does what it is supposed to do. And you have managers already managing that same work internally. This just isn't you.
I strongly agree with other posters here: If these arguments are not persuasive to your partner, you should find another job, and let him find the monkeys.
While I am not a fan of outsourcing, it depends on what your core business is? If your core business is developing and selling software then it does not make sense. Inevitably when you outsource something you loose control. My business is not in the office cleaning / lawn care business so we contract a vendor for those services. This does not effect our bottom line and its the vendor that we choose does a poor job the cost of switching does not effect our core business. If you are software company you could for instance outsource accounting / legal services / even HR since they are not core to your customer satisfaction.
From your question it sounds like you would be outsourcing your core business. To use an analogy... it would be like the local pizza shop outsourcing the production of their pizza to Domino's or Pizza Hut. That doesn't make sense. They would loose control over the quality of the product that they deliver and need to rely on a 3rd party to come up with and deliver on innovative new pizza recipes.
It sounds like what you need to do is figure out why you are down to two developers and work on that issue, if it is an issue at all (maybe you only really need two developers). But outsourcing your core business it typically a sign of other problems and will only make additional problems down the road. Hope that helps and good luck!
Isn't this like asking turkeys to vote for Christmas?
What a strange place to ask this question... unless you're just looking for us to cooborate your already fixed opinion. Of course Slashdot thinks its a bad idea; this place is full of programmers who don't want to see their jobs outsourced. Might as well ask oil executives their opinons on solar energy and alternative fuels.
(Of course, someone will now contradict me by posting in favor of outsourcing. We're not just geeks; we're contrary Slashdot geeks...)
There's a big difference between designing software and writing it.
If your specs and spelled well, yes you can have someone right out of training for the particular language your using write the software.
I know because I've done it. All our newbie entry level guys followed the specs and created the functions or methods that we needed.
Like write a function that takes a character array and strips out anything that's not alphanumeric and returns void.
Basically give them specs that look like a first year programming assignment.
Then when they get better, they would get some design work - like write a module or class that will clean up data streams and let them go off and design individual methods.
It's doable - easily and it saves a shit load of money not having to have an entire crew of senior level developers. Also, retention is higher because the senior guys aren't doing monkey work. I mean really, how often do you really have to code a GUI before it just becomes monotonous grunt work - even with a framework?
Whether you're outsourcing development central to your line of business, or whether you're outsourcing route work that is not a core competency.
Organizations that outsource core competencies dissolve rather quickly, because essentially the only value they provide is as a virtual organization that resells a service some other firm provides. One of the primary things I learned in B-school is: you never, ever outsource core competencies. But, you're crazy not to look at outsourcing the rest of the work.
Be very, very careful what you put into that head, because you will never, ever get it out. -Thomas Cardinal Wolsey
Executives can sometimes be idiots with outsourcing. They just see one hour of development costs X to be outsourced, and Y to be pay someone here. They don't take into account an outsource developer will take 2x or more time to do the same work, usually riddled with bugs, and done in a hackish non-organized manor. Plus I had the benefit of seeing some accounting work from an outsourced company, and they billed way more hours then the amount of developers they actually have.
My company recently spent about half a million dollars to let an outsource company design and develop a "Next-gen' system, because apparently our CEO thinks we are all idiots. The project was suppose to be done in October of 2011, and they have yet implemented using the software for even one customer, and the entire system sucks. More vaporware then actual software.
I know with a good team of 3 of our internal developers, we could have got the project done in 3 months, and it probably would have been awesome.
But our CEO still just see's, well we spent X development hours on this project, if we would have done this internally it would have Cost 4x more.
Hello McFly, wake Up!
My Advice. Quit and find another job.
the logistical problems you raise (access to a shared repo, internal libs) are non-issues. there are many ways to resolve these issues ... although it may mean new tools and processes for you.
as to whether it will save your company money / get the product out faster, that depends on so many factors that it really can't be answered. how "monkey" is the monkey work? will you get a good team off shore? how good are you at managing them? how well structured and documented is the project now?
at the very least, you and your manager can kiss any individual work you might think you are going to get done goodbye. your new job will be directing the off shore team.
You need to be willing to put in an inordinate amount of effort to write specs, answer emails (at 2 am because if you don't answer early, you lose a day of work), perform code reviews, and generally mentor the consultants up to a level of understanding that is needed to do actual development. Personally, I don't feel that this amount of effort is worth investing in a consultant. I would much, much rather invest my time in mentoring a new hire that just graduated--the effort will likely be the same, but I think it would be more satisfying training a fellow employee than a consultant that is supposed to be getting paid to do know how to do heavy lifting.
..and send it over to us.
We shall be saying 'yes' on all the conference calls, and in all the emails, and only later on when the deadlines crunch will you discover we were programming by Google search, cut and paste, and didn't really know anything to help your project.
We will have been promoted onto another outsourcing company by then, as senior developers, our CV and skills sheet with be 4 pages long with every buzzword from the world of Java, and we will still not be able to write hello world, without you doing then needful.
Thank you and come again,
Your offshore developers.
You have no hope in hell of keeping a product going. You have no way of enforcing your deadlines. You're basically middle-men who may or may not be able to cajole your supplier into doing what you need when you need it.
The projects I've been on that have used outsourcing usually required a fair amount of management to get them to do well-defined tasks to spec, and deliver that on time and working as expected. What you're describing sounds like it simply can't work.
If what you do is primarily make software, and your boss calls that the "monkey work", then you're screwed. That's not really a strategy which is going to work, which means your small IT company will implode in a while
Seriously, what is left for you guys to do? Collect the money and laugh all the way to the bank? What value do you guys add at this point?
Lost at C:>. Found at C.
I've done a bunch of consulting for the K-12 public sector and I have to say that educational software is some of the most poorly thought-out software ever (from an IT Admin's perspective).
Much of the software's installation guide goes something along the lines of "go to each computer and put in the disk", making deployment a massive headache. Those that actually come with a networking component usually require Everyone/FullControl permissions on the server share because the software was coded with the assumption it should have access to everything. Furthermore, I recently saw one where the application had a "server" component, but that component had to be manually run from a logged-on console session on a server, most kinds of automation would fail.
I always assumed that essentially off of this stuff was already outsourced due to the abysmal quality across the board. I guess I'd argue to keep as much in-house as possible so things don't get worse, but that would be pretty hard.
I know this comes off as a rant and it is, but if you write educational software, please actually think about the people that will have to deploy and run it while you're designing, whether you code it yourself or send it to India.
I've had 3 experiences with this in working for small to midsize organizations. In each of these limited experiences, the off shore dev team did the following:
1. Ignored security (Download your code from our anonymous ftp server here and other such nonsense)
2. Largely misinterpreted the requirements
3. Required significant rework on multiple iterations to come closer to the requirements
4. Saved us little to no time due to rework, increased management needs, and difficulty in communication
As always, YMMV, but my experiences have been BAD.
Programming is about team work, where everyone takes responsibilities and each people supports the guy next to him not giving the trash you don't like to do to other people. It will end up costing the same ... My guess is that you don't have too much experience in team work.
Why not find a team somewhere around the world where salaries are smaller, try a pilot project first, see how you integrate with the team. Still be prepared to spend time and energy, at leas initially. I would avoid India/China ... from my experience (it's hard to find good people. Usually there's a good one which takes the tasks and give it to a real monkey in the back).
For instance, we are in a similar situation and found a team of people, trough some friends, somewhere in Asia. We are now getting the people into our company for few months to familiarize with each other, TRAIN THEM, mingle. Get to know them, and afterwards communication will be easier. It's a risk we assume, but we think it's better that just shoot the task and wait for delivery. That doesn't work. We expect to pay as much as half of a programmer inside our company, so it will be a win in the end.
Thinking in terms of getting rid of monkey work is bad business and not how a team should perform.
It sounds like you are concerned about the code base walking off and so you are going to try and limit access by exposing only APIs. Your outsourced programmers will be hamstrung by the restrictions and unable to review the mechanisms behind the APIs. What then? You'll be spending an inordinate amount of time on support unless you get some damn good outsourced programmers and have much better comments than most.
I can't picture many scenarios where this would be a more cost effective or productive alternative to hiring someone competent and trustworthy to work in house on your monkey business.
Millions long for immortality who do not know what to do with themselves on a rainy Sunday afternoon. -- Susan Ertz
ANY change in organizational technique will have a learning curve if one is not used to it. Rather than focus on a good-versus-bad response to the outsource question, merely point out that it will likely take a few years of practice working with an outsourced team before there is a payoff even IF it's the "right move" in the long run.
Table-ized A.I.
Allow me to add the CISO's view.
We have a very good and very eager development department where I work. Despite that, the powers that be decided to outsource a very critical online application development to a third party who has allegedly more experience with this kind of online presence than our developers do. I say allegedly because of what transpired.
The project started roughly a year ago. We built specs and I added my security requirements as usual. I didn't hear from the project manager until November, despite frequent inquiries. In an in-house development, I could have marched over to the developers (which is not the "due process", mind you, but I could actually do it!) and ask them for progress reports. I can not do that in an outsourced development where I am fully dependent on the project manager and his ability (or, in this case, lack thereof) to give me progress information.
In November, I was informed that the project is not quite on track but it HAS to be rolled out in February. By that time, I did neither have any beta (or at least alpha) that I could even remotely start to define security tests for, nor anything else, not even a final content sheet. Of course, I did write my usual reports about it, but that only covers my ass, it does not give me a more secure project. In a nutshell, I don't have a problem with that, but my company does!
February came and I still did not have a finished product in hand. Security tests for a project this size takes at the very least a period of a month, considering that I have to hire auditors, have them conduct audits and compile and evaluate the results. And that doesn't even include necessary fixes yet. In short, to make this whole security process even remotely sensible, I'd have to have this product in hand at least 2 months before the intended launch date. In an in-house development, I can at the very least get the unfinished product and define the testing parameters, maybe even hire an auditor and have him test the almost-finished product instead so we can at least launch with some semblance of security.
In the end, we launched a completely untested product because the launch date could not be postponed. I wrote a report, detailing that I could not test it and hence are not responsible for any failures, which was nice for me (hey, I don't have to do my job and are still out of any obligation), but it's a catastrophe for the company should the product prove to be insecure, gets hacked and we lose a ton of critical information, both internal secret information as well as customer data.
This is what's my horror when it comes to outsourcing. You depend even at C-Level fully on your product managers without too much of a chance to reach down the chain and yank it.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
On a professional note: I've been on a few teams where parts were outsourced, as we shook our heads in sadness at what got delivered. Now I lead the outsourced efforts, and things are much, much better.
On a personal note: I routinely use elance.com for small project help.
It's all in how you do it.
1. Do not go for the lowest bidder. Go with subject matter/platform experts.
2. Do not allow them to exercise any discretion. I mean do not leave any platform decisions to them. They will make decisions on what's best for THEM not YOU.
3. Thoroughly review their work in a regular basis to prevent surprises. Yes, this means MORE work for SOMEONE at your office. But you won't have to pay X people for multiple years, just a few months.
4. Don't outsource work that will take years bring them in house.
5. Don't expect it to be cheaper or faster. But you can expect that more work will be done. If you did tip #1 correctly, you'll get it don better than you an do. And that alone is worth it.
Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
Then, -- come on folks -- you know the answer is No. How many times do we have to go through this?
Now, if you "make games" and you outsource it -- Well, then you don't actually "make" shit, you're just worthless idea men. No wonder everyone bailed. You can outsource art / assets, but not the codebase (that's just daft).
Offsite Coder: Herp! Imma make U a gaem enjun, for thousands and U kan maek meeeluns for it! Iz prommis not be violating any IP law of my country. Derp!
There are thousands of indie game artists / composers / devs dying to get a chance to actually join a studio and make some mulah working with you. Many create stuff just for free. Ask around: "Hey, you wanna get paid? Show us a portfolio and Join us." Hit up the game modder community. Put out the word you're hiring. Outsource? Seriously? Might as well go die in a fire if that's your best option.
Otherwise, you're trying to be a game publisher not a developer. Go whine about it on a Kickstarter.
This topic has been done to death for years now.
There are only two reasons why offshoring development work is a good idea: the technical talent is cheaper per hour (the bean counters like that), and you can do development 24 hours a day if for some crazy reason it actually helps.
Arrayed against those advantages are the issues with quality, the loss of internal technical knowledge of important systems, the additional time required from analysts to create even more detailed specs, the difficulty of running agile with a team in opposing time zones, the general inefficiency introduced by managing and communicating with remote teams (especially ones with language issues), and the loss of lower-level techincal staff that can graduate into more senior technical and analytical roles in your company.
The reason it's been popular is that the short-term savings are easy to project, and the long-costs are easy to ignore.
I am the CTO of a fairly small software company that has tried some limited offshoring (although I did not think it was a good idea), and encountered exactly the issues I describe above.
Monkey work? I think it explains why you are the only two left.
Yes I think it is a GREAT idea for YOUR company. And when your company completely screwed it up, your client will either pay my company to fix the mess OR be one less competitor for my clients.
Maybe next time you won't ask competitors for business advice.
I am not just being incredibly funny here (shut up), I have had many a request from the contacts of clients who came to me by reference with the question if I could put that last finishing touches on an outsourced project. Yes, yes I could, if you last finishing touches is another way of saying put the thing out of its misery.
I have seen web applications where EVERY page included EVERY bit of the code, not via includes, copy pasted. So that the menu code existed complete in over 40 or so files. If you don't catch the full horror because you can't imagine someone so stupid, yes, that meant changing a menu entry (of course they were hardcoded) meant changing 40 files. But don't worry,to keep you from getting bored, over time the menu code had changed so a simple search and replace would NOT do the trick.
I have seen web application meant for heavy concurrent usage where the ENTIRE user tabel was loaded into memory to then be filtered for the user attempting to login or perform any other action. Yes that was amazing to watch during beta with a dozen users. The plan was that at launch the userbase should be between 100k and 200k based on other sites developed inhouse. And what they were worry about was memory.... HOW ABOUT FRICKING LOAD TIMES. They could even grasp that even with just 1 concurrent user and 100k users in the DB, it would still not exactly be lightening fast.
There are far more stories and some which you just wouldn't believe if I told you. Mind you, it doesn't mean using a native IT company is any better. Major Dutch IT company that gets all the big contracts forgot to include any indexes on system used by a large temp agency, they only ever tested with 1-2 records in the database before the bug list was so big testing was stopped.
There are some REAL screw-ups in IT but at least with locals you can get them in the office and laugh at them. When it is another culture on another continent in a totally different timezone. That becomes a bit harder. And maybe there are bright Indians and Chinese people. Maybe... but maybe the bright ones got better options then work in a coding sweatshop where the only criteria is low price? Maybe the bright ones are working on their own stuff for their own companies?
Basically outsourcing means going for the lowest bidder. It all sounds very attractive but ultimately the problem with outsourcing is this, your coders motives are NOT inline with that of your company.
An internal employee should care about your company... well same goes for the outsourced guy, he cares, about HIS company. Every problem you have just is more money for them.
About the only outsourcing that works is when a company basically buys a product from an other company, the way you outsource your car needs to a garage etc etc. And there is a reason large fleet owners have their own garages. Just think about that for a sec.
MMO Quests are like orgasms:
You may solo them, I prefer them in a group.
I used to work with a team of developers, but for reasons outside the scope of this question, my boss and I are the only ones left. My boss says that our new strategy is to use outsourced developers to do the 'monkey work' for us.
I image that your boss's description of the work previously done by other members of your development team as "monkey work" reflects his feelings not only for the importance of that work but the (former) employees as well and explains why it's now just the two of you. I recommend finding another job before he decides you're a monkey too.
It must have been something you assimilated. . . .
I have worked at two major tech companies where they've tried this. At my last company, the COO used to be a senior exec at an outsourcing firm. Regardless, the results in both cases were the same: a waste of time and money.
If you're going to pay an outsourcing firm peanuts, you're going to get engineers who lack the necessary skills. You and your managers will spend an inordinate amount of time hand-holding these contractors. If you don't, you'll get really poorly written code. It may work, but it'll be completely unmaintainable spaghetti.
That's assuming you'll get a finished product. The turnover rate for outsourced engineers is ridiculously high. The moment these guys hear about some other firm that pays another dollar an hour, they'll jump ship. Every 6 to 12 months, you'll be training new people to replace the old ones.
There's also the question of logistics. It's hard to communicate with people who live on the opposite side of the world. It's bad enough that things get lost in translation, but when two groups get together for a conference call when one of the parties should be in bed, that's just not productive.
"...today consumers have been conditioned to think of beer when they see a bullfrog..."
If the boss thinks he's getting any savings by offloading menial tasks to an offshore consulting team, he is sorely mistaken. It will still be an ongoing cost, without even considering the rework that will need to be managed and done.
This type of work can almost always be largely eliminated through better automation and better engineering practices.
I've had some challenging experiences with offshoring.
I used to work for a startup, making cheesy hosted mobile websites for clients. Because we were having issues scaling up, we outsourced to a bunch of guys in Poland, who were good engineers and meant well. But we soon learned it wasn't the silver bullet we had hoped it to be, as the big problem with software engineering, is that it's a highly social, collaborative activity, and you get a lot less bandwidth to talk to somebody and manage them, if you're doing it over MSN Messenger, than if you simply walked over to them and talked to them in person. Management's response was to buy them out; forcing them to have some more skin in the game did help a little, but didn't address the underlying problem -- management's lack of understanding of the challenges of remote working. OTOH, my current gig has developers scattered all over the world, but we make it work by using the right tools, the right processes, and having the right attitude.
Now talking about __outsourcing__, that's a different kettle of fish.
If people don't have any skin in the game, they often don't give a fuck after they take your money. Take, for instance, a highly unethical major Indian services company who shall remain nameless (I don't want to get sued) -- they bid for work with my previous employer, by sending a top-notch, shit-hot technical guy (who was there to clinch the deal) who assured us that WHY YES, they could indeed develop custom content types for Red Hat CMS. So then after that, they sent an engineer, who looked (and smelt!!) like a garbage picker from the slums of Kolkata. After two weeks of beavering away (and one day before leaving), the engineer comes to me and asked me how to download Tomcat. They didn't last long after that.
So no -- you have to be super careful, get references, do your homework, make sure all your tools and processes are up to scratch, and then think VERY carefully before you contract out work to overseas companies.
Hi, I am Bob from Texas. I think you are becoming to be unfair to Indian programmers. Indians work diligence at programming trade and have many skills of which may be offered. First place, they speak fluency English. Also, they make for hard work for modest pay. I think you should be finding them to be good workers with code of great significance.
In my experience software development in the 90s generally meant 'here's an operating system, write a bunch of code to do stuff'. We'd write everything other than the basic OS libraries that came with the system.
Today, we typically 'outsource' much of that work by finding libraries that people have already written and using those. The majority of development work is tying those libraries together with the logic required to make a particular application work. No-one in their right mind is going to write their own database when they can just use SQLite, MySQL, Postgres, the various NoSQLs etc, unless they have a specific requirement they can't meet.
So pulling in proven third-party code that does what you need can work well. But hiring them to implement code that you've decided you need to produce from scratch? Not so much.
There are two main factors to consider.
For once, the actual work. Is the code you need written strategic for your business? What is it's expected life cycle? Is it a relatively isolated module? How much expertise or know how from you own business or company policies does it imply? You just state it's "monkey work" ... well, what's that supposed to be? For me there's no such thing, If you need code monkeys then it means to me you produce crap software, in that case who cares, get the cheapest monkeys you can find.
Then there's the professionals. Do they have the required skill, commitment and availability you require? Can these be verified somehow? Again, if you just need monkeys then why bother? Just go ahead for a walk in the zoo and pick the cheapests you can find. If your requirements are high then you should choose very carefully, and it would normally make a lot of sense to seek long-term relationships or even hire them permanently if business permits.
As usual with slashdot questions ... there's no real answer. It lacks all vital details.
I used to work with a team of developers, but for reasons outside the scope of this question, my boss and I are the only ones left.
See, I find this is a very important detail, specially in relation to your question, and definitely in scope. What's the problem with coders in your company? If isn't in scope and you don't want to explain why do you even mention it? It just suggests your boss has a hard time holding a team together, and in that case the question would be kind of irrelevant.
for reasons outside the scope of this question, my boss and I are the only ones left
If these reasons are part of why you can't replenish your supply of programmers, maybe you do need to bring them in scope.
Better programmers want to be a part of something. That isn't available at an outsource programming shop, other than for those who have an equity stake in that company. You just won't have as many of the better programmers, if any at all, working on your project.
now we need to go OSS in diesel cars
...
I'm an "on-shore" dev for my company which has hired contractors from India to work on our flagship internal product for literally years now. I can add nothing that hasn't already been sung from the chorus of outsourcing detractors, except the old saying, which I haven't seen posted yet: If you think it's expensive hiring professionals, wait until you hire amateurs.
Thanks for the DIABLO III login issue update! Much Appreciated! ;-)
I work as a consultant through a consulting firm. Sometimes I'm in a "staffing position" where I go work onsite at a client and sometimes I work with our internal "Development Center" for projects that have been farmed out to us. We are all American and we have people all over the country -- many working remotely. We provide top-notch work and we often have clients ask us back for new projects. And, we're not cheap. Some of our clients give us restricted access to their source control. For some projects we host the source control. We can provide project management services if necessary. You can pretty much have as tight or loose of control as you want. Our clients are happy with this work.
I have also worked at several places (previous to this job) where work was sent to another country. I've been involved with at least 5 projects where that happened. IT NEVER WORKS OUT. On three of those projects, I was brought in specifically to fix code that was written (poorly) by coders in other countries.
So, like the others said. You get what you pay for. And paying for cheap workers in other countries is never worth it.
If all you're going to make is generic one-off easy to create stuff, then sure. But once the product gets complicated, it doesn't work very well. Anything that requires domain specific knowledge turns awful real fast when consultants are involved, because if you can't get the same consultants all the time they're starting over in that area and won't know the business at all.
You see this all the time in government. They think its cheaper to have consultants build something from some consulting company that lowballs the estimate. Assuming that what they get actually works at the end of the contract (which itself is a crapshoot), there's nobody in the government with the slightest idea how to support it because all that knowledge is at the consulting company. There's probably flaws due to mistakes in the requirements and specifications that nobody at the consulting company could catch, because they don't know how the inner workings of the government function and just built what you asked for (which is probably not what you needed).
Now when it comes time to fix it, that consulting company has you in a very bad place. Going anywhere else will be prohibitively expensive because the new people won't know anything about either of those things. So now they can charge through the nose for maintenance.
A good in-house team can actually learn the business AND the code, and will be a lot more capable at everything then consultants are, assuming you hire decently skilled people. They'll be able to learn enough to know what you need when you don't know how to ask for it, and will be able to say "no" when you ask for something that's totally unrealistic. Best of all, they might actually care about the success of the company rather then just seeing you as a place to extract more contracts out of.
You can suppliment that team with an occasional consultant when it makes sense (and it does sometimes) or students for more routine coding jobs, but you can't replace having internal expertise. That's been my experience in years of building things with less people and money for one government department, while others try to use consultants to "save" money and wind up massively overbudget with tools that don't actually work very well.
-- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
I find that a lot of commenters are over simplifying the situation. The value of a product or company comes from the the competitive advantage the company can offer, and that needs to be retained internally. Does that come from the two principals of the company? Or does that rely partly from the contractor? An architect wouldn't go design a building, and manage the actual construction - because the that's not the core competency. The OP has not identify what "monkey work" is and that has to be determined. The other question is, can the company retain the employee to give them enough work so the company stay afloat? Commenting on the company should just shutdown because there's only 2 people is plain silly - startups start with 1 employee, business goes up and down. May be the principal do have some business knowledge that keep them around, there are still opportunities there, but they need to build from ground up? Meanwhile they don't have cashflow to fund internally employees? It almost sounds like using contract developers is universally bad - well, then why do they even exist?
I work for a company whose software development tasks are primarily as implementation/customization specialists. We take existing code and then add additional features and/or customize existing ones. We make it a huge priority to make sure that the solution is developed as if we were the client's employees (or better) in that we evaluate changes to make sure the changes meet the intended end goal and that the client's interests are protected (test everything very, very well before delivering).
There are ethical companies such as ours out there.
However, getting good contract/outsourced help is not cheap in time or money. As a prospective client, the thought processes and preparation as if you were going to be doing the work yourself still have to be performed so you know what questions to ask and to know if you have received sufficient answers.
You won't save time, but if you can find a good vendor to perform work, you can usually enjoy the benefit of leveraging resources that are specifically skilled for the requested task/project.
I used to work with a team of developers, but for reasons outside the scope of this question, my boss and I are the only ones left.
I suspect this actually gets right to the heart of your problem.
Just look at the other responses that basically say you boss has no respect for what you do, you should GTFO NOW.
the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff
Your boss is making a financial argument for outsourcing. The only way to counter this, if you want to counter it, is with another financial argument against outsourcing. Despite the great many technical reasons not to outsource (and a few possible reasons in favor, perhaps), the decision that was made was a financial one. So if you want to argue against is, you need to be arguing in the same domain.
Here's my financial argument in favor of not outsourcing.
When you outsourcing, you are paying an external company to grow the necessary knowledge, skills, and ability to ship a software product. You are accruing zero of these assets to your company. When you have completed the project, you have generated one tangible asset, and zero intangible assets. All of the intangible assets are now owned by the party that you used to create the product. Furthermore, you have increased the value of the vendor, and thus you have increased the rate which that company can charge. And you can bet that this will be passed on to you in future product negotiations.
Inversely, with an in-house staff, the so called "extra cost" of staffing and benefits, if your environment is healthy enough to lead to employee retention of a reasonable level, leads to the accrual of in house knowledge on a wide range of topics. These include, but are not limited to: software development methodologies, planning, user interface design, software quality assurance, scheduling, testing, source code control, building reusable components, and many more. As the team matures, future products cost less.
So, in economic terms, you can outsource and pay a vendor less for the current project, adding value to that vendor. This will result either in escalating costs over time with the same vendor, or the continued use of a new vendor, and each new product will bear the cost of being a version 1 product with no institutional knowledge or economies of scale. Or you can keep things in house, pay more up front as the team develops the initial products, but with proper management you'll have a team that will produce products faster, with more personal investment, and higher quality, with a much smaller incremental cost over time.
No!
Hey, folks, outside US, there are so many countries and cultures, you simply cannot say that one bad expierence with outsource, means that all people from other countries works bad, there are bad programmers on the US and in the rest of the world. I worked all my life with outsourced projects, and we did even better work than the ones done in US sometimes. I 'm from south america.
About ten years ago, I was assigned to be the in-house developer overseeing a couple of outsourced projects. One went quite well, but the other was a constant struggle. Since then, I have dealt with several other projects that were outsourced, with varying degrees of success. The simple answer is that it can work, but often doesn't. Here are a few things to keep in mind.
- Don't just go with the cheapest. You can save money by outsourcing, while still getting competent developers. Make sure you meet the developers - or at least the leads - before making your choice of consulting company. In the long run, it will cost you a lot more if you end up having to rewrite everything; and believe me, that definitely can happen. Bear in mind that even if the consulting company agrees not to charge for bug fixes, it still costs you money if the project goes way past the scheduled end date.
- KISS: Keep It Simple Stupid. As always, make certain your design is as simple as possible, but no simpler. The simpler and more straightforward a project is, the less likely that consultants can really screw it up.
- Stay on top of the developers. You don't have to micromanage, but you need to be aware at all times what they are working on. They can very easily start going in the wrong direction. Talk to them every day.
- Be very, very clear in your instructions. Never assume that they understand what you mean, especially if they're from a different culture. Be literal, elaborate, and even pedantic.
- Code review, code review, code review. If anyone consistently turns in unacceptable code, have them removed from the project.
- It's fine to give them access to your libraries, etc. In fact, it's best to have them use your source control system, but they shouldn't be able to delete anything. This way, when they inevitably make a stupid change that breaks something important, you can just roll back.
- Assign the easiest/least important things to the worst developers, moderately difficult/important things to decent developers, and do the most complex and important things yourself. This might seem like common sense, but you'd be surprised how many managers treat all developers like we're the same.
- Keep track of how much each project really costs in terms of both time and money. Once you have done one or two this way, you might be able to determine that some projects should be outsourced and others shouldn't. You'll be a lot more likely to convince your boss if you have actual numbers.
Well, I hope this helps. Good luck!
Start now with documentation. You need to document your current productivity. How many features did you produce last year? How many defects did you introduce? How often did you release? How many lines of code did you write? How many developer hours per year did all that output take? Establish a basis of how effective you have been with on-site developers.
Then you start planning. Be very explicit when you write up the process you want them to follow in your Statement of Work. Do you want them doing Test Driven Development? Specify it as completely as you would for your own high quality code, perhaps a statement like "> 95% code coverage by automated unit tests, code complexity must average < 2.0, static code analysis will be performed using pmd and must report zero warning-level or higher defects, all code subject to review prior to acceptance and payment", etc. Write the master test plan at this time, and get them to commit to it as well.
Your goal at this time needs to be to ensure the code is of good quality up front, rather than planning to complain about it after they call it complete.
Then, get ready to write more documentation. You'll be writing a lot of specs for these people. There will be many questions on your specs, so be sure you have the time to spend exchanging conversations and emails. If you're 8-12 time zones away from the development team, you get one shot per day at asking and answering questions. This means that you have to be "more explicit" up front, or you'll spend a month having a conversation that could have been answered in a day. As we all know, being correct and complete in your up-front designs is an almost super-human task, so plan for delays to get them cleared up.
In your specs you'll need to be explicit when you include non-functional requirements such as performance, stress testing, logging, minimum production machine requirements, etc. You might want to provide them with a test environment that they can run to prove they're doing OK.
Consider traveling to their site and working with them for the first week to jump-start the project.
Once things are underway, you need to be sure their code is continually of acceptable quality. Plan to spend a lot of your days reviewing their output. To keep them from going off the rails, you have to make sure that you're getting it in a timely fashion. In your SOW, specify nightly code check-ins so you can do daily code reviews. Then do them. Be sure to review the tests as well as the code. You're responsible for sending them your feedback as quickly as you can.
Next, compare the output you get after the code reviews. Are they taking your advice in a timely fashion? Are they following your recommendations? Is the architecture still sound? Is the code maintainable, extensible, legible, does it have all the -abilities of good code? If not, be sure your SOW specifies escalation paths and penalties or whatever for non-compliance. Get your boss involved right away if you see the train leaving the track.
When you finally start getting your code drops from them, be sure to have your testing team start on it right away.
Now you finally have some data you can use to compare against your own output. How much money did you spend per feature? How long did it take them to write them? How many defects? Deploy the code to your beta users and see what complaints they have.
And be forewarned: this means your job will shift from Engineer to Technical Project Manager. As you're already an engineer, this will probably not be an easy transition for you.
Be sure to periodically review these results with your boss. I would warn you now that your opinions will differ. You may say "the code is crappy, hard to maintain, fragile" or whatever, but his goal might be "they shipped on time, on budget, and the customers aren't complaining about the bugs, so it's good enough for the shareholders." And don't forget to include all your own time and expenses for everything, including the planning steps, when adding up the final total.
John
Obviously, every situation is different.. doubt that needed to be said, but it is best to get that caveat out there. I recently started at a company that has been outsourcing much of their development. Our lead dev here in the states is a native-born Indian, so he probably has an easier time coordinating the contractors than most state-side organizations. Unfortunately, he has found himself spending the majority of his time coordinating and managing the over-seas developers that it really cuts into his productivity. Bear in mind that this is not a simple management issue.. obviously a lead dev needs to spend time managing her team, but they require near constant supervision to ensure that they stay on task and don't waste time on dead-end tangents. Taking into account the time difference, it can be very difficult for him to stay on top of them while also working with the rest of the organization stateside. Being a very experienced developer and team-leader, he recognizes that the cost savings result in significant hidden overhead. That is the primary reason why we are now working on building a state-side team. Considering he already speaks their language and knows their culture, unless you have similar advantages you will probably not find yourself having an easier time than we did.
Bearing that in mind, I think your hesitation is grounded in logic.. in my humble opinion, you would probably get better results by fishing in the market of community colleges.. find some young, starving students and train them into what you need. That is a strong, long-term solution that will probably take some time to really bear fruit, but should have similar costs and results in the short-term to an outsourcing strategy. Treat them well, and you will have a loyal, dedicated, and competent team.
We are all monkeys in the eyes of God
Tell him hes a cheap douchebag who doesn't need to be paid 100k+ per year for managing one person ... how is that even a department ?
Better yet print this out and hand it to him "We here at /. think your boss is a cheap douchebag who gives away good programming jobs to overseas non english speaking programmers who don't have a clue and when the shit breaks feel free to call us there's no hard feeling we'll fix all that buggy code for double our normal price of course because we have to figure out just what in the hell Ishinihabinhabadad fucking wrote for code"
Thank You for you support!
Never hand to a contractor anything you would not be willing to hand to your competitor. Granted I have heard managers talk about how iron clad the contracts are but the reality is that after the contract is over they can go anywhere (competitor) and they know your code, its strengths, weaknesses and how to make it better and regardless of how honest they are they cannot forget this information and will tap into it whenever a problem arises. So basically you could be doing your competitor a favor by training their next employee. The best article I have read about this is http://forio.com/resources/article/the-pitfalls-of-outsourcing-programmers/ The chocolate box example is priceless! As a chocolate maker you don't outsource your chocolate making (handing out the recipe and possibly endangering your reputation if a batch of bad chocolates go out) you outsource the making of the chocolate boxes.
We work with development partners. We use GitHub as a shared repository - works good, and separate repositories can ensure nothing goes to production without you pushing it. Manage permissions correctly to prevent them from going places you don't want them.
On the merits of outsourcing in general, in our case it makes sense. I can't make sense of your case.
- The Kessel run is for nerf herders. I can circumnavigate the entire Central Finite Curve in a lot less than 12 parse
Similar story for me and my previous employer.. there were only two of us programmers and a load of foreign outsourcers. Now, the issues with outsourcing were only part of the reason the company went down hard in flames (I won't get into those other reasons..).
We had some good outsourced people, intelligent, experienced and spoke good english. We had many more that did not fit into that classification. Here is what I noticed, by comparison:
When I've gone to interviews for other jobs where multiple other applicants where also there, I noticed about the same rate qualification among those people that I saw with the outsourcers the company I worked at actually employed. The difference being, at those interviews, 99% of those applicants were rejected for obvious (to me and the employer, not the applicants..) reasons.
The point is, that it seems people are much more willing to hire an outsourcer without properly checking them out. And so you end up with a lot of bad work.
That's all on top of the difficulties with language and culture, time zone differences, trying to communicate through skype or whatever instead of in person, etc.
I'm just glad I'm not staying up working all night trying to manage a team split across india, russia and china, and trying to make impossible deadlines; and then dealing with the client the next day trying to make excuses why something can't be fixed for another 24 hour cycle because we didn't want them to know everything was being outsourced...
Outsourcing is not the money-saving grunt-work avoiding hail mary pass so many people think it is. Its a potentially useful resource that has to be used properly.
-- Senior Software Engineer, Attorney appearance services, locallawyerapp.com.
I assume that by ‘monkey work’ your boss means the coding itself and not any of the design. If that isn’t what he means, then that has already been covered.
I outsourced several small custom add-on components for our core application. These components were not going to be used by any other customers and were not going to be included in the main product. I don’t know why you would outsource your core development – also already covered here. But if you are set on outsourcing, here is my advice:
1. Develop a specification with all features and functions clearly defined.
2. Design the database schema (or whatever data storage design you need).
3. Prototype every screen. Create full up screens (even if they are just images) with the same controls on them that you want to see in the product.
4. Spell out every user input and result for every screen.
5. Establish the platforms – all development tools, OS’s and languages should be spelled out up front.
6. Review often – catch problems as soon as possible.
7. Document every variance. If they can’t do something the way you wanted it, document it and the agreement you came to.
8. Pay for feature completion, not hours.
9. Protect your Intellectual Property.
1. Look into existing empirical studies about outsourcing. You are not the first company doing it. If you don't do this, you are conducting an experiment about outsourcing. Please get someone to study it in that case, so when everything fails, you have at least recorded it.
2. Do you want to buy "hours" or do you want to buy a product. If you buy hours, you will get hours. If you pay per hour, it will be their best interest to tell you as many hours as possible. Best way to do this is to write crappy code that takes ages to maintain.
3. If you want to maintain the software, there are two options that will happen: The outsourcing company will increase the cost as they have now locked you in. Or, the developers there will simply leave to get a better salary and there won't be anyone who really knows the code and it will increase the time it will take to maintain it.
4. Outsourcing can be a good idea if you can make a deal that they will provide you the product with fixed price, it is easy for you to tell if the provided product meets you requirements and you don't need any bug fixes or other maintenance for it. Outsourcing graphics and other art can also be a good idea to save money. Note that when you buy with fixed price, the price can be higher than it would when build in house. That is because the value/price ratio with developers is ridiculous, e.g. a developer that is 4 times more expensive can be 30 times more productive. Problem is that you can't evaluate the value from the price.
Pretty much sums up the prevailing view re: software development.
My vocation is doomed.
I am very small, utmostly microscopic.
You will no longer be a developer - you'll be a resource manager and quality control checker / code reviewer. If that's what you like to do, then you could make it work. But you will NO LONGER be a hand-on software developer. .
the only way to make this work is to treat the outsourcing partner as part of your team. this means you have to develop full trust in the beginning of your working relationship. this trust will be the basis of your working together. this is the most risky part of such a relationship.
initially you can start with giving them a smaller task, which doesn't require too much internal knowledge. as you see how they progress, and how the two teams (yours and them) can productively work together, you can increase your level of commitment to them, as will they do the same. in a manner of months, you can ramp up the amount of work you give them, and they will allocate more people of their team to you. if it doesn't work out, you just cut the relationship and look for someone else.
as trust builds up, you don't have issues anymore of sharing your assets with the outsourcing team. you also don't have accountability issues, like double-checking their timesheets, etc. this also means that efficiency increases. trust really saves money for everyone.
in an ideal setup, you'll end up with a long-term partner, that is at least as good as what you could get in-house. they will also appreciate this long-term and stable relationship. the benefit will be there for both: you'll get a capable team that is cheaper than what you'd have in-house, and is at least as good. you'll also have more flexibility in the amount of load you place on them. you also don't have to worry about recruitment, training, etc. they will love the long-term and stable customer they are working for. they will enjoy the challenges you give them. and most probably they will make more money than what they could make with a local client.
also note that outsourcing is not always about price, although price is always part of the equation. but its useless to go just for price - as you pretty much get what you pay for. but, you can also aim for an external development partner that is high quality, and not 'dirt cheap', but indeed, cheaper than a comparable high quality in-house team, or a team where you live.
(disclaimer: I run such an outsourcing company in East Europe, and we work for US customers on a long-term, high-quality basis)
It's good to see curryphobia diminishing as humanity progresses on.
Who the fuck cares about the race, color, sex, religion, sexual orientation, or even smell of your developers.
As long as they produce top notch results.
And modern India is obviously top notch. Devoid of any of last century's swarms of destitute street beggars, very few Indians hang on to the outside of their world leading high speed train system anymore, people still have to go outside to shit in the streets but sewage system is top priority with the Indian authorities.
Since there are only two of you and you will be outsourcing "monkey work" your are very unlikely to succeed.
Speaking as someone who was transferred to an outsourcing company (see my journal for the gory details), you will not have enough time, effort and patience to run a project like that.
As other posters have noted, the fact that your boss uses the term "monkey work" sets alarm bells ringing. He considers this work to be trivial in complexity (possibly because he doesn't understand Software Engineering) but maybe great in size.
Outsourcing is cheap because the people you are given to do the work are young and inexperienced. They will be given very little time by their PHBs to understand your existing code base and to take on your working practices. Their PHBs are looking to cut as many corners as possible to make the biggest profit on the deal. Their staff will be told to smile, nod and say "yes" to everything you ask of them whether they understand it or not.
As a result, you are going to spend inordinate amounts of your time training, coaching, explaining, hand-holding, testing, debugging, complaining, waiting, testing and debugging again, restating specifications and requirements, arguing over the bill, wondering where the deadlines went etc. etc.
Large corporations that move slowly can hide the disaster for 3 or 4 business quarters, but small companies can not.
Stick Men
For your own good, do not outsource development.
I have experienced it in three different companies where I was working as software engineer, working for the core system.
Each and every time it was a disaster: it seems all good at the beginning and that is what makes it dangerous.
The core software engineers are busy. They make the system work, and do not always have time to check all the unwise choices of management.
And at the beginning management sees results from the outsourced components and everybody carries on.
After a few months or years the underlying problems become evident, and get escalated. In the end the fall like heavy rocks on the shoulders of the core engineers, who start screaming at the idiotic managers who decided to outsource code. They will have to stop what they are doing and start working on the crap that was done by people who do not care, and sold to customers already.
You can add a "maybe" though: for throwaway code it could be acceptable, but you need to be sure that that code will never ever be sold in that form, or someone will have to start reverse engineering and fixing piles of worthless crap.
May save money for the bean counters in the short term, but prevents development of local talent in the long run. IT budgets used to be 1% of gross income at one point. Those budgets paid for R&D and cost overruns. Present day bean counters try to shave savings at every chance at the cost of losing local expertise and security. You can't quantify the value of local talent, it just yields long term results and savings. This doesn't mean that the solution is to "import" local talent from abroad. It means "growing" the talent locally to produce talent generation after generation.
lack of communication
no feedback
dissimulation
no involvement
no ideas
minimal work
bad code
inflated costs
delays
All the money that your company will spare, you'll spend it in testing, analyzing, debugging, guessing, hair pulling, rewriting specs, re-asking, reworking, correcting, etc, etc, etc... And indeed, all this takes a lot of time...
You end up with something over which you have no control, that's not "yours" and that's not really what you asked for.
If you company strategy is all based on an offshore software product, then it is at risk.
The day it realizes that and decides to step back, then it wil be a pain in the ass to get source code that compiles and that you understand. It'll be better off rewriting clean code from scratch by your standards...
I'm talking about outsourcing to foreign countries such as China, India or Eastern countries, with which cultural issues are far from being a detail. Don't do that!
For me, the cost to repair the programming gibberish easily exceeded what we spent on outsourcing.
...then work with the best people you can find.
Simple.
Even a doctor, who went through rigorous schooling has to re take exams every so often, yet a fireman who runs his 2mpg truck to give some homeless CPR doesn't have to do shit...ever! He retires at fifty with more money than any engineer and even most doctors.
Firemen are a necessity, just like cops who get paid 35K/yr but, coders are the future.
Society is funny.
'nuff said
God's just an imaginary alpha male monkey.
for the people you are outsourcing to.
Eventually you've become a consumer who is a middleman. Someone else is the talent, and your customer is coming to you because you happen to be the one peddling that to them.
Later, as you lose your value addition and you're nothing but administrators and investors you'll wonder where the dream went - and finally, where the business went.
Let's put this in more practical terms.
"We're a company that sells apples. Do you think we should just buy apples from someone else and sell those instead? We'll jsut fire everyone who has any practical knowledge of apple growing, selection and breeding and just do what we do best... sell apples."
Pretty soon, you're a more expensive Walmart, which won't last long.
So yes, outsource your development. Leave the skill gain and ability to more worthy people. The future belongs to them.
"No good deed goes unpunished"
You know, instead of outsourcing the "monkey work, " they should bring in actual monkeys to do it.
They could pay them in bananas!
Unless, of course its not actually "monkey work" and rather something that would be better done by hiring competent software professionals.
"MIT betrayed all of its basic principles."
If the ceo feels that "anyone" can do a particular job, it is time to leave that job (talking from experience here).
First you need to specify exactly.... I mean EXACTLY what you want them to do. That takes a lot of time.
Many contracts are fixed price - that means you have to negotiate exactly... again "EXACTLY" what you expect.
Outsourcing is never up to your standards. The contractor, when faced with with a decision, will choose (at least most of the time) the option that maximizes his profit.
Contractors (companies) can go out of business. Good luck get a quality product out of them before they shutter the doors. (maybe you can hire the developers directly).
You must watch them like a hawk. Not that they will cheat you, but they may end of wasting time (see the fixed contract part) implementing parts that aren't critical, or flat out doing something wrong.
Reviewing their work is very time consuming. You need to go over their designs with fine tooth comb. You need to test their code.
Its not an easy thing to do. A better option would be to hire coders on a time/material basis and have them work in your office. You can negotiate on who buys the computer/developer tools.
Highly recommended book by Bill Blunden about this issue:
http://www.amazon.com/Offshoring-IT-Good-Ugly-ebook/dp/B001GS704E
Or a "software engineer". So, I am biased, too.
But now let's analyze the REAL WORLD. Apple, Google, MS, Adobe, Quark, IBM. The latter three think it is a Good Idea(TM) to get rid of their American and European personnel and hire "cheap" Indians in large numbers. Not the same as "outsourcing", but a similar trajectory.
Now, please tell me which companies flourish in terms of economically successful new, innovative products ? Those who did not go the "Indian" route. Adobe is now known as a company with the worst quality record of the PC software companies. IBM can't even make proper ODBC installers for DB/2. Quark is equally in the shit.
It is high time for Software Development Engineers to realize that they are actually the Intellectual Heart of any successful software-based enterprise. Give the boss the middle finger if he ever calls your "Code Monkey". We have invested thousands of hours to acquire the qualifications we have and we are supposed to be obedient to a fat, cynical, manipulative guy just because he controls $$ ? FUCK YOU, POINTY-HAIRD ASSHOLE ! Move on.
And these have left. So value left is close to 0. Yes, zero.
If you think of the work you are contracting out as "monkey work" it won't matter where the engineers live, you won't get good results.
If you are developing an product that is sold internationally choosing an engineering team that is not in North America to do any one piece of it is a legitimate choice. But as long as that is based on choosing an engineering team. Focusing on the immediate wages rather than on long-term productivity is a mistake. Your engineering team should be an asset, not just a wage liability.
..to everybody except the "MBA" trash out there. Why do you educate them to the fact that 1+1 = 2 ??
They want to outsource their Core Activity - the specification, design, development, testing of their products. This is not a pharmaceuticals company outsourcing some payroll software system, which they can do manually if it breaks. It's like outsourcing their drug R&D and manufacturing to some "Chemical Monkeys". The boss is a First Rate Idiot.
He is the Most Destructive Force in that company and will drive it into the ground in no time.
Now show me that software products company which consists out of a bunch of pointy-haired bosses who have outsourced all the work somewhere (geographically) else. It only exists for a few months, then it is dead.
Having "external" people sitting in your office for years does not count - they are effectively the same as your own employees. That works for many companies around the world. It is a well-established practice here in Germany, e.g. in the leading auto companies. The only difference is that these people can be fired easily.
Adobe, IBM, Quark and some others try get cheap labour by having offices in India and Asia. Generally not very successful. Software Engineering is an intellectual task of the highest order and if you don't understand this you are a fucking idiot. Asian countries, including India, are cultures riddled with "beliefs" and authoritarian shite. They generally do not grow curiosity, creativity, disobedience and originality. But these are the key ingredients for making something innovative. And that is exactly why Europe and America have invented nearly everything (including modern ideologies) in the last 300 years. It was a painful, but necessary process to make all these achievements possible. The Indians are just in for the money and the Chinese are under duress of a highly authoritarian state.
Keep the programmers , outsource the management.
Unless you fancy tending to a smoldering rubbish bin of a company shell for the next five or ten years (until they outsource your job, too!) do yourself a favor and walk out the door ASAP and leave this shell of a company to burn itself out.
As AC@40030219 said, your company is dead. However, it will live on as a zombie shell for a good while and (surprise, surprise!) YOU will be the ringmaster of ths little circus. If you have any sense of pride and craftsmanship in your work you will soon find that supervising second-rate work from the third world over crappy over-compressed VOIP teleconference calls, broken English, inexplicable delays answering email, constant shuffles of personnel, and mediocre solutions via mediocre code written with the finesse of a below-average 1st-year compSci major, will grind out any sense of pride and satisfaction you have in your work -- offshoring destroys morale; you will soon come to hate your job. I've been there and it's hard to climb back from that precipice.
Good luck litigating in a foreign jurisdiction ... esp. India, where bribes are the norm.
Let's call it what it is, Anti-Social Media.
You CxO colleagues have deteriorated into a bunch of, what ? Dollar-Monkeys ? No longer interested in anything except money ? I guess this moral rot is exactly what currently brings down America and the best part of the Anglosaxon world. "To hell with my bank, all I care is my bonus dollars !"
What will these people think when they are hauled up the lamp post ? "how much does it cost to bribe them so that I can get away ?"
No its not alright. Sure you can get it cheap somewhere else but you also don't get to contribute to the strength of our country. We working programmers are contributing, and getting a wage for that out of which we pay taxes that help pay for the services you enjoy too. Fire me and send that money out of the country and pocket the little difference and you actually loose some of your own because I am not earning a wage and paying taxes. It seems fine if one or two do it, it does not effect us but when it becomes a general practice then we all suffer. Its the same with pouring pollution into the lake. If you pee in the lake no problem, but if everyone pee's in the lake then you start to not be able to drink it, you have to invest in water purification.. and your costs go up. Its an ethical community thing.
If your boss is willing to dismiss any aspect of development as 'monkey work', that's already a problem, and outsourced or not, the result will reflect that.
You are only 2 left and you're asking if handing out your libraries is a good idea. That rings a few bells.
To get things straight: Outsourcing can work, but you need to have your own software development process streamlined and standardized before it makes any sense. F.i., you should have documented APIs that you can expose without handing over source to 3rd parties - that's how you develop inhouse aswell, btw. Once the APIs are finished and documented, grunt work is outsourced and the inhouse crew can move on to the next technology frontier or prototype.
Since you don't have that - your question implies that - and you are only two left, I'd say you have other problems than outsourcing your code work. Doing that in this stage of things won't do any good and will most likely do harm.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
"Ask {a bunch of nerds who stand to lose their job to outsourcing}: Is Outsourcing Development a Good Idea?", I wonder how this could possibly present a skewed opinion in the comments that follow!
Bow before me, for I am root.
any boss that thinks it' monkey work is an idiot,
Secondly. You are going to get mediocre to bad code, and you don't have the man power to fix it.
To quote the most likable character from the The Amityville Horror:
GET OUT!
The Kruger Dunning explains most post on
You are so right. Wish I had mod points.
-kgj
I'd do what the Boss wants to ensure he owns the decision.
I don't get paid to fight dumb employer decisions. I get paid to follow orders, and unless I personally like the employer or company I don't give a fuck what happens to them.
"This post is an artistic work of fiction and falsehood. Only a fool would take anything posted here as fact."
no dumbass - it is not a good idea!
There was a big outcry here years ago when Telstra announced it was out-sourcing some jobs overseas. Now Telstra has always out-sourced - mainly to local arms of big multi-nationals and other Australian companies, so it wasn't like they'd never out-sourced before. However, with the Indian angle, predictably there was a hue & cry at the time.
One of the high-level suits (Ted Pretty?) went on TV to do damage-control PR and explained that they wouldn't out-source their core businesses of: HR; Accounting; and Payroll. This near-top executive thought his communication & technology company's core business was not communications & technology, but rather all the generic back-office administration every company has.
Managers, if you can't manage your company's core competency (or even know what it is), you're in the wrong company. If you can't manage a team of software developers you shouldn't be managing a software development business. Sure, use contractors to fill short-term gaps, but hand-balling the entire process to someone else is an admission of failure.
As a freelance programmer, I more often get hired by Indians than Americans. The Americans aren't willing to pay my hourly rate, but they will hire the Indians, who will pay me my rate and double bill on hours. Sure, they are good at project management, but assuming you're already managing the project you might as well cut them out.
I have to agree - I'd stop worrying about the outsourcing and start looking for another job instead, as it's only a matter of time until your company or your department folds. I've worked in a company where exactly this happened, and it was a sign the company wasn't being managed sensibly any more: they evidently didn't care about the quality of work the in-house staff were creating, and foolishly thought it would somehow be cheaper to outsource programming (which was 50% of the business effort) while still maintaining acceptable quality - which is nuts as now instead of paying employees and trying to make a profit, you're hiring a company that's trying to pay it's employees and make a profit while also trying to make a profit yourself. The maths doesn't work (they weren't outsourcing overseas).
I was 'lucky' enough to survive that mass-sacking of developers as I had a niche position not easily replaced, but that just meant when the company folded 3 months later I lost a months pay.
On the flip side, I as an english-speaker have done work outsourced from a korean-speaking company. The language barrier was definitely an issue - they had a hard time explaining the bugs they found in my work (I'm AC so won't bother defending why my work was buggy, it's not interesting). Everyone was trying their best, but at the end of the day a lot of time was wasted trying to understand each other and sometimes coding time was wasted because we failed to realise we hadn't understood each other too. It would surely have been cheaper and easier for them if they'd not outsourced the work - work ethic and racism has nothing to do with it, and frankly even if you outsourced to a company on the other side of your own country you'd hit similar problems because as they're not inside your company they cannot hope to understand your requirements or ways of working as instinctivly as an employee can . It's a business barrier no matter which way you look at it - outsourcing is poison, the only reason to do it is if the work required is such a tiny part of your business it doesn't justify employing even a single short-term contractor.
I am at a large company (over 10K employees) and we have outsourced a lot of our web and application development. As is common practice, the external vendor competed against internal IT for the development project. They won and proceeded with development. Here are the problems:
1) Internal IT needs to abide by industry compliance standards (PCI, SOX, HIPAA). Vendors don't care about these standards ignore them. When we explain that requirements such as a) Listener processes must run as non-root/non-admin or b) Configurations must include a test checked in with the code, we are told by the vendor that that requirement would add to the cost and management has the idea that we are being pedantic because we didn't get the contract. Our quotes factored these requirements in, thus we came in higher.
2) The external developers are woefully incompetent. They have no OS competence (SunOS, AIX, Linux) and have little knowledge of enterprise standards (change processes, SAN, LVM, tuning for a multi-tiered architecture). I was a crappy Java coder 5 years ago and can barely code my way out of a paper bag, but have more knowledge of how to debug a heap error than 4 of their 5 coders.
3) They bid low but have little understanding of how involved an application can be. Once they realize the project is bigger than they quoted, or compliance and company/industry standards require design changes, it's too late to change. More money gets sunk.
4) They will eventually use the knowledge for competitive advantage with other companies. In my industry they have already begun shopping around their "expertise".
In a word, don't do it. Shortsighted, stock-price driven C-level folks may push for it, but it's a MISTAKE. The corporate finance trickery that makes outsourcing of development seem like a good idea will doom a company. Sure, some things can be outsourced, but not products intrinsic to company identity and advantage.
When it is decided to train folks outside the US to do the development, AMericans get a tasty donut, and a pat on the back from others that get a donut too. They don't train the next generation. they simply train a cheaper labor force. Its happening in every sector, and has destroy the roots of a sovereign nation.
Every wonder if US could produce things like TV sets or build things anymore?
We'll gladly sell the next generation down the river for a sugary donut.
Our company outsources both part of our development and most of our testing.
The development has been quite successful. They have access to our full source code and a VPN account so they can check in. The key here is to use a reputable outsourcing company. This makes it more expensive than it could be but it's still far cheaper than first-world developers. The quality of the work is very good. The advantages they have are speed, helpfulness and enthusiasm. The disadvantages are that they often prefer quick-fix solutions over structural ones and don't think in terms of the customer (i.e. they need specific instructions and wouldn't be given the task to design an entire option by themselves).
One of the dangers, in my opinion, is that we rely on them too much. Far too much knowledge of how our code works resides solely in outsourcing. I recommend requiring design documents to avoid this situation.
As for code security this is definitely a risk. On the other hand, most in-house programmers I have worked with have taken a full copy of the source when they left.
The testing is a mixed bag. This is done by a second outsourcing company in a different country. They are very good at following test scripts but cannot think outside of them (again, unable to place themselves in the customers' shoes). This leads to major bugs slipping through. We try to deal with this by being extra careful with our test cases. To be fair, this is technical software and they cannot be expected to be experts in the area like our consultants. On the plus side they are radically cheaper than hiring more consultants (our outsourced developers have programming degrees, a university degree is not necessary for testing).
Actually, "Outsourcing" has gone on for decades. Contract programmers were often hired to create software from early in the computer age. In general that has worked very well. Some of the largest systems ever constructed, TIRKS, the airline reservation systems, etc., made extensive use of onsite contract developers. There have always been the real people vs virtual people arguments, sometimes created by differences in pay rates. Professional Software developers commanded seriously high rates, in part because we were often between projects. Real people may have made less during the same period, but had at least the illusion of the advantages of continuous employment. Large sub-components of such projects were often delegated to professional development companies who managed the development teams. Outsourcing became more globalized after Y2K as onsite development was replaced by off shore and off site teams. This activity was encouraged by the Bush administration - acknowledged in February 2004. Their MBA view of the universe did not envision the economic domino fall to follow. In a relatively short time everything except marketing and onsite services were outsourced offshore. Marketing dissolved into the internet. Investors escaping from the dot.com bubble, invested their profits in the homes and businesses of foreclosed and bankrupt technical workers. After 2005 those investments began to sour, creating a need for market making in real and commercial properties, so that investors and their banker friends could be escaped - to invest in commodities like oil. The money for this market making activity was provided by mortgage derivatives, which also increased the population which could "afford" to buy homes, thus creating market demand for properties with which investors were otherwise stuck. This population was cut off at the knees by the investors they had helped to escape, when balloon payments became due, and the price of gasoline reached $4.00 per gallon US in April 2008. The PROBLEM with offshore outsourcing is that displaced workers who were previously paid a salary for adding value to a good or service, were also local consumers. Even though costs of production were reduced, the savings were not local, and could not make up for the loss of consumer demand which results from their displacement. It has been said that all politics are local. The technology boom was caused by local economic interests using politics in an attempt to improve local economic conditions. Local realtors and investors angled to get large corporate interests to move factories and facilities to their outlying communities. When this happened a local economic boom resulted, driving up prices, and creating incentive for the company to move yet again. An opportunity was thus created for another locality which desired the impact of corporate wealth. The leaders of a community which snagged an engineering or software center would make out better than the fabled bandit. This resulted in a shell game of political economics which effectively ended with offshore outsourcing, because the beneficiaries were on the other side of the world, not even part of the national economy. In a nut shell, if you expect to sell goods or services in your community, you will either have to give away cash, or pay salaries for the value your friends and neighbors add to your products.
It's a bad idea to work for a somebody that refers to what developers do as monkey work.
Managing a project with everyone in the same office is difficult. (Evaluate candidates. Hire employees. Make sure everyone understands the requirements. Balance workload. Figure out dependencies so that no one is blocked. etc.)
Managing a project where some of your programmers are remote is more difficult, even if they live in the same country and speak the same language.
Managing a project where some of your programmers are in a different country with a different primary language and a different business culture is even more difficult.
If your company is failing at managing local projects, I doubt that you're going to succeed at managing offshore projects.
If you're a small business who wants to use offshoring, I would recommend involving an onshore company to manage the offshoring. It won't be the lowest price, but if they take your project, the results will probably be much better. For example, I would recommend my friends who run this company: www.thesevensoft.com.
Good luck!
If the main goal is to continue the life of this software and the decision is firm to outsource then ..
Outsource to capable developers in the area of software required and give them full access to repository.
Transition as much knowledge on the code as reasonable (success driven transition).
Thank the new owners and say goodbye.
Find a new job.
Find out where your current manager is getting a job and never apply with that company.
Send an email to Company Owner 6 months later with an offer to buy this small software business for 1/10 of current value.
You fill in the rest.
Just do it
My boss says that our new strategy is to use outsourced developers to do the 'monkey work' for us.
I don't think this strategy is successful for producing great software, but given enough time your outsourced developers might write Hamlet.
The result of outsourcing can be greatly affected by having a good Onsite coordinator ( OSC). OSC should be a domain knowledge expert and have good communication skills. A good OSC helps in the following ways
a. bridge domain knowledge gaps
b. co-ordinate with the onshore engineers and get quick resolution for offshore queries.
c. bridge the cultural gap
d. bridge the time zone gap to some extent.
Insist on having a good OSC and it will go a long way in ensuring success.
Its all a mixed bag. There are high quality overseas developers who are at a significant discount. There are also lots of terrible overseas developers. If you are confident in the persons english and technical skills, and you can give them gradual responsibility, it can work quite well.
I am a developer, and I have had the 'pleasure' of working with other offshore, outsourced developers and testers.
Some have said you get what you what you pay for, let me promise you now that isn't true. In my experience you will get very inexperienced and inflexible people that will give you the worst code you have ever seen, if they even get anything done at all.
I am a contractor and have seen this over and over again. This is a false economy, don't fall for the hype.
The easy solution is to outsource and offhshore the boss. First of all, you get cheaper management labor. Second, it solves the meeting timezone problem. Third, many outsourced bosses will work for merely a bowl of curry in the morning. Fourth, you don't have to spend money on indoor toilets anymore. Fifth, like my cheapass clients, you don't have to spend money on telecom anymore, by forcing everyone to use Skype and Gmail for your communication infrastructure.
Soon you can be as excellent as HP and Adobe and Symantec and Cisco and other great American companies, and use the excess profits to move to Dubai and avoid taxes.
Is there a smart way to outsource development, or is it just a bad idea?
For Developers yes normally it's a bad idea although I'm sure there are some good ones out there
But there's more to ALM (Any ALM) than just develpoment and I've had some good experiences with outsourced QA people in the past
Build a Man a Fire, and He'll Be Warm for a Day. Set a Man on Fire, and He'll Be Warm for the Rest of His Life.
Why does everyone seem to read "outsourcing" as "outsourcing to a low wage country" ?
Should a bakery or a used car dealership have its own software department? Their own plumbing department? Any time you find an outside company to do custom work for you, you are outsourcing this work. Whether you are having it done by your local software company down town or by a far away software company in Bangalore, it's all outsourcing.
By the way, all this complaining about outsourcing (meaning outsourcing to low wage countries) seems petty and weak to me. 25 years ago, when factory workers complained that their jobs were moving overseas, you techies had no sympathy. "You should have gone to college and gotten real marketable skills then". Now that it's happening to people who went to college and got skills that were marketable 20 years ago, it's suddenly an outrage.
If you are outsourcing work because you don't have the skills to do it yourself, then you shouldn't be in this market or in this profession.
If you need something done in a very short period of time, then you should be willing to accept horribly written code and you should be willing to expect a loss of your job in the near future.
Good luck with support
Good luck with understandability
Good luck with maintainability
Good luck with separation of concerns
Good luck with sprint planning and re-iterative tasks
Any company, whether big or small, that decides that outsourcing their work is a correct measure, seriously needs a reality check.
This is my opinion, and the opinion of the Gods. Now im going back to playing Diablo 3.
The problem with outsourcing is you gut any local knowlege. So yeah it might be cheaper to outsource your development, but when something goes wrong, or needs to be changed, you are now stuck outsourcing, as no one in your organization will know how to fix, change, update anything. Guess what, when those consultants realize that they have you over a barrel, it isn't going to be so cheap anymore.
Real problem is no one really looks long term to the total costs associated with anything, only the short term, in how much will it cost me this year, so that some manager looks good on his budget. They might be screwed for years to come, but so long as the initial cost makes them look good, what is the incentive to do the right thing?
If they can fire everyone else at your company they can fire you. You should get another job. When they outsource the people who are outsourced can eventually acquire the core business knowledge. You may eventually get fired also. You should just go. There is no future for you at your company. Do not tell your manager you are looking for another job. When you leave tell them you got an offer you could not refuse. If you tell them you left out of fear of a layoff you will never be hired back and you never know when you need another job. Its just a job. Quitting is NOT a big deal.
Outsourcing can come back to haunt companies. Forbes had an article about this. They said that amazon could not make the kindle in the US because all the people with those skills had been fired a while ago and the work was moved over seas. Amazon could not find qualified Americans to hire because they all had to move to other professions. Dell outsourced its motherboards to Asus. Asus now sells motherboards and computers competing against Dell.
AOL outsourced a ton of development. They also fired a lot of Americans and replaced them with contracted H1Bs (at lower wages). I worked for the manager who did this at another company. He said in the end they did not save any money due to the quality of what they got back and dealing with the time delay.
To be fair some outsourcing can be good. It is not uncommon for non-software companies to hire software companies to handle their software development. Time Warner Cable does very little software development. They hire other companies to do this. I believe Accenture is in with them and I worked with a small company as well. Accenture did not do a really good job because you know its Accenture and they are there to bill hours. They liked what we delivered. When you are with a small company , you get more flexibility to get stuff done. Plus they worked on smaller margins so we had alot of good people (since we got alot more of the rate). So we had a better team AND because we made alot of money, we had alot of incentive to work really hard to keep those big pay checks. I worked alot of extra hours without being paid (trust me it was built into my rate...). I wanted to make them happy so they kept me.
Outsourcing maintenance is good.
Casteism
I'm not in charge of out-sourcing, I'm in the shittier spot. Testing the code that the out sourced developers create. Here's my stance on outsourcing 1) They often will not be able to take high level goals/ideas like we do in America, you have to break it way down for them 2) You have to create a design spec for them and they will follow it to the point of no-return, so I hope you don't send them the draft by accident 3) Expect many hours wasted due to time zones/language barriers, also be prepared for some late night/early-morning conference calls, I found it best to just use an IM system & screen shares as they will avoid the accent issues. You can try MSN's auto-translate feature for IMs. 4) Set a VERY strict limit for them on number of bugs/features you expect them to finish each day/week, otherwise they will loiter around for awhile 5) Make sure communication with the devs who do the coding goes through their bosses, cause their boss is the one who will walk over and yell at them to stop procrastinating My opinion of a cutoff point is that if it takes your developer as long to explain something to them, he/she should do it himself. Yes I know you want to bring up your "off-shore" team to the same standard as your in-house developers, but lets face it, they aren't in the office so they won't be as good. Don't be afraid to cut them, you might've dropped a ton of money/time into things, but be willing to cut your losses.
I think it depends on the needs of your client. My adviser's field of study is educational software and games, through working with her I have learned that the most difficult part of the development process is the design and not the coding. I feel to design very effective educational software you will have to understand the pedagogical context of your clients. And to design engaging educational games, you will have to understand the students background and interest. Especially since our school system and culture is radically different from say India, it is difficult to develop something that is fits well with the requirement of the client. You can probably write a very detailed requirements doc. But if it has to be detailed to the point where you are listing all the functions, you would probably feel its easier to just do it yourself. The big question is how well divided will the design and software development processes be? If both can be considered separately, then out sourcing won't hurt the company too much. Otherwise outsourcing may cause the company to lose more money than they save. Good luck, may your job be safe.
More than half of my new clients over the last few years have been a result of botched projects that were outsourced.
Outsourcing only makes sense if you are doing something that has been done by others for at least the last 10 years.
Doing anything that is truly novel is generally a very bad idea because 1) you want to protect the IP and won't be able to realistically, and 2) you can't predict exactly what must be done in development and usually outsourcing requires micromanaged instruction and planning for anything that isn't standard knowledge.
It isn't just monkey work that you will be outsourcing. As you already discovered, you will have to share at least your internal libraries. And thats just the start. (1) Your specs have to be much more precise to an outsourced team. You are still responsible for delivering specs to the outsource vendor such that end-to-end, across programs, time periods, these programs have the desired functionality for your organisation. (2) UAT has to be more thorough and dont be in a hurry to sign-off. I don't think it's a two man job. Remember some one IN YOUR ORGANISATION has to write specs, test and integrate. It can be beneficial if you find a good vendor. In my experience (been on both sides of the debate), choosing the right vendor is the key. Others also mentioned this. Think that actually you are entering into a partnership. OK
But where are the professional offers from India in this thread?
It's fine to outsource non-critical parts of your business, but never your core. I would think that building software is at the core of the company based on what you describe, and it should be treated as such, but apparently management at your company doesn't seem to think so.