02ブログ

足りなかった ドキュメント

学んでいることのメモです。ほとんどは、思ったより手こずった具体的な問題から出てきています。

すべて
  1. ProductoLa web de un pintor solo tiene que hacer una cosa: que le llamenHice la web y la app de trabajo de Mamu, un pintor de Valencia, en cuatro días sueltos. Lo que más mejoró la web fue borrar las páginas de precios y de por qué elegirnos.
  2. IACómo construimos Zenbu, un buscador de anime que busca por lo que cuentasCatorce mil animes, un vector por serie y un LLM que reordena al final. Lo que más nos costó no fue la búsqueda semántica: fueron las secuelas con sinopsis de una línea.
  3. アーキテクチャ認証プロバイダを四回乗り換えました一年半でマネージドのプロバイダ四つ。行き着く先はどれも同じ、自前のミドルウェアでした。各移行で何が壊れるのか、そしていま認証を一行書く前に何を見るのか。
  4. 運用Stripe に五回ビルドを壊されたので、もう予定に入れていますStripe の API バージョンを上げるのは事故ではありません。付随する被害もかなり予測できる、繰り返しの保守作業です。予算に入れておくべきものです。
  5. プロダクトクレジット、残高、支出上限五つのプロダクトで従量課金を同じように作りました。クレジットから始めて、最後はセント単位の残高とキーごとの上限に落ち着きます。もうどの段階から始めるべきか分かっています。
  6. データベースPostgres の RLS を、使った二回とも外した理由Row Level Security はデフォルトで正しい作法に見えます。Drizzle とサーバーアクションと自前の認証があると、権限のロジックはすでに別の場所に住んでいて、両方を保守するのは痛い。
  7. 判断ゼロから始めることはありません: いつも持っていくものと、いつも削るもの同じボイラープレートの上に十のプロジェクト。それぞれの最初のコミットは、新規プロジェクトというより前のプロジェクトの最後のコミットに似ていて、二つめのコミットはたいてい何かを消しています。
  8. 判断どのテンプレートでも最初に外すのは Stripe ですほぼすべてのプロジェクトを、checkout とポータルと webhook を消すところから始めます。うっかりではありません。いつか必ず要るインフラと、まだ出番でないものを分けているのです。
  9. アーキテクチャ同じ並行性のバグが、別々の三つのプロジェクトで出てきた負荷のかかったカウンタは加算を取りこぼし、減算するカウンタは同じものを二度請求しかねません。カウンタが金額なら、それはあとで直せばいい細部ではありません。
  10. AI新しいモデルは毎回、違うものを壊していく一年半でモデルの移行が六回。どれも文字列をひとつ書き換えるだけでは済みませんでした。最初はどれもそう見えたのですが。
  11. データベース同じ契約モデルを十回以上書き直しました込み入ったドメインモデルは一発ではうまくいきません。実データを前にして書き直しながら収束していくもので、そこには正しく見えた判断を撤回することも含まれます。
  12. データベース最初に書いたデータスキーマは、たいてい一か月もちません一日目のスキーマは、まだ理解していないドメインについての仮説です。そう認めると、書き方も、変えるときの痛みも変わります。
  13. セキュリティゲストアクセスをコードではなくセッショントークンで作る理由アカウントのない相手を入れるには、六桁のコードが単純な方法に見えます。取り消す必要が出るまでは。そのとき、誰を追い出しているのか分からないと気づきます。
  14. 運用「ローカルでは動く」がもう何も意味しない理由自分のマシンと本番の違いは不運ではありません。いつも壊れる四つの具体的な分類であり、ビルドが緑でも見えないものです。
  15. エンジニアリング緑を出しながら嘘をついていたテストTODOS LOS TESTS OK と出力して終了コード 0 で終わるテストの中に、SCRIPT ERROR が六つ。緑が偽物だとどう見抜くか、そして信じる前に今は何をしているか。
  16. パフォーマンス管理画面の一覧が真っ先に落ちる社内向けの管理画面は、最初は行が四つしかないので上限なしで書かれます。そしてプロダクトが育ったとき、まさにそこが吹き飛びます。
  17. セキュリティ自分のコードを他人のものとして監査して学んだこと空の ACL がコーパス全体を返し、JavaScript を一行も使わない CSS インジェクションがあり、持ち主を解約したあとも有効なままの API キーがありました。全部一日で、全部自分が書いたコードの中で。
  18. アーキテクチャログインが要らないアプリでもログインを求める理由identity がなければ、クォータも、支出の上限も、濫用する相手を止める手段もありません。登録の摩擦は、それを持たない代償に比べれば安いものです。
  19. 判断自分で一から作り始めると、いつも同じ結末になるエディタを自前で四回作りました。三回はライブラリで書き直す羽目になり、四回目は二日ももちませんでした。
  20. フロントエンドグローバルなストアが居場所を勝ち取るときグローバルな状態は、便利だからという理由では正当化できません。途中のコンポーネントが、下に渡すためだけに使わない props を受け取っているとき、それは正当化されます。
  21. 判断ESLint から Biome への移行を五回: 判断はもう済んでいる同じ移行を五つのプロジェクトで、考え込むこともなくやってしまったら、それはもう好みではなく判断です。途中で壊れるものと、失うもの。
  22. 判断書いてから作る: 自分が制御できない連携のためのルール他社の API と連携するとき、最初の四つのコミットはコードに触れません。先に文書を書くと、あとで本番を壊す制限を実測せざるをえなくなります。