If you take any Software Development environment, where a piece of code is written to automate a process, we can generalize the factors affecting Software Quality and developer productivity under 15 major heads –
1. Individual Ability – Since Software Development is a labor intensive activity, the individual ability of each of the project team member is a factor affecting the software quality and productivity of the developer. The individual ability has two aspects i.e the General competence of the individual and the familiarity with the particular application area. Lack of familiarity with the application area can result in low productivity and poor quality.
2. Team Communication – Communication among the project team members is a must for any type of Software Project. But, usually such communication tasks becomes more difficult as the number of developers is increased since the communication paths increases as number of programmers is increased. Now, whatever may be the case, for a successful project work with a higher productivity, team communication should certainly be encouraged (since different teams/individuals may be dealing with separate functions/features/sub-systems/micro-services/nodes) but with lesser communication paths ie., by conducting general meetings or daily scrums, design reviews, walk through, etc., and not by frequent single communication paths which may lower overall productivity.
3. Product Complexity – Product complexity is viewed as 3 categories of Software application, utility and system level programs –
||Application Programs / Websites, Microservices
||System Level Programs
||Includes general purpose public website, applications, web/microservices, SaS, IaS, etc
||Compilers, Assemblers, Desktop apps etc
||Data communication packages, real time control systems, Operating Systems etc.
||React, Angular, C#/ASP.NET/Core, Java, Ruby, C, PHP etc
||.NET/Core, C, Java, C++, Perl etc
||C, C++, Java
||LOC per developer day
||LOC per developer day
||LOC per developer day
||Produced at the rate of at least 25-100 times faster than system level programs
||Produced at the rate of 5-10 times faster than system level programs
4. Appropriate Notations – Appropriate notations clarifying relationships and interactions of interest provide vehicles of communication among project personnel and allows the usage of automated software which aids in manipulating and effectively utilizing the notations. Examples include usage of scrum boards, velocity charts, burn down charts, kan-ban boards, structured project documentation formats as per PMBOK etc.
5. Systematic approaches – As in any other technological discipline, proper systematic approaches are used for software development and maintenance in the work areas of Software Engineering, usually a combination of various systematic approaches is used. Examples are following a water fall approach if the software being built is based up on a standard specification such as a real time space control system or following an Agile/Scrum methodology involving a Tribe/Squad team structure as used by some of the current companies such as Spotify where they deal with constantly evolving Software product or a Hybrid Software Development model where both water fall and Agile or even Lean principles are employed.
6. Change Control – Change Control refers to the whole set of procedures undertaken and their effects upon the Software Product Quality and total estimated cost when any sort of change is to be reflected on the Software product. Change Control is historically undertaken mainly due to customer’s poor understanding of the problem and wishes to see a change in the functioning of the Software every now and then. Later it is instituted as a part of Standard Software Development life cycle where any change to the Software System or to that matter the infrastructure where it resides needs any kind of change which could be triggered by the customer or the development team. One way to allow change control is to make the Software and related systems and infrastructure as flexible and loosely couple as possible so that it could be easily changed and switched to various different hardware platforms without much effort. A well defined Change Control process such as defined by the Agile Consortium via Appropriate Agile planning and grooming, daily scrums, sprint reviews, lessons learned reviews and release planning, ITIL processes etc allows for vastly improving the ultimate Software Quality and developer productivity.
7. Level of Technology – Level of Technology that affects the Software Quality and Developer productivity are Developer Platform, Machine/Hardware environment, Programming practices and Software development tools and frameworks. Programming platform refers to the most suitable programming language and framework and the related programming environment which enables developer to easily convert user requirements into machine representations. Machine environment refers to the complete set of hardware and software which aids the developer to analyze, design, build, test, integrate, deploy software in a highly connected and collaborative manner.
The stability and availability of the Machine environment has a strong influence on productivity and quality. Modern programming practices such use of systematic analysis and design, agile/scrum development mythologies, extreme programming techniques, pair programming techniques, appropriate notations and communication tools, systematic techniques for examining design documents and source code, continuous integration and deployment techniques greatly improves developer productivity. Software development tools such MS Visual Studio, Software development process automation frameworks such as JIRA and continuous integration and deployment tools such as Bamboo are good examples that enables managing and controlling Software Development Process.
8. Level of Reliability – Both human and machine resources are required to obtain increased reliability during the Software Development life Cycle. This usually decreases the productivity when productivity is measured in lines of code produced per developer month.
9. Problem Understanding – Problem understanding refers to the inability of the customer to specify his/her requirements accurately while resenting the problem and seeking for a solution or the inability of the software engineer to identify the problem from customer requirements. If customer requirements are accurate enough to present the problem and its probable solution, the software engineer will be able to develop a robust and flexible/scalable software product to automate the system and this solve the problem. Careful planning, customer interactions, task observations, pro-typing, greater customer involvement in testing and clear/precise product specifications can increase both customer and developer understanding of the problem to be solved.
10. Available Time – Proper planning of Software Project duration and release cycles will help to improve the developer productivity and software quality. An Agile model of Software development process is specifically geared towards maintaining clear time management and developer productivity in case of product center organizations and tailored for constantly evolving/changing requirements
11. Required Skills – Some of the most required skills of a Software Engineer/Developer are inter-personnel communication skills, skills in application area, creative problem solving skills which includes big picture thinking and architect skills devising scalable systems, good programming skills in one or more programming platform and frameworks, deductive skills for debugging, good writing skills for technical documentation and ability to exercise his/her skills within a technical and managerial framework ( or a specific software development process). The Software Development Manager should assess the individual abilities and skills of each team member and thus make optimal use of each individual talents.
12. Facilities and Resources – The facilities and resources plays an important role in determining the product quality and developer productivity. Developers are looking for greater job satisfaction and professional advancements from more sophisticated work environments which provides them with good machine access and quiet work place to work with. Its the duty of Software Development Manager to provide this basic need that ultimately motivates them and them more job satisfaction. This leads to high developer productivity and Software Quality.
13. Adequacy of Training – Better training for Software Developers in the following skills will improve their productivity. The development manager need to work with his/her team periodically to evaluate the training needs based on current technology landscape and their professional development.
14. Management Skills – Software engineers should possess basic software project and process management skills to work within and technical management framework.
15. Appropriate Goal – An appropriate trade-off between productivity and quality factors can be achieved by adhering to the goals set and requirements established for the software product during project planning.
Other related articles that you might be interested in –
1. Factors Affecting Software Cost
2. Programming Team Structures
3. Software Development Team Structures
4. Software Cost Estimation
5. Managerial Issues of Software Engineering
6. Connecting Traditional Water Fall Software Life Cycle Model with Agile Models
7. Software Engineering
8. Software Engineering then and now
9. Project size driving Project risk
10. Quality considerations for software projects