オフショア開発は辛い

こんにちはこんばんは。

ベトナムのオフショア開発の窓口になって早半年が経過したので、そろそろこれまでを振り返ってみます。

オフショア開発とは

そもそもオフショア開発とはなんぞや?を、さくっとおさらい。


オフショアリングは一つの国を拠点としていた営利事業を別の国に移転する経済行為と定義される。主な動機は既存の事業拠点より低額の人件費、税制度などであるが、近年、自国で足りていない専門家を補完するために他国の人材を活用する手段として注目されている。アウトソーシングとオフショアリングは類似した意味を保持するため度々対比されるが、同一国内での委託はオフショアではなくアウトソーシングを指す。逆に海外への業務の委託はアウトソーシングではなく、オフショアリングと定義される。
オフショアリング(wikipediaより)

正式名称は「オフショアリング」と言うんですね。ふむふむ。知らなかった。

オフショアにした理由

自分の会社ではベトナムへ開発を依頼しました。
オフショアをやってみる、ということを決めたのは自分ではなくじょーちょーですが、関わった人間としてオフショアを選んだ理由所感をまとめます。

理由その1:安い
当時(半年ちょっと前)、日本の開発会社とオフショアで単価を比べたとき、オフショアは日本の約3分の1。
wikiに記載されている通り、人件費が安いです。さらに物価も日本の3分の1程度。
予算がなかった&これからはオフショアも使いこなしてなんぼ!みたいな流れがあり、あれよあれよという間に話はとんとん拍子で進みました。
最近ではミャンマーが安いと小耳に挟みました。

理由その2:日本語がわかる
オフショアで上流工程をやっている人は、大学を出ている人がほとんどです。
しかも、日本でいう東大のような、トップクラスの大学出身者が多いのも特徴。そんなハイクラスなひとたちが多いので、日本語もきっちり勉強して「読み」「書き」お手のもの、という人がほとんど。
web面談でお話をした時も、何不自由なく会話でき、笑いが起きることもありました。

理由その3:働く文化が日本に似ている
日本に似てよく働く人がほとんどです。(と言われる、見られることが多い)
また、日本と比べても休日の少ない国です。一番多い休みで2月上旬にある旧正月の5日間くらい。
国民の休日がほぼないので、3連休などがほとんどありません。
=たくさん働いてもらえます。
ただし、実際にオフショアをしてわかったことは、みんな早く帰る。
日本みたいに「残業万歳!!」とかしない。
16時(VN)にはいないとかザラ。いいけどさ、、早く帰れるのいいなあとか思っちゃう。笑
ちなみに日本とベトナムでは2時間時差があります。ベトナムが2時間早いです。
日本18時→ベトナム16時

やったこと


自分は主に
・ブリッジとのコミュニケーション
・設計書確認
・テスト仕様書作成と確認
のコミュニケーター寄りのお仕事から始まり、
・開発
・進捗管理/調整
・設計書作成
・テスト仕様書作成
・ソースレビュー
といった上流工程&実装係さんへと変貌を遂げていきました。


超初期(立ち上げ~1か月)


もともと、社内で提供しているwebサービスをアプリ展開する、という目的のもと開発がはじまりました。
オフショア開発導入が決まり、オフショアの”オ”の字も知らない状態でアサインされます。
アサイン理由:アプリ開発担当だから
社内にアプリ開発者がおらず、唯一アプリを担当していた(といってもソースをいじることはなく、ストアへの申請とテスト、リリースを担当)自分に白羽の矢が立ちます。
当時は「社内以外の人と一緒に開発するとか楽しそう☆」くらいにしか考えてませんでした。

担当のブリッジSEさんとskypeでご挨拶。
第一印象は「真面目そう」でした。
一通りこちらの仕様書を渡して、見積もり依頼。
ここでまさかの事件勃発。

オフショア事件簿その1『やりたくありません』
はい、初っ端からクライマックスみたいな事件。
とりあえず「何言ってるんだろうこの担当者…?」状態。
「冗談だよね、、、?」以外の感想が出てこない。
よくよく話を聞いてみたところ、
前回の開発でほぼ知見のない言語で開発して、相当苦労した。
その言語でやらねばならないなら開発したくない!ということでした。

