2023年振り返り

今年も軽く振り返り。

仕事

昨年後半にスタートアップをレイオフされ、2月からAdobeで働き始めました。

shinichy.hatenablog.com

AdobeではiOSのカメラアプリの開発をしていたのですが、夏頃に組織再編でチームが解散してしまいました。1ヶ月半以内に社内で別の仕事を見つけないと雇用契約を終了すると言われ、一時帰国の予定をキャンセルして急遽仕事探しを始めました。

今回も社内外で色々な仕事に応募しましたが、幸い期限内に社内の別チームで仕事を見つけることができ、レイオフを免れました。新しいチームではAdobe ExpressのアドオンSDK を開発しています。Adobe ExpressはWebアプリなのでアドオンSDKもTypeScript等のWebフロントエンド技術が使われています。仕事でWebフロントエンドは今まであまり触ることがなかったので、色々勉強中です。Webバックエンド->モバイル->Webフロントエンドと使う技術が変わってきてキャリアが迷子になりつつある気がしますが、仕事があるだけで感謝です。

子育て

自閉スペクトラム症(ASD)の息子は3歳になり、リージョナルセンター経由でしていたセラピー(療育)は終了しました。その後セラピーを続けるにはIndividualized Education Plans (IEP)というローカルの学区経由で受ける必要があると言われ、アセスメントを受けたものの支援の必要性なしと判断されました。確かに以前に比べてコミュニケーション能力も上がり、先生の質問にもしっかり答えられるようになっているので、通常のプリスクールで十分なのかもしれません。ただASD特有のこだわりや偏食はどんどん強くなってきている気がするので、今後また支援が必要になる場面はありそうです。

旅行

今年は12月上旬から1月頭まで日本に一時帰国しています。日本に帰る直前に息子が風邪をひいてしまい、解熱剤を飲ませてなんとか飛行機に乗せましたが、機内で何度も吐いたりして地獄でした… 日本に着いてからも1週間ほど治らず近所の小さなモール以外どこにも行けませんでした。その後ようやく風邪も治り、息子の大好きなアンパンマン列車に乗って香川、高知、徳島に行ったり、神戸や京都に出かけたりして関西エリアを満喫しました。年末は妹家族も実家に来て賑やかな年越しになりそうです。

ゲーム

ゼルダ、FF16、マリオRPGスターオーシャン2リメイクをやりました。ゼルダも面白かったですが、個人的にはFF16が一番でした。とはいえあまりやり込む時間もなくサブクエストは半分くらいしかやりませんでした。余裕があればDLCもやってみたいです。来年はFF7リバースが楽しみです。

来年

プライベート面でさらに忙しい年になりそうなので、首にならないよう仕事を頑張ります。

アメリカでレイオフされました。

Metaが11,000人をレイオフした昨年の11月9日、私の働くスタートアップでもレイオフがあり、レイオフの対象となってしまいました。
昨年3月にも勤め先のスタートアップが倒産してしまい、6月から働き始めたばかりだったので、またかという感じでした。

簡単な経歴

3年半前に渡米したベイエリアで働くソフトウェアエンジニアです。レイオフまではWillowというウェアラブル搾乳機を作っている会社でiOSアプリ開発をしていました。ビザはH-1Bです。

レイオフ当日

当日突如Zoomで参加者は発言できない一方通行の全社会議が設定され、製品開発ロードマップの変更とそれに伴う組織再編のためレイオフを実施するというアナウンスがありました。会議後レイオフ対象かどうか知らせるメールが届き、自分はレイオフ対象であること、退職日は1ヶ月後、退職金や退職後の保険が数ヶ月分セットになった退職パッケージの内容が書かれていました。その後人事の方と面談があり、通常はレイオフされたその日に退職だが、私の場合はH-1Bビザで働いているので退職日を1ヶ月後に設定してくれたことを知りました。H-1Bビザは解雇されると60日以内(グレースピリオド)に次の仕事を決めないとビザが無効になるため、退職日を1ヶ月先延ばしにしてもらったのは非常に助かりました。
レイオフの次の日に再度全社会議があったようで、私は参加しませんでしたが後でレイオフに関する資料が送られてきて、直属のマネージャ含めて所属していたアプリ開発チームほぼ全員が対象となったことを知りました。

