シュレート・ディンガーのロングキャット


プログラムの数は書くことができるチェスゲームの数よりもvasterです.さらに悪いことに、プログラムの開発は決して終わりません.動作して、成長するビルディングコードは非自明であり、働いている新生児の子猫を送るか、ネオンのサインをピラミッドに接待するのと同じくらい間違っていると感じることができます.
コード構造は改善と適応を歓迎するべきです、しかし、機能は最初の実行から現れなければならなくて、実行しなければなりません.私の最近の経験では、Xylaのためのマーケティングツールを書いて、我々は頻繁に、正常に継続的に使用され、急速に進化する製品のアーキテクチャは、ハードとソフトであることをこれらの命令に一致しました.

重ね合わせ


多くの異なった状態が同じ空間と時間に共存する量子ポテンシャルは、計算の二値性と矛盾するように見えますが、私たちは次の原理を通してそれらを和解させます

  • つの状態だけが実際にユーザーストーリー(単一の製品展開)の任意のセットで現れます.

  • スーパーロケーションコードを記述する必要はない現在のコードが妨げられない可能性のある未来としてプログラマの心にのみ存在する必要がある.
  • コードの各々のリリースがその機能の1つの崩壊した状態を定義する間、量子波はエンジニアの計画、議論と構造決定に存在します.

    デッドオアアライブ


    量子遠近法(s)は,現在の目的が明確に現れたコントラストに対する代替状態の文脈を提供することによってコード組織を簡素化する.
    /**
     * @module Longcat
     * We wanted to build a responsive drill-down data exploration
     * tool with unlimited depth (height) like a longcat.
     */
    
    我々が死と生きているlongcat(s)の間で比喩的に決定したとき、死んだものは我々の最初の特徴セットのために最も簡単に使われます、高レベル組織はすぐに明白なコードに分けられました:
    1 .最初に書く一般的なlongcatコード
    /**
     * Data set wrapper with browser-side filtering and aggregation.
     */
    class Transformable {}
    /**
     * Grid defining nested drill-down data set nodes.
     */
    class IOGridComponent {}
    /**
     * Configurable graph rendering library.
     */
    class Grapher {}
    
    2 .2番目を書くデッドロングCATコード
    /**
     * Grid row displaying each node's data in an unresponsive chart.
     */
    class NodeChartComponent {}
    
    3 .生きているlongcatコードは、要求されるまで、全く書きません
    /**
     * The ghost of future code haunted the project in the form of
     * generic components and configuration interfaces, such as
     * GrapherConfig. When we implemented responsive, user-customized
     * charts and combined drill-downs in persistent interactive
     * report grids, the longcat simply and naturally grew.
     */
    
    生きているものとの病的な対照で死んだlongcatを考慮することによって、プロジェクト組織の階層と破壊線は分岐選択肢として照らされます.私たちのためのこのアプローチから来る最も有益な洞察は以下の通りでした:

  • 分析:コードを書くための明確なセクションは、識別されて、さまざまな潜在的コード状態(例えば生死対longcat)に対するそれらの一般的であるか異なる関係を使用してカプセル化されることができた.
  • We never mixed assumptions about what data was to be displayed or how it would be rendered into generic code such as the grid layout or data transformation system.


  • 合成:エンジニアは暗黙のうちに、潜在的なコード進化の意識を通して、速度または精神的な帯域幅を犠牲にすることなく、将来のスプリントで接続と適応と互換性を持つコードを書きました.
  • We intuitively identified configuration parameters for data transformation and graph rendering and kept them separate from code logic.


  • 我々のモデルは、すべての後の出来事から特異な現在のゴール状態を分化させたので、チームは同期していて、すぐに一般の目的で収束しました.
  • Our query, data flow, and UX implementations by different engineers merged seamlessly into our first targeted set of features, and evolved rapidly into the next.



    エンタングルメント


    皮肉にも、常に可能性と無限の多数を考慮することによって、我々の仕事の各々の瞬間は、希釈されて、明らかにされませんでした.一般的な多形問題についての我々の考慮は、私たちが最初ではなく、具体的な解決をいじめるのを許して、確立された周囲の可能性のスペースの範囲内でそれを実行します;我々の範囲の端についての不確実性よりむしろ、そして、それらの外側に置かれたものは、我々にそれのマルチバースと方向を垣間見るのを見ました.
    そのような意識は、私たちにスペースと時間の矛盾する限界から我々をuntangledしました:我々は、後に生きているLongCatを実装することができましたが、それを再アニメーション化することより少なくとも9回簡単だった死んだものと並行して.実際の、潜在的な、そしてその親密さを知って、我々は無限の可能性で我々のまわりでサーブして、各々のリリースで屈折することで、反復の各々の波で特定の価値を届けました.

    によるPhoto
    ジョシュsorensonによるCover photo