Originally published in October 2013, last updated in May 2020.
Software is our core business. Like me, many people in the team at Future Processing have been programming since their early teens – you could say that software is in our blood. Clients often ask me for advice on how to create or improve their in-house development teams. My response is almost always the same: there is no simple, magic formula. Creating great software teams, in any discipline, relies partly on trial and error.
Best practice for an agile development software team
Having said that, there are some key things that organisations and their leaders can do to help their development team perform better. Cutting across all these development suggestions is that all-important word: team. I may have been programming for decades, but what counts is what I can bring to, and how I will work in, a team for superior project management every step of the way through the development process.
Skills are the most obvious starting place. Each software team member needs to demonstrate development expertise in one core technical skill, for example, technical analysis, design, programming or test skills. Furthermore, they should also have a solid understanding of the software process, coupled with good “domain knowledge”. Underpinning these technical skills is flexibility and the ability to be a team player. People with different expertise – say architecture, coding, or testing – need to be able to work together effectively with defined roles and responsibilities.
If the team is an agile team, then the same team members will need to be able to work together over the sequence of sprints for several release cycles of the software. However, with each software release cycle, their teamwork should improve as should individual roles and responsibilities. I also believe that team members should be part of a single development team and not work in a cross-matrix structure. The single, dedicated team approach encourages commitment and quality assurance and focuses their attention on the project. We find that this helps to develop define and clarify goals and, delivers better, faster results for our customers.
There is another important requirement for team technical skills: ideally, each member of the development team should be an expert in one skill area but have a working knowledge of another. This means that if one person is off sick, or incapacitated in some way, then there are still enough people with the right knowledge and skills on the team to keep the project running.
Meet the team
If you’re thinking of putting together – or outsourcing – a software development team, you’ll first need to know how that team should be made up. A software development team is like a well-oiled machine and requires a number of competencies in order to keep it working efficiently.
The following is a guide to the personnel that you’ll need for your team:
The Project Sponsor is usually the person who is providing funding for the project and is often a business owner or partner. The Project Sponsor will play a periphery role in the project and will be responsible for authorising additional expenses, changes in scope and other large decisions which may affect the project long term. Aside from these responsibilities, the Project Sponsor won’t, as a rule, play an active role in the day to day development of the project.
Subject Matter Experts (SMEs)
Also known as a Domain Expert, your SME is a team member who holds highly superior knowledge and experience in a certain discipline, technology, product or business process. You may have several SMEs within your software development team and these can include accountants, salespeople, production managers and, basically anybody with a high level of niche expertise. These team members will usually be involved in the project right from the start and will offer expert advice to make sure that costs and time frames are calculated correctly.
This team member will either own, run or represent the client for whom the project is being developed. Although the Product Owner won’t necessarily hold a lot of technical expertise, he or she will be responsible for determining the features and usability of the finished product and communicating it to the rest of the team. The Product Owner will also always have one eye on the purse strings and the ROI (return on investment) and so will usually be the main contact for all decisions concerning the project. This is an incredibly important role as the Product Owner will be responsible for making sure that the vision of the project is being adhered to at every stage. The Product Owner will also be responsible for setting priorities and for resolving disputes within the software development team.
As the title suggests, the Project Manager is responsible for overseeing the project as a whole. For this reason, the Project Manager will be in constant contact with everyone involved in the project including stakeholders and team members. The Project Manager is responsible for a number of aspects of the project including budgets, schedules and processes. The Project Manager will also manage deliverables, recruit staff, deal with risk management, lead the team in day to day activities and will also take responsibility for change management where necessary.
A pivotal role within the team, the Technical Lead is, essentially, the development team leader and will work closely with the developers every step of the way. To begin with, the Technical Lead is the person who will translate the client’s requirements into a real technical solution – including letting the client know the feasibility of parts of the project. The Technical Lead will usually report directly to the Project Manager in order to relay important information at each stage of the project. Finally, the Technical Lead will take responsibility for establishing and enforcing standards and best practices with the software development team.
Needless to say, the Software Developers are the nuts and bolts of any software development project and, the people who make the magic happen. Divided into frontend and backend, the developers are briefed by the Technical Lead on technical requirements, costs and timelines
Once the developers have done their stuff, the project will be handed over to the Software Testers. The main responsibility of these valuable team members is to make sure that the product meets the requirements and brief of the client and that it is free of issues such as bugs or errors. Software Testers will sometimes be involved from the beginning of a project to help with analysing and reviewing design and technical requirements. The role involves the setting up of test environments and assisting with system administration as well as gathering performance metrics and producing test reports.
User Acceptance Testers
Another set of tests, and one that’s equally important, is user acceptance tests. This is usually the last stage before a product goes into production and it’s vital that a wide range of testing is completed to make sure that the new product passes quality control tests – thus avoiding the additional expense and time delays. User Acceptance Test team will sometimes be a standalone team or, can be made up of members of other teams, in particular, the Subject Matter Experts. At this final stage, testers ensure that the product works exactly as it is supposed to and, that there are no glitches or usability issues which may see the product being rejected by the client or a standards agency.
Putting a software team together takes time and energy and, many businesses invest a lot in getting the team right so that they have a ready-made team for all future projects.
Technical skills, however, are just one element of a great software development team. In previous posts I have discussed the importance of softer skills – they are crucial to the success of any software team. The team leader has a vital role to play here, not just setting the style and culture of the team, but also helping to develop the soft-skills of the team and defining team roles, the foundation of an agile development team.
What do we mean by an agile team?
You’ve probably heard the term ‘agile’ many times but, what does it actually mean in real life?
First of all, an agile team is a dedicated team who have all of the necessary skills to complete a project. An agile team will be responsible for a project from start to finish – i.e. from the design and liaison stage all the way through to production. It is put together by examining the concept of the end product and then choosing the team members who possess the necessary capabilities necessary to bring the product to fruition.
Secondly, agile technologies are based on a mindset of the team which is far removed from ‘one size fits all’ and also based on user stories and incremental development for constant improvement.
Agile teams are all about collaboration and adapting to changing environments – something which is increasingly important in our fast-moving world. By implementing agile, you have the tools to constantly monitor your project management in order to make improvements. It also helps you keep all of your balls in the air in terms of order processing, payment and customer service to name just a few.
A good software development management team is made up of a mix of personality types. The team leader or project manager needs to be equipped with the skills necessary to be able to manage this mix of roles and responsibilities, encouraging everyone to work harmoniously. As the team pulls together, trust, empathy and job satisfaction should all enhance the development project.
Building this trust requires communication with colleagues and the product owner. Team leaders need to spend at least 50% of their time with the team. During this time, as Kimberly Wiefling, the famous US project management coach and author says: “You have two ears and one mouth, so use them in that ratio!”.
One thing we have found that works well is having frequent whole-team meetings where we encourage every member of the software development team to share their thoughts and ideas throughout the development project.
Get the communication right all the way through the development process and team-collaboration should be a cinch. As well as straight-forward working together, team leaders and more experienced team members should be willing to mentor junior level developers.
Strong software development teams are also those with a culture of delivery. Much has been written about this, so I will simply provide one tip here: ask software team leaders and development project managers to always commit to deadlines and get all members of their team to do so too, so they always know when everything is due.
Outsourcing your software development team
Some companies choose to put together their own in-house team and, although this has a number of benefits, it also costs big bucks to gather together the technical clout and experience that you’ll need. More and more frequently, businesses are choosing to outsource their software development team which has a number of advantages including:
- Dedicated teams working exclusively for you
- Access to niche knowledge and expertise
- Value for money
- State of the art equipment
When it comes to outsourcing your software development team, you have a few different options:
You may decide to find a software development team within the same country – or even the same town – as your own business. This kind of outsourcing holds a number of benefits including:
- Proximity – Holding meetings and checking up on your product is quick and easy
- Time Zone – Chances are that you’ll be in your office at the same time that your team is in theirs, making communication easy
- Language – In general, your team will speak the same language as you which helps to avoid ‘lost in translation’ errors
Although this kind of outsourcing is no doubt convenient, it can often be a more expensive solution.
This kind of outsourcing involves sourcing your software development team from a country close to yours and to which access is relatively quick and affordable. The benefits of nearshoring include:
- Distance – The nearshoring country will be close enough that you can visit without a huge amount of time or expense
- Time Zone – In these cases, the nearshoring country will usually be within an hour or two of your own, allowing for easy communication with only a little flexibility needed
- Cost – You can often make huge cost savings by nearshoring
- Talent – It’s often the case that a country other than your own has a rich source of talent which is readily available
There really are very few disadvantages to nearshoring as long as you’re willing to allow for a degree of flexibility.
This kind of outsourcing involves finding a team in a far-flung country. In all honesty, the only real advantage to offshoring is to make cost savings, whereas the disadvantages are plentiful including:
- Distance – The country is usually too far away to realistically visit for meetings
- Time Zone – As the country is likely to be on the other side of the world, communication will be exceptionally difficult
- Language – With offshoring, it’s often difficult to find somebody who speaks your language – which can be frustrating when you need a quick answer
- Culture – Different countries do business in different ways and you’ll need to research the country very carefully before committing to a project
Outsourcing your software development project can be a great solution – just make sure that you study the options carefully and choose the one that’s right for you.
Nailing software development outsourcing
Much of this emphasis on skills feed into creating a strong developer culture. My experience with Future Processing, where team members have created this kind of culture type, is that it attracts high-quality developers. Plus, perhaps because they believe in our culture and know that we value them, the product owner tends to want the company to succeed and stay with us for longer. And all of this helps to strengthen our software development teams.
If you want to know more about software process, you should have a look at this 2020 guide about Software Development.