仕事探し

レイオフ後は簡単な引き継ぎ作業くらいしかやることがなかったので、最終日までほぼフルタイムで仕事探しをしていました。仕事は前回と同じくLinkedInとTwitterで仕事を探しました。iOSアプリ開発はまだ経験が浅く、仕事にも慣れてきて楽しくなってきておりもう少し続けたいと思ったので、今回はiOSアプリ開発もしくはSwift言語を使う仕事を探しました。
ありがたいことにLinkedInとTwitter経由でたくさんメッセージをいただきました。それ以外で特に役に立ったのが前職の同僚から教えてもらった募集中の企業一覧を集めたスプレッドシートでした。Metaのレイオフ後有志の方が作成されていたようです。
このリストを見て興味のある仕事に片っ端から応募していきました。約40社ほどに応募しました。

選考の流れ

書類審査を通った後の流れはリクルーター面接→技術面接(主にコーディング面接)→オンサイト面接(コーディング面接数回+System design+Behavioral面接)→最終面接→オファーという感じでした。会社によっては技術面接の後にTake home assignmentと呼ばれる簡単なアプリ開発の課題があったりしました。最終面接はない所も結構ありました。

技術面接対策

ソフトウェアエンジニアには必須のコーディング試験対策はGrind 75というサイトでやりました。このサイトでは試験対策に割ける時間やトピックに応じて解くべきLeetCodeの問題をカスタマイズできるので、短期間で苦手な問題を対策するのに効果的でした。また、LeetCodeの解説は分かりづらいものもあり、そういう時はNeetCodeというLeetCode対策サイトの人がYouTubeで解説している動画を見るとより分かりやすかったです。
モバイルのSystem design対策はhttps://github.com/weeeBox/mobile-system-designを見て勉強しました。

ポジションクローズ

今回はMeta等大小様々な会社がレイオフしているので転職市場にライバルが多い+大手は積極的に募集している会社も少ないということもあってか、選考中に応募しているポジションがなくなったということが2回ありました。Take home assignmentの後とオンサイト面接の後にあり、いずれもこちらは何時間もその会社の選考に費やしていたので、面接後何のフィードバックも得られず徒労感だけが残りました。仕方ないですが、できれば面接結果が良かったか悪かったかくらいは知りたいですね。

ホリデーシーズン

アメリカでは11月後半のサンクスギビング(感謝祭)からクリスマス、年明けまでがホリデーシーズンと呼ばれ、多くの人が長期間仕事を休みます。仕事をしている人にとっては嬉しい季節ですが、求職者にとっては全く嬉しくなく、面接がすぐ組めなかったり面接後の連絡に時間がかかったりして選考期間がかなり伸びてしまい歯痒い思いをしました。H-1Bビザのグレースピリオドは60日ですが、祝日等の考慮は一切ないので、11月前半にレイオフされた人は、ホリデーシーズンで会社が休みな期間が2-3週とすると実質40日くらいしか次の仕事を探す猶予がなかったのではないかと思います。私のいた会社のように退職日を先延ばしにして猶予をもらえればまだマシですが、ホリデーシーズン前にH-1Bビザ労働者をレイオフする会社は鬼ですね。

風邪

積極的に面接を受けていた12月の頭に結構重い風邪をひいてしまい、1週間くらい面接できませんでした。体調不良で寝込んでいる間にもビザの期限は容赦なく迫ってくるので、何とか面接できるくらい回復してからすぐ再開しました。ただその後も咳が1ヶ月くらい続き、面接中にも喋りすぎて喉が乾燥してたまに咳き込むような状態で結構辛かったです。幸い面接は全てリモートだったので、咳が出そうになったら一言断ってミュートして咳をしていました。寒い季節は風邪もひきやすく、転職活動中はストレスも多いので体調には気をつけたいですね。

オファー

