2analytical, and problem-solving skills by themselves donot make a software engineer successful. Software engineering is all about managing expectationsof customers, managers, and peers. People at all levels of aorganization must combine technical expertise with theability to work effectively in teams, form productiverelationships with customers, and come up with a solutionthat will satisfy all the stakeholders.
Customers in this context include the clients and end usersof the software solution. Managers involve the people whoare ultimately in charge of the project and who willevaluate the team’s performance, such as immediatesupervisor, middle manager, senior managers, andmentors. Peers are the colleagues and teammates that work together to design and implement the solution.
Establishing a common understanding of what a softwaresystem should do is not an easy task. The requirements formost software projects are incomplete or inconsistentbecause the customers have little experience in expressingwhat they want or they don’t know what they want untilthey see it. Still, the customers are the people who willdecide whether the software system met their expectations,and managing their expectations will determine thesuccess of the project. There was a popular saying in the first years of thesoftware industry about “people will come if you buildsomething good.” Nowadays, building a flawless systemthat no one needs is not acceptable. Software engineersmust use communication and negotiation skills to avoidsolving the wrong problem. That is why requirementsengineering has acquired so much importance within thefield of software engineering. Use cases, rapid prototyping,contextual design, iterative development, and pairprogramming are some of the current techniques to bringthe customers and the engineers in the same picture whilereducing the risk of rework. All of them require soft skillsto understand customer’s needs and interpret these needsas technical requirements. This relates to the Methods course of the MSE programthat teaches students different techniques to gatherrequirements, test the validity of these requirements, anddesign the right system as a part of a bigger ecosystem.This also relates to the Models and Architecture coursesthat teach how to use abstract models to represent andreason about the properties of a system to make sure itmeets the requirements.
The most traditional type of teams is the manager-led teamin which the manager acts as the team leader and isresponsible for defining the goals, methods, andfunctioning of the team. The team members are onlyresponsible for the actual execution of their assigned work.Hence, the manager is ultimately responsible if the projecthas schedule slippage or is over budget.
In today’s economy, software systems are expected tosatisfy high demands and increasingly complexrequirements. This means that engineers are expected tospecialize more and more in their areas of expertise, andthese areas will get even more narrow and interdependent.Technical teams have evolved from manager-led team to