An introduction to the software development team and advice to build your team
A software development team is a group of people who have a diversified set of skills that are required to develop a complete software system. Team members apply their engineering and programming knowledge in software development achieving fantastic applications or websites. The efficiency and effectiveness of the developed software depend on the skills of the development team. Let us discuss the hierarchy of the software development team and understand their roles and responsibilities.
STRUCTURE OF A HIGH PROFILE SOFTWARE DEVELOPMENT TEAM
If you want to develop a good software system in terms of performance and security, you should hire a well-skilled and experienced development team. A high functioning software development team could have the following roles in them.
- Project or Product Manager
- Business Analyst
- Team Lead For teams that follow Agile methodology, the roles above are sometimes split among just two:
- product owner (the person responsible for the overall direction and success of the product)
- a scrum master (the person who is responsible for facilitating stand up meetings and keeping track of backlog and progress)
- Technical Lead
- Full-Stack Developer
- Front-End Developer
- Back-End Developer
- QA Lead
- QA Engineer
- Software Tester
- UI Designer
- UX Designer
- DevOps Engineer
- Data Analyst/ Data Scientist
- Security Engineer
- Database Administrator
A good team of software developers have these experts and with the worthy collaboration of these members, you will get the desired product.
SOFTWARE DEVELOPMENT TEAM ROLES AND RESPONSIBILITIES
PROJECT OR PRODUCT MANAGER/OWNER
A project or product manager is the person who is responsible for the overall success or failure of the software system. Project or Product managers are the one who is responsible for the successful planning, designing, developing, testing and maintaining of the project. Moreover, he is the one who controls risks and budget of the project along with the in-time delivery.
A business Analyst has a key role in the success or failure of the software system. She communicates with all the team members, stakeholders and with the customers to elicit the requirements. She performs several meetings with the end-user and customer for a better understanding of the functional requirements. Then she pens down these requirements and delivers them to the development team. Moreover, she optimizes the requirements and separates them into functional and non-functional requirements, business rules, limitations, constraints and assumptions. Furthermore, she performs requirements management such as changes in the requirements.
Team leads are actually often not the most technical people in a team. People look up to team leads and they have great decision-making and leadership skills, but sometimes the most talented technical person in your team will lack the leadership or interpersonal skills needed to lead people. That is why there is often a need for a separate Technical lead.
The person leads the technical staff in your organisation and is known as a technical lead. A technical lead needs to have a lot of expertise with programming advancement and a profound comprehension of innovation, yet they should likewise be friendly and able enough to viably lead a group and work together with others. Technical leads are either experts in general software architecture and engineering or subject-matter experts on implementing a specific technology or feature like artificial intelligence, or payments technology, or social network news feed and can be assigned either permanently or on a per-project basis based on its technical requirements. The role of a technical lead is to make sound recommendations on what technologies to use, plan and design the overall architecture of the system, and check the implementation by the developers for correctness based on initial plans.
FULL STACK DEVELOPER
FRONT END DEVELOPER
BACK END DEVELOPMENT
Back end developer is responsible for developing web services and APIs that are used by front end developers. A backend developer writes the business logic and develops the backend functionality of the software system. She should know server-side web application logic and integration of the frontend with the backend. A person who is good in making logics and solving problems can efficiently perform this role.
A Quality Assurance leader (QA Lead) has a vast and important role in the successful delivery of the desired software product to the customer. She is the leader of the software quality assurance department. She defines the quality standards for the development team to make the product of that standardized quality. She creates the benchmark and milestones so that the quality is assured at every possible outcome.
A QA engineer is responsible for the creation of tests to identify issues with software before the product launch. Duties include identifying and analyzing any bugs and errors found during the test phase and documenting them for review after. Other tasks include developing and running new tests, reporting on the results and collaborating with software developers to fix program issues. Depending on the internal organizational structure, QA engineers may progress to a managerial or executive position. A good quality assurance engineer should have a grip on Java, XML, XHTML, Python, and MySQL.
The software tester is responsible for conducting manual testing and automation testing of the software. She is responsible to ensure the quality of the developed software. Software tester verifies and validates the software with the requirements document. She performs unit, regression, system, integration and component testing. She compares the intended behaviour of the software with actual behaviour. Her job becomes successful when she finds as many bugs in the system as she can.
The UI designer works closely with the front end developer as she is responsible to design the pages of the website. Their goal is to make the web pages attractive and user friendly by designing the buttons and other interacting tools. The UI designer is responsible for creating attractive visuals to enhance the customer experience and make them feel cheerful while using the website of a software system. In short, they are responsible to make the website attractive enough for the users so that they will not jump over another site after losing interest.
The main responsibility of the UX designer is to make sure that the user would have the best experience while using the application or a website. They strive for making the user experience as positive as possible while interacting with the software system. Her job is to ensure that each and every visual is placed on the right side. Every functionality is achieved within a minimum number of steps and each process is streamlined so as to make the software time efficient. If any software company has these roles and these roles could perform their job well, then there is no hurdle to develop a good and efficient software system.
A DevOps engineer is responsible for developing and managing the IT infrastructure used specifically for the development and release of software products. The term DevOps comes from combining software development (Dev) and IT operations (Ops). Effective DevOps engineers empower the team by letting them automate the checking and execution of sequences of otherwise error-prone tasks related to the release of software and rolling back mistakes quickly if they happen. They also monitor the traffic and costs of servers and other software services used by a company to make sure it stays on budget while providing suitable performance for its users.
DATA ANALYST/ DATA SCIENTIST
Data analysts and data scientists help the team collect and process relevant data, and apply their knowledge in solving problems by selecting proper methods to investigate and analyse the data collected. For example, they come up with the algorithms used to create recommendation systems that you often see in shopping or video streaming websites. They can also help with running A/B tests and experiments designed to optimise things like traffic and conversion rates, customer satisfaction, or revenue. The difference between a data analyst and a data scientist often comes down to the depth of their technical expertise. An analyst would have enough expertise to work with a database and identify trends, while a data scientist should be able to develop machine learning algorithms for predictive systems.
A security engineer should be able to audit and assess IT infrastructure and software systems for risks and vulnerabilities. Furthermore, security engineers are often tasked to make recommendations and document best practices for security and educate the rest of the team, as well as management. They should also take the lead in applying solutions based on their findings – which can vary from installing firewalls, adding new security features, to redesigning internal processes. They serve as your primary defence to prevent hackers and malicious attacks on your systems and also your auditing and reporting mechanism for when attacks do take place and damage has been done.
A database administrator manages the performance and security of your stored data. Their specialised knowledge ensures that your systems are writing and retrieving data efficiently, which in large-scale systems, is crucial to maintain good user experience and lower costs. They also control access to stored data, making sure that all access, whether it be by users, employees, and systems are correct and on a need-to-know basis only, and no sensitive data is being leaked. They are also responsible for keeping database software up-to-date with the latest security and performance updates available. It is an important role in every company, but especially important for those that work with large data sets and store sensitive information.
SOME COMMON AND WIDELY USED TECHNOLOGIES
- PYTHON: In this modern era, Artificial Intelligence, Machine Learning and Deep Learning have an exceptional value in the software industry. All these technologies use Python as their programming language. If your IT Company is making innovative systems using AI or ML, you must recruit a Python expert.
The main reasons are that it’s easy to learn for traditionally non-programming roles like data analysts and data scientists while having access to a lot of features meant for high-performance processing of mathematical and tabulated data
- C++: C++ is the most effective programming language if your company works in developing embedded systems or software. It is one of the oldest and most commonly used programming languages in the development of operating systems, games and browsers.
- SWIFT and KOTLIN: Swift is used as the primary programming language for developing apps on iOS, while Kotlin is used for Android apps. Other languages may be used to develop on these platforms but these two are the most popular due to official support from Apple and Google as the recommended languages to use for said platforms.
- SQL and NoSQL: Structured Query Language (SQL) and NoSQL (Not Only SQL) are the two dominant technologies used today for databases. Their key differences are technically complex, but as a gross simplification: SQL was designed to store data efficiently by separating unrelated data and minimising duplication, while NoSQL was designed to retrieve data efficiently, by allowing the storage of unrelated data together in anticipation that they will eventually be retrieved together anyway. They both have their place in today’s world, and there is no clear one-size-fits-all solution for all companies.
In my experience, though, developers who have no deep experience in both will find it easier to learn and work with NoSQL databases in general.
- GRAPHQL: Despite how it sounds, GraphQL is not mutually exclusive to SQL or NoSQL. It doesn’t pertain to data storage at all, but rather to how apps interface with your stored data. What it does is it shifts the responsibility of structuring the retrieved data from the backend developer to the frontend developer, so it is an option worth considering for teams that have more or stronger frontend developers than backend developers.
- CLOUD INFRASTRUCTURE: This refers to the shift in business/ownership model of servers and other networking hardware. Instead of buying your own servers or housing/renting hardware in/from a data centre, you pay for virtual servers and networking services from cloud infrastructure providers such as Amazon AWS or Microsoft Azure. It usually operates on a pay-as-you-go model, where you are billed for the number of hours your services are live, although most providers also offer long-term hosting contracts at discounted costs. The pay-as-you-go model is preferred by startups because of the speed of setup and the lack of large upfront investment.
- SERVERLESS: Serverless is an extension of cloud infrastructure, but instead of paying hourly for virtual servers, you pay per second of your code execution time. This takes the pay-as-you-go model to an even higher level and is very attractive cost-wise for startups and small businesses that do not expect heavy traffic 24/7.
Docker and other containerisation technology solve this issue by packaging in the entire environment in an isolated container and deploying this entire package as a whole. This ensures that whatever environment you were developing it in exact matches across different developers and servers you may want to host it in.
- KIBANA, TABLEAU for Data Visualisation: Not all developers are knowledgeable in the practice of presenting data in useful and understandable ways to business people. In the same respect, not all data analysts and business people are as adept at working with databases to get to the data they need. Tools like Kibana, Tableau, and many other data visualisation tools help bridge this gap between the business and technical sides of a company. Instead of spending months educating either side and developing data analytics dashboards for your business, you can start using these tools and immediately gain insight into your data.
What a good interview process looks like for your Dev team
A good interview process starts before the actual interview and follows these general steps:
- Define business and technical requirements
- Create a skills inventory of what you have and what you’ll need
- Prepare questions
- Job posting and headhunting
- Manage candidate flow
Let’s walk through a fictional scenario from start to finish. Let’s say you’re trying to build a simple social network website for home cooks to share photos of food:
Business and Technical Requirements
You think about and visualise your product roadmap. Two years in the future you envision having around 10 million users, a mobile app, and a way to sell products to the home cooks. It feels overwhelming. However, you want to start simple: you only need a website and expect to have 10,000 users in the first 3 months. It’s reasonable to think that 2-3 people with mixed skills can achieve this. You need a Frontend developer, a Backend developer, and a designer. You decide that you’ll take up the role of project manager and QA yourself.
Working on a list of skills you’ll need, and planning to hire just 3 people, you find that you have to cover a few more essential skills: security engineer, data analyst, DevOps engineer, and database administrator. Wanting to stick to your budget, you have to find people that have skill overlaps on these areas as well.
Sample skills inventory to identify gaps
After reading this document on how to assess coding skills, you do a google search on some common interview questions and answers for the skills that you’ve identified as gap skills in the previous step. You proceed to categorise the questions by skills rather than role so you can check applicants from different roles if they might also possess additional skills that will allow you to fill skill gaps efficiently. For example, it’s common to come across a front end developer who claims to be a full stack developer (i.e. one who has both front end and back end programming skills), or a back end developer who has knowledge about security or database administration. It’s best to have the questions ready for a different type of skills should they come up during the course of the interview.
JOB POSTING & HEADHUNTING
This is the point where you decide whether or not you’ll do the job posting yourself on sites like LinkedIn, and/or hire a recruitment agency to help you. Where do people wanting to work at startups try and find work? You find out that sites like AngelList (https://angel.co/) is also a place where people interested in working in startups visit to find jobs. You post your job listings and also find out about several developer meetups online or near your area and decide that you want to attend one of those to try and network with developers.
MANAGE CANDIDATE FLOW
Applications start coming in. You are able to tag shortlisted candidates that come from LinkedIn, and AngelList, but you also gave out your business card to some developers you met at an event and are getting some applications through email. You decide to use Trello (for example) to help you organise shortlisted candidates so you create a flow and you easily drag and drop candidates to the proper buckets as they move through your flow:
Photo taken from: https://www.looksgoodworkswell.com/using-trello-for-candidate-tracking/
You schedule 15-30 minute interviews and ask the relevant questions you’ve formulated based on this guide. You’ve successfully identified a few people with the right skills but have difficulty deciding which are best, particularly in one case, where two candidates are seemingly equally qualified – so you ask for help from an outside consultant to do a technical assessment on that case and help you make your decision.
You give feedback to everyone as quickly as possible, including those that didn’t make the cut. You keep their information as a reference for the future and you inform those that you’ll consider for future hires.
How to assess coding skills as a non-techie
It’s certainly helpful to take a look at a candidate’s previous work and examine it as a product. Even if the candidate did not develop everything in a product, they have experience working with that team and absorbing their engineering philosophies and practices. Good questions to ask are:
- How often do you release new versions? Possibly follow up with: how do you achieve this pace? Notes: developers that come from well-oiled engineering teams are able to do up to multiple releases a day for websites, but being able to say they are able to release multiple times a week is already a good indicator that they came from competent teams. For developers who do native apps like iOS, Android, or Windows apps, those that are able to push out a new release every week are exceptional and every 2 weeks are great.
- How large was your previous engineering team vs how large were the data sets you were working with? The second part of the question can come in multiple forms like: “how large was your user base?” or “how many requests per minute was being processed by your systems?” or “how many rows or documents were in the largest database you’ve had to work with personally?” Notes: you want people who have had experience with scale and have the experience and ability to measure and quantify it, and even more impressive are developer teams that have only a few developers but with a high ratio of users served. You can follow up with a question like “how did you achieve this?”
- What was the most serious incident you had to work through, how did you solve it, and what was the scale of its impact to the business? Notes: you want people who have had experience working through time-critical problems that needed to be resolved ASAP, and not only that, but people who understand how it impacted the business. You want people who have both experience and sense of accountability.
ONLINE PERFORMANCE TOOLS
There are also tools you can use to gauge the quality of work done on a web app, for example:
Google’s PageSpeed Insights: https://developers.google.com/speed/pagespeed/insights/
This tool lets you see the performance of a website. A competent developer would be able to achieve high scores on this or at least explain the reasons behind a less-than-stellar score.
Immuniweb Web Security: https://www.immuniweb.com/websec/
This tool lets you do a non-invasive examination of a website’s security. A competent developer is expected to have no obvious vulnerabilities found by this tool on the previous websites they worked on.
DETECTING CODE SMELL / CODE STINK
Code smell is a superficial indicator of deeper underlying problems in software, usually related to poor development practices. You can identify some of these just by using an app or website the developer worked on in the past. Some code smell that is easily detected:
- Inconsistency – things like buttons that have the same text but have different sizes (lacks skills in standardising UI elements), same functionality in a different part of the app but inconsistent implementation (lacks skills in standardising functionality). Good developers will work methodically to standardise their systems and any signs of inconsistency can be considered code smell.
- Lack of optimisation – are pages or screens loading slowly? These can be signs of code smell. However, it’s unfair to compare performance between something like Facebook and a small social network project that a developer has previously worked on, but try to find a competitor of similar capability to compare them with. If their product is inferior in terms of performance to a competitor’s product, possibly ask some probing questions asking them to explain why that is. It’s okay if they didn’t do the most optimised way of doing things, that could have been a decision the candidate had no power over, but having an understanding of the reasons behind it is important.
- User reviews. Mobile apps will have reviews from their respective app stores, while many web apps will have reviews from sites like Trustpilot (https://www.trustpilot.com/). If a developer has worked on a previous mobile app or website, look at the negative reviews they’ve received. If you see that there is something users complain about that remain unaddressed for a long time, then that can also be a sign of code stink. Good developers are able to make changes and fix bugs quickly, while bad developers would have written software that is difficult to change and iterate on.
Advice on how to build a team from scratch
- Skills can be easily earned by smart people, but attitude and personalities are difficult to change. If you’re building a team from scratch, you must not sacrifice culture-fit in favour of skills because you need all your time focused on the business rather than managing personalities. While managing conflict is an important skill that every leader should have, you would really rather not have to deal with it or hire people to do so at a very early stage.
- Invest in training. There are sites like Pluralsight (http://pluralsight.com/) and others that offer high-quality training courses for a reasonable cost for your team if they need to pick up a skill quickly. Ideally, you want to not only cover all skills you need but also have overlap between team members so others can help or pick up the slack when someone falls behind or leaves.
- Explain goals early, and make them visible to everyone and assess results often. Make everyone understand what results are expected from them and how achieving those results are linked to the business’ overarching goals. A good framework to use to achieve this is the Objectives and Key Results (OKR) framework. This gives people a clear sense of their purpose and contribution in the team.
- Don’t make promises you cannot keep, be transparent about the resources at your disposal and what needs to happen to be successful. If you’re building a company with limited resources, it’s very important to be upfront with people you hire before they leave possibly more secure careers to join you. There are people who understand the risk vs reward of joining startups, and there are those who do not. Those that do not might garner resentment towards the business if things don’t go 100% as planned.
- Despite what was said about not wanting to spend time on managing conflict and personalities, it shouldn’t be misconstrued as being detached. You do want to invest a good amount of your time establishing strong relationships with your founding team members. If you’re lucky enough, these relationships will last for decades and bring tremendous value not only to the business, but to you personally, so they are definitely worth investing your personal time to nourish.
- Make your hiring process personal, avoid hiring an HR professional and do not follow what large companies do. Large companies are good at hiring efficiently, you have to be good at hiring effectively. Be different – don’t be afraid to try things like doing your interview in a more comfortable, informal setting rather than in your office conference room. Informal doesn’t mean unprofessional. Try to keep in mind that it’s not only you that’s selecting a candidate, the good candidates too have options and are selecting who to work for, so impressions do matter.
- Timing matters. If you can, try to schedule start dates for people as close to each other as possible, starting as many people as you can on the same day. Many technical people are not very social people and they don’t like the feeling of being the “new kid”. Try and think back to your days in school – to when a new school year started – and the people you most bonded with – people who start a new chapter of their life together at the same time, often naturally form a very strong bond.
If you are a non-technical business owner and you have to hire a technical software development team from scratch, then you should know what skills they possess so that the software system works efficiently and securely. In this article, you should now be able to understand the key roles and responsibilities of the software development team and what technologies they should possess for the successful development of your end product.