ゆるWeb勉強会@札幌 Advent Calendar 2020 2日目の記事です。
エクストリームプログラミングやスクラムなどアジャイル開発に憧れていたSESのエンジニアが、就職して自分達のチームを持つようになり、チームビルディングをやりました。
現状うまくやれていると思っているので、今に至るまでの話をしたいと思います。
就職した
ここ数年フリーランスエンジニアとして大手SIerのシステム開発・保守の現場で働きながら、アジャイル札幌というコミュニティに参加して多くの先輩方に出会い影響を受け、自己研鑽していました。
そこで得た知見や技術をシステム開発・保守の現場で発揮しつつ、ゆるく就職活動をしていました。 そして今年の春、とあるAIベンチャーからオファーを受け、就職しました。
蛇足ですがポートフォリオとしてナンプレのアプリを完成させていたのですが、それも採用担当の方々には見て頂けてたようです。作って良かった。
チームリーダー?になった
入社した際、ベテランソフトウェアエンジニアは私も含めおそらく5〜6名しかいない状況でした。 ソフトウェアの会社ではありますが、主にAIの構想やソフトウェアの要件定義を行っており、開発は外注していました。それを内製に変えていく方針となり、我々が集められたという状況です。ほかには、駆け出しソフトウェアエンジニアやソフトウェア開発に関連する業務に関わってきた方が数名いました。
弊社では、自社プロダクトと、受託開発のプロダクトとがあります。自分は、自社開発のアプリケーションのフロントエンド開発チームのリーダー的役割として働くことになりました。
入社の際に2日間だけ会社へ赴き、チームメンバーと顔合わせをしました。メンバーは駆け出しエンジニアが3名。それ以降私はずっとリモートで働くことになります。とりあえずその場では挨拶だけし、会社を後にしました。
チームのキックオフをした
チームで動き始めるまで2週間ほど間がありました。その間に、だんだんと「このまま始まって大丈夫なのか?」という思いが強まりました。
そこで、メンバーのことを知るためにチームのキックオフをやらせてもらいました。キックオフの内容は以下です。
- みんなが何を目指しているのか教えて!
- どんな働き方してるんですか?
- どんな働き方したいですか?
1. みんなが何を目指しているのか教えて!
ここでは、川口さんの記事を参考にスキルマップを用意しておき、まずは自分の自己紹介をしました。
「自分は素敵なプログラマーになりたいです!リーダーというのはちょっと苦手です。」
そして、みんなが伸ばしたいスキルについても聞きました。
2. どんな働き方してるんですか?
弊社は、ソフトウェア開発の文化が形成されていない状況でした。 エンジニア個人が複数のプロジェクトにアサインされて、マルチタスクをこなしていかなければならない状況です。これはマズいと思っていました。そこで、現状を聞き取り、このままではマズい状況だということを共通認識としました。
とは言え、相手は駆け出しエンジニアですので、これが普通だと思っていたのだと思います。なので実際には「このままだとマズいんだよ。」ということを教えた形になります。
具体的には以下がマズいよと言いました。
- 不得意な分野で苦しむ
- デザインが得意なのに性能改善(メンバーにはデザイナーもいる)
- プログラマなのにデザイン
- プロジェクトの炎上時に個人で対応
- 精神的負担が大きい
常に不安が付きまとう!!
3. どんな働き方したいですか?
僕はこうしたいと伝えました。(理想は一つのプロジェクトを担当したいけどそれは無理)
固定されたチームで、チームの文化やチームワークを育てていきたい。
チームでやるメリットは以下だと伝えました。
- メンバーに頼ろう!
- 得意な人にサクッとやってもらう!
- 得意な人に教えてもらいながらやる!
- 得意な人がいない場合はみんなでやる!
- 精神的負担の軽減
- 不安な状況を作らない!
- 独りに責任を負わせない!
- One for all! All for one!! (一人はチームのために、チームは一つの目的のために)
みんなの同意を得ることができました。
それを実現するために「やってみたい」こと
以下をやってみたいと思っていると伝えました。
- フラクタルスプリント
- 通常1週間~2週間のスプリントを、daily/houryでもやる。
- ペアプログラミング、モブプログラミング
- 画面共有しながら複数人でプログラミングする
- 知見の共有
- コードの共有(誰かが抜けても問題ない)
- チームを固定化
- チームの存在を会社みんなに認識して貰って、チームに対して仕事をおろして貰うのが理想。
会社のみんなにアピールしてみた
チームでやりたいということを、周りの人に言って回りました。 現在の体制を決めている弊社役員の方々の協力も得られ、今後はソフトウェア開発の文化がうまく形成できるのではないかと期待しています。まだまだ時間がかかるとは思います。
実際にチームでの活動を始めた
メンバーには、「実験と改善を繰り返そう」と伝えました。
我々は一応スクラムをやっています。1週間のスプリントでやってます。 が、僕もメンバーもスクラムについて詳しくなく、あまり胸を張れないです。
1週間単位の大きなスプリントの制御は新米スクラムマスターに任せています。もちろん自分も協力してますが。 自分は主に、もっと短いスパンで「実験と改善」を繰り返す文化を形成することを目的に、フラクタルスプリントの真似事をやっています。
フラクタルスプリント(実験してみよう)
「実験してみよう」を合言葉のように使い、チームでの「やり方」を色々と試してみました。
1時間スプリントとYWTしてみた
スプリントというか、「この時間はこの作業をやります」と宣言してペアワークを始めます。 初めの10分でキックオフを行い、40分作業をし、残り10分で振り返りをしてみました。振り返りの方法はYWT(やったこと、わかったこと、次やること)です。チームみんなで振り返るのではなく、一緒に作業したメンバ同士で振り返ります。スプリントとは言わないかもですね。と言うか我々もスプリントという言葉はほとんど使ってません。
感想としては、「とても良かった」です。
- キックオフで作業の目的が明確になり、作業の時間の集中力が増すように思いました。
- 振り返りのYWTでは、なるべく敷居の低い内容を挙げるよう意識してました。論理的な言い方や学術的な言い方はあまりしませんでした(できないので)。ちょっと恥ずかしい感じがしますが、感謝の気持ちを伝えることも意識しました。
- 「このやり方良かったよね。」
- 「ここの設計、うまく機能してたよね。」
- 「なんか、(ペアプロの)ドライバーの交代がうまくいかないね。」
- 「TODO書きながらやってみようか。」
- 「あのときのあの発言がとても助かりました。」
- ちょっと恥ずかしい感じがしますが、感謝の気持ちを伝えることも意識しました。
メンバー間で「なんかYWT良いね」と言う雰囲気になり、続けています。 作業してそのまま「あれ良かった」「あれ良くなかった」と言う話ができると、とても具体的な改善策を決めることができるのが良いと感じてます。
ペアワーク・モブワークしてみた
ペアワーク・モブワークはすぐにメンバーにも受け入れられ浸透しました。メンバーとの仲も良くなりました。そして現在では「基本的には一人で作業しない」という文化が形成されました。
今僕は、毎日誰かとペアプロをしている状況です。とても疲れますが、確実に成果は上がっていると思います。現在、以下の点でメリットを感じています。
- メンバーへの技術と知見の伝達
- 設計(コードの構造)の共有
- 難しいところを一緒にやった場合、その箇所で問題が発生して自分が手を出せないような状況で「君、あそこわかるよね?任せるよ!」と言える。
- 自分が迷った際に意見を貰える(自分は結構迷う)
- この変数名の方が良いと思います
- わかりやすいです・わかりません
- これはクラスにした方が良いと思います
- メンバーとのチームワークが出来上がる
- 都度振り返りを行うので、どんどんやりやすくなる
- 実験して得たチームプラクティスを他のメンバーにも伝達してみんなが良くなっていく
チーム固定で活動してみる
これが一番、実現が難しいところです。自分たちではどうにもならない部分があります。
現状では、メンバー各々が別々のプロジェクトに関わっている状況が続いています。 が、若手メンバーが別のプロジェクトで困った際には、僕がヘルプに入ってペアワークで解決しています。 これを続けていくことで、別のプロジェクトのマネージャーにも、我々がチームであることを認識してもらえると考えています。
今はまだ、「チームで仕事を請け負い、タスクを消化していく」ということはできていませんが、周りにアピールしていることで、協力者は増えています。いつか実現できると思います。
まとめ
始まったばかりのチームですが、チームが密に連携して活動していくことができるようになりました。 今のチームがすごく気に入っていますし、毎日楽しく活動しています。 今後は優秀なソフトウェアエンジニアをもっと増やすべく、邁進していきたいと思います。自分もレベルアップせねば。
読んで頂きありがとうございました!