Most technical problems are people problems

2025/12/05 22:07

Most technical problems are people problems

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

テクニカルデットは単なるコードの散らかりではなく、コミュニケーションの崩壊であり、保守作業を重複作業の無限ループに閉じ込める可能性があります。著者が所属する会社では、数百万行にわたるレガシーコードにユニットテストがなく、古いフレームワークが使われていました。Windows 専用モジュールをクロスコンパイルせずに Linux にコピーしたため、機能ごとやバグ修正ごとに別々のメンテナンスが必要になる二つの分岐コードベースが生まれました。
リファクタリングの試みは「ほぼ同じ結果」だったとして却下され、プロジェクトは停滞し、チームメンバー間の信頼も失われました。根本原因は人に関係するものです:要件が不明確であること、不合理な締め切り、古い技術へのこだわり、反応的な中止、エゴ、そして開発者の変化への抵抗—コードはしばしば個性を映します(「Andrew Harmel‑Law」の洞察)。
デットの整理は救急トリアージに例えられます。すべてを修正する前に出血を止めなければならないのです。これにはステークホルダーとの明確なコミュニケーションと、非技術的リーダー向けの定量化された技術価値が必要です。人間側を無視すると、企業は信頼喪失、作業重複、納品遅延というリスクに直面します—これらは業界全体で横断的な協力によって緩和できます。
著者はまた、「エンジニアのエンジニア」(深い技術志向)と「ヘッドアップコーダー」(深さとリスク認識、チーム指揮をバランスする人)の対比を示し、シニアエンジニアは横断的協力を学ぶ必要があることを強調しています。CS 教育では個性・エゴ・盲点が見落とされる傾向があります。

本文

ほとんどの技術的課題は実際には人間関係の問題です

私はかつて、数百万行に及ぶコードベースでテクニカルデット(技術負債)が膨大な会社に勤めていました。単体テストがなく、10年以上古いフレームワークを使っている状態です。あるプロジェクトでは、Windows 専用のモジュールを Linux で動かす必要がありました。クロスコンパイルを行う代わりに、別チームが数十万行のコードをコピー&ペーストし、Windows 固有のコンポーネントを Linux 用に差し替えたのです。

非技術者にはこれが大きな問題です。二つのバージョンのコードが同時に存在するため、すべての機能とバグ修正を別々のコードベースで行わねばならず、時間とともに分岐していきます。この話を聞いた私は、若くて未熟な自分として状況改善に乗り出しました。テクニカルデットプロジェクトは管理職への説得が難しく、すべてが順調に進んでもコードは以前とほぼ同じ動きをします。このプロジェクトも例外ではなく、見た目にも良くありませんでした。私は多くのエンジニアが行うように「政治を無視し」、頭を深く入れて実行しました。しかしプロジェクトは長引き、管理職からの信頼を失いました。

結局、私は人間関係の問題を技術的解決策で解こうとしていたことに気づきました。この会社のほとんどの開発者は、今日も昨日も五年前も同じやり方で作業しており、Andrew Harmel‑Law が指摘するように、コードは書いた人の性格を反映します。変化を強く嫌う性格の人ほど、将来の変更を想定した設計をしません。

ほとんどの技術的課題は本質的には人間関係の問題です

技術負債が存在する理由を考えてみてください。要件が作業開始前に十分に明確化されなかった、営業担当者が顧客に非現実的な締め切りを提示した、開発者が快適さから古いテクノロジーを選択した、経営陣が反応的すぎて途中でプロジェクトを中止した、誰かのエゴが改善策を見逃す原因になった、といったケースです。

このプロジェクトの根本問題は、リファクタリングが必要だと認めることが、会社のソフトウェア構築手法が壊れていること、そして個々のスキルセットが大幅に時代遅れであることをも意味するという点でした。私の小さなチームは数多くあるモジュールのうち一つを修正しようとしましたが、他の開発者たちは何十年も続けてきたやり方を変えませんでした。「新しいことを学びたくない」とオープンに言われました。結局、テクニカルデットは他人が作る速度より速く掃除できるものではありません。救急室でのトリアージのように、まず出血を止めてから壊れた部分を修復する必要があります。


理想的な世界

このプロジェクトは私に、エンジニアが「政治を離れて作業だけに集中し、締め切りや顧客の存在を無視できる」理想の世界を信じていたという幻想を打ち砕きました。実際にはほとんどのプロジェクトは非技術的なステークホルダーが関わっており、「ただ私たちに任せてください」と言うだけでは不十分です。チームが多くの仕事をこなしているという認識自体が、実際に多くの作業を完了する以上に重要であると気づきました。

非技術者は必要な労力やテクニカルデットのクリーニングの重要性を直感的に理解できません。エンジニアリング側が初期見積もりからプロジェクト更新まで、これらを効果的に伝える必要があります。リーダーシップが技術背景を持っていない場合は、テクニカルデット作業の価値をビジネス価値として定量化し示すことが求められます。


注意喚起

これらはより上位のポジションへ進むために必要なレッスンかもしれません。私見では、シニアエンジニアを超えるレベルになると、技術的トラックであろうとマネージメントトラックであろうと、クロスファンクショナルに協働できることが必須です。大学はコンピュータサイエンスを教えますが、人間関係やエゴ、自己の盲点をナビゲートする方法は教えてくれません。

私は素晴らしいエンジニアたちと共に働いてきました—自分よりも優秀で、どんなテクノロジーでも深い知識を持つ人々です。若い頃は「エンジニアのエンジニア」になりたいと思っていましたが、今ではそれが自分の性格に合わないと悟りました。私は ADD が強くて完全に頭を入れて作業することが難しいのです。

