views:

516

answers:

10

Hi there, I hope to be studying software engineering at Waterloo university (Ontario, Canada) in a year or two more; however my dad remains skeptical about outsourcing.

All the professors I have asked at a university convention seem to beat around the bush when I ask them; and I wouldn't expect them to give me a straight answer anyways. I was hoping I could get an answer from you guys, who are in the field.

Sshould I be worried about outsourcing as I will be studying software engineering? what is the scope of the field? What are your experiences with outsourcing? Did you find, that locating a job was relatively easy?

thanks, x-ecutioner

+9  A: 

Developers who understand the business of their employer, and are able to deliver value by bridging the gap between the needs of the business and the capabilities of the technical, will always have a well-paid place in the First World.

Software engineers who write code according to spec - basically, implementers who have technical knowledge - will be replaced by equivalent resources from low-cost countries.

There's no reason not to do this - the ability to implement code according to spec is something anyone can do with proper training - orders of magnitude more difficult than, say, operating textile machinery, but the same class of problem - given enough training anyone can do it just as well. Business value and organizational knowledge, however, can't be taught - only a combination of life experience, natural talent, and business experience produces the right people to be leaders. The worker class of low-cost countries will always be behind the first world in this area until their overall level of industry and development catches up.

Rex M
True except for the catching-up part in the last sentence. In order to know the business you have to be around the business. The small and insignificant things about the business that Software Engineers near the business caught onto by being near the business adds up eventually and it very hard for someone who is thousands of miles away to catch onto too. This in addition by being immersed in the culture and norms make some Software Engineer jobs hard to outsource- because they can add the business savy to their code.
Phil
A: 

You should only become a programmer if you love it so much that you can't imagine being anything else. Programmers are not generally respected as professionals and are often made to report to non-programmers.

For a longer discussion, see Why a career in computer programming sucks

Glomek
-1: The answer doesn't refer to outsourcing at all, as far as I can see.
nikie
The question was only incidentally about outsourcing. It was really about how hard it is to find a good job as a programmer, with outsourcing being an example of why it might be difficult. My point was that even when you find a job, it's still not all that good most of the time, unless you love programming so much that being able to program is its own reward for you.
Glomek
A: 

Try this link here on SO

LINK

+5  A: 

Though I can't speak to every field, I can give some input from my experience from the Silicon Valley. First of all, outsourcing is very real and is still growing. There are plenty of very skilled (and not) developers in lower cost countries. This means that a great deal of jobs are and will be done overseas.

I have seen it myself. Even now, while we aren't yet ready to hire a new, in house developer, we can expand our Shanghai team any time we want and very quickly. A lot of development is still done in the US and all of our requirements gathering and architecture work is done here as well; however, many coding assignments are getting farmed out.

From my experience, there are two factors that work in the favor of US developers. First, for a US company, developers here get face time. This is the same benefit the in house workers have over people who work from home. You are more trusted, clients have a much easier time communicating with you and people feel like you are more accountable. Plus, they'll always need developers in the states to gather requirements and perform time sensitive development when their outsourced team is living 12 hours in the future.

Second, whether its sensible or not, many companies won't outsource certain functions. I worked at a bank for a few years and they refused to outsource any coding that was remotely close to their core business function (leaving only simple web development for outsourcing). Also, I spoke with someone at Lockheed Martin who informed me that DOD contracts can only go to Americans. I assume there are many more niche government jobs that would fall in that category.

Above all, don't listen to what a bunch of individuals have to say, read the US Bureau of Labor Statistics findings. They cover outsourcing. The gist is that while programming jobs are expected to decline 4% in the next 10 years (partly due to outsourcing, but partly due to automation and better development tools), there will still be a spot for talented developers:

Nevertheless, employers will continue to need some local programmers, especially those who have strong technical skills and who understand an employer’s business and its programming requirements. This means that programmers will have to keep abreast of changing programming languages and techniques.

I think they hit the nail on the head unless the future of development is different from what they expect...which it will be. It is very likely that no one knows the future of our field even 5 years from now, let alone 10.

The best career advice I every got was to

...do what you love, the rest will fall into place

EDIT

As tster points out, the Bureau separates programming jobs into many categories, and some look quite promising. Try to see which of these categories you best fit into:

Michael La Voie
+1, a very interesting perspective.
Peter
The link you provided is talking about "Computer Programmers." But you fail to realize that the BLS considers many different forms of "programmer." For example, take "Computer Software Engineer" for which they say "Job prospects should be excellent, as computer software engineers are expected to be among the fastest-growing occupations through the year 2016."http://www.bls.gov/oco/ocos267.htm
tster
Thanks tster. That's a good point. I'll update my post in the morning to reflect that.
Michael La Voie
+1  A: 

