「十分な」ソフトウェアについて

今日、毎日のスタンドアップで、私は人々のためにソフトウェアを書くというチームに対して非常に心からのスピーチをしました。ユーザーがそれを使いたくない場合、内部からコードがどれほど美しく見えるかは誰も気にしません。



また、プロジェクトの途中で同じコードをつかむことでコードを際限なく洗練することはできず、製品の主な価値はコードではなくビジネス機能であり、その場で立ち往生して完全性に取り組むと前進することは不可能だと言いました。



そして、もちろん、すぐに十分なソフトウェアの概念を思い出しました。 だから、彼女の主な仮定は次のとおりです。私たちは完璧にしようと努力していません。恐ろしく書きません。 かなり良い製品を作ります。



これはどういう意味ですか? これは、どのシステムにもエラーがあり、どのシステムのコードとアーキテクチャも不完全であり、機能をいつでも補完できることを理解していることを意味します。 しかし、私たちはこれに我慢し、これらの欠点を必要な悪として扱い、このタイプのアプリケーションにとって重要な特定のしきい値を克服できないようにします。 この記事では、「かなり良い」製品品質の概念、そのコードおよび機能に触れます。



品質



私たちは若々しい最大主義に悩まされず、エラーの数をゼロに減らすために無限の時間を費やしません。 はい、これは不可能です(誰かが望めば、純粋に数学的に証明できます)。 また、システムの目的に応じて、エラーのしきい値を変更する必要があることも理解しています。



明らかに、病院内の患者の重要な活動を確実にするためのシステム内のビジネスロジックの重要な部分や、飛行場を制御するためのソフトウェアにエラーがあってはなりません。 しかし、そのようなアプリケーションの開発とテストにはまったく異なるアプローチが取られており、テストにはまったく異なる時間と予算が費やされています。



平均的なビジネスアプリケーションでは、エラーと欠点の数が非常に多くなる可能性があります。 時々、ものすごく大きい。 それにもかかわらず、ほとんどの標準的なユースケースで障害が発生しない限り、システムは非常に成功します。 このようなソフトウェアは理想的ではありませんが、 十分良いと考えます。



アーキテクチャとコード



コードについても同じことが言えます。 コードは完璧ではないかもしれません。 完璧なコードを作成しようとする試みは、常に不満の予算に終わります。 よく知られている表現「1日を失ってから5分で飛ぶ」。これは、このコンテキストでハックワーク、 プラスチシン」アーキテクチャ 、およびコード内の潜在的なダンプを処理するのに非常に便利です。



私たちは日々の飛行スキルを磨きながら日々負けていますが、どこにも飛ぶことはありません。 止まって言うことはできません。「それだ! 常に完全にマスターされていない飛行テクニックがいくつかあるためです:バレル、ネステロフのループ、その他のトリック(民間航空では同様に不要)



それでは、 かなり良い実装に限定しましょう。 それがより良い可能性があると主張する人すらいません。 しかし、このコードは機能に対する要件も完全に満たしており、 十分に理解でき十分に拡張可能で、変更は非常に簡単です。



機能性



ユーザーにこの「クールな機能」が必要かどうか疑問に思ったことはありませんか? 残念ながら、ほとんどのプログラマーは「より良い」という原則に基づいて作業する傾向があります。 この製品は、最初のバージョンがリリースされる前でも、雨上がりのキノコのような機能が生い茂っています。 追加の「インターフェースの改善」、「他のことをする機能の追加」、「ユーザーがすべてを実行できる柔軟なシステム」の作成、主要なアイデア、アプリケーションの主要なハイライト、成功の主な鍵は失われます。



もちろん、ここでは、ユーザーがすべてを実行できるようにすることが主なレーズンである製品については説明していません。 これらも起こります。 たとえば、当社の製品の1つ(広告が表示されないように指定しません)は、この特定の利点に基づいています。



Twitterをご覧ください。 その機能は最小限です。 ユーザーがメッセージを送信して見知らぬ人を読むことができるのに十分です。 メッセージに写真を追加する機能(「写真なしでできること」、多くの人は考えます)も、本格的な社会性(フォローと返信のみ)も、これ以上はありません。



Googleをご覧ください。 彼はその時点ですべての検索エンジンが持っていたカテゴリを作成したことはなく、「それらなしで」どのように可能になるか想像することは困難でした。



製品に追加しようとする機能が増えるほど、その基本的な利点が失われます。 したがって、作成したメインタスクを実行するには、機能が十分である必要があります。



最後に数行



だから、私は非常に重要な点に注意したいと思います:どんな場合でも、慎重に書くのをやめて「ソーセージ」を始めるようにあなたに勧めないでください。 長生きする製品は決してあなたを許しません。 重要な場所で膨大な数のエラーが発生したソフトウェアをリリースすることはお勧めしません。 豊富な機能が悪いと言っているのではありません。



あなたのシステムが完璧であるべきというステレオタイプを取り除くことだけをお願いします。 これは空想であり、それを追求することで、本当に必要なときに、本当に必要な、重要で興味深い製品をリリースするための非常にリアルタイム、お金、ユニークな機会を失うことができます。



All Articles