Physical vs Logical worlds

Usage and maintenance

In the physical world, wear and tear resulting from use leads to maintenance requirements and costs. Buildings, machinery, and other physical assets deteriorate over time, necessitating regular upkeep and repairs. Even something as simple as a post box sitting outside, exposed to the sun, rain, and snow, would eventually require maintenance due to its physical existence. This ongoing maintenance burden is a crucial consideration when estimating costs in the physical world.

On the other hand, the digital world operates differently. Software, unlike physical objects, doesn’t experience wear and tear through typical usage. Instead, software remains in a consistent state until an old version is used to create a new version. This process of using the old version to build a new one is how software is “used” in the digital world.

The need for continuous improvement and adaptation drives the maintenance burden of software in the digital world. Ongoing updates, bug fixes, security patches, and enhancements are required to meet evolving user needs and technological advancements. Developers must allocate time and resources to maintain, update, and refine their software over time.

Considering this aspect of software maintenance is crucial when estimating costs in the digital world. Projects should account for ongoing software updates, maintenance efforts, and potential future development. Although software itself doesn’t experience physical wear and tear, the need for regular updates and improvements incurs its own set of costs.

Understanding and acknowledging the contrasting nature of maintenance between the physical and digital worlds allows businesses to make more accurate cost estimates and allocate resources accordingly.

Isolation

When it comes to adding a new feature to software, there are times when developers are advised to avoid touching the existing codebase. However, this advice can sometimes lead to problems akin to building an en suite bathroom without modifying the existing house. Imagine wanting to incorporate a bathroom directly into an existing bedroom without making any changes to the room itself. This could result in constructing a bathroom at the bottom of the garden, leading to additional construction, plumbing, and maintenance costs.

In the context of software development, not touching the existing code poses similar challenges. If new features are added without modifying the existing codebase, it can lead to convoluted solutions, complex workarounds, and increased technical debt. It becomes difficult to maintain the software, and any future modifications or bug fixes may require even more effort. This approach is contrary to the SOLID design principles and the Agile rules of simplicity, which emphasize code maintainability and flexibility.

In software development, refactoring and improving existing code is often necessary to keep the software aligned with best practices and to ensure the SOLID design principles are followed. While it may require additional upfront effort, modifying the existing codebase allows for a more cohesive, efficient, and maintainable system in the long run.

By striking a balance between isolating changes and improving the existing code, software developers can adhere to SOLID design principles, Agile methodologies, and maintain simplicity. This approach enables better long-term maintainability, scalability, and the ability to quickly adapt to changing requirements.

Contortion

The physical world has limits and limited scalability. These are not seen in software. Code can be added endlessly to the foundation, which is not possible in the physical world. The physical world comes with laws. This is not the case with the logical world. The laws are made at the same time the logical constructs are made.

Working with knowledge

Knowledge workers work with knowledge. These workers, such as solution architects and business analysts, primarily deal with abstract concepts and digital information rather than physical objects or activities. Their roles involve analyzing and manipulating data, developing ideas and strategies, and making informed decisions based on their expertise and knowledge.

For instance, solution architects are involved in designing software systems or technology solutions that exist in a digital, intangible form. They focus on creating architectural plans, defining technical requirements, and mapping out the structure and components of a solution. Similarly, business analysts work with data, documents, and processes to identify business needs, analyze data trends, and propose solutions to enhance business operations.

Although the outcomes of their work may ultimately result in tangible impacts and physical changes, such as improved software applications, processes, or user interfaces, the activities of knowledge workers primarily revolve around working with and manipulating information and knowledge.

Working with abstract concepts and digital information does introduce collaboration challenges. While physical tasks may provide immediate clarity and less ambiguity, knowledge workers have developed strategies to overcome these challenges in the abstract and digital environment. Effective communication, documentation, visualization, and collaboration techniques help them ensure successful collaboration on complex projects.

Recognizing that traditional bosses with their command-and-control management styles may hinder collaboration in knowledge-driven fields, many organizations are adopting more inclusive approaches. They transform bosses into leaders, flatten organizational structures, promote open communication, encourage collaboration, and embrace shared decision-making.

Mental models

As humans, we strive to understand our environment. We do this by creating mental models of how we think things work.

Physical World Mental Models:

  • Grounded in Experience: These models are built through direct interaction with the physical world. We learn how objects behave, how systems work, and how to navigate our environment through our senses and past experiences. For example, we all have a mental model of how a doorknob works, based on our experience of turning knobs to open doors.
  • Intuitive and Tactile: These models are often intuitive and rely heavily on our senses. We can see the knob, feel its texture, and understand how turning it translates to the physical movement of the door. This makes them generally easier to grasp and apply in familiar situations.
  • Limited Scope: Our physical world models are typically limited to the things we have directly encountered or learned about. We can’t necessarily predict how a never-before-seen object will behave based solely on our existing models.

Logical World (Software) Mental Models:

  • Abstract and Conceptual: Software systems, on the other hand, are inherently abstract. We don’t directly interact with them in the same way we do with physical objects. Our mental models of software are built through instruction, metaphors, and experience with using similar systems.
  • Symbolic and Representational: Software interactions often involve symbols and representations that stand for underlying processes or data. Understanding these symbols and how they connect is key to building an accurate mental model of the software. For example, a user might see a “trash can” icon, representing the concept of deleting a file, even though there’s no physical trash can involved.
  • Greater Flexibility and Malleability: Compared to physical models, software models can be more flexible and adaptable. As users learn and explore the software, their mental models can evolve to encompass new functionalities and workflows.

Implications for Software Design:

Understanding these differences is crucial for software designers. By:

  • Leveraging familiar physical world metaphors: Designers can bridge the gap between the abstract and the familiar, making software easier to learn and use.
  • Providing clear and consistent representations: They can ensure that symbols and UI elements accurately reflect the underlying functionality, fostering a clear mental model in users.
  • Allowing for exploration and discovery: They can design interfaces that encourage users to explore and learn, gradually refining their mental models of the software.

Summary

Physical vs. Digital:

  • Physical: Wear and tear from usage leads to maintenance needs.
  • Digital: Software itself doesn’t wear out, but needs updates and improvements to stay relevant and secure. This is its “maintenance burden.”

Isolation in Software Development:

  • Avoiding modifying existing code when adding features can lead to complex solutions and future problems, similar to building an isolated bathroom outside a house.
  • Refactoring and improving existing code is often necessary for long-term maintainability and adherence to best practices.

Contortion in the Digital World:

  • Unlike the physical world, software has no inherent limits and can be infinitely expanded.

Knowledge Workers:

  • These workers deal with abstract concepts and digital information, like designing software systems or analyzing data.
  • Collaboration is key, requiring effective communication, documentation, and visualization due to the abstract nature of their work.

Mental Models:

  • Physical: Based on experience, intuitive, and limited in scope.
  • Software: Abstract, symbolic, and more flexible than physical models.

Implications for Software Design:

  • Use familiar metaphors to bridge the gap between abstract and familiar.
  • Provide clear representations of functionality in the UI.
  • Encourage exploration and discovery to help users build their mental models.

Leave a comment