Software engineering is much too involved to be outsourced entirely. For most developers it's much more than banging out code for 10 hours a day. You meet bosses, customers, discuss ideas and features. You can't outsource that kind of involvement. Many have tried but i think that the idea has reached it's zenith and for a variety of reasons will taper down significantly in the coming years.

As advice, and considering the above, shoot for a well rounded education. i am not kidding, the communications and writing classes you'll be required to take will matter more than many of your CS courses. and... if you can get your head around data structures, memory management (pointers) and recursion, you will have a long and fruitful career. Challenge yourself with C++ in addition to high level langs that'll get thrown at you!

Paul Sasik
+3  A: 

should i be worried about outsourcing as i will be studying software engineering?

Anybody preparing to be a "knowledge worker" in any field should "be worried" (about offshoring, not outsourcing per se; if firm X outsources project Y to firm Z, why would you care if X and Z are essentially in the same place...?! now if Z is offshore, in a cheap-living, low-salaries location, THEN it's important...!-) -- in a constructive, productive way, of course: namely, if the professional skills you plan to acquire can just as productively be applied (given superb communication channels) by somebody living far away in a place where life is much cheaper, you're not likely in the future to get large demand for such skills at the compensation levels you require to sustain a good lifestyle in a place where life is far costlier.

This can apply to some software engineers who "only churn out code from specs", paralegals who "only scan and summarize documents", doctors who "only look at X-rays or other laboratory results", and so forth. Therefore, you should plan to acquire some professional skill which require you to "be there in person" for good effectiveness -- while considering that the communication channels will keep getting better, but, within reason. If your professional skills is cutting hair, you probably don't need to worry about remotely-controlled haircutters with your professional competitor living far away (not in the next generation at least, I think;-).

So consider which niches of software engineering require you to "be there in person". Me, I think agile software development (not programming from rigid specs, but continually adapting to the customers' changing needs by fine-grained iterations &c, including eliciting precise specs and double checking via frequent delivery, etc, etc) is enormously enhanced by being in-person -- colocated teams, customer on the spot too (you'll hear claims to the contrary, but with rare stellar exceptions such as Canonical I have not seen them substantiated). Some fields will always require physical presence for reasons of security -- I don't see NSA offshoring their software development work any time soon, and I'm sure most military suppliers (and many suppliers to civil government functions) are (and will be for the foreseeable future) in a similar position. Technical management, entrepreneurship, networking with the venture capitalists -- all these jobs that crucially depend on people to people contact and interaction, IMNSHO, will remain pretty connected to "in person presence" despite continuous enhancements in videoconferencing and the like. But, these are the terms in which you need to frame your choices today.

what is the scope of the field?

What field? Software engineering? "Deploying and developing software", I'd say. Peculiar question; maybe you mean some other field?

What are your experiences with outsourcing?

Again, I think you mean offshoring. I've much more experience with outsourcing because it's been common for a LONG time for firms whose core competence is not software development to outsource software development related tasks to specialist software companies -- and I was working, consulting or managing (sometimes founding;-) one specialist company.

In the course of my career I've occasionally been tasked with managing offshored teams and/or closely coordinating a local team with such remote teams (either in a technical management role, or as a very senior engineer). Results over the years have been very mixed with a tendency towards disappointment; especially early on, it was easier for paying customers to see they could hire developers at half the salary (or less) in, say, India, and those developers were bright and well-skilled, so, why not do it? Harder (back then) it was to understand that unless the specs are very clear and very rigid to start with (a VERY rare case indeed in real life;-), offshoring the development of software to those specs is a recipe for disaster, no matter how skilled the developers or how shiny the communication channels. In recent years, light has started to occasionally blink in the paying customers' heads, realizing that for many tasks there's just no substitute for a development team you can intensely double check with every week or two, count on initiating and responding to many sudden changes effectively, etc -- all VERY hard tasks to pull off with an offshored team (or worst a split one).

Did you find, that locating a job was relatively easy?

Partly because I've always been willing to move to the job rather than demanding the job magically appear where I happened to be living (and partly no doubt out of luck!-), I've never spent a day of involuntary employment in 30 years' of career (first in hardware design, both chips and systems; later mostly in SW development; with stints at system administration, management and entrepreneurship in related fields on an on-and-off basis, but, overall, pretty often). This DOES mean I've been bouncing back and forth between Europe and North America (no other continent yet, by happenstance) every few years, as career opportunities arose on either side of the Atlantic; I think that despite the inconvenience my life has been enriched thereby (hey, I'm a European native with an American wife -- would you expect me to decry the need for transatlantic moves that happened to bring us together?-). I have friends and colleagues who have found themselves in similar situations in India, East Asia, Australia, and South America, too (curiously, noone in Africa, that I know of), and I've heard them talk of their experience as expatriates in very positive terms (it seems e.g. that in Bangalore, with half the gross compensation you'd get in Silicon Valley, you can have twice as luxurious a lifestyle as you could afford in SV... I've always lived in pretty costly-living regions, so I have no personal experience with that effect).

Alex Martelli
A: 

Actually I am a freelancer and I am doing my own job. Of course it has more risks than having a full time job but it also has some pluses. You have much time and no one will be around you always scolding you and giving orders.That is why I resigned from my position from my old company. I am looking for another job tho but in the time I am building websites for market and retraining myself in the field where I think I am weak.

But if you have a huge social environment you can find web building jobs as a freelancer and you will be your boss.

Braveyard
A: 

Outsourcing is only one of many forces at play. To be successful, you not only have to be skilled at your craft, but you must be aware of the business world around you. Jobs and their roles in society change: travel agents at the advent of the internet learn to find customers (and create value) in other ways. Print journalists learn to blog. The more savvy you are about how the world is changing, the more you'll be able to succeed (where others fail).

A few points I think about for software:

  • The traditional business analyst role, however it gets done, is hard to outsource. Someone needs to bridge the gap between the users and the builders of the software. This can be done remotely, it is much less efficient to do so, as then you need more complete specifications, and the feedback loop is much reduced. (That is why agile methodologies emphasize co-location of the business owner and the developers).
  • There are efficiencies in having co-located team-- faster training, much smaller % of time devoted to communication, etc. (Agile emphasize co-located teams.)
  • Developers have a huge range of talent and efficiencies (10x difference in many studies). Although this is probably the hardest thing to explain to most employers/clients, being the faster developer and/or team will always be an advantage.
  • There will be opportunities in understanding how outsourcing works, and how to run the process well.
  • Relevant skills in this industry are always in flux. Being a faster learner who anticipates trends will be valuable as you can be in early building Facebook or iPhone apps.

I ask myself every day, "How am I creating value for my customer?" The day I can't answer that question, or communicate it clearly to my employer and client, is the day I might be out of a job.

ndp
A: 

Outsourcing is in my experience a verry difficult thing. If you don't have specified the needed output verry good, the product will not work as you expect. This will leed you to more problems in testing and correct the outsourced part and if your partner is able to produce a product as you need it or as you specified it, you have to pay nearly the same amount as you have to pay on-site.
Another part I have noticed is that managers which come from some University course are eager to outsource for the first years on their job. After some experience they change the mind and began to turn back all to in house production. After abou 7 years and some experience more they will leave their job and the new managers will make the same turn again. With every turn you have some loss of knowledge about your software. To be honest who makes really regularly code reviews of software from outsourcing projects?

Back to your worries about outsourcing. I think you have to learn much about communication with people in other countries and their culture. This is a very interesting aspect on the whole outsourcing. For example as a European based developer you have to get up early in the morning to phone with your partner in the eastern part of the world, e.g. in India, or you have to wait until the evening to phone with someone in the US. It is not the best example but one that can be a problem in your work. Another is how the outsourcing partner can understand your problem. Does he exactly know how is something working? Is it clear what you mean with a specific item (or concept).

BtD
A: 

Outsourcing is taking a process done within an organization and moving it outside, e.g. having someone else do payroll or handle legal questions rather than have staff for that. Offshoring is moving the jobs into a different country and requires some outsourcing unless the company is expanding into that territory.

While I work now where there is a mix of in-house and outside consultants on projects, I think there will be some value in having in-house developers that understand how a specific company uses some software for a function. Being a web developer fits nicely with this, IMO.

Locating a job depends on many factors like location and what type of job you want. That type of job includes being a developer, tester, business analyst, systems administrator, tech support, and many others where you would use various technical expertise. My job searches have tended to take months but I have had some good jobs. Just to state where I had my breaks:

August 1997-December 1997: Graduated from university and found first job.

February 2002 - March 2004: Dot-com going under and had to find something else. This was longer because while I was employed, it wasn't a great set up.

July 2005 - August 2005: Moved to Calgary and had to find a job.

October 2007 - December 2007: Fired from job and looked for a better one somewhere.

The key question is what kind of job do you want:

  1. Technology company making software that they sell. Working for Microsoft in building the next Visual Studio would be an example here. This is kind of a product development position and I would consider Google as being in this category.

  2. Consultant brought in on special projects. Systems integrators that companies use when putting in big systems like ERP and CRM that may use MS-SQL or Oracle.

  3. IS department at a company. This is where I am now and am kind of happy with helping the company run but not making any product for the company to sell. Canadian banks would be an example here. In Calgary, there are a lot of Oil & Gas companies that may have a need for some custom development.

JB King

related questions