Chapter 6 – Human Aspects of Software Engineering
Overview
- Individuals and teams build software, without skilled motivated people success is unlikely
- A software team will only be successful if the team dynamics are right
- Software engineers must work well with each other and the project stakeholders
- It is important to understand the personal characteristics of successful software engineers and the psychology of software engineering work
- It is important to appreciate the impact of social media, the cloud, and other collaborative tools on team software engineering process
Traits of Successful Software Engineers
- Sense of individual responsibility
- Acutely aware of the needs of team members and stakeholders
- Brutally honest about design flaws and offers constructive criticism
- Resilient under pressure and does not allow performance to suffer
- Heightened sense of fairness (credits colleagues and avoids conflict of interests)
- Attention to detail (performance, cost, quality)
- Pragmatic (software engineering is not a religion)
Boundary Spanning Roles
- Ambassador – represents team to outside constituencies to negotiate time and resources or to obtain feedback
- Scout – crosses team boundaries to collect organizational information
- Guard – protects access to team work products and artifacts
- Sentry – controls information sent to team by stakeholders
- Coordinator – focuses on communicating horizontally across the team and organization
Effective Software Team Attributes
- Sense of purpose
- Sense of involvement
- Sense of trust
- Sense of improvement
- Diversity of team member skill sets
Toxic Team Environment Characteristics
- Frenzied work atmosphere
- High frustration that causes friction among team members
- Fragmented or poorly coordinated software process
- Unclear definition of roles on the software team
- Continuous and repeated exposure to failure
- Differing and incompatible team member human traits
Project Factors to Consider in Determining Team Structure
- Difficulty of problem to be solved
- Size of resultant problem in terms of lines of code or function points
- Time team will stay together (team lifetime)
- Degree to which a problem can be modularized
- Required quality and reliability of the system to be built
- Rigidity of delivery date
- Degree of project communication required
Team Structures
- Closed paradigm – uses traditional hierarchy of authority (e.g. chief programmer team), works well when software produced is similar software created previously
- Random paradigm – team loosely structured, depends on initiative of individual team members, works well when innovation or a technical break through is required
- Open paradigm –work is performed collaboratively with heavy communication and consensus-based decision making, well suited to solution of complex problems, but may not perform as efficiently as other teams
- Synchronous paradigm – relies on natural compartmentalization of a problem and organizes team members to work on pieces of the problem with little active communication among themselves
Generic Agile Teams
- Stress individual competency coupled with group collaboration as critical success factors
- People trump process and politics can trump people
- Agile teams as self-organizing and have many structures
- Planning is kept to a minimum and constrained only by business requirements and organizational standards
XP Team Values
- Communication – close informal verbal communication among team members and stakeholders and establishing meaning for metaphors as part of continuous feedback
- Simplicity – design for immediate needs nor future needs
- Feedback – derives from the implemented software, the customer, and other team members
- Courage – the discipline to resist pressure to design for unspecified future requirements
- Respect – among team members and stakeholders
Role of Social Media in Software Engineering
- Blogs – can be used share information with team members and customers
- Microblogs (e.g. Twitter) – allow posting of real-time messages to individuals following the poster
- Targeted on-line forums – allow participants to post questions or opinions and collect answers
- Social networking sites (e.g. Facebook, LinkedIn) – allows connections among software developers and related technologists for the purpose of sharing information or finding problem expertise
- Social book marking (e.g. Delicious, Stumble, CiteULike) – allow developers to keep track of and share web-based resources of interest to a community of like-minded individuals
Cloud Services
- Benefits
- Provides access to all software engineering work products and artifacts
- Removes device dependencies and is available every where
- Provides new avenues for distributing and testing beta software
- Allows software engineering information developed by one member to be available to all team members
- Concerns
- Dispersing the cloud services over resources outside the control of the software team may present reliability and security risks due
- With a large number of services distributed across the cloud the potential for interoperability problems becomes high
- Cloud development services need to stress usability and performance which often is on conflict with security, privacy, and reliability
Collaboration Tool Services
- Namespace or repository that allows secure, private storage or work products
- Calendar for coordinating meetings and project events
- Templates that allow team members to create artifacts that have common look and feel
- Metrics support to allow quantitative assessment of each team member’s contributions
- Communication analysis tracks messages and isolates patterns that may imply problems or issues to resolve
- Artifact clustering showing work product dependencies
Team Decision Making Complications
- Problem complexity
- Uncertainty and risk associated with the decision
- Work associated with decision has unintended effect on another project object (law of unintended consequences)
- Different views of the problem lead to different conclusions about the way forward
- Global software teams additional challenges associated with collaboration, coordination, and coordination difficulties
- Distance complicates communication and coordination, cultural differences are a common side effect that can affect global software team collaboration