彼らの多大な技術的能力にもかかわらず、多くは対人関係を避ける傾向があります。個々として非常に生産的であっても、単一のプロセッサコアのように「速さ」に限界があるため、大きなイニシアチブでは失敗することがあります。そこで重要なのは、「頭を上げるコーダー」—技術的には深くて、同時にリスク(技術的・非技術的)を先読みし、チームを導ける人です。


同じ日のほかのニュース

一覧に戻る →

2025/11/30 18:11

Self-hosting my photos with Immich

## Japanese Translation: 記事では、著者が低電力Ryzen 7ミニPC(ASRock DeskMini X600)に64 GB RAM、1 TBディスクを搭載し、アイドル時の消費電力が10 W未満である環境にImmichをセットアップした手順を説明しています。Proxmox上に「photos」という名前のVMを作成し、500 GBのストレージ、4つのCPUコア、4 GB RAMを割り当てました。NixOS設定ファイルで `services.immich.enable = true` を有効化してImmichサービスを起動します。このサービスは `tailscale serve --bg http://localhost:2283` コマンドと MagicDNS/TLS によりTailscale経由で公開され、`https://photos.example.ts.net` からアクセス可能です。 公式の `immich‑cli` を使用した初期写真インポートでは、バックグラウンドジョブがタイムアウトし、Google Takeout のJSONメタデータが無視されるという問題が発生しました。第三者ツール **immich-go** が両方の問題を解決します。`immich-go upload from-google-photos …` を実行することでバックグラウンドタスクを一時停止し、Google Takeout アーカイブを正しく処理できます。その後、iPhoneアプリはTailscale URL経由でログインし、自動アップロードが有効化され、通知は無効にしてアップロードアラートを防止します。 バックアップについては、著者はsystemdタイマーを使用して `/var/lib/immich`(UPLOAD_LOCATION)ディレクトリ全体を rsync で3‑2‑1戦略で同期する予定です。これはImmichの公式ドキュメントに従った方法です。記事では、Immichには組み込みの写真編集機能がないため、ユーザーはGIMPなど外部ツールを使用しなければならず、共有もまだGoogle Photos経由で行われると指摘しています。Enteと比較して、著者は既存のTailscale VPNとLUKSディスク暗号化が十分なセキュリティを提供するため、エンドツーエンド暗号化を必要としないImmichを好んでいます。 総じて、このセットアップは小型かつ省電力マシン上で高速で信頼性の高いセルフホスト写真保存ソリューションを実現しており、外部編集ワークフローを受け入れられる趣味家や小規模ビジネスに適しています。

2025/12/06 12:32

Nook Browser

## Japanese Translation: > **概要:** > 製品「Browse」はプライバシーを最優先としたオープンソースのウェブブラウザで、ユーザーのデータが販売または追跡されることは決してないと約束しています。WebKit エンジンをベースに構築されており、高速なパフォーマンスと最小限のシステムオーバーヘッドを実現しながら、インターフェイスはクリーンで侵入的なポップアップがありません。チャット支援や要約、最新のウェブ情報などの AI 機能は、ユーザーが明示的に選択した場合のみ利用可能です。コードベース全体が公開されており、パーミッシブ ライセンスでリリースされています。また、コミュニティ主導のロードマップに従い、新しいツールを追加する前に安定性を優先しています。設定はユーザーが理解しやすく、逆行可能(戻せる)ように設計されています。FAQ セクションでは、これらのポイント以外に独自の情報は提供されていません。 このバージョンは主要なポイントをすべて保持し、業界への影響についての推測を削除し、設定の逆行性と FAQ の内容に関する欠落した詳細を追加しています。

2025/12/06 0:35

Cloudflare outage on December 5, 2025

## Japanese Translation: ``` ## Summary Cloudflare の 2025 年 12 月 5 日の障害は約 25 分間続きました。 08:47 UTC にネットワークセグメントが故障を開始し、08:50 UTC に完全な影響に達し、09:12 UTC に問題が解決しました。 全 HTTP トラフィックの約 28 %(古い FL1 プロキシと Managed Rulesets を使用している顧客)がエラーを経験しましたが、中国ネットワークトラフィックは影響を受けませんでした。 障害は、CVE‑2025‑55182(React Server Components の脆弱性)を修正するために意図された二つの急速なコード変更によって引き起こされました。 まず、WAF バッファサイズが 128 KB から 1 MB に増加し、段階的に展開されました。 次に、グローバル設定更新で内部 WAF テストツールが無効化され、FL1 のルールモジュールで Lua エラー(`attempt to index field 'execute' (a nil value)`)を引き起こし、HTTP 500 応答を生成しました。 このバグは何年も存在していましたが、「execute」ルールのキースイッチが execute フィールドが欠落した際に処理するコードを回避したために露呈しました。 同様で大規模なインシデントが 2025 年 11 月 18 日にも発生しました。 Cloudflare はロールアウト手順の強化、バージョン管理制御の追加、ブレイクグラスアクセスの簡素化、およびフェイルオープンエラーハンドリングの実装に取り組んでいます。詳細なレジリエンシー計画は来週公開される予定であり、新しい緩和策が稼働するまでネットワーク変更は停止されたままです。 この出来事は、大規模 CDN 運用における厳格な変更管理の必要性を強調し、迅速展開保護策に関する業界全体での見直しを促す可能性があります。 ```

Most technical problems are people problems | そっか~ニュース