様々な困難を乗り越え、なんとか4社からオファーをいただけました。4社中3社はリファラル(知り合い経由)なので、やはりアメリカではコネは大事ですね!

次の仕事

Adobeのカメラアプリを開発しているチームでモバイルエンジニアとして働きます。カメラや画像処理周りの開発はあまり経験がないので、色々と楽しめそうです。

退職後の健康保険

今回は退職パッケージとしてCOBRAが数ヶ月分サポートされていたので退職しても安心かと思いきや、退職してからしばらくするとKaiserのサイトが使えなくなってしまい、医師への問い合わせや薬の注文等ができなくなりました。COBRAの会社に電話するとどうもKaiser側でCOBRAの手続きに時間がかかっているらしく、元通り使えるようになるまで3週間ほどかかりました。前回も退職した後に保険には苦労させられたので、本当どうにかしてほしいですね。。

H-1Bビザトランスファー

オファーにサインしてからH-1BのpetitionをUSCISに提出するまで1ヶ月かかりました。期限ギリギリで何とか間に合って良かったです。前回はもっと早かった気がするのですが、レイオフの嵐で申請者が多くなって移民弁護士が忙しいのかもしれません。

まとめ

仕事探しは大変でしたが、給料も上がるので結果的にはレイオフされて良かったのかもしれません。とはいえ昨年は2度も自発的でない転職活動をさせられかなり消耗したので、しばらくは新しい仕事に集中したいです。

2022年振り返り

今年も軽く振り返り。

仕事

今年は仕事面は人生で一番大変でした。3月下旬に働いていたスタートアップが倒産してしまい、なんとか別のスタートアップに転職したと思ったらわずか5ヶ月後に会社の業績不振で所属チーム全員レイオフされてしまいました。スタートアップに限らずMeta、TwitterAmazon等の大手でもレイオフの嵐で今年のアメリカのテック業界はかなり厳しい状況でした。不景気は来年もまだ続くみたいなのでしばらく我慢ですね。まだ転職活動中ですが、幸い複数オファーをもらっている状況なので、来年もアメリカに残ることはできそうです。

shinichy.hatenablog.com

また落ち着いたら2回目の転職活動の結果もまとめようと思います。

子育て

自閉スペクトラム症(ASD)の2歳息子の子育てに奮闘していました。療育は週1回のグループセラピー(1.5h)とZoomでの個人セラピー(1h)をしています。セラピーの甲斐あってか以前よりもアイコンタクトが増え、逆さバイバイが治り社交性が増したような気がします。とはいえクレーン現象や偏食などまだまだ改善してほしい所もたくさんあるので、気長にやっていく必要がありそうです。

shinichy.hatenablog.com

旅行

今年は3年半ぶりに日本に一時帰国でき家族や親戚に息子を見せられたのが嬉しかったです。しかもちょうど1ドル150円の時だったので金銭的にも大分助かりました。ようやくCOVIDの状況も落ち着いたので、来年からは年1回一時帰国したいです。息子はアンパンマンが好きなので、神戸のアンパンマンミュージアムや岡山を走るアンパンマン列車で大興奮していました(3回乗りました)。広島の厳島神社も良かったです。日本で美味しい食べ物をたくさん食べるとやはり日本が恋しくなりますね。

来年

まずは次の仕事を決めるのと、息子がプリスクールに通う年齢になるので、学校選びに頭を悩ませそうです。

息子がアメリカで生まれ、自閉スペクトラム症と診断されるまで

7月はアメリカではDisability Pride Month(障害者プライド月間)です。6月のLGBTQ Pride Monthに比べて知名度が低い気がしますね。うちには2歳の息子がいますが、息子は自閉スペクトラム症(ASD)という障害があります。以前は単に自閉症と呼ばれていたようです。息子はアメリカで生まれており、せっかくなのでアメリカで生まれた子がASDと診断されるまでの体験談をまとめておこうかと思います。あまりいないと思いますが似たような境遇の方の参考になれば幸いです。

自閉スペクトラム症とは?

