こんにちは。クラウドワークス CTO の@akiray03です。 あっという間に年末が近づいてきて、いよいよ明日から12月になり、アドベントカレンダーが始まります。
CrowdWorksはサービス提供開始から約5年が経過し、2017年9月期の一年間で53億円超の報酬をユーザの皆様に届ける規模のサービスにまで成長しました。この10月からは、新たな技術方針を打ち出し、各チームが動いています。その中で出てきたトピックも今年のアドベントカレンダーでは垣間見えるのではないでしょうか。
本記事では、クラウドワークスのエンジニアが今期どのような領域に対して技術的挑戦をしているのか、代表的なものをご紹介したいと思います。
クラウドワークス: 今期の技術的挑戦
クラウドワークス 2018年9月期の技術戦略として、以下の3つを掲げています。 それぞれの方針について、今回のアドベントカレンダーで公開予定のトピックを交えてご紹介します。
- 抜本的なマッチングUX変革への挑戦
- ドメイン駆動設計(DDD)/マイクロサービス化への挑戦
- SRE(Site Reliability Engineering)への挑戦
抜本的なマッチングUX変革への挑戦
昨期、クラウドワークスでは悪質案件を自動検出するシステムを開発し、実際にサービスに適用しました。 この自動検出システムによって、悪質案件の検出精度は大幅に改善し、ユーザサポートチームの負担を軽減しつつ、サービス上に掲載される悪質案件を数多く排除することができました。 この成果は、2017年5月の人工知能学会 全国大会でも発表させて頂きました。
今期からは、このようなAI・機械学習の取り組みに加えて、様々な推薦アルゴリズム、アプローチを取り入れながらマッチング改善、サービス体験の改善に向けて動いています。 既に「あなたにオススメ」タブでは協調フィルタリングによる推薦を適用し、仕事詳細ページでも類似のお仕事推薦の精度向上にも取り組んでいます。
今期はUX観点での抜本的に変革すべく、UXデザイナー、サービス開発エンジニア、機械学習エンジニア、データ基盤インフラエンジニア、プロダクトオーナーといった様々なロールを持つメンバーが一つのチームで協働することを通じて、今までと全く違うUXの実現に向けて走り始めています。そのプロセスの一端もアドベントカレンダーで感じて頂ければ幸いです。
関連のありそうな記事
- 【アドベントカレンダー投稿予定】 機械学習とかが絡んだ技術的ハードルの高いプロダクト開発でPOとしてやったこと
- 【アドベントカレンダー投稿予定】 機械学習絡みのプロジェクトにおけるエンジニアとデザイナーの共創プロセス(仮)
- 自社サービスでカスタマージャーニーマップを作ってみて見えてきた3つのこと - CrowdWorks Designer Blog
- クラウドワークスにおける情報アーキテクチャ(IA)設計の実践例 - CrowdWorks Designer Blog
- ... などなど
ドメイン駆動設計(DDD)/マイクロサービス化への挑戦
CrowdWorksは2012年のサービス提供開始から約5年が過ぎ、その間、多くの機能を追加しながらユーザの皆さんに価値を届けてきました。 Ruby on Rails を採用して、スピード感を持って機能追加を進めてきたことによって、サービスの規模を拡大し、多くの方に価値を届けることができたのも事実ですが、一方で、いわゆる技術的負債も増えており、機能追加を以前ほどスピーディーに進めづらくなってきた現実もあります。
技術的負債の根源を突き詰めると、サービス内に存在する様々な業務の境界が見えづらくなっていることが、大きな要因の一つと考えています。 業務の境界を明確にし、それぞれのコンテキストにおける責務とインタフェースを整理することを通じて、サービスの堅牢性を担保し、変更に強い柔軟なサービスに進化させていきたいと思っています。
たとえば、CrowdWorksでは「仕事」という概念がサービスの多くの場所に登場しますが、仕事を遂行してくれるクラウドワーカーの方を探す場面での「仕事」という概念と、契約相手が見つかり業務が始まった場面での「仕事」では意味合いが異なってきます。 こういった場面ごと(=コンテキスト)に概念を整理していくことで、変更に強いサービスとなり、ユーザに多くの価値を届け続けられるように設計方針を定めています。
ドメイン駆動設計(Domain Driven Development; DDD)を推し進める結果として、境界を明確化するためのマイクロサービス化に向けても舵を切ります。 開発に利用する言語も、マイクロサービスであることのメリットを活かして、従来利用してきたRuby on Railsに囚われることなく検討をした結果、Scalaを採用することとしました。 既にCrowdWorksの一部の機能をScalaで再実装し、本番でも稼働を始めています。
今回のアドベントカレンダーでは、ドメイン駆動設計を実践する中で感じたこと、組織として推進するためにどのような点を考慮したか、など様々な観点で私達の挑戦の様子を感じていただければと思います。
関連のありそうな記事
- 【アドベントカレンダー投稿予定】はじめてDDDしたときに意識したこと
- 【アドベントカレンダー投稿予定】scalaでgRPCを使い倒す
- 【アドベントカレンダー投稿予定】Scala+Playにおけるアーキテクチャ設計について書くやもしれません
- ... などなど
SRE(Site Reliability Engineering)への挑戦
ここまでご紹介してきたように、機械学習の要素をサービスに取り入れたり、ドメイン駆動設計を推進する一方で、サービスを安定稼働させ続けるための挑戦も始まっています。 クラウドワークスでは2017年10月にSREチームが発足しました。Site Reliability Engineering という言葉はここ数年で日本でも目にすることが増えてきたかと思います。 先駆けとなったGoogleのSREチームについて書かれたSRE本が日本語訳されたことも後押しになりました。
クラウドワークスのSREチームの役割は、サイトの信頼性を高めるためのインフラストラクチャの自動化、障害対応、監視・モニタリングの維持整備などのシステム運用管理に加えて、マイクロサービスを推進するうえで必要な全体アーキテクチャの整理統合や、横断的関心事となる機能の実現など、非常に多岐にわたります。 まだ少人数の立ち上がったばかりのチームですが、クラウドワークスを大きく変化させながらも安定して稼働させ続けるために欠かすことのできない重要な役割を担っています。
関連のありそうな記事
- 【アドベントカレンダー投稿予定】AWSのTrustedAdvisorを使おう
- 【アドベントカレンダー投稿予定】Terraformチョットデキルと言うために抑えておきたいTips
- 【アドベントカレンダー投稿予定】ユーザー行動ログ収集サービスKeen IO
- ... などなど
プロダクト改善プロセスでも大きな挑戦
既存のプロダクト改善においても、組織全体で挑戦が進んでいます。
CrowdWorks Designer BlogでもおなじみのUXデザイングループがスマホアプリチームと共に取り組んだ検索結果一覧のUI改善でKPIが17.5%向上した話や、ユーザサポートチームが日々受け取っている改善要望を一層プロダクトに反映させやすい状態を作るための挑戦など、本当に多様な挑戦が進行中です。 アドベントカレンダーでは、これらの取り組みもご紹介できればと思います。
- 【アドベントカレンダー投稿予定】Karteを使って新規施策のフィジビリを非エンジニアだけでやってみた話
- 【アドベントカレンダー投稿予定】サポートからサービス改善(仮仮)
- 検索結果一覧のUI改善でKPIが17.5%向上した話 - CrowdWorks Designer Blog
- ... などなど
We are Hiring!
クラウドワークスでは、一緒に挑戦する仲間(エンジニア、デザイナー、プロダクトオーナー、...)を募集しています。 少しでも興味を持って頂けたら、お気軽に「話を聞きに行きたい」からご連絡ください!
明日からアドベントカレンダーも始まります。こちらもどうぞよろしくお願いします。