まあわかるけど、ちょっとは分かるけど、、最初からこの言語でやるよって言ってたじゃん、、、

ここまでで1か月が経過。まだ開発始まってない。

初期(~3か月)

信じられないくらいいろんなことがありました。
まとめきれないのでTOP3にして書き起こし。

第3位『間に合いません』
嫌な言葉ですね~。最近は聞きなれてしまって感覚が麻痺していますが。
基本的に、本当に間に合わない段階になってから『間に合いません』と報告をくれます。
例えば、納品の前日とか。納品当日とか。納品の次の日とか。(実体験)
おそらくほっといたら終わってない報告もせずヘラっとしていると思います。(実体験)
”進捗管理”という概念がそもそもないみたいです。
開発事項があったら、開発者集めて、”よーいどん”で開発させる。
ブリッジは開発項目の割り振りまではやるけど、そのあとの回収だったり管理は基本的にやらない。で、本人先に帰る。みたいな

なので、最初のうちは受託でもラボでも、感覚がつかめるまでは依頼側が進捗管理の手綱をちゃんとつかんでおいたほうがいいです。
もしくは、トレーニング期間として1か月くらいちゃんと様子をみる。
ちなみに、「進捗どう?」と質問しても、だいたい「問題ありません」と返してきます。

その理由の一つは国民性にあると思います。
ベトナム人の国民性としてプライドがとても高いということがあげられます。
良いことではあるのですが、マイナスの報告が上がってこない、という欠点があります。
これは開発を依頼している側からすると致命的な問題です。
最初の頃はそんなこと知らなかったので、だいぶ痛い目をみました。。
「できてるって言ってたのに、全然できてないじゃん!」みたいな問題は日常茶飯事で、とりあえず間に合ってないという事実だけ残るというどうしようもない状態。

