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