Yazılım tasarımında sıkça karşılaşılan "trade-off" kavramını somutlaştırmayı amaçlayan bu makale, soyutlama ve sistem sınırları gibi temel tasarım ikilemlerini inceliyor. İlk olarak, soyutlama tasarımında güç (power) ile özellikler (properties) arasındaki dengeye dikkat çekiliyor; genellikle güce odaklanılsa da, doğru özelliklere sahip olmanın daha kritik olduğu vurgulanıyor. İkinci olarak, bir sistemin sınırlarında mı yoksa iç kısmında mı tasarım yapıldığına bağlı olarak kurallara bağlılığın veya esnekliğin öncelik kazanabileceği belirtiliyor. Makale, programlama dillerinin nesneleri ve veriyi ayrı ayrı tam olarak kucaklamamasının bu ikilemi daha da karmaşık hale getirdiğini öne sürüyor.
Makale, "ifade problemi"ni (expression problem) basit bir koordinat örneği üzerinden açıklıyor. Polar ve Cartesian koordinatları hem nesne odaklı (Java benzeri) hem de veri odaklı (Haskell benzeri) yaklaşımlarla temsil etme şekilleri gösteriliyor. Nesne odaklı tasarımda, yeni bir koordinat türü (örneğin, silindirik) eklemek kolayken, mevcut Coord arayüzüne yeni bir metot (örneğin, scale()) eklemek, tüm mevcut implementasyonları değiştirmeyi gerektirdiği için zordur.
Öte yandan, veri odaklı (fonksiyonel) tasarımda, yeni bir metot (fonksiyon) eklemek kolaydır, çünkü mevcut veri yapısını değiştirmeden yeni bir fonksiyon yazılabilir. Ancak, Coord veri yapısına yeni bir tür eklemek (örneğin, silindirik koordinatlar), bu veri yapısını kullanan tüm fonksiyonların (örneğin, distance) pattern matching kısımlarını güncellemek anlamına geldiği için zordur. Bu ikilem, yani bir sistemi yeni veri türleri veya yeni operasyonlar eklenirken mevcut kodu değiştirmeden genişletme yeteneği, "ifade problemi" olarak adlandırılır ve yazılım mimarisinde önemli bir tasarım kararıdır.
Yazılım tasarımında nesne ve veri odaklı yaklaşımların farklı genişletilebilirlik avantajları sunduğunu anlamak, gelecekteki değişikliklere daha dayanıklı ve sürdürülebilir sistemler inşa etmek için kritik öneme sahiptir.