Fundamentals of Data Engineeringを読みながらメモ

Chapter1
会社のデータ成熟度のモデル
- Starting with data
- Starting with data
- Leading with data
それぞれのステージでフォーカスすること
1. Starting with data
- 最上級管理職を含む重要なステークホルダーから仕事を請け負うこと。理想的には会社のゴールをサポートするためのデータアーキテクチャを設計・実装する決定的な主導権のスポンサーを持つべき。
- 適切なデータアーキテクチャを定義する(データアーキテクトおらず、たいてい単独でやることになる)。これはあなたがデータ主導で達成する事業のゴールと競争優位性を決めることを意味する。これらのゴール達成をサポートするためにデータアーキテクチャと向き合う。※Chapter3に良いアーキテクチャのアドバイスが載ってるらしい
- あなたが設計したデータアーキテクチャを主導・運用するためのデータを確認・監査する。
- 未来のデータアナリストやデータサイエンティストが競争優位性に向けて価値あるレポートやモデルを作るための、しっかりとしたデータ基盤を実装する。その間、あなたはチームができるまでこれらのレポートやモデルを作ることになるかもしれない。
このステージは多くの落とし穴がある繊細な時期である。いくつかのチップスを紹介する。
- もしデータによる多くの見える成果がなければ、組織的な意思の力が衰えうる。クイックな成果を得ることが組織内のデータの重要性を確立する。クイックな成果が技術的負債を生みうることを頭にいれておこう。未来のデリバリーのために負債を返済する計画を立てよう。
- サイロ的に働かずに、外に出て人と話そう。今まで多くのデータチームがバブルの中で働き、他のチームと連携を取らず、事業のステークホルダーから展望やFBを得なかった様子を見てきた。危険なのは、人々の役に立たないことに多くの時間を割くことだ。
- 必要のない技術的な複雑性に時間を使わないこと。できるなら既製品ですぐ利用できる解決策を選ぼう。
- 競争優位性があることにのみ、カスタムな解決策やコードを実装しよう。
2. Starting with data
ここでのチャレンジは、スケーラブルなデータアーキテクチャの構築と真のデータドリブン企業となる未来への計画を立てることである。データエンジニアの役割は、ジェネラリストから、データエンジニアリングライフサイクル特有の局面に集中するスペシャリストに移る。
このステージにおけるデータエンジニアのゴールは
- データプラクティスの型を確率する
- スケーラブルでロバストなデータアーキテクチャを作る
- DevOpsとDataOpsのプラクティスを採用する
- ML向けのシステムを実装する
- 引き続き、過度の複雑性に時間を使わず、競争優位性となる成果に時間を使う。
気にしておく課題
- データとともに洗練されるにつれて、最先端の技術を使いたくなるだろう。しかしそこにエネルギーを注いで良いことはほぼない。顧客ドリブンで技術の意思決定をすべき
- 主なボトルネックはクラスターのノードやストレージ、技術ではなく、データエンジニアリングチームである。シンプルにデプロイし管理できるソリューションに集中して、チームのスループットを上げよう。
- 自分を技術者やデータのすごい人としての型にはめたくなるだろうが、むしろ実用的なリーダーシップや次の成熟したステージへ移ることに集中しよう。他のチームと実用的なデータの民主化のために連携しよう。組織にどうやってデータを利用しレバレッジをあげるかを伝えよう。
3. Leading with data
このステージでは土台が整い、企業がデータ駆動になっている。
- 新しいデータのシームレスな導入と利用のために自動化をおこなう。
- 企業の競争優位性となるデータにレバレッジをかけるツールやシステムの構築に集中する。
- データのenterprisey(企業体?)としての側面に集中する。例えばデータマネジメント(データガバメントや品質を含む)やDataOps
- 組織を通してデータを公開し普及するようなツールを展開する。これにはデータカタログ、データリネージツール、メタデータマネジメントシステムを含む。
- ソフトウェアエンジニア、MLエンジニア、アナリスト、などとうまくコラボする。
- 役割や役職問わず、人々がコラボしたりオープンに話せるコミュニティや環境を作る。
気にしておく課題
- このステージは油断は禁物。一度組織がステージ3にたどり着いたら、常にメンテナンスや改善に集中し、前のステージに戻るリスクの低減に努めなければならない。
- 技術への目移りは他のどのステージよりも危険である。事業に価値を届けない高価な趣味プロジェクトに手を染める誘惑がある。ここでも競争優位性のためにのみカスタム実装に手をつけること。

データエンジニアの責務
事業的な責務
非技術者と技術者がどう連携するかを知る
コミュニケーションは重要である。あなたは組織横断で人々との信頼関係を気づく必要がある。組織のヒエラルキーに注意を払うことを進める。誰が誰にレポートをしているか、どうやって連携しているか、どのサイロが存在しているか。これらを観察することはあなたの成功にとって極めて重要である。
事業とプロダクトの要件に対して同スコープを決め集めるかを理解する
あなたは何を作るかを知り、ステークホルダーと合意をとる必要がある。さらに、データと技術的決定が事業に与える影響について、感覚を磨こう。
アジャイル、DevOps、DataOpsの文化的な基礎を理解する
コストを制御する
並外れた価値を提供してる間にコストを抑えることができれば、あなたは成功するだろう。生産性や所有しているもののトータルコスト、機会コストを最適化する方法を知ろう。コストを計測し、想定外の事態を避けよう。
学び続ける
技術は光の如く変わり続けるように見えるが、成功するエンジニアは基礎的な知識を磨きながら新しいものを取り上げる。どの新技術が自分の仕事にとって最も関連するかをかぎ分ける良いフィルタを持っている。
成功するデータエンジニアは常に全体感を持ち、卓越した事業価値をどうやって提供するかを考えている。コミュニケーションはどのジャンルの人にとっても必須である。成功の分水領が技術であることはほとんどない。
技術的な責務
データエンジニアリングライフサイクル
- Generation
- Storage
- Ingestion
- Transformation
- Serving
根底
- Security
- Data management
- DataOps
- Data architecture
- Orchestration
- Software engineering
データエンジニアはプロダクションレベルのソフトウェアエンジニアリングに精通している必要がある。
ローレベルな部分はSaaSを利用して、高レベルな課題に取り組む。
どの言語を知っておくか?
- SQL
- Python
- JVM言語(Java, Scala)
- bash