自閉スペクトラム症(Autism Spectrum Disorder: ASD)は、対人関係が苦手・強いこだわりといった特徴をもつ発達障害の一つです。割合としては68人に1人がなり、男性の方が女性よりも5倍多いらしいです。原因は不明ですが、遺伝と環境要因の組み合わせと考えられているようです。障害なので一生治ることはありませんが、各種セラピーを通じて発達を促すことは可能で、なるべく早期に始めるのがいいとされています。詳細は他のサイトを読んでみて下さい。

自閉スペクトラム症とは - 原因、症状、治療方法などの解説 | すまいるナビゲーター | 大塚製薬

KaiserのASDの紹介ページ(英語)

生まれるまで

妻の妊娠が判明してからKaiserの病院の産婦人科にお世話になっていました。幸運にも近くの病院には日本人の先生がおり、その方にずっと診てもらっていました。しかも奇跡的に出産当日に妻が入院した病院におられ、息子の出産を手掛けていただきました。出生前検査もしましたが特に問題なく、生まれたのも39週目で、当日も問題なく順調に産まれました。無痛分娩で次の日には回復したので、1日で退院しました。高齢出産だとASDのリスクも上がるらしいですが、妻はこれにも該当しませんでした。ちなみに出生前検査ではASDなどの発達障害は分かりません。

最初の違和感

1歳の頃までは順調に育っていて特に何も思わなかったのですが、最初に違和感を持ったのは歩くのが遅いことでした。ハイハイからつかまり立ちは10ヶ月くらいにしたので、そろそろ歩くかなと思っていたのですが、つかまり立ちから全く歩く気配がなく、成長につれハイハイがどんどん高速になるだけでした。周りの子はもうみんな歩けるようになっているのに、1歳4ヶ月くらいまでこの調子だったので、焦りもあり手をとって歩く練習を始めました。すると1ヶ月くらいでなんとか自力で歩けるようになりました。これ以外にも指差しをしなかったり、公園で他の子が近づいて来てもガン無視したり、偏食が激しかったりと、周りの子に比べて色々気になることが出てきました。

1歳半検診

1歳半検診の時に発達について確認するためのアンケートに色々答えました。歩くか、指差しするか、ボールを投げるか、発語はあるかといった内容だったと思います。医者がそれを確認し、発語がないのが気になるのでより詳細なEarly Developmental Screening Program(EDSP)のアンケートに答えるよう言われました。

EDSPのアンケート結果

このアンケートにはAges and Stages Questionnaire (ASQ-3)Modified Checklist for Autism in Toddlers - Revised (MCHAT-R)の内容が含まれており、それらの結果によると息子はコミュニケーション力、問題解決力、社会性が低く、ASDのリスクが高いので、サンフランシスコにあるKaiserのAutism Spectrum Disorder (ASD) Centerを紹介され、そこでより詳細な検査を受けるよう言われました。同時にKaiserのSpeech Therapy Departmentも紹介され、スピーチセラピーを開始するよう言われました。まだASDと確定したわけではなかったのですが、高リスクと知って結構ショックでした。それまでASDについて何となく聞いたことあるくらいで詳細なことは知らなかったので、ネットで色々調べ始めました。 ASDについて調べるとこれは息子の説明書かと思うくらい見事に息子の特徴がいくつも書かれており驚きました。この時点で息子はおそらくASDなんだろうなと思いました。

ASD Centerによる詳細な検査

後日ASD Centerの医師によりZoomで2時間ほどの検査を受けました。最初の1時間は息子に色々な指示を出したり妻と遊ぶ様子を医師が観察し、残りの1時間で色々な質問をされました。最後に結果が伝えられ、一歳半時点ではまだできることが限られているので断言できないが、息子はやはりASDの可能性が高いので現時点では軽度のASDと診断して各種セラピーを受けるのがいいと言われました。幸い現時点では知的障害は認められないとのことでした(ASDを持つ人のうち65%は知的障害がないらしいです)。後日ASDの診断書をもらいました。

セラピー

