|
Sounds like you've seen a broader spectrum of outsourcing that I have. Thanks for the comparison.
One problem we don't have here is having our data taken hostage, but that's only because we have strict rules around where data is stored and who has access to it.
We've transitioned systems to other internal teams in the past, and typically they also just assume that if it was written by offshore that it's unmanageable trash and that it'll need to be rewritten.
In some ways it's insulting how we treat our offshore developers. Regardless of their skill level, I don't like how we refer to them as "resources" and never learn their names. It's admittedly very difficult to talk directly to them as team members with the time zone and language barriers, but still...
Console.WriteLine("Scott Clayton");
|
|
|
|
|
They did the same here in two manners.
1 - an inhouse -'out house' with a team in India a few tokens, here
2 - a contractor who subcontracted to India
Group 1's software is mediocre - but works. Not well, but works. Management has faces to stare into. They also hold data hostage and I've actually gotten some degree of support by refusing to work with them if I cannot access the data (which is 'our' property).
Group 2's stuff is basically trash. On such item, it appears, I single handled had tossed in the garbage (rubbish bin). The ones that linger cause eye-strain.
Now I'll add (3) which was outsourced within the US. It works well - but they're unresponsive and also seem to be holding data hostage.
Some time back, say with the last year or so, I was expecting myself and the rest of IT to be disappeared. Since then, I think they've come to reflect that the in-house built software is robust and the people who make it have a direct stake in it - not only for their pay check, but the pride (or shame) based upon its quality. We're also rapidly responsive to company needs. I actually believe a few of the realize that some of the packages made for them are amazingly powerful (if they'd use them instead of outsourcing). In this case, they all don't want to hear anything technical, but won't hesitate to judge it. Ignorance, I suppose, keeps them from being prejudiced.
Anyway - the very few of us available for development, they realized, keep the company running. Very few, indeed! Groups 1 through 3, it turns out, are apparently going to fade away (from our view, at least). Outsourcing software development, here, like almost everywhere, has blown it.
The only step left for them (management) to understand is that investing in one or two more additional capable developers is a lot cheaper (and ultimately more productive) than hiring a dozen desk-monkeys. Hopefully, before someone heads for greener pastures.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
Seems like a duplicate post?
Anyway, having personal ownership and pride in a system is the most exciting part of software development (IMHO). I had that at my previous job, but not here.
Console.WriteLine("Scott Clayton");
|
|
|
|
|
Scott Clayton wrote: they're not optimizing for speed, quality or cost, but rather flexibility. With the uncertainty of our yearly budget and workloads, offshore companies allow us to quickly add or remove bodies in a tight timeline
...
Do any of you work for a company with the same mindset? Not today, but in past lives I have. Back then, it wasn't offshore contractors, but onshore ones. However, the mentality was the same -- contractors cost more for the amount of work, but are easily dropped headcount when the company has to do a layoff. They also come out of a different line on the balance sheet (same line as office supplies..), which gives the company a tax write-off for the wages they are paid that they can't get for wages paid to employees.
|
|
|
|
|
Yep, that sounds like the same thing to me.
This makes me feel like my support for dropping offshore development is just indirectly adding uncertainty to my own position.
I just can't help but look at other leading companies that are successfully building real teams that produce real results. I want that.
Console.WriteLine("Scott Clayton");
|
|
|
|
|
I've survived a layoff as a contractor, watching some of the "permanent" employees being asked to leave while they kept me. It really is all about what you know.
|
|
|
|
|
This is not exactly new; it's the reason that I became a contractor many years ago. Even then, it was clear to me that the Big Business would grow to depend on a small core for their domain knowledge, and hand out most of the work to contractors. As long ago as 1990, I remember working in a company where a standing joke was that there were more contractors than FTEs in the building.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
It's nice to hear this from the perspective of a contractor. Were you able to work in the same office as the FTEs, or did they hire you through a development company on a per-job basis?
The reason I ask is that we also have a lot of onshore contractors here, and for the most part they're highly skilled and have significant domain knowledge. The vast majority of our issues are related to offshore contractors hired indirectly through a development company.
Console.WriteLine("Scott Clayton");
|
|
|
|
|
All of us, both the FTEs and the contractors who did much of the real work, had offices in the same building, which was the corporate headquarters. All of us brought significant domain knowledge to bear on the work we did. Most of us worked for companies that had long term, nearly evergreen, contracts directly with the client. At the time, I owned an independent software consultancy, so I happened to hold my own evergreen contract. Over a fifteen year period, I was in and out periodically. When I wasn't working there, I had other clients, also generally on long term engagements of the same general kind.
On more recent engagements, I have functioned as the onshore body supplied by an agency. In a couple of those, I've worked with a combination of onshore and offshore contractors of varying skills. One recent engagement, which lasted but a few weeks, was in a shop that was composed almost entirely of H-1B visa holders who turned over yearly, and it showed. Indeed, I am convinced that's the main reason that the client was losing money hand over fist on the contract. Supporting an aging point of sale system with constant turnover is a very bad strategy.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Define "better". "Better" should always include a target, "better for X". And if X is flexibility, then you indeed won't find anything better than hiring a cheap code sweatshop.
|
|
|
|
|
I started saying this in the early 2000's...
The first 5 years or so of offshoring, you're losing money.
The next 5 years or so, you're breaking even(ish), but you're still behind because of the loss the first few years.
By the end of the third five-year period, you're finally money ahead... but now you have no corporate knowledge, the people who've gained experience at your expense now want MORE money (so much that you consider on-shoring the work again), your support hours are often offset significantly or nearly 100% from your work hours, and... no local developers want to work for your company because they've seen what you did with your developers. Your only bet will be to onshore the work through contractors or new companies.
15 years later, I'm seeing my prediction come true... and companies are suffering, badly, as a result.
It's got ZERO to do with flexibility, and everything to do with the appearance of saving money.
I saw it happen, directly, at SunGard Availability Services, EMC, and Dell. I'm sure it's happening elsewhere, too.
Decent managers will see it happening and wil have made the business case to retain onshore devs, in whole or in part, and it'll save those companies a mountain of cash in the long run.
|
|
|
|
|
Member 12009066 wrote: It's got ZERO to do with flexibility, and everything to do with the appearance of saving money.
That's a good point. While to me they may sell it as optimizing flexibility, to the higher-ups it might be sold as being more cost effective.
Recently our senior leadership asked for feedback from the department as a whole, and the most popular suggestions included less outsourcing and fundamentally changing our budgeting model. The feedback seems to have been somehow interpreted as "we need more devops and more agile training."
Console.WriteLine("Scott Clayton");
|
|
|
|
|
Nothing changes until management realizes the approach is wrong. Fully and completely wrong.
If the offshoring team is, say, 10 people, I can hire 5 American developers who meet my higher standards, and as a team, we will provide better quality in a shorter time frame. Quality that includes flexibility, speed, and efficacy, and delivers the end product for a lower lifecycle cost. Been there, done that.
And not just I, but any knowledgeable, experienced software engineer/architect with good leadership and business skills who has had experience managing quality software development teams.
|
|
|
|
|
I will take a different tact...
Change your organization by changing HOW you send work to reduce the error rate.
I work with a set team of offshored people. Same people for 10+yrs... Love it.
One has been with us for like 18+ years...
The issues with turnover and ramp up, is because management FALSELY assumes Men and Months are interchangeable. They are not.
But do what you can so that EVERYTHING they deliver is better, and gets better. Push all the unit testing over there. Use tools that make sure things are happening. Review the code being checked in.
My first response is to SLOW THEM DOWN, while raising their quality. Then work the system so the time shift works to an advantage. This can be quite a valuable skillset to develop.
there are bigger companies facing similar problems. As someone wrote... You are learning what 90% of the companies I feel have learned. It sounds good on paper!
Make a list of the top 10 things you would like to fix, GIVEN the environment is what it is.
Indicate the cost of not fixing those things.
Identify the low hanging fruit, and knock it out.
Any non-trivial process can be improved. And I would improve it so that your time is not wasted testing "crap" that doesn't work.
As an example, VERY EARLY ON, I explained to the first offshore guy that THIS is the formula he should see in his head for getting PAID:
((Hours Spent)*(Hourly Rate)) / (Number of times it took you to get it right)^2
the anticipation is you will spend more time getting it right the first time. After that, your valuable drops of SO QUICKLY that you should not be getting paid much.
That forced us to change our front-end process to eradicate errors in the communication process.
To encourage questions, while forging ahead one what he could forge ahead on. To reduce deliveries to STABLE/SOLID/TESTED only! (I aint got time to test your code, I want to see it run).
You have a basket of Lemons... Be flexible, make Lemonade, Leomon and Vodka, Lemon Martinis, and have some fun!
|
|
|
|
|
Thank you, this is extremely valuable. I can complain all day about how it's not working, but until I can propose a superior alternative, it won't amount to anything.
If I'm understanding correctly, the goal is to work on building the offshore team and any communication patterns, processes and expectations to the point where they're delivering stable, quality increments. I've recently requested tools or training for offshore developers only to be told that the offshore company is contractually responsible for training their own developers. That makes it very difficult to explain how, for instance, I expect unit tests to be written.
That still leaves a few problems such as suddenly losing someone with domain knowledge just because a project lost funding. Unfortunately that's out of my control. One of our offshore teams has fluctuated from 3 to 1 and up to 5 developers within the last year.
Since realistically it's unlikely that they'll stop outsourcing development work, I'll try approaching this from the angle of building a more stable offshore team that can learn our systems and technologies over the long term without getting moved around. Maybe they won't let me build an onshore team, but they may be open to helping me maintain a consistent offshore one.
Console.WriteLine("Scott Clayton");
|
|
|
|
|
Scott,
You are clearly moving in the right direction now... Work with what you are given.
For example, you mention "tools" that you cannot get them to buy. Okay, you have to be like NASA.
You have a capsule in space. YOU start with their inventory of what they have.
- People: Quite Variable
- Tools: Probably fixed, but you should know them!
- Process: You should know this
- Communication Strengths and Weaknesses (BTW, Read Malcolm Gladwell on the power index of language.
I am lucky, Russian has a pretty high power index, like English. But the Indian culture has a lower
power index (Meaning they tend to never say NO, but give a weak yes, which means no!))
- A list of problems you would like to get rid of
- A list of skills/techniques to take advantage of
Now, solve the problems with the available resources. Make it iterative.
The single biggest thing I did was to point out that THEY HAVE ZERO VALUE if they waste time.
Programmers will make "weird decisions" like "I need to prompt for something, but EVERYONE KNOWS its in Kg/m^2,
so I wont mention the units." Sometimes because it might take them a few extra minutes. And the negative impact
of those types of decisions are catastrophic over time.
If I were in your shoes, I would push for:
- Strong Coding Standards, and tools to help make sure all checked in code fits
- Strong Testing Standards/Processes. Keeping in mind, in other countries it is cheaper to use humans, than to use tools.
- A Checklist of things they have to do before they publish
- Clearly a hierarchy of Development, Staging, and Production
- Regression (Any bug found must be tested for in the future)
- Delineation between Critical/Complex systems (High Risk to change), and easy to change/low-risk areas
- REGULAR After Action Reviews (Post-Mortems), I have an article about these. Do more of the good, less of the bad.
Work the process. Get it cleaned up. And make sure that the tools are properly configured for THEIR environment.
Maybe the BUILD/MAKE Process has to start with a PREAMBLE and END with text about what they MUST DO before they commit.
Eventually, say in 6 months. Your process should stabilize. Their quality should go up BECAUSE of fewer hiccups!
The time spent communicating and the quality of the communication should be increasing.
Then, push to add ONE developer locally. Maybe to manage the critical stuff. Maybe to make the UI/UX changes that are cultural, and would eliminate the need for a 2 day turnaround. Management is spending money on resources. They don't want a full team local, and that is fine. Help them find a blend. You WILL be able to see if it is worth it for them or not.
But I will argue that developing these skills would make you more valuable for this company and your next. BTW, this is how I ask my developers to work! I encourage them to keep developing skills for their next job and next company. I want them to have other options, and I MUST treat them like tools to be kept sharp, not grapes I need to squeeze wine from (A feeling I believe most developers will recognize, that I always despised).
I truly hope this helps!
|
|
|
|
|
Yes, this is definitely helpful.
I'll have take a look at that book on the power indexes of languages. Just recently some stuff didn't get done because I understood "yes" to mean yes. Learning cultural differences, especially as they apply to communication, is important.
If I'm honest, I've been slacking on reviewing code recently. Sometimes I give up because I'm strapped for time or because I've already sent it back a few times.
Our release pipeline is decently robust. Pull requests automatically trigger a build and run unit tests. Releases themselves are scripted and require just a few approvals in TFS Release Manager.
Takeaways:
- Document standards, processes, and expectations
- Focus on enforcing quality
- Include offshore in postmortems
- Stop blaming contractors
And by the way, I seriously plan to make this work. This isn't an academic exercise or venue to rant. I really want to fix this up.
Thanks again!
Console.WriteLine("Scott Clayton");
|
|
|
|
|
Scott,
I am glad I could help. DM me if you need any help if you run into specific hurdles.
But usually once you adjust your mindset, the solutions present themselves.
Also, handle it iteratively. It will NEVER be perfect, but it can always be better.
|
|
|
|
|
It's the modern equivalent of building a pyramid; turnover is not an issue.
It was the plan all along: the "priests" do the planning; the actual work is left for someone else.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Just got this in my inbox from edX:
Introduction to Computer Science from Harvard, better known as CS50, is the largest course on the Harvard campus. More than 1,000,000 learners worldwide have already registered for the course on edX.
Now we're excited to welcome three more courses to the CS50 family.
CS50's Web Programming with Python and JavaScript
Web programming with Python! Ain't that a hoot!
Universities are absolutely hilarious these days (or always).
|
|
|
|
|
Python and JavaScript = a giant snake on coffee? What could go wrong?
|
|
|
|
|
Eric Lynch wrote: a giant snake on coffee
|
|
|
|
|
The problem is real and serious!
|
|
|
|
|
I used to think about it ("languages").
UWP is all about "language extensions".
It won't matter (soon) what "language" you choose, if you run the "MS stack", it will all wind up executing .NET "core".
(I used to think SqLite was some sort of SQL Server CE competitor; it can't be because MS "owns" Sqlite; or at least one of the disto's).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
We're down to the final week of the Summer Fun with Arduino Challenge and we've gotten some great article entries over the weekend. So if you've started writing your article and need a reason to finish, look no further - we're giving away a Raspberry Pi and CodeProject mug to the first 10 participants to complete challenge 1 and either challenge 2 or 3. Send in those articles today!
And kudos to Soumya Kishore who is our lucky spot prize winner of the day!
|
|
|
|
|