これを避けるには
1.最初のうちはちゃんとコントロールする
2.信頼関係を築く
以上の2点に尽きます。
信頼関係が築ければ、「間に合ってる?問題ない?」の質問に対して8割方返答がきます。
信頼関係を築くコツは同じ立場で会話をする、仕事や依頼している内容だけではなくプライベートな話をする、酒を飲みかわす(最強)です。
昭和の時代を強く生きたリーマンに接するがごとく、熱い飲みにケーションで絆を深めましょう(白目
ベトナムの人はだいたいお酒強いのと、一気飲み文化があるので心して挑むこと。

第2位『オラ、仕様わからね』
確かにちょっと難しいもの頼んでるかもしれないけど、ほんのちょっとでも仕様書読んでくれた!?っていうくらい確認が足りない。
この現象が発生したおかげで、毎日半日以上エクセルとにらめっこする羽目に。
書いた/書いてない問題は絶対起きるので、できるだけ事細かに記載しようと心に決めたときでした。(辛い思い出)
もともと多少のコミュニケーションの壁があるので、伝わらないときは本当に伝わらないです。
そこにやきもきせず、英語いけるなら英語で書いちゃうくらいの勢いが大事。
ベトナムでは若者(~30代前半くらい?)は英語が話せます。読めます。
特にエンジニアは若い人が多いので、もうどうにもならん!となる前に英語を使うことを検討するのも1つの手です。
なお、エンジニアは基本ベトナム語(英語)しか話せません。仕様書を日本語で書いた場合、翻訳者さん(テスター兼翻訳が多い)もしくはブリッジがベトナム語に訳してから開発がスタートします。
文章にせずとも記載できる部分は、文章以外で共有するのがおすすめです。

第1位『UIだけ作った!!!(ドヤ)』
これね、嘘みたいなほんとの話ですよ。
忘れもしない、あれは納品3日前のこと。
あんまりHttpTraceLogでないなー?変だなー?でも提供してくれてるアプリでは普通に動いてるんだよなー?
なんてぼんやり考えてた時のこと。今となってはぼんやり考えてるんじゃないよ、早急に確認しろよですが、当時はアプリ開発に知見のある人間が誰もいなかったので、この後に起こる恐ろしい事件に気づく術もありませんでした。

「API、全く呼ばれてません。」

この一言から事件発覚。
UI上ではうまく動いてるように見えている部分が、実はアプリ内でゴリゴリ生成している部分だった。
しかも、サーバの保存形式と全く違う生成方法しているので、
・アプリを直す(スケジュール立て直し)
・API直す(スケジュール立て直し)
の2択しかない。しかもどっち選んでもスケジュール立て直す必要あり=いろいろ遅れる。

「API呼んでないよね?」の質問に対してブリッジから帰ってきた返答が、冒頭の
「UIだけ作った!!!(ドヤ)」

ま じ か。
こっからの修正道のり長いよー、なんでドヤってるんだー泣
じょーちょーがすごい顔してる…
という地獄絵図でした。

結局、アプリ側をオフショアと社内総動員で直しました。
結構思い出したくない思い出。笑

現在(3か月~今まで)

そんなこんなありましたが、プロジェクトが進むにつれてより具体的な課題問題にぶち当たるようになりました。

エラーハンドリングしてない問題
自分がひよっこから少しだけコードが読める書けるようになって気づいたこと。
ほんとびっくりしちゃうくらいエラーハンドリングしてない。
なんなら200番も拾ってない。
「なんで!」って聞くとお決まりの「だって仕様書に書いてn」
そういう問題じゃないダロウ。
とかぶつくさやっても仕方ないので、エラーハンドリングとvalidateの実装は自社(主に自分)が担当しました。
餅は餅屋的発想で、細かい部分は自社、大まかな開発はオフショアと役割分担するのもよいかもしれません。
本当はすべてオフショアにおまかせして、運用サポートだけする状態がベストみたいですが。
セキュリティインシデント起きても謝るの自分とこの会社ですからね。どんなやり方であれ品質はちゃんと担保できるようにしとかないとだめ、絶対。

他人のソース勝手にコメントアウト問題
これもなかなかぶっ飛んでる。開発の中で1番話題になったかもしれない。
テストを進めているうちに、自社で直したはずの箇所でバグが上がっていて
「おかしいな?」と思いgitのコミットログ見てみる。
あれ?オフショアの担当さんが自分と同じファイル修正してるな…なんか間違えてたかな?

ん…?…自分が修正したとこがまるっとコメントアウトされとる…

「これどういうこと??なんで自分の修正全部コメントアウト??理由??」


「ごめん、ほかの修正直そうと思って、ここのソースよくわからないからコメントアウトした☆」



言葉もでませんでした。笑
今となっては笑い話ですが、当時は爆発寸前で依頼するの今すぐやめて返金してもらおうかと考えたほどです。

きつーくブリッジにお説教して、なんとかイライラを収め。
よく耐えた自分。
あ、ベトナム人に対して注意や叱るときは、絶対に人前でやってはいけません。
特に部下の前で叱ることはご法度です。下手すれば刺し殺されます。(くらいひどい目に遭います)
日本みたいに、人がいる前で怒鳴り散らすは絶対に絶対にだめです。
なぜなら彼らはプライドが高いから。
注意しなければいけないことや叱る必要がある場合は、1対1でお話しましょう。

---
正直言ってこれまであげた内容をよんでいただければわかる通り、オフショア開発は辛いです。
ほかにも本当にさまざまな珍事件を起こしてくれて、だいぶ鍛えられたし、だいぶ精神力がついたと思います。

ですがこの経験を通していいこともたくさんありました。
スピード感のある開発
英語使える
社外の人との一体感ある改修
何より国や人が熱い
サッカーに燃える
海外出張できる(会社によりますかね、、でも常駐せずとも1週間くらい依頼先の会社に行くor来てもらうがあると関係性だいぶ変わります!)
ベトナムのおいしいごはん食べられる
ベトナムの美味しいスイーツ食べられる
ベトナム美味しい

ほかにもいろいろ。
これはまた別の機会にまとめるとして、以上がこの半年の健忘録です。
もう少しでアプリリリースになるので、それまで突っ走ろうと思います。

このnoteが今オフショア開発をしている人、これから検討している人に何かもたらすきっかけになることを願って。
そして、半年前に報われないなーと思いながら仕事してた自分のなぐさめに。
オフショア開発は辛い、けど、ちゃんと向き合えば楽しい。多分。

この記事が気に入ったらサポートをしてみませんか?