利便性があり利益の出せるシステムを自身の手で0から作る
これまで受託案件しか担当したことがない背景もあり
キャンペーンシステム開発、システムのリプレイスなど制作するものが初めから決まっており
対象システムの質を高く低コストで実現することで利益を生み出してきた。
しかし、自身の思いとしては「工数をもとに生み出した利益」ではなく
「制作したシステムがいかに価値(利益)を生み出したか」を追求したい。
その思いをもとに
「利便性があり利益の出せるシステムを自身の手で0から作る」ということを
自身の目標・野望としている
エンターテイメント会社のイベント系サイトの設計・実装・テスト・保守を担当。
1年間で以下複数のイベントサイトを開発
3年間のスーパーコンピュータ提案営業を退職し、独学でプログラムを1年間学習。
実務経験がない中担当した初めての開発案件であったが、スケジュール内に開発完了しバグもなくリリース完了
ただ機能を開発するだけではなく、「SOLIDの原則」「DI」「トランザクションのACID特性」などプログラムにおいて考慮しなければいけない基本原則を徹底して開発。
また、常に経験値の高い先輩エンジニアを見つけてはレビューを依頼し、システムの質を高め変更に強いプログラムを作成することでバグのないシステムの実現に貢献。
元営業である強みを活かし、お客様や社内のプロデューサー、ディレクターなど関係各所との連携を密に実施。その結果スケジュール内での開発、リリースをおこなうことに貢献
オンプレミスサーバーからAWSへの移設プロジェクト。
ソースコードをAWS環境に移行し、新たなミドルウェア環境での動作確認と修正を主に担当。
ApacheやMySQL等のwebサービス開発において必要なミドルウェア関連の導入・設定・検証を一人で担当し、Linux/Unix系における環境構築の知見を高める。
お客様から「ログが見たい」という問い合わせを受けると、サーバーでアクセスログを確認・見易いように整形・提出というような業務フローがあり、高い運用コストとなっているため、「Fluentd, Elasticsearch, Kibanaを用いたログの可視化」というテーマを設け業務時間外に学習・検証し、関係各所がすぐにログの状況が確認できる方式を提案。
予算の関係でお客様から発注はもらえなかったが、常に新しい技術を用いてより良いサービスを実現する姿勢を徹底。
10以上のレポジトリからなる大きなシステムの保守運用業務を担当。
vue.jsやreact からなるフロントエンドや、phpで制作されたcms、機能面を実現するJava(spring)、完全aws環境からなるインフラなど多岐にわたるシステムを自身を含む2名で保守実施。
表題の通り、xxエンジニアというような区分を設けずにシステム全体を自身のチームで修正。
自身が入るだけでシステム全体が安定すると評価されるように、壁を設けず様々な課題に取り組んでおります。
開発経験1年弱の新人との保守運用のため教育に割く時間も多く、常にタスクが40-50近く溢れる状態が続いていた。
状態を改善するためにasanaを用いて次対応、対応中、リリース待ちなど、適切にsectionを設けタスクの優先度の最適化、抜け漏れ防止に努めている。
今後も様々な手法を模索して自身だけでなくチームのタスク最適化に向けた努力も続けたい
飲料系メーカーのプレゼント応募キャンペーンの見積・要件定義・設計・開発・テスト・保守を担当。
主に以下のような機能開発を担当
プロジェクト参加した際はXAMPPやMAMPを用いた環境構築となっており、以下のような課題が存在した。
そこで、会社で導入実績はないがdockerによるLAMP環境を構築。
これにより、windows,mac等のプラットフォームに依存せずコマンド一つで環境構築を実現。
また、各イメージのOS,ミドルウェアバージョンを合わせることで環境差異によるバグの削減に貢献
新人も含む数名による開発となる場面が多かったため、release, develop, featureなどブランチ命名規則や派生元などをgitflowLikeに実施。
これらに準じてプルリクエストレビューを行うことで、依頼している機能開発のレビューが容易になり、開発者同士のconflictも最小限に抑えることができた。
既存ソースはif文を多用した分岐地獄になっている箇所が多く、将来的にバグが発生するのは明確であったため、デザインパターンを学習し、StateやObserverパターンを用いたリファクタリングのプルリクエスト(簡易版)を作成。
本件も予算の関係ということで、本番環境に適用されることはなかったが、新規開発案件では十分考慮されるように、所属部署への情報共有会を実施。
応募者、当選者統計を日次でお客様にエクセルで提出する必要があり、毎度データベースの情報をコマンドで確認するフローとなっていた。
あまりにも手間がかかるため、GAS(google app script)と連携しスプレッドシートに自動出力するツールを開発
開発案件にアサインされている中、並行して2名の新人を3ヶ月間教育する業務を担当。
プログラムをクラスで表現できないレベル感の新人であったが、適切なステップを踏んだ教育課程を計画実施することで、3ヶ月後には実案件で開発・テストが行えるように指導
アプリ専用の自動ログイン機能、注文に応じたポイント連携機能の開発
これまでphp,zendframeworkを用いた開発であったが、初のjava,springによる開発案件となる。
なんとなく動くプログラムを作らないよう、業務後に勉強し、OracleJavaSilver, Goldの資格を1度の試験で取得。
また、プログラムだけでなく設計も適切に行えるようにUMTP L1, L2の資格も合わせて取得。
これらの効果もあり、開発メンバーと議論する際は適切な設計(UMLベース)と言語理解をベースに質の高い議論を行うことができた
Apache, Tomcat, Springのdocker環境を構築し、チームメンバーの開発環境構築期間短縮、ローカル環境の負荷軽減に貢献。
また、作成したdocker環境をQiitaの記事にしてみたところ8000viewsを超える閲覧となり、世間的にも本環境構築の興味は高いことを理解
Gitbucket,slack,Jenkinsを連携したci環境の構築。
ビルド・テスト・デプロイ・通知までの流れを自動化することで、余計な作業に時間を割かず開発に集中できる環境を構築
一般ユーザーが使用するサイトの構築、CMS、バックオフィスなど多岐にわたる開発を全AWS環境により構築。
自社で開発経験のないVue.js, React, TypeScriptの開発を主に担当。
社内実績のないReact, Material-ui, Vue, TypeScriptcでの開発のため、開発にかかるスケジュールが読めない懸念があった。
そのため、プライベートでこれらの技術を用いたページを作成し、開発がスムーズに進むように貢献。
また、自身気になっていたGraphQLでの開発を行うなど貪欲に新しい技術を取り込む施設を徹底。
開発を進めていくとプルリクエストの変更が大きくなり、レビューしづらい状況となっていた。
そこで、自身が開発しているブランチでは積極的にgit rebase -iを用いて綺麗にすることでコミット(の粒度)を整理することを提唱
これによりコミット単位でのレビューが可能となり、何のためにどこを修正したのかわかりやすく、レビューの質も高まった。
客先調整のための資料作成、現場でのファシリテートは基本的に自身が担当。
またチームメンバー5名の目標・評価設定を行い、開発を行いながら複数のタスクを実行する能力を高めた
数億円規模のシステムリプレイス案件におけるシステム開発チームのマネジメント
チームメンバー全員で開発を行い納期内にシステムを完成させる。
また、チームメンバーそれぞれのプロジェクトにおける目標を設定し、期間内においてそれを実現する
本マネジメントを任された時には
「事前の計画」「計画の監視と更新」この2点を徹底して行くことを事前に考えました。
しかし、プロジェクトを進めていくうちに以下問題(障害)が発生しました。
この状況に対して、社外的にはウォーターフォールでスケジュールを表示し
社内的には簡易的なアジャイル開発のサイクルを繰り返す施策を取り乗り切りました。
具体的には設計書の作成を最低限のものとし切り上げて
開発メンバーには実装を動くものを作らせるようにしました。
動くものをお客様に提示することで
具体的なイメージが湧き、確定すべき要件へのレスポンスも高くなりました。
また、開発メンバーも実装すること自体は楽しく感じるようで
要件の確定・初期構築という重要な工程においてはモチベーション高く開発を進めることができた。
「面倒なことは面倒でやりたくない」といった趣旨を明確に述べるメンバーが多かったため
正面から「やれ」と押し通すのではなく、やりたくなるように手法を変えて進めた点が
今回のマネジメントにおける工夫点となります