Technical excellence is about craftsmanship and good development practices.
Competent and capable teams are a central aspect for evolutionary systems. In the decentralized world of incremental innovation good developers need to identify problems, evaluate options, implement and deliver ideas and work with the feedback they get.
Keep software craftsmanship values in mind
Another way to create technical excellence is to improve development practices. Again this is important on the individual as well as the team level. Software developers need to learn about development practices like Extreme Programming or Clean Code. They should visit conferences, read books and articles and discuss their development practices within their team and organization. Regular sessions to improve the team’s development practices include tech talks by colleagues, visits of meetups and user groups or Communities of Practice.
Increase cross-functionality and good development practices
Team players should have at least one domain of expertise inside their team. In order to be valuable team members they should also be able to support others with questions and problems outside the expert domains. This increases collaboration inside the team and decreases the risk of missing responsibility and ownership. These so-called T-shaped professionals help create cross-functional teams that are resilient against failure.
Automate everything and choose the right tool for the job
The improvements above are related to individual and team skills. Another very important part of creating and improving technical excellence is to automate as much as possible. A famous saying in the software industry is: “if you are doing it manually for the second time you missed an opportunity for automation.” Automation removes the human risk factor where manual errors can happen. It also pulls knowledge about processes and tools out of developers’ brains into scripts and other parts of automation. Last, but not least automated processes are quicker to execute than manual ones.
Sector Rating Aspects
These are aspects that can be used to assess your performance and maturity in this sector. For a detailed explanation please have a look at our how to page.
|Code is written purposefully and sensibly (e.g. Clean Code)||Late majority|
|Build and Deployment is automated||Late majority|
|Teams are cross-functional (T-shaped / Pi-shaped professionals)||Late majority|
|Programming is done by the team (e.g. peer review, pair programming, mob programming)||Late majority|
|Creativity techniques are used for technical decisions (e.g. Disney method, Six Thinking Hats)||Late majority|
|Technical decisions are made by the team, not individuals (e.g. consent based decision making)||Early majority|
|Testing is automated on different levels (unit, integration, load and performance, security)||Early majority|
|Infrastructure is automated (i.e. infrastructure as code)||Early adopters|
|Applications provide deep insights (e.g. monitoring and application telemetry)||Early adopters|
|Polyglot solution design / implementation is used (use the best tool / platform / language / framework, not the best known)||Early adopters|
|Design concepts are developed collaboratively (e.g. Design Thinking)||Early adopters|
|Regular and focused experiments are used for technical evolution beyond the used technologies||Innovators|
- Empirical Process Control: Increase know-how by creating room for experiments.
- Feedback & Transparency: Spread and improve technical excellence by fast and detailed feedback.
- Responsibility: Create motivation to increase ones technical excellence and continuously improve ones skills.
- Verticality: Build up broad skills to work on a vertical system in all of its aspects and be able to focus on it.
- (Guided) Architectural Emergence: offer ready-to-use solutions to simplify technology adoption and increase overall technical excellence.