Best Practices for Managing Software Development
07 October 2019
Are you satisfied with how your team is developing software? Do your projects typically come in under budget and ahead of schedule? If your answer is “no”, then read on where we share best practices for managing software development.
Following best practices can greatly improve your chances of delivering a valuable and exciting product on time with minimal amount of stress and surprises.
To help you successfully manage software development projects, we’ve put together a list of best practices that have helped us over the years to streamline the development of software solutions that our clients love.
Don’t Assume Anything – Communicate About Everything
A successful team will make communication and collaboration an absolute priority.
Communication establishes clear roles of team members ensuring that tasks are properly assigned which circumvents confusion and chaos.
Part and parcel of a successful communication strategy involves meeting with key team members to touch base and confirm that everyone is fully aware of the project’s progression.
Hire PMs with Leadership and Tech Skills
Organizations often prioritize technical skills when choosing their project managers – their formal education, certifications, etc. – at the expense of leadership and people skills.
This is a colossal mistake since project managers constantly interact both with clients, team members and other stakeholders. Therefore, it is absolutely vital that project managers work on both their leadership and technical competencies.
Soft skills are especially important in situations when software is not progressing according to schedule. In these circumstances, a successful project manager will have to rely on empathy, motivation and leadership to get the most out of the team members.
A project manager with strong leadership skills is able to balance the client’s expectations, the senior management’s demands, and the team’s tasks. Striking this balance is a great morale booster.
A successful project manager must keep an eye out for mood swings which could indicate burnout. To remedy this, add variety to maintain enthusiasm. A recommended course of action might be to assign a different task to a developer who’s been working on the same activity for a while.
Based on our experience, junior members need to take their time on tasks, whereas seniors need to be continually motivated with various challenges. Learning how to navigate this fine line is a skill in itself.
Selecting the right people is another proven way of avoiding burnout. The team working on a particular project must be sincerely interested in its development.
Learn whether the developers would work a similar project on their own time. That’s not to say that they should be working on the project during the weekend, but rather they should be excited about it enough to have it in the back of their mind even when they’re not working.
If team members find themselves in what they do within the project, they will invest much more in technical education, and in the project improvement overall.
This spares you from having to micromanage your team, which is not only inefficient, but is a complete motivation killer. Nobody wants to have a manager looking over their shoulder to see how their work is going.
Team motivation is key for successful management, yet true motivation does not come so much from having a large tons of benefits, free beer and ping pong tables (which are all a nice addition) – but rather from giving people a sense of purpose, autonomy in the decision making, self-realization, and improvement.
The leadership level should come together around a set of clear goals – all of the stakeholders should collaborate with a common goal in mind.
Carry Out Feasibility Analysis
Every successful project must begin with all the stakeholders determining if there is a demand for the product/service and identifying all the requirements and needs. Everyone should settle on a reasonable time frame.
Typically, this is when return on investment analysis is carried out to fully take stock of project costs and benefits.
Identify and Manage Requirements
At this stage, meetings with end users along with people who will be related to the new software.
The goal is to understand the scope of the project along with the software demand will be produced.
Many projects fail because a consensus among all the stakeholders surrounding the requirements wasn’t formed – if your team and your client have opposing estimations regarding the project’s scope, then chances are that development will not go smoothly.
To avoid this problem, make sure that everyone understands the requirements from the start. To help you do this, ask all the stakeholders the following questions about the requirements of the project:
- What are the goals and benefits of the project?
- What are all the key deliverables?
- How big is the budget?
- What is the deadline?
- What are all the performance constraints?
- What is the final result of the project?
- What are the potential risks and roadblocks we should all look out for?
- What is the time frame?
However, the requirements of stakeholders tend to change during the development phase, which means that a project manager should collect all the requirements early on.
No team can develop a powerful piece of software without using requirements. The issue with requirements is that they are notoriously difficult – Project A may have very little requirements, whereas Project B may contain hundreds of pages of detailed requirements.
Managing requirements will lower costs and time of developing the project while improving quality.
Many people fall so much for the charm of their own ideas, that they truly believe are unique and are the best in the field, which results in not analyzing competitors properly.
This is one of the most expensive mistakes. Competition analysis is not a one-off activity, but a continuous and recurring one – you never know when someone comes up with a better solution, or copies your ideas which were your USP.
Often times, project managers put too much emphasis on “predictability” and “efficiency”, thinking it’ll lead to a successfully completed project. There’s only one problem with this.
However counter-intuitive it may seem, experience shows that too much focus on these factors can prove counterproductive.
There are countless cases of successful projects that checked off all the boxes – completed on time, under budget and included all the required features – and yet failed miserably.
That’s because they developed something that no one needed or asked for. By being too predictable, you run the risk of making this exact mistake.
Traditional project management tends to focus too much on things that aren’t critical – estimates, time, etc – and ignores important things like value generation, learning, adaptability, innovation and business insights.
Project-driven teams can offer a sense of security and comfort because as long as they stick to the Plan, then they don’t have to worry.
This means that innovation, quality and learning are sacrificed in the name of deadlines, estimates and status reports.
A product-driven team will be responsible for everything, but they also generate value and are able to change directions when things are evidently going nowhere fast.
Therefore, avoid establishing too many processes. Many teams and managers, in an effort to define best KPIs and maximize efficiency, introduce too many reports, estimations, standards, and story points, which often defeat the purpose – team members pursue best KPIs and cut corners to get these, while the real overall goal of the team and the project is user-focused software that solves problems optimally.
If someone is spending most of their time thinking about how to complete all their tasks as soon as possible, they unavoidably think less about the end user experience.
When to Use Automation?
Use automation when working on mundane and repetitive tasks whenever possible. This way your team is not wasting its resources on tasks that can be more effectively completed using automation. It also reduces the chances of human error that can slow the development phase.
But keep in mind that automation is a tool, and only makes sense to use when it’s really adding value – you can’t use a “one size fits all” approach. That’s where many companies go wrong when they add automation because it is “something that everyone does”.
While building automation is without doubt a must-have tool, test automation, for example, comes with additional costs during the early stages of the project. However the ROI on automation testing makes it a worthwhile tool.
Why is Software Testing Important?
Testing software during development is an absolute must – otherwise you’re exposing yourself to a huge amount of risk.
It will help you deliver better quality software, thereby helping your brand maintain a professional image and avoiding potential legal issues.
Testing comes in two versions: manual and automated. While people tend to prefer automated over manual, there are some tasks which can’t or shouldn’t be automated.
For example, manual testing is great for learning more about how a new feature fits in the software at little cost. Manual testing can help identify obvious critical bugs, while automated testing is more thorough and can help find more concealed problems.
Automated testing is typically used for repetitive tests that need to be performed numerous times. This is done because the software might have many different versions or it’ll be available on different platforms. Use automated tests when checking high-risk features, which cause havoc if they were to fail.
However, as your team learns more and the catalog of tests expands, manual testing becomes more expensive.
Automated testing will undoubtedly find more bugs than manual testing, which makes it more cost-effective. It’s much cheaper and simpler to solve issues in the code early in the development stage and automated testing increases the chances of finding bugs before the software enters beta testing and production stages.
What to Do When the Project is Behind Schedule
It’s highly likely that your team will veer off the projected course – deadlines will be missed, the project will go over-budget and new bugs will be uncovered.
Many teams find themselves creating overly optimistic and entirely unrealistic deadlines without properly factoring in constraints of the project. For example, the testing phase is extended but the timeline remains the same.
In these cases, compare progress of the project with its expected progress once the development starts by reviewing progress reports from all the teams.
Following the progression of the project throughout development and looking at key milestones in the initial phase of the development can sidestep negative effects.
Keep a record of any deviation between the planned progress and actual progress and report them to all the stakeholders and team leaders. If the discrepancy is too wide, then you have to implement measures to bridge the gap. Sit down with team members and discuss the reasons why plans are not being met.
Understanding how tasks relate to one another (referred to as dependencies) will allow you to effectively allocate resources in a timely manner.
When gathering status reports, use the following metrics to assess the deviation from the plan:
- Cost of Completed Work (CCW): The budget for completed work by a certain date.
- Planned Cost of Work (PCW): The budget for scheduled work by a certain date.
- Actual Cost of Completed Work (ACCW): The amount of budget used by a certain date.
The gap between ACCW and CCW will show you how much your project has deviated from the plan.
Adapt to Changes
Changes are an inherent component of a software development project. As a result, use agile methodology in order to build software with lower costs and more efficiency.
Agile’s defining feature is that both software development and testing are done simultaneously.
Also, this methodology encourages effective collaboration and face-to-face interaction. In fact, regular feedback from end-users is encouraged within this method.
Scrum refers to an agile framework that continually and quickly reviews functioning software, which helps teams build products in the shortest time possible. It’s often the case that stakeholders change what needs to be delivered. This can be due to a shift in the business climate, which make previous assumptions about the project invalid.
Scrum is designed to adapt to changing requirements and needs of the project, which makes it an extremely flexible and powerful solution. Your team will deliver functioning software within a shorter time frame. Therefore, scrum is perfectly suited for managing delicate projects such as software development.
One of the easiest and yet most impactful project management practices is to touch base with all the team members.
Get used to asking team members and leaders about the status of the project and tasks. Take note of their comments, feedback and questions. But also be prepared with your own list of inquiries, including “What did you work on? Did it go smoothly? What can be improved?”
The idea here isn’t to micromanage, but instead to proactively communicate with teams that will help promote enjoyment and cultivate productivity.
You can either get in touch with team leaders and members on a regular basis, or you can simply stroll by informally for a quick chat with the developers. Don’t be afraid to even discuss personal matters if appropriate.
While this may not sound all too impressive or insightful, if you make a habit of taking an active interest in the views of other members, you stand to build respectful relationships with your coworkers. As a result, they’ll feel more comfortable coming to you with a problem, which perhaps in other circumstances they would have kept to themselves.
Regardless if the problems are of a professional nature or personal, creating a connection that transcends worker/manager relationship will increase team cohesiveness and productivity.
Have Teams Work Next to Each Other
Teams are most productive when they work close to one another. Ideally, try to have all teams working under one roof, in the same workspace if at all feasible.
If your teams are working in close quarters, the overall development process will improve due to the informal “dissemination of information” around the office.
Members of different teams will discuss various things related to the project with each other which will in turn give rise to creative brainstorming sessions. Members of one team may offer an innovative solution to a problem that’s been troubling their coworkers from another team.
Productivity will also improve because members from different teams will in an informal way help each other out. For example, developers will produce less problematic code if seated near testers with whom they can easily solve any issues.
No project is immune from risk. Risks describe events that can prevent the successful completion of a project. They can include anything from developers not having the requisite technical skills to complete a task, to a leaky pipe that could flood a workspace.
In order to minimize the effects of potential hiccups during the development phase of your software, a project manager is tasked with forming a risk response time that will act as first responders.
During the initial phase of planning, you should have all the potential risks identified along with the probability of occurrence. Also, be aware of the impact that each problem could have on your final product.
This will allow you to come up with a risk factor. Assign a number to a likelihood of a risk occurring: 1 is unlikely, 2 is somewhat likely and 3 is extremely likely.
Then do the same with the effect the risk would have on the project: 1 – low, 2 – medium, and 3 – severe.
Risk factors with the largest numbers refer to the most dangerous risks – address those head on. Remain steadfast in reviewing risks and keep an eye out for new ones.
By being diligent in your planning process, you’ll be able to do away with high-risk events.
As far as medium-level risk events are concerned, you should see if they need to be addressed aggressively.
Finally, for low-level risk events it should be assumed that a positive outcome is much more likely.
Take all the necessary steps to avoid risks; if they can’t be avoided then work on reducing their effect on the project.
Finally, keep vigilant throughout the development process by performing risk assessments that will identify any new risks that have emerged.
A common but a poorly thought-out reaction to a problematic project is to include even more people. This approach will inevitably result in further delays and complications. Software development is an intricate but sensitive task and adding more manpower to a project will not speed things up – it’ll make things worse.
If you do find yourself in the unfortunate situation where the project is behind schedule, you should focus your efforts on changing the practices and attitudes of current team members who know the ins and outs of the project. If you absolutely must add new members, then try to do add them incrementally instead of ushering in a new team altogether.
It’s vital that you track your own best practices, and adopt and test new ones. Keep a database containing everything you do in order to boost your team’s productivity. Also, remember that the final product is more important than the actual project. A stack of projects is no more a product than a pile of logs is a tree.
At a time when project management has almost become a science, it is astounding that 70% of all projects aren’t finished successfully. To overcome this issue, you need to execute a powerful and flexible methodology that overcomes the common obstacles that have run many projects into the ground.
That means managing all the technical, strategic and human factors before they go awry.
Following best practices doesn’t guarantee that your project will thrive and achieve high performance, but will greatly increase the chances.
As you’re managing the development of a piece of software, also ask yourself if your target users will love it. After all, that is why you’re making it.
If you are stressed out managing a project that is heading nowhere fast – don’t fret! Our experienced team of dedicated professionals can help salvage a failing project, and get your team developing high-quality products on time. Get in touch with us and let’s develop amazing software together!