その後KaiserのPediatric Developmental Disabilities Officeから連絡があり、Kaiser経由で外部のASDのセラピーを受けるよう言われました。Kaiser自体はセラピーを提供しておらず、外部のプロバイダーに頼っているようです。保険はKaiserの保険が使えます。 その後BHPNという所から連絡があり、Applied Behavior Analysis (ABA)を開始したいのでまずはアセスメントを受けてほしいと連絡が来ました。 これと並行してKaiserから紹介されたSpeech, Incという所からも連絡があり、週に1回のスピーチセラピーを開始しました。 またKaiserとは別にカリフォルニア州にはリージョナルセンターという発達障害の子を支援するNPOがあり、Early Start Programという名前で各種セラピーを提供しているので連絡しなさいと言われました。ここでもアセスメントを受け、2歳近くだったのですがまだ認知能力などが1歳程度と言われ、セラピーを受けることになりました。

失業してセラピー中断

アメリカでの転職活動2022 - shinichy's blog でも書きましたが、色々なセラピーを開始しようとしている最中に会社が潰れてしまい、会社経由で入っていたKaiserの保険も使えなくなってしまいました。BHPNはアセスメントを受けてABAを開始しようとしていましたが、Kaiserの保険がなくなったことで中止され、週1回のスピーチセラピーも中止されてしまいました。リージョナルセンターはKaiserの保険とは関係ないのでこの影響を受けず、現在はリージョナルセンターから紹介されたhttps://speechgoals.com/ という会社のセラピーを受けています。

現在の息子

1歳半検診を受けた頃は単語もほとんど話せなかったのですが、スピーチセラピーの甲斐もあってか徐々に言葉を話し始め、現在2歳の息子は2語文もよく話し、稀に3語文も話すようになりました。全然やらなかったバイバイや指差しもやるようになったり、お皿を運んだり簡単なお手伝いもできるようになりゆっくりですが確実に成長しています。社交性の面でも最近は少し他の子が気になるのかじっと見たりもしています。 偏食がひどいのはなかなか変わらず、ご飯、バナナ、ヨーグルト、マカロニチーズなどの数種類の決まったものしか食べず、なかなか新しい食べ物を食べようとしません。 今後どう成長していくか分かりませんが、各種セラピーに頼りながら息子の苦手な所を徐々に克服していってくれると嬉しいです。

サポートグループ

KaiserからはSan Mateo CountyのFamily Resource Centerのサポートグループを紹介されました。月1回親だけが夜に集まっているようですが、ちょっと時間帯的に行きづらいのでまだ参加していません。ベイエリアスペシャルニーズのある日本人が集まるFacebookグループもあり、そこに参加して色々情報を教えていただきました。アメリカでも日本人のサポートグループがあるのは心強いです。 www.facebook.com

ASDに関する書籍

息子がASDと診断されてから様々な書籍を読みましたが、東田直樹さんの「自閉症の僕が跳びはねる理由」が一番おすすめです。東田さんは重度のASDで喋ることができないにも関わらず、パソコンと文字盤ポインティングで自力でコミュニケーションを取ることができ、ASDに対する様々な疑問(例えばなぜASDの人は偏食なのかなど)に対して当事者の立場から回答しています。この本を読んで息子の数々の謎の行動について少し理解できた気がしました。世界中でベストセラーになっており、ASD Centerの医師からも最初の一冊としてお薦めされました。2巻ありますが、個人的には最初の1巻だけ読めば十分かと思います。 www.amazon.co.jp

アメリカでの転職活動2022

去年サンフランシスコにあるFintechのスタートアップに転職しましたと書きましたが、なんと1年も経たないうちに会社が資金難で潰れてしまいました…。 会社には日本人の方も何人かいて、1ヶ月前に元同僚の方がブログに詳細をまとめて下さっています。会社が倒産した経緯などはそちらを見ていただくとして、自分も転職活動を振り返ってみようと思います。

note.com

ちなみに自分のステータスとしてはビザはH-1B、経験年数12年(うちアメリカで5年)のフルスタックソフトウェアエンジニア(バックエンドメイン)です。

仕事探し

