USの会社で働き始めて1年が経ちました

USの会社で働き始めて1年が経ちました

2021年3月に最初に書きました。同じURLで随時このページを更新していく予定です。

何か質問などがあればTwitterか、こちらのフォームから送ってもらえれば順次このページの最後に書き足します。

働いている会社 / 背景

Parsable Inc. という会社で、ざっくり言うと工業系のフロントライナーのお客さんたちの手順書やチェックリストをデジタル化するSaaSを作っています。ユーザーが入力した項目の内容や時間からボトルネックを探して手順を改善したりするための機能もあって、単なる電子化というよりかは全体最適化を目指すプラットフォームという感じです。

技術的には、GUIでポチポチしながら柔軟に手順書やチェックリストのテンプレートを作れる機能とパフォーマンス計測ができる機能を持ったダッシュボードがあるという感じで、かなり歯応えのある複雑なフロントエンドです。

本社はアメリカのサンフランシスコのダウンタウンのど真ん中にありますが、僕は2020年3月にカナダのバンクーバーオフィスでシニアフロントエンドエンジニアとして採用されました。

採用されてからすぐにCOVID-19の影響でオフィスがシャットダウンされ、それ以来ずっとリモートで働いています。同僚とイベントで何度か顔を合わせてますが、主にオンラインでのやりとりがメインです。

同僚とBBQに行った時に遊んだミニスポーツ。Spikeballというらしい
同僚とBBQに行った時に遊んだミニスポーツ。Spikeballというらしい

英語

「USの会社で働く」ということでまず頭に浮かぶのは英語だと思います。結論から言うと、僕の英語力は徐々に伸びてはいるもののまだ充分に流暢ではないという感じです。シニアポジションの特性上、コミュニケーションの仕事の比重がめちゃくちゃ増えます。ミーティングの中で会話をリードする機会や気の利いたコメント(というより説明)を求められる場面が多くなります。

最初の頃は「こういうことを聞かれるだろうな」というのをミーティングの中で想定しておいて、テキストエディタに英語で書き出しておいて話すというのを試していました。元々英語でのライティングが得意だったので使っていたハックという感じです。最近ではそういう下準備なしに複雑な会話もできるようになってきました。

英語で喋ると頭が悪くなる

第二言語話者の間では通説のようなものですが、英語で話すと日本語で話している時よりも思考のパフォーマンスが下がります。その結果、口から出てくる言葉も稚拙になり、話している相手からは頭が悪いように見えます。これは人間が思考に言語野を用いていて、持っている言語の単語や表現力に思考範囲が制限されるためだと言われています。そのため、英語を使っていると「日本語だったらもっとうまく説明できるのに」みたいなシチュエーションが発生します。

僕は英語を勉強している中でこの話を知りましたが、実際に働いてみてその存在を確かに実感しました。この本当の意味はおそらく日本語 (ネイティブ言語) で働いているうちは一生気付くことができなかったです。それまでの自分の思考のパフォーマンスが自分にとって当たり前すぎて「いざ奪われるとこうなるのか」という稀有な体験でした。

上でも話した通り僕の英語のスキルはまだまだ下の下なので、前もってドキュメントを作ってミーティングに臨むなどしてオーラルコミュニケーションのコストを減らしたり、そのドキュメントの中でも図をたくさん使うなどして補っています。これはこれで仕事全般として良いプラクティスだとは思いますが、いずれはこういうことをしなくてもいいようにあえて徐々にギプスを外していこうと思っています。

英語力の客観的な評価

少し恥ずかしいですが、ざっくり周りの評価を書いておこうと思います。「実際どれくらいのレベルの人がこういうこと言ってるのか」という参考になれば...。

  • テストでのスコア
    • 実はIELTS・TOEFLやTOEICなどの統一的なテストを受けたことがありません...。あればよかったんですが...
      • 周りの人と比べると、おそらくIELTS Overall 6.0か6.5付近で、現時点ではどうあがいてもOverall 7.0以上は取れないと思います
      • TODO: 何か受ける
        • TOEICだとリスニングとリーディングが主ですが、仕事で必要なのはスピーキングなのでパフォーマンス計測にはIELTSやTOEFLが良いと思います
  • 同僚からの評価
    • 『テキストコミュニケーションは完璧、口頭でのコミュニケーションは詳細を欠くことがある』
    • 『君の英語はとてもじゃないがパーフェクトとは言えない、研鑽して欲しい』
      • 言われた日と次の日は正直めちゃくちゃ凹みました
      • 5ヶ月くらい経った後で同じ人から 『かなり向上を感じた。今はプロフェッショナルな感じがある』 と評価が向上しました💪

