#workfromhome – How does our software development work together now?

At CONTACT we believe that personal and informal interaction of people is an important success factor in complex technical projects – and without doubt this includes the development of our own software products. We therefore attach great importance to giving our teams the opportunity to meet with their colleagues in their offices, our meeting rooms or in places like the “Red Sofa”. All this came to an abrupt and hopefully temporary end through Corona.

Home office for everyone
After initial preparations in the days before, CONTACT decided over the weekend of 14-15 March to let all employees work from home. In contrast to many of our customers, “Work from Home” meets particularly favourable conditions at a software manufacturer: There is no production where material has to be moved, and software as a “virtual” product can in principle be processed anywhere in the world.

As an IT company, we naturally have a suitable and efficient technical infrastructure, and apart from a few necessary hardware transports of workstations, screens and so on, the software development and also the other areas at CONTACT were ready for use in less than a day.

In addition to our headquarter in Bremen, we operate development sites in Munich, Cologne, Paderborn and Stuttgart and frequently work together with external partners. That’s why means of communication such as e-mail, telephoning via Voice-over-IP, Microsoft teams and so on are an daily routine for our technology-aware software developers anyway.

What really holds our development together, however, are the common processes and procedures, and the associated systems. The most important business platform is our in-house installation of CONTACT Elements, or CEDM for short. Everything we do converges there, and all other IT systems are connected to CONTACT Elements.

CONTACT Elements’ Activity Stream enables us to share information and documents quickly and efficiently.

Products
Each software component of CONTACT Elements is listed as a product in our Elements in-house installation. We manage the source code of our business applications in Git or Subversion repositories, which are linked to the product object. Errors or change requests for the software products that arise from the field are managed as “Change Requests” in Elements. If these lead to code changes, a direct link is created between a change request and a source code change (a “commit”) in Git or Subversion. Of course, we also keep a list of product releases and their maturity level in CONTACT Elements.

Our development processes are highly automated and, by nature, completely digital. We operate many other systems that automatically build, test and measure software. All these systems are directly or indirectly connected to CONTACT Elements.

Every hour that a developer spends maintaining or further developing a software component is recorded in CONTACT Elements. This way we always have an overview of the extent to which we invest in software components and what the maintenance costs are.

Projects
Our development methodology combines several agile methods with extensions specific to our company. It is called “Revolution” and is stored in CONTACT Elements by templates for projects that can be adapted by “Tayloring”. In “Revolution” there are also a number of deliverables, which are defined in CONTACT Elements as documents from templates. We create requirements as specifications in CONTACT Elements’ requirements management. Project planning is done in iterations, which are planned and processed with task boards.

Task board for a current development project at CONTACT.

As a result, all information that is important for our development can be found in one system and linked together. All employees are well acquainted with the terms, are able to access the relevant information at any time and are guided by the systems to the right next activities.

Conclusion
In the current crisis, this system and process landscape creates trust and the ability to act. It has enabled us to switch to remote work practically from one moment to the next without any distortions. In addition, thanks to the willingness of our staff to change and the already existing tendency towards technical tools of communication, we have succeeded in shifting personal interaction and meetings to the Internet via video chats and web conferences.

Agile physical product development?

My last blog post was about teams that only become really agile through experience. Today, the focus is on the challenges that agility brings to engineering.

Almost 20 years after the Agile Manifesto, agile software development has become widely accepted. It is no longer about whether, but only about best practices in detail and agile scalability. The success and ease of use of task boards, for example, have led to agile procedures also finding enthusiastic users outside software development where tasks are processed in a team.

This finally led to the increasingly intensively discussed question of whether physical products could also be developed more efficiently with an agile approach.

Why?

For many years, there have been established product development processes that have reached great maturity and support successful development. Why abandon them and take on the risks of a completely new approach?

The more unclear the requirements on the product are and the less known the technology to be used, the less suitable classical project management methods are, because they are very strongly forward-planning. It is precisely this tendency to start projects despite initially incomplete requirements that we are increasingly observing. Digitization and new technologies require new business models or new technological capabilities. This speaks for an agile approach, as it was invented to deal with ambiguity and not-yet-knowledge.

Is that even possible?

The decisive question here is: Are agile methods from software development at all suitable for mastering the challenges of “classical” product development? In contrast to software, physical products are developed with a much greater division of labour. The production of faulty components causes high consequential costs and the validation depends on physical prototypes. It is not possible to present a new, functioning and potentially deliverable stand every two weeks. Solutions for such problems require a creative further development of the known agile process models. A very simple example: The teams of different domains use different sprint durations. While the software team delivers every 2 weeks, the mechanics team delivers every 6 weeks. It is important to synchronize the sprints so that a common increment is achieved every 6 weeks.

The challenge

The challenge of introducing agile methods is therefore twofold: On the one hand, it is necessary to adapt the agile methods from software development to the conditions in product development. On the other hand – and this brings me back to my previous contribution – a lot of agile experience is needed to successfully make such adjustments. In order to resolve this contradiction, one should bring together the pioneers who dare to venture into new territory with experienced “agilicans” who master their craft in software development. Mutual learning and sharing of knowledge leads to a better mastery of product development under rapidly changing conditions.

Being agile or appearing agile?

When I first heard about agility years ago, I first had the impression that processes and rules should be thrown overboard in order to miraculously realize volatile requirements in the twinkling of an eye. I couldn’t imagine how this would work: agility sounded to me like an unattainable wish concert.

Initially, when our software development team started to work with Scrum – with me as the product Owner and guided by an experienced Scrum Master – I seriously dealt with the topic.

I learned that agility does not mean chaos, but quite the opposite was true:

Lesson 1: Discipline

Agile approach has rules. We learned them in the previous Scrum training, but most of all our Scrum Master advised us to strictly adhere to the Scrum rules instead of interpreting them in the way that seemed most appropriate to us. What I learned: Agility is not a laissez-faire, but requires a very disciplined approach that only works if it is lived consistently and not bent as needed.

Lesson 2: The Sense

Fixed roles and rituals are useful. We had learned them for Scrum, but real understanding grew gradually through coaching and the questions of the Scrum Master. For example, when in the process of a sprint it turned out that several of the agreed user stories would not be reached. Of course, all team members tried to do their own job in the best possible way. This would have meant that the individual user stories would only be completed to 70%. The Scrum Master, however, put up for discussion the idea of discarding one or two user stories for the sprint instead and helping to complete the others. What we learned: Results orientation and focusing on a common goal make teamwork more productive and team members more satisfied.

Lesson 3: Team Spirit

The more we internalised the meaning of the rules, roles and rituals, the more efficient the projects became. The team grew more and more together and not only a common focus on achieving the goal developed, but real cohesion. Where previously colleagues had expressed a lack of understanding for each other’s work or had blamed each other, everyone in the team now knew what the others were doing and why. They helped each other to the best of their ability and trusted each other more and more. And because sustainable learning works above all through positive emotions, this was the point at which we developed a real understanding of agility.

In the end it became clear to me that agility only comes about through the interaction of rules, people and motivation. Understanding the agile values behind the rules is crucial. Otherwise there is the danger – by picking out or bending individual rules to one’s own needs – of failing with the agile approach.

This does not mean that the agile frameworks must not be adapted or selectively applied. But you have to understand them first.