LinkedIn、Twitterを使って探しました。仕事募集中の投稿直後からたくさんの方にお声がけいただけたので嬉しかったです。たださすがにフルタイムで転職活動しても全ては受けきれない数だったので、スキルマッチしそうな仕事 (プログラミング言語としてはClojureScalaDart/Flutter辺り)やプロダクトが面白そうな仕事に絞りました。自分で興味のある会社にも応募しました。応募した会社のリストはGoogleスプレッドシートで管理していました。合計41社に応募しました。

レジュメ審査

応募後はレジュメ審査がありそこを突破すると面接に進めますが、大手企業はリファラルがない所は返事がないか来ても1ヶ月後とかでした。他の記事でも見かけましたが、大手企業を受けるならまずはなんとか知り合いを見つけてリファラルしてもらうのが確実なようです。スタートアップはスキルマッチしていれば連絡は来ました。 応募した41社中連絡が来たのは19社でした。

リクルーター面接

レジュメに興味を持ってもらえると次にリクルーターから電話がかかってきて、選考プロセス、仕事内容、ビザステータスや希望年収とかを聞かれました。お互い最低限の条件がマッチするか確認するだけなので、幸いこのステップで落ちることはありませんでした。

技術面接(+マネージャ面接)

リクルーター面接の次は1時間程の技術面接でした。バックエンドのポジションはLeetCodeのようなコーディング面接、FlutterのポジションはFlutterの知識を問う面接でした。会社によってはこの技術面接の前に応募したポジションのマネージャとの面接がある所があったり、このステップがなくいきなり次のオンサイト面接に進めた所もありました。この技術面接を突破したのは7社でした。

オンサイト面接

オンサイト面接はさらに複数のコーディング面接に加えて、Behavioral Interview(過去の経験とそれにどう対応したかについての質問)、System Design Interviewがありました。System Design Interviewは問題があえて抽象化されていることが多く、自分で色々質問して機能・非機能要件を聞きながら大まかな設計をする必要があるのですが、これが一番大変でした。オンサイト面接を突破したのは3社でした。

最終面接

オンサイト面接の後はFounderやVP of Engineeringのような偉い人との面接がありました。このステップがなくすぐオファーがもらえる会社もありました。基本的にはオンサイトと同じBehavioral Interviewで過去の経験をより深掘りされた感じです。このステップで落ちることはなかったです。

オファー

オンサイト面接を突破した3社+潰れた会社が買収されてその会社からもオファーがあったため、合計4社からオファーをもらいました。

転職先

Willow Innovations, Incというウェアラブルスマート搾乳機を作っているスタートアップでモバイルアプリエンジニアをやることになりました。Flutterの仕事に応募して面接時もFlutterについてかなり色々聞かれたのですが、入社前にFlutterからAndroid/iOSネイティブに移行するという決定がされたため、入社後はiOSアプリの開発をしています。iOSネイティブアプリの開発経験は3ヶ月しかないため、毎日勉強中です…。

H-1Bビザトランスファー

前職の最後の給料が支払われたのは3/21で、その後はしばらくFurloughという一時解雇状態になっており5/10まで雇用は継続していました(給料もベネフィットも一切ないので、会社に籍があるというだけ)。H-1Bのグレースピリオドは60日なので、てっきり5/10から60日以内に新しい仕事を決めればいいのかと思っていたのですが、移民弁護士によるとどうもH-1Bビザは雇用主が契約で決められた給料を払えなくなった時点で無効になるらしく、実は最後に給料が支払われた3/21から60日が本当のグレースピリオドだったようです。オファーにサインしてから移民弁護士に言われた必要書類を準備して、USCISにビザトランスファーの書類を送付したのが6/7だったのですが、この時点で60日のグレースピリオドを過ぎていたため弁護士からはトランスファーが承認されても一旦日本に帰って大使館でビザを更新する必要がある可能性が高いと言われました。幸いUSCISからは特に何も言われず、6/14に無事トランスファーが承認され、一時帰国も必要なかったです。

保険

カリフォルニアではCovered Californiaと呼ばれる州が補助金を出している保険があり、仕事を無くして収入が一定以下になるとここで安い保険に入ることができます。自分と妻はCovered Californiaで安い保険に入り、2歳の息子はMedi-Calという州が提供している無料の保険に入ることができました。

