Behind the scenesComputing
Product Development – an eclectic bunch who dislike bureaucracy and learn from mistakes
At Digitec Galaxus, both our online stores and our ERP system are developed in-house. Currently, more than 260 engineers, product owners, data analysts and UX designers across 35 teams work on optimising our processes. The goal? Generating added value for our customers as effectively and efficiently as possible. Read on for a peek behind the scenes.
Our company values cooperative, innovative, piratesque, responsible and ambitious are at the core of our culture. They describe how we work together.
What’s especially important to us is that everyone in the company, irrespective of their hierarchy level, treats each other as equals and with respect, and is open to other opinions and perspectives. This gives us the freedom to discuss even the craziest ideas and express concerns openly. This open-mindedness is key to developing clever and innovative solutions and implementing them with determination.
We also attach great value to approaching our tasks and challenges in a proactive way. We take responsibility for our own actions and take decisions ourselves wherever possible. To achieve this, it’s essential that we remove any unnecessary bureaucratic obstacles and keep decision-making processes lean.
Mistakes are learning opportunities
Having a strong learning and error culture is important to us. When mistakes occur, we don’t look for culprits and blame them. Instead, we learn as much as possible from the mistakes. The better we succeed in doing this as an organisation, the more knowledge we can build. And this helps us to develop software effectively and efficiently. The following practices have proven valuable in this regard:
- We support temporary team rotations – so-called DevXChanges. They allow us to gain experience in a new context and broaden our own horizon.
- Every two weeks, the development teams present their achievements and new findings to the entire department at the DevInfo meeting.
- After major incidents, we carry out a post-mortem. The goal? To learn from our mistakes and to reduce the risk of repeating them.
- For personal development, we offer various internal courses on technical, social and leadership skills. Examples of topics we’re currently offering are Domain Driven Design, agile methods and conflict management.
Agile planning and development process
Our management defines the strategic focus of the company in the annual goals. Based on this, our development teams formulate so-called initiatives in close cooperation with all business areas. An initiative describes a change effort with clear goals and verifiable results that has a direct impact on reaching the strategic goals. An initiative should be implementable in no more than four months. This allows us to learn quickly and to react swiftly to changing priorities.
Once work on an initiative begins, it’s broken down into smaller tasks, so-called epics and stories. The stories are then prioritised and implemented in the development teams’ product backlogs. Software development is done within the Scrum framework, partially supplemented by Kanban practises.
Specialised development teams create added value
Development teams specialise in a particular business area and are responsible for improving the customer experience. How? By evolving both the processes and the technical solution in that area. In order to promote a scalable organisation and a motivating work environment, it’s important to us that as many decisions as possible can be taken directly within a team. By specialising, we continuously grow the required detailed knowledge – both product-related and technical – within the team. A team usually consists of 6 to 9 people. In addition to the developers, each team has a product owner who is responsible for prioritising the product backlog. Every team also has a team leader. He or she is responsible for managing the team and also contributes to developing technical solutions. Responsibility for the software architecture lies with the team. For each initiative, one team member assumes the solution architect role and thus shapes the architecture of the solutions that are implemented.
Several teams together form an area. The table below the following paragraph provides a rough overview of each area’s responsibilities. The picture below displays the teams that belong to an area.
Fast feedback thanks to continuous delivery
Being able to integrate changes into our productive environment quickly and frequently (continuous delivery) is important to us. This usually happens after each story that’s implemented – often several times a day. By doing so, we prevent big-bang releases and find out soon if something doesn’t work as it should. On top of this, it allows our customers to benefit from improvements immediately. Automated testing as part of the release process increases the likelihood that bugs will be discovered and fixed early on. And if something does slip through the cracks, feel free to mention it in our Community discussions.
Modular software architecture allows for clear responsibilities
We rely on a modular architecture with interfaces between the individual software components that are as lean and stable as possible. Each component corresponds to a sub-area of our business and is the responsibility of a designated team. This ensures that all teams focus on their area of responsibility and don’t get in each other’s way when implementing new features.
A software component is based either in a module (microservice) or in a modular monolith. There are currently over 50 modules (one to two per team). Our technology stack is mainly based on .NET Core, MS SQL Server and MongoDB. We use React with Next.js and GraphQL for our online shop front end. Both the modules and the monolith are run in a Kubernetes cluster. Messaging (Kafka and Azure Service Bus) is used for asynchronous communication. You can find our complete tech radar here.
The teams in the «Platform & SysOps» area pull out all the stops to ensure the other development teams can work as efficiently as possible. They offer standardised solutions for cross-cutting and infrastructure issues. This would be, for example, a module template, a Kubernetes cluster, a central observability solution (logging, monitoring, alerting) or Database-as-a-Service for our standard persistence technologies (SQL Server and MongoDb). The goal is for such platform services to be easy for development teams to understand and use, leaving as much capacity as possible to develop customer-impacting features.
Have questions or want to help improve our shops and processes? Drop us a line in the comment section.
We’re always looking for new team members. Find our current job offers on our job portal.
More about our product development team:
These articles might also interest you