Think lean!

As the head of development, my main task is to ensure that all the moving pieces of the software development process are aligned and optimised.
I strive to simplify and streamline the process by implementing proper Agile methodologies and eliminating waste. I take a “helicopter view” so that while I am working on the detail, I am also stepping back and reflecting on how different program parts align and how I could improve them. It’s always a challenge as simplicity is genuinely the ultimate sophistication.
The first step is eliminating waste or anything that does not create value for customers. Waste comes in various shapes:
Partially done work
Software teams tend to do their part in isolation, creating a pile of code, which might be unit tested but often not integrated with the code produced by other teams. I insist on small commits to SVN, early integration and testing so that we can uncover problems in time to fix them.
Extra Processes
A significant source of waste is paperwork. Unless mission-critical or legally required, paperwork is useless. It should be short and high level. Produce flowcharts that all parts of the team can understand. Mock the screens and write integration tests to describe the requirements. Ensure that whatever you do can be used by all the team members.
Feature Creep
Golden rule number two: Always aim for the MVP (Minimum Viable Product). Software teams work hard and are always late. Don’t allow customers and business analysts to burden them with unnecessary extra features. Consult with the customer to determine the MVP and deliver that first. MVP is the beating heart of an agile software project. Stick to it. Extra features should always be based on customer feedback once they use the MVP.
Keep it simple
Golden rule number one: keep it simple! The business domain is complex enough. Do not add to it by code or process complexity. Always look for ways to simplify life for your developers and testers. Analyse your environment and software market and invest in productivity software. Reuse the existing software. Never reinvent the wheel. Perform frequent code reviews and make sure everyone sticks to unit testing as it forces them to write simpler code.
Task Switching
Developers need to stay in the Flow to be productive. Every time they switch between tasks, they incur a significant downtime. The fastest time to complete two projects that use the same teams is to do them sequentially. Know your developers, place them wisely within the development teams and let them surf their Flow. For a deeper understanding of the importance of Flow, read the excellent book by Mihaly Csikszentmihalyi.
Waiting
If you cannot react rapidly to customer feedback, defects discovery, or a delayed decision, something is seriously wrong with your methodology. The most frequent reason for such obstruction is waiting on dependencies: delays in staffing, requirements documentation, reviews and approvals, delays in testing and development or acquisition and configuration of dependency modules. Remove the delays from the process by always keeping the big picture in mind. You must be constantly aware of the dependencies in the organisation, and you must be the one to keep them moving on schedule. A good software manager is a good fixer.
Communication
The essential element of software development is communication. A software project consists of many artefacts which move through various stages. Requirements may move from analysts to designers to programmers. How much effort does it take for a developer to get an answer to a question? Establish clear lines of communication so that information is available instantly. Apart from communication software such as Slack or MS Teams, you must enable people to speak to each other. Make sure you know everyone in and around the organisation and introduce them to each other so that communication flows directly.
Defects
Defects are the primary source of waste. We must use strategies to reduce and discover them as soon as possible. Write unit tests as they will force developers to write code in small units and prevent duplication. Integrate code often and release it to testing as soon as possible. Involve the customer in testing early. A proper code versioning strategy is a must, as is the ability to commit code frequently and CI/CD to deploy quickly. Software design, SOLID principles and unit/integration testing are the weapons in your war against defects.
Micromanaging
A mature organisation focuses on learning and empowers people to make decisions. Organise and empower your teams so that they feel comfortable making decisions themselves. Software development is a creative endeavour. Harness your people’s creativity. It will happen when they know their input will be appreciated, even when they are wrong. Promote communication between the teams and remove yourself from the process as much as possible. Keep an eye on the big picture, but let your people deal with the details. Your goal should be to make yourself obsolete.
Take your time
When faced with problems, increase customer feedback, and involve everyone in brainstorming. Take time to find the key to the problem. Delay the decisions – keep your options open. The more time you take, the simpler your solution will be, saving you time and producing a more effective result.
Hiring
A single wrong person, or even the right person in the wrong place, can slow you down. Software design and development is an engineering discipline. There are some general characteristics you should be looking for in your engineers. They should be curious, critical thinkers, early adopters, and team players. However, you must make sure that the environment you create and promote is also suitable. On paper, people can seem perfect, but only when placed in a team will their actual effectiveness show itself. Don't refrain from switching people's places in the organisation or eliminating them. In software development, "the needs of the many outweigh the needs of the few".
The first step is eliminating waste or anything that does not create value for customers. Waste comes in various shapes:
Partially done work
Software teams tend to do their part in isolation, creating a pile of code, which might be unit tested but often not integrated with the code produced by other teams. I insist on small commits to SVN, early integration and testing so that we can uncover problems in time to fix them.
Extra Processes
A significant source of waste is paperwork. Unless mission-critical or legally required, paperwork is useless. It should be short and high level. Produce flowcharts that all parts of the team can understand. Mock the screens and write integration tests to describe the requirements. Ensure that whatever you do can be used by all the team members.
Feature Creep
Golden rule number two: Always aim for the MVP (Minimum Viable Product). Software teams work hard and are always late. Don’t allow customers and business analysts to burden them with unnecessary extra features. Consult with the customer to determine the MVP and deliver that first. MVP is the beating heart of an agile software project. Stick to it. Extra features should always be based on customer feedback once they use the MVP.
Keep it simple
Golden rule number one: keep it simple! The business domain is complex enough. Do not add to it by code or process complexity. Always look for ways to simplify life for your developers and testers. Analyse your environment and software market and invest in productivity software. Reuse the existing software. Never reinvent the wheel. Perform frequent code reviews and make sure everyone sticks to unit testing as it forces them to write simpler code.
Task Switching
Developers need to stay in the Flow to be productive. Every time they switch between tasks, they incur a significant downtime. The fastest time to complete two projects that use the same teams is to do them sequentially. Know your developers, place them wisely within the development teams and let them surf their Flow. For a deeper understanding of the importance of Flow, read the excellent book by Mihaly Csikszentmihalyi.
Waiting
If you cannot react rapidly to customer feedback, defects discovery, or a delayed decision, something is seriously wrong with your methodology. The most frequent reason for such obstruction is waiting on dependencies: delays in staffing, requirements documentation, reviews and approvals, delays in testing and development or acquisition and configuration of dependency modules. Remove the delays from the process by always keeping the big picture in mind. You must be constantly aware of the dependencies in the organisation, and you must be the one to keep them moving on schedule. A good software manager is a good fixer.
Communication
The essential element of software development is communication. A software project consists of many artefacts which move through various stages. Requirements may move from analysts to designers to programmers. How much effort does it take for a developer to get an answer to a question? Establish clear lines of communication so that information is available instantly. Apart from communication software such as Slack or MS Teams, you must enable people to speak to each other. Make sure you know everyone in and around the organisation and introduce them to each other so that communication flows directly.
Defects
Defects are the primary source of waste. We must use strategies to reduce and discover them as soon as possible. Write unit tests as they will force developers to write code in small units and prevent duplication. Integrate code often and release it to testing as soon as possible. Involve the customer in testing early. A proper code versioning strategy is a must, as is the ability to commit code frequently and CI/CD to deploy quickly. Software design, SOLID principles and unit/integration testing are the weapons in your war against defects.
Micromanaging
A mature organisation focuses on learning and empowers people to make decisions. Organise and empower your teams so that they feel comfortable making decisions themselves. Software development is a creative endeavour. Harness your people’s creativity. It will happen when they know their input will be appreciated, even when they are wrong. Promote communication between the teams and remove yourself from the process as much as possible. Keep an eye on the big picture, but let your people deal with the details. Your goal should be to make yourself obsolete.
Take your time
When faced with problems, increase customer feedback, and involve everyone in brainstorming. Take time to find the key to the problem. Delay the decisions – keep your options open. The more time you take, the simpler your solution will be, saving you time and producing a more effective result.
Hiring
A single wrong person, or even the right person in the wrong place, can slow you down. Software design and development is an engineering discipline. There are some general characteristics you should be looking for in your engineers. They should be curious, critical thinkers, early adopters, and team players. However, you must make sure that the environment you create and promote is also suitable. On paper, people can seem perfect, but only when placed in a team will their actual effectiveness show itself. Don't refrain from switching people's places in the organisation or eliminating them. In software development, "the needs of the many outweigh the needs of the few".