ushealthinsurance4jpn.com

自分達はKaiserの保険だったので引き続きKaiserを使いたかったのですが、Medi-CalでKaiserを使い続ける手続きが複雑で、何度もKaiserとサンマテオCountyに電話をかけてしかもたらい回しにされ、かなり疲弊しました。しかも手続きに2ヶ月かかり、実質1ヶ月くらいしか使いませんでした。息子は自閉症がありKaiser経由でスピーチセラピーを毎週受けていたのですが、仕事を失ったのと同時に保険も無くなってしまったため、このセラピーも中止されてしまいました。その後リージョナルセンター経由で別のセラピーを開始しましたが、親の都合で子供の大事なセラピーが影響を受けてしまうこの国の医療保険制度はいかがなものかと思いました。

転職活動雑感

アメリカはここの所インフレが激しく、ガソリンや食料品などの値段がどんどん上がっているため、毎月の生活費も当然どんどん上がっており、一切収入のない状態が約3ヶ月続いたのは懐的にも精神的にも結構きつかったです。H-1Bビザは自由に転職できるとはいえ、60日のグレースピリオドもありますし、新しい仕事が見つかってもビザトランスファーに1ヶ月はかかってしまいます。こういったリスクを抑えるべく早くグリーンカード(永住権)がほしかったので、今回の転職活動ではグリーンカードをなるべく早くスポンサーしてくれる会社を探していました。幸いWillowでは入社初日からグリーンカードをスポンサーしてもらえ、すでに最初のステップであるPERMの申請書類を準備している段階です。

今後

グリーンカード取るまでは色々と制約があったり、銃撃事件が絶えなかったり、安くて美味しいご飯屋がなかったりと色々とアメリカに不満はありますが、世界中から集まった優秀なエンジニアと一緒に仕事をするのは楽しいですし、給料も3年前に日本のスタートアップで働いていた時に比べると3倍になったので(円安の影響も大きいですが)、まだしばらくはアメリカで働く予定です。早くグリーンカードゲットして自由を手に入れたいです。

2021年振り返り

今年もようやく仕事を納めたので軽く今年を振り返り。

子育て

毎日1歳児の子育てに追われて大変ですが、ようやく歩けるようになったりデイケア(保育園)に行き出したり順調に成長しているので嬉しいです。 少しずつ言葉も喋り始めて可愛さがどんどん増してきています。 最近偏食がすごくて妻がせっかく色々作っても全く食べないのが悩みです。あとアメリカのデイケア高過ぎ(今通っている所は$85/日)。。。

仕事

今年はサンフランシスコにあるFinTechのスタートアップに転職しました。アメリカの証券ブローカーのバックエンドシステムをClojureで開発しています。 Clojureは数年前フリーランスしていた時に少し触っただけだったので思い出すのに時間かかりましたが、だいぶ慣れて快適に書けるようになってきました。やっぱりREPL駆動開発はすごく生産性が高いと感じます。 役職もプレイングマネージャーから普通のエンジニア(Individual Contributor)に変わり、ミーティング時間も激減して設計・開発に集中できるようになりました。 前職、前々職とスタートアップでプレイングマネージャーをしていたのですが、組織に与えるインパクトは大きくやりがいはあったものの、採用や他チームとの調整等でミーティングが多くあまり開発に集中できなかったり、締切に常に追われていてストレスも多かったので、しばらくは自分の得意な開発に集中していこうと思います。 ただずっと同じことをしていてもすぐ飽きるので、今後はもう少しバックエンドの機能開発以外のことにも挑戦していきたいです。

今年行った所

息子もまだ小さいので日帰りで行ける所に数カ所行きました。

息子は車や電車が好きなので、トレインタウンの電車が気に入ったようでよかったです。来年はそろそろ外泊にチャレンジしたり日本に一時帰国したいです。

今後住む場所

