How to implement a Software Engineering Strategy?

One of the biggest challenges for IT is to fulfill both its cost-efficiency purpose and its responsibility for digital transformation. The crux of the matter is determining which aspects of the business lend themselves to operational efficiency and which ones
enable digital innovation. To carry out this strategic segmentation for all core functions, processes and requirements of an entire corporation, organizations can leverage business capabilities as structuring elements.

As digital transformation aims at innovation or at least differentiation, all business capabilities that contain significant potential for competitive advantages should be the main focus for digital value creation. Vice versa, regarding optimization and efficiency increases, IT must target industry-wide standard capabilities or other common elements, that have little differentiating aspects.

Once differentiating and innovating business capabilities are identified, a software engineering strategy must facilitate digital value creation with high speed, quality, and agility. Therefore, the following fundamental principles can serve as a rough guide and lay the foundation for individual adjustments, resulting in a customized software engineering strategy.

Guiding Principles

Organizations enabling autonomy foster speed and agility.

  • Favor a product mode over a project mode: start to deliver iterative-incrementally and apply DevOps practices.
  • Set up rather small but cross-functional teams.
  • Ensure the right balance between loose coupling and alignment of teams.
  • Build up in-house software engineering capabilities.

Lightweight and flexible architectures are key.

  • Apply modular architecture styles like Microservices or self-contained systems.
  • Follow an API-first approach and use asynchronous integration patterns to foster loosely coupling.
  • Decouple your existing system landscape by implementing an integration layer in front of it.

Make use of faster-than-ever-evolving technology.

  • Follow a public cloud approach and use Platform-as-a-Service (PaaS) offerings as much as possible to gain speed in technology provisioning.
  • Define a state-of-the-art tech stack and evolve it continuously.
  • Automate the software engineering platform to reduce cognitive load, and increase the autonomy as well as the speed of engineering teams.
  • Whenever possible, keep off multi-cloud setups to avoid unnecessary complexity.