ただ、日によってめちゃくちゃ英語が上手な日とものすごく下手な日があります。おそらく身体的なパフォーマンスと同じように、頭脳やメンタルのパフォーマンスによって変動があるんだと思います。また、休みの日に日本語のYouTubeを一日中見ていた次の日の月曜日なども英語がすごく下手になったりします。

ボードゲームのミートアップにて。英語でのルール説明はするのもされるのも難しい。雰囲気でボドゲをやっている
ボードゲームのミートアップにて。英語でのルール説明はするのもされるのも難しい。雰囲気でボドゲをやっている

ポジション

北米の会社だと経験やスキルによってレベルが何段階かに分かれているのが普通です。定義や基準は会社によってまちまちですが、大まかに次のような感じです。

  • Junior: 同僚などの助けを借りてタスクをこなせる。複雑な仕事は誰かに咀嚼してシンプルにしてもらう必要がある
  • Intermediate: 誰の力も借りずに自走できる。即戦力といえる
  • Senior: プロジェクトやタスクを主導できる。専門的な知識を持つ

立ち回り

上でも書いていますが、シニアポジションになるとコミュニケーション的な仕事の割合が増えてきます。今のところコードを書く6:コミュニケーション4といったバランス感です。会社に長くいればいるほど中心人物になっていくので、いずれコミュニケーションタスクが半分を超える日が来ると思います。

他者からの評価は「技術に明るい」「綺麗なコードを書く」という感じなので (自分の認知している中では...ですが) 、自分の立ち回りもその期待に寄せているところがあります。具体的には、会社の中の文化的な話題よりも、技術的な議論に積極的に参加しています。自分の得意分野の仕事が増えていくように印象付けしている形です。先日 (2021年3月) いくつかある年間賞のうちの1つを獲得したので、今のところまあまあうまくいっているのかなと思います。

自宅の作業環境。ベッド下にデスクを置いてマイクを吊るしている
自宅の作業環境。ベッド下にデスクを置いてマイクを吊るしている

技術

会社で使っているのはいたって普通の技術スタックです。対外的に話せる範囲 (面接で候補者に話している範囲) だと、

  • TypeScript、React (Web)、React Native (iOS/Android)、Electron (デスクトップ)
  • Draft.jsでのリッチテキストエディタやWebSocketでのソケット通信など
  • 自社デザインシステムを構築
    • いつでも参照できるようにAbstractで定義を管理
    • Webの実装はReactとStyled Systemを利用、Storybookドリブンで開発)
  • 十数ヶ国語のi18n、翻訳SaaSを通じての自動反映フロー
  • Web APIは古い箇所はApache Thrift、新しい箇所はGraphQLに移行中
  • 既存フロントエンドがでかいのでマイクロフロントエンドアーキテクチャに移行中

といった感じです。

北米は進んでいるのか? / 優秀なのか?

よく聞かれますが、どうなんでしょう...。ただ、以下のことは共通して言えると思います。

  • 新しい技術トピックの認知具合はどこの国でもほとんど同じです。アンテナを張っている人は知っていますし、レガシーな技術で仕事をしている人もいます
  • 「ある技術の名前だけ知っている」という状態の人は少ないです。ドキュメントが母国語 (英語) なので読めばわかるというのが理由だと思います
  • クリーンアーキテクチャやDDDのような技術的方法論の素養については二極化しているように感じます。知っている人は本当にめちゃくちゃ詳しくて、知識も実経験もある所謂アンクル・ボブみたいな人がたまにいます
    • 特定的に「DDDに明るい」みたいな人は珍しいですが (そもそもDDD自体がが古すぎて認知されていないのかもしれません) 、Technical Design Document作りの一環・基本として似たような知識を持っている人が多いです
    • ただ、マイクロサービスとかオニオンアーキテクチャみたいな構成系の方法論は認知度が高いです
  • 僕が渡航してきた2018年の夏時点ですでにReact Nativeを教えている専門学校がちらほらありました
React Vancouverというミートアップの時の様子
React Vancouverというミートアップの時の様子

採用

エンジニア採用にも絡んでいます。この箇所を書いている時点 (2021/03/19) まででだいたい20人くらいの候補者と面接したと思います。北米でのエンジニア採用について興味のある方は以下の記事もよかったら読んでみてください。

TODO: あとで書く

また、通年とはいきませんが弊社は色々なエンジニア職種で積極的に採用しています。基本的に即戦力になるようなレベルの方を探していますが、実力があれば経験年数は問いません。ただ、経験が少なすぎるとテクニカルリクルーターの目に止まらない可能性もあるので、興味のある人はTwitterかこちらのフォームから連絡してもらえるとそういう運要素なしに紹介できます。