会社はフルリモート体制になり生活費の高いベイエリアにこのまま住み続ける必要もないので、来年の夏にもう少し生活費の安いエリアに引っ越しを検討中です。 Mitsuwaクラスの日系スーパーは必須なので選択肢は大分限られ、最初はシアトルかポートランドを考えていたのですが、妻も自分も寒いのが苦手なのでLA(トーランスかアーバイン)にしようかと考えています。LAも物価は決して安くないのですがベイエリアよりはマシかなと。

Kafka Streamsのタスク割り当てアルゴリズム

この記事はKafka Advent Calendar 2021の7日目の記事です。

Kafka Streamsのタスク割り当ては TaskAssignor インターフェースで抽象化されており、具体的な実装は2.6以降は HighAvailabilityTaskAssignor、2.4-2.6までは StickyTaskAssignorというクラスで行われています。

2.4以前のKafka Streamsではリバランス中は全てのパーティションが一旦revokeされ、リバランスが完了して再度assignされるまではメッセージが処理されずいわゆるStop the worldな挙動になっていました。2.4でリバランス後に割り当てが変わっていないパーティションについてはrevokeせずにそのまま処理を続けるような仕組みに変更されました。この変更はRebalanceProtocolで定義されており、2.4以前の動作はEAGER、2.4以降の動作はCOOPERATIVEです。

このCOOPERATIVEプロトコルを最大限活かすには、なるべくリバランス前後でパーティションの割り当てを変えない必要があります。このためにStickyTaskAssignorというクラスが導入されました。このクラスは各インスタンスが現在所持しているパーティションを考慮し、リバランス後にパーティションの移動が最小限にすむようなタスク割り当てを行なってくれます。詳細は https://www.confluent.io/blog/cooperative-rebalancing-in-kafka-streams-consumer-ksqldb/ が詳しいです。

この変更でリバランスのダウンタイムはかなり解消されましたが、statefulタスクが移動された時に移動先のインスタンスのstate storeにデータがないとchangelogトピックからデータを復元する必要があります。この処理はデータ量が多いとかなり時間がかかり、その間そのタスクに紐づくパーティションは処理されません。このstatefulタスクのダウンタイムを減らす目的で2.6ではHighAvailabilityTaskAssignorが導入されました。

HighAvailabilityTaskAssignor ではstatefulタスクはcaught-upインスタンスにしか割り当てないようにしてこの問題を解決しています。caught upインスタンスはstate storeがchangelogトピックの最新かacceptable.recovery.lagオフセット以内のラグのインスタンスです。 caught-upインスタンスがない場合は移動先のインスタンスに先にwarm upタスクを作成してstate storeの復元を始めます。state storeの復元が終わりcaught-up状態になったらstatefulタスクを移動します。この間どれくらいwarm upされたかチェックするために定期的にProbing rebalanceという特殊なリバランスが発生します。間隔は probing.rebalance.interval.ms で指定できます。

詳細は https://cwiki.apache.org/confluence/display/KAFKA/KIP-441%3A+Smooth+Scaling+Out+for+Kafka+Streams が詳しいです。

しかしHighAvailabilityTaskAssignorではStickyTaskAssignorとは違いstatelessなタスクに関しては各インスタンスが現在所持しているパーティションを考慮していないようで、リバランス前後で不必要なstatelessタスクの移動が発生することが確認できました。 例えばパーティションが1つのトピックがありそれを2つのインスタンス(m1, m2)がsubscribeしている場合があるとします。このケースでは1パーティションに対応するstatelessなタスクt1がm1に割り当てられているとします。

m1: [t1]
m2: []

新しいインスタンスm3をグループに追加するとリバランスの結果m1に割り当てられていたタスクt1がm2もしくはm3に割り当てられるという動作になる場合があることが確認されました。

m1: []
m2: [t1]
m3: []

仕事で扱っていたケースではstatefulなタスクはなく、statelessなタスクは可能な限り移動させたくなかったので、 internal.task.assignor.classというinternalな設定を org.apache.kafka.streams.processor.internals.assignment.StickyTaskAssignorに設定して StickyTaskAssignorを使うように変更しました。StickyTaskAssignorではリバランス後も常にt1はm1に割り当てられるという動作になることが確認できました。