ついて試行錯誤した道のりについて綴っています。拙文ですが温かく見守ってくださると幸いです。簡単に背景を共有させていただきたいと思います。いう年の変わり目を境に大きく環境が変わりました。当初僕は「マネージャーになると言っても人々のタスクを管理してみんなが働きやすい環境を作ればええんかな?」くらいの甘い認識でいました。ところが始めてみると驚くことに、1日にしなければいけない意思決定の数が大小合わせて今までの10倍くらいになりました。一介の平エンジニアとして働いていた時は、社長から降りてくる指示に従って、目の前の作業を最大限のパフォーマンスで完遂していれば評価されていました。マネージャーになると『ユーザーのこと(一番大事!)』『リソース』『期日』『メンバーのモチベーション』などの多くのファクターに思いを馳せながら、テンポよくメンバー全員分の意思決定をしていかなければなりません。小さなチームとはいえ、この意思決定が一過性のものであったり属人的であったりすると組織全体の脆弱性に繋がります。『会社の文化やコアバリュー』でした(当然の流れだと思います)。今後便宜のために『正確な』意思決定という言葉を使いますが、これの意図は打ち手として有効かどうかではなく、組織としての軸に沿っている(つまり一過性がなく属人的でない)という意味です)社内文化は何のために存在するのか?社内文化やそれに属するマインドに関する記事を見ていると「個人の成長のため」みたいなメンバー側から見た表面的な切り口で自己啓発のような文脈で語られているものが散見されます。社内文化の浸透による恩恵は様々ですが、それもひっくるめて社内文化の目的は必ず『長期的な組織の利益の最大化』に帰着します(当たり前のことなんですが)。いう事実を常に念頭に置いておかないと、社内文化はすぐに形骸化してしまいます。ことを表現しようとしています。『自責』という文化があった時に、長期的な組織の利益の最大化を考えると他の人に投げた方がいいトラブルシューティング(その問題について考察し、パフォーマンスを最適化するために他の人にアサインした時点で自責)を、『自責』という言葉の言葉尻だけ捉えて全部自分で抱えた場合、それは本来の目的に適っていないので形骸化していると言えると思います。これが進行してしまう原因は大きく分けて2つあると思います。組織の拡大に伴う形骸化これは規模に応じて避けられなくなってくると思います。初期のメンバーは特に、その組織に対して並々ならない思いがあります。皆が空気を吸うように「長期的な組織の利益の最大化」を念頭に置いて考え、能動的に行動します。規模の拡大に伴って組織全体をマクロに捉える見方は薄れていき、だんだんと部署・チーム・個人のようなミクロな視点が蔓延していきます。これは当然の動きであり、非難する意図は全くありません。全員が全員、前述のような長期的な組織の利益の最大化を第一に考えられる巨大組織の構成は正直不可能だと思います。結果として生まれる個人がミクロな見方でバラバラな方向を向いている状態の下で、社内文化の形骸化を防ぐマネジメントはとても難易度が高いと思います。大企業やメガベンチャーに就職した先輩方に企業の文化やコアバリューについてお話を聞くと、「言葉は覚えているが特に深い意味も考えていない人」、「なんとなく小馬鹿にしている人」や「そもそも存在自体を知らない人」がほとんどでした。前述の通り、組織がかなり大きくなってくると話は変わりますが、今後の組織の在り方を強く定義する存在である経営陣・初期のメンバーについては、この企業文化は高いレベルで正確に共有されていなければなりません。このメンバーは今後、この文化やコアバリューを他のメンバーに伝えていくハブの役割を果たして行くことになるからです。メンバーが少ない中でも、ただでさえめまぐるしく状況が変化する初期のスタートアップの中では綿密なコミュニケーションの努力を怠っていると文化やコアバリューへの認識は容易に分岐していきます(体験談です)。それぞれが大きな責任を持ち、かなりの量と質の意思決定を繰り返していると、大きなパラダイムシフトが頻繁に発生します。怖いのはそれが無意識化で進行するということです。社内の文化やコアバリューを擦り合わせて再定義する作業は、継続的にしていかないといけないのだと思います。前述の通り、文化やコアバリューの形骸化は時間や規模に伴って大なれ小なれ必ず進行してしまいます。堅牢な組織を保ち続けるために、これに抗う最大限の努力は継続的に行うべきだと考えています。初期スタートアップに関しては以下の2つを心がけることが有効であると感じました。最小人数で定義して共有には全体で取り組む文化やコアバリューを定義する初期の段階で決めるための話です。社内文化やコアバリューは社長の独断で定義していい、そしてそれをより多くのメンバーに(初期メンバーは特に)より深く浸透させることに対してのリソースは惜しまず割くべき(コアバリュー合宿など)とおっしゃっていました(堀井さんはこの記事でも企業文化やコアバリューの大切さについて触れています)。この社内文化やコアバリューに関しては正解が存在しないと考えています。そんな抽象的な議論に多くの人数が関わると船頭多くして船山に上ってしまい、徒らに時間が過ぎていってしまいます。それに加えて、お互いの主張が交錯して、最終的な成果物がそれぞれを折衷した何ともいえないものになってしまうというケースも往々にしてあります。定義は最小人数(できれば社長が1人で)して、他のメンバーはそれを理解するための施作・努力を継続的に行っていくというスタンスの方が効率よく軸を安定させられると思います。(たまにこれらの定義を社外の人々に任せるケースを見ますが、とてもうーんという気持ちになります。)共感レベルでの採用(社内の文化やコアバリューの形骸化に)抗う最大限の努力は継続的に行うべきと言及しましたが、やらなければいけないことが無限にあるスタートアップの中で、これにコストをかけすぎるのはとても痛手です。ここの共有にコストがかかる人間は(初期は特に)採用の段階で弾くべきだと考えています。事業の表面的なスピード感を重視するとスキルセットや経歴を最重要視しがちですが、僕は長期的な視点で見た時にこちらの方が圧倒的に重要だと思います。これは僕が勝手に脳内でイメージしているオレオレ共感度グラフ的なものです。社長の脳みそを完全再現している赤レベルでの共感は実質無理なので、初期のメンバーはできる限りピンクレベルであるべきであり、最低でも黄色レベルでないといけないと思います。組織が巨大化していった時に、全員の(特に責任を持っている人々の)共感レベルがどれくらいのレベルで保てるかというのが、堅牢な組織作りの大きな指標になると考えています。最後まで読んでいただきありがとうございました。この3ヶ月間においては日本トップクラスで労力を組織への考察に割いたと思います。ストレスフルでしたが、その過程で働くということへのマインドもかなり研ぎ澄まされたのでかなりいい経験になったと思います。こんなぺーぺーの悩みを真剣に聞き、相談に乗ってくださった業界の先輩の方々には感謝の気持ちでいっぱいです。DeNAの千條さん、eurakaのkaneshinさん、Mercariのosamingoさんには感謝してもしきれません。今後もエンジニアとしての力量を磨きつつ、考察を続けていこうと思います。どの辺がマフィアなのかはよくわかってません。はじめにクリスマスイブですね(記事出した時はそうなんです)。街には笑顔が溢れて、活気に満ちていることと思います。カップルで幸せな時間を共にする人、家族で温かい食卓を囲む人、孤独を噛みしめる人など、色々な過ごし方の人がいると思います。今回はそんな人たちのための記事です。Swiftでは基本的なAnimationは数行で実装できるようになっている(本当に素敵)のですが、今回は標準では積まれていないゆるやかな往復運動を正弦関数を用いて実装したいと思います。使われているものの一部で結構我ながら気に入ってます。今回はこのハートの動きの部分が純Swiftでどうやって動かされているのかを見ていきたいと思います。方針このハートのAnimationは3つの小さなAnimationに分解できます。opacityが小さくなるAnimationy方向に一定速度で上昇していくAnimationx方向に緩やかに振動するAnimationです。1と2に関してはCABasicAnimationというswift組み込みのAnimationで簡単に実装できるので、今回は3をメインに触れていきたいと思いますが、一応Animationの基礎についても触れていきます。僕の記事なんて読まなくても、素晴らしい記事がQiitaにたくさん落ちています。qiita.comその中でも今回必要なものだけを抜粋しました。CABasicAnimationSwiftでUIViewの属性の1つをAnimationで変化させたいと思った時、大概の場合は何を変化させるか(keyPath)初期値(fromValue)終了値(toValue)期間(duration)を指定するだけで簡単に実装できます。nil)※CABasicAnimationを用いてAnimationで変化させられる要素(keyPath)は以下を参照してください。developer.apple.comこれでも十分綺麗ですが、まだちょっと物足りないですね。CAAnimationGroup実はCAAnimationはいくつでも組み合わせることができます。CAAnimationGroupというクラスを使っていきます。プロパティにCAAnimationの配列を渡すことで、それらのAnimationが1つに集められた1つのAnimationを作成することができます。nil)透明度を追加したことで儚げな感じがプラスされましたね。人の心は移ろいやすいものですもちろん配列に追加していけば3つでも4つでもAnimationを組み合わせることができます。豊富に数学関数を含んでいます。三角関数関連だけでも以下のラインナップです。アークハイパボリックサイン・コサイン・タンジェントasinh(x)acosh(x)atanh(x)今回はその中でも正弦関数(sin)をつかって滑らかなAnimationを実装していきます。経過時間の配列とそれに対応する値の配列を与えることで、その途中経過をよしなに補完したAnimationを作成してくれます。2値や経過時間の差分に変化をもたせることで、CABasicAnimationより自由度の高いAnimationを作成することができます。値を変則的に動かすことでゆるやかなカーブを描かせていきます。いう名前で宣言しておきます。frameCountで均等に割った経過時間を指定します。組み合わせて再生してみましょう。