いただいた質問とその回答

Q. 記事内に「君の英語はとてもじゃないがパーフェクトとは言えない、研鑽して欲しい」と言われたとありますが、"英語"でどのように言われたのか教えて頂くことは可能でしょうか?

A. 1-on-1 ミーティングの中で口頭で言われたことなので正確にどんな表現で言われたかは覚えていません...。が、Your English has room to improve to some extent. I think you are doing hard work on your own practice but please keep it going. (君の英語はまだ完璧じゃないから、めっちゃ向上させようと頑張ってると思うけどそれを続けて欲しい) みたいなニュアンスだったと思います...。

Q. マイクロフロントエンドを採用しているとあるのですが、グローバルステイトの共有が困難になると思うのですが、そこまでして得られるメリットはなんなのでしょうか?

A. 一つ目のメリットは小さな単位でテストとデプロイができるようになることです。 あるシングルページアプリケーションのコードが数十万行以上あるのですが (正確な行数は把握できていません。もしかしたら100万行以上あるかもしれません) 、機能の一箇所を変更しただけでも (理論的には) この巨大なコード全体のリグレッションを覚悟しなければなりません。細かい単位に分割されて小さくテスト、デプロイできるようになっていれば今より頻繁にユーザーに新しい機能や修正を届けることができるようになります。

二つ目のメリットは仕事の分割をしやすくなることです。「コンウェイの法則」の一言で言い換えられるかもしれません。アプリケーションが細かいピースに分割されているということは、それらの結合性が弱いということです。マイクロフロントエンド間はある一定のルールに従って互いに疎通していて、このルールに沿っている限りは自由に中身を変更できます (疎な結合性の確保) 。この構造になっていると、この細かいピースごとにタスクとチームを綺麗に分割できます。2つ以上の関心事をまたぐ変更であっても、無理なくチームごとに異なるロードマップで非同期的に進めていきやすくなります。**

コンウェイの法則 − 組織が作るシステムの構成と要素間の疎通方法はその組織のそれをそっくり反映させたものになる
コンウェイの法則 − 組織が作るシステムの構成と要素間の疎通方法はその組織のそれをそっくり反映させたものになる

Q. キャリアのフリーランスですが、これはカナダに渡った後でしょうか、その場合、ビザの区分を教えて頂けないでしょうか🙇‍♂️ 個人ブログを見る限り、ビジタービザでの就労の方もいるようですが、カナダの労働市場に影響を与えない場合でも不可、と労働局から回答を貰ったため、どのビザか参考にしたいです

A. カナダに渡った後で、学生ビザの期間でした。ちなみに顧客は日本の会社で、自分は日本の個人事業主としてです。一応学生ビザに週20時間までの労働許可がついてたのでケアしてた形にはなりますが、短期間のビジタービザでも日本の仕事をする分には問題ない認識です。自分が日本の個人事業主としてでないといけないので、たとえ海外のクライアントでも契約や報酬の振り込みに際して日本のルールに則ってもらう必要があると思います。なんにせよ、プロに頼んで上手に問い合わせてもらうのがいいと思います。聞き方によって (もしかしたら担当者によっても) 回答が違うことがあります。

Q. こんにちは。Asaiさんには《某プログラミングスクール (以前講師サイドでお手伝いしていました) 》 のJavaScript講座でお世話になった者です。その節はありがとうございました!私は今、海外でフリーのデザイナーをしております。

Asaiさんには就職以外にもフリーランスかまたは起業など他にも選択肢があったのではないかと推測しましたが、就職という選択をしたのは何故ですか?

A. フリーランスだと北米の風土や流儀を100%余すところなく経験できないと思ったからです。 雇用形態はあまり気にしていないのですが、「チームの一員である」ことは僕にとってマストです。なぜなら「外部リソース」のように扱われてしまうとアクセスできる情報に制限があることがありますし、会社の文化を感じられるような重要なチャンスに顔を出せないことになります。たとえば僕は今の会社で面接官として採用にも携わっていますが、フリーランスという形でも同じことができるかどうかは疑問です。

また、僕は起業は個人ではできないことをするための手段だと捉えています。具体的には出資を受けたり、他の大きな会社との契約をしたり、あとは節税でしょうか。僕が自分でビジネスを始めて必要性があれば起業というアクションはもちろん選択肢になります。あるいは、フリーランスとして働いていて利益が膨らんできたら、ということもあるかもしれません。 何にせよそういった「起業する理由」が前に来るべきだと思っていて、今はまだそのタイミングではなかったというだけです。