サーバーサイドエンジニアの小久保です。
アールズに入って2年弱が経過しました。今回は、2年で自分がどのように成長したか、アールズで働くことにどんなメリット/デメリットがあるかをまとめてみたいと思います。
入社エントリーはこちら
1年経過後のエントリーはこちら
今どんなことをやっているのか? どんな人材になれたか?
2年経過した今、どんなことをやっているか。
当初はフロントエンドエンジニアとして入社しました。
しかし、ビジネス環境の変化で、現在は主にPHPでサーバーサイドエンジニアをやっています。もともとサーバーサイドもできなくはなかったので、支障はありませんでしたが、その点だけはやや不満ですね(笑)
ただ、サーバーサイドだろうとフロントエンドだろうと、プログラミングをすることには変わりありません。サーバーサイドでがっつりコミットすることでたまにフロントエンド側を作るときに圧倒的に以前よりも開発力が上がったのを感じます。
また、iOS/AndroidアプリをCordova+Vue.jsで作った経験が激アツで、細かいアプリ挙動やレイアウトをCSSで実現することを経験したおかげで、CSSの知見は格段にたまりました。さらにAndroid(Java)と、iOS(Objective-C)のネイティブ周りまで担当しCordova側とネイティブを連携させるスキルまでつきました。Web系の技術だけでスマホアプリもカバーできるようになったおかげで、自身の市場価値は格段にアップしたと思います。
(正直Objective-Cはキツかった。次はReact Nativeとかでやりたい)
HTML/CSS/JavaScriptなどのフロントエンドだけに集中していれば、もっと深くフロントエンドの技術がついたかもしれません。
しかし、全体的にスキルがついたおかげで、一人でアプリなりWebサービス構築なりができるようになったのがでかいです。個々の分野のスキルセットは「下の上」くらいかもしれませんが、幅広い分野が「下の上」であることは、エンジニアとしてかなりの武器です。次のキャリアへの視野が確実に広がりました。
(がっつりやったサーバーサイドだけは中の下ぐらいであると信じたい)
あらゆる方面での開発スキルが圧倒的に伸びた
プログラミング言語についての知見
PHP、JavaScript、HTML/CSS、Java、Objective-CにSwift、cakePHP3、fuelPHP、WordPressなどいろんなプログラミング言語/フレームワークで開発する機会に恵まれました。
入社当初はJavaとHTML/CSSぐらいしかできなかったので、随分遠くに来たものだなと思う反面、たくさんやると言語とかフレームワークとかどうでも良いなって感じがします。
社内のイケイケ先輩も言ってましたが、たとえ新しいフレームワークやら言語で開発することになったとしても、概念はだいたい同じです。チャチャっとチュートリアルをやってあとは書く。ひたすら書く。でカバーできるんだなと思えるようになりました。
スケーラビリティを保つための知見
また、プロジェクトによっては結構デカめのデータベースを扱うので、スケーラビリティを考えたDB設計やネットワーク設計が必要になります。そのあたりの知見をイケイケの先輩方から学べたのはかなりでかいです。
もはやスケーラビリティを考えなくてよいサービスってあんまりないと思います。この辺りの実践的なテクニックを直接目の当たりにできるのがよいですね。
テストスキルの知見、テスト駆動開発の導入
1年目の後半あたりから、プロジェクトが大きくなるにつれ、バグ修正に対するコストがものすごく大きくなっており、それが苦痛で仕方がありませんでした。具体的には下記のサイクルを想像してもらえると。
- バグを修正する
- バグが直ったか確認する
- その修正が他に影響を与えていないかソースコードを確認する
- 周辺確認のテストをする(人力でたくさん)。よし、大丈夫だ
- デプロイする
- 思わぬところでバグってました
あるあるですよね。
これを防ぐにはQA部隊なんかを構築して、デプロイ前にあらゆるイジメテストをするなどのアプローチが必要になってきます。
が、そもそも仕様も複雑なので十分なテストスキルのある人材を確保するのも難しいです。あと開発規模(お金的な意味の)としてもQA体制を敷くのは難しい状況でした。
そこで、せめて自分が担当する機能だけでも楽をしなければと思い、テスト駆動開発に手を出してみました。
テスト駆動開発を行うことで、下記の恩恵がありました。
- 自動テストで周辺バグの検出ができる
- テストから書き始めることでおのずとテストできる構成≒疎結合となる
- 自分のコードの可読性が上がる
- 自動テストで検出できると言う思いから、積極的なリファクタリングが可能となる
バグ修正後に自動テストを行えば、少なくとも自分の意図通りにはプログラムが動いていることが分かるので、テスト工数と心理的な疲労が減ります。
また悪いコードを見つけた際に、リファクタリングしやすくなりました。破壊的なリファクタリングだった場合には即座にテストでNGが出るので、安心してリファクタリングできます。
アールズは開発方式についてはかなり緩めな会社だったので、自分にあった開発方式、ツール類を存分に試すことができます。この点で、単なるコード書きではなく、よりよい開発者となるにはどうするかを考えるには良い環境だと思います。
管理スキルが圧倒的に伸びた
規模の小さな会社というのもあり、仕様や設計、プログラミング、テストまで、ほぼほぼ自分の手でやる必要があったのですが、スケジュール管理についても例外ではありませんでした。
タスクを洗い出し、見積もりをし、納期を決定し、進捗を管理し、遅れそうであればどのぐらい遅れるかを可視化する。
ソフトウェア開発において↑のタスクの管理と進捗の見える化が何にも増して重要なのは言うまでもありません。
一応チーム全体で進捗を管理していますが、タスク出しと進捗の入力/把握は個々人に委ねられています。
管理をミスると自分の首を絞めることになりますし、本来長期間かかるものを無理して短期でやると製品品質にダイレクトに影響するため、厳密に行なっていました。(とはいえ、営業さんが頑張ってくれるおかげでリスケも柔軟に行えたため助かりました。当時は納期ってずらせるんだ。って感動したものです)
スクラムの理念を個人で流用したり、バグデータベースを改善したりと、スケジュール管理のやり方は常に改善していました。
またプロジェクトによってはプロジェクトマネージャー的立ち位置を任されることもあったので、チームとしての進捗管理のスキルも向上しました。
組織がでかいと、管理を適当にしても誰かがそれをサポートしてなんとかなるかもしれません。しかし、小さな会社だと管理をサボると即座に炎上します。そういった緊張感の中、真面目に管理業務と向き合えました。
費用対効果でプロダクト仕様を考えるようになった
営業さんと頻繁に会話することで、今お客さんといくらで契約を結んでいるか、自分たちの単価がいくらなのか、会社としてどの程度売上を立てなければやばいかがほとんど分かる状態になっていました。
すると、例えば既存サービスでほとんど使われていないが、仕様が複雑で開発工数やメンテナンス工数がダカダカに膨れ上がる機能があったとした場合。それを継続するとどのぐらいの損失が出て、どのぐらい開発スピードが落ちて、どのぐらいお客さんのビジネスと自社の利益が圧迫されるかを考えられるようになります。
そうした費用対効果をとくとくと経営層に提言し、いくつかの既存機能の削減を行いました。
既存機能の削減は
- ユーザーの利用状況
- クライアントと自社のキャッシュフローの理解
- 仕様をコントロールできる権限
- 開発の事情の理解
の条件が揃ったときのみ実施できるものだと思います。
ソフト業界に10年いますが、今まで機能の追加はあっても削減を行なった経験はありませんでした。
小さい企業ならではのスピード感とコントローラブルな環境で、非常に興奮したのを覚えています。
プロダクト仕様をコントロールでき、実際にその仕様が売上に直結するかどうか考えると言う仕事はあまり体験できることではありません。大多数の企業は、仕様はトップダウンで初めから決まっていて、我々末端エンジニアがどうこうできる立場にはありません。
エンジニアでありながら、サービスを左右するような重大な意思決定ができると言う点で、良い意味での経営者目線を養えました。
自分で考えて継続的に勉強する人は伸びる。 逆はおそらく辛い
ここまで読んだ人は分かると思いますが、アールズはとにかく自由な環境です。(ゆるいとも言う)
自分で考えて何かを決定したり、継続的に勉強したり、施策を試したりするにはうってつけです。トライアンドエラーを繰り返すうちにガンガン伸びていきます。
逆を言えば、人に言われないと勉強しなかったり、制度ややり方が決まっていないと動けない方には辛い環境かもしれません。そう言う方は無理せず自分のキャリアをもう一度考えて、やりたい職業、向いている会社とは何かを考え直してみることをオススメします。
入社して2年経ったまとめ
まとめるとアールズに2年いた結果
- 一人でアプリやWebサービスを無理なく立ち上げられるぐらいのスキルがついた
- 管理スキルも向上した。なんちゃってプロジェクトマネージャには負けないぐらい
- 経営者目線の仕様提案、作成ができるようになった
なんかこう、ぶっちゃけ地方の小さなIT企業ってブラック企業しかないぐらいに思ってたんですが、全然そんなことないですね。
本日は以上。気になった方は下記から採用応募してみてね!