How to Communicate as a Software Developer

Peter Elbaum
19 Nov 202105:24

Summary

TLDRThis video emphasizes the importance of communication for software developers, highlighting that effective communication distinguishes senior engineers from others. It covers three key aspects: proactive communication, constructive communication, and asynchronous versus live communication. Proactive communication involves setting clear expectations and clarifying tasks. Constructive communication, often occurring in code reviews, should be nuanced and question-driven. Lastly, the video discusses when to use live versus async communication, noting that live interactions are better for complex topics and pairing, while async communication suits most other needs. The video concludes with a call to subscribe for more software engineering and career development content.

Takeaways

  • 💬 Communication is crucial for software developers, especially in teams.
  • 📅 Proactive communication involves setting clear expectations and anticipating potential issues.
  • 🛠️ Proactive communication includes logistical updates and code-related notifications.
  • 🔍 Clarifying questions before starting work is an aspect of proactive communication.
  • 🗣️ Constructive communication is essential in pull requests and helps in team growth.
  • ❓ Asking questions in pull requests can make feedback more palatable and effective.
  • 🌟 Indirect statements can also be used to provide feedback without being too abrasive.
  • 🔄 Live communication, like Zoom calls, is better for pairing and explaining complex topics.
  • 📧 Asynchronous communication, like Slack or email, is better for less immediate discussions.
  • 🤝 Ultimately, the balance between live and async communication depends on team culture and individual preferences.

Q & A

  • Why is communication important for software developers?

    -Communication is crucial for software developers because it separates senior engineers from others. It helps in working effectively within teams and ensures better collaboration and understanding of project goals.

  • What are the three types of communication mentioned in the script?

    -The three types of communication mentioned are proactive communication, constructive communication, and asynchronous versus live communication.

  • What is proactive communication and why is it important?

    -Proactive communication involves setting expectations within the team and thinking ahead about potential issues. It is important because it helps in mitigating challenges and ensures that everyone is on the same page.

  • Can you provide examples of proactive communication?

    -Examples of proactive communication include informing the team about your availability (e.g., being away from the computer), clarifying doubts before starting a task, and alerting the team about potential issues or necessary actions (e.g., running migrations).

  • What is constructive communication in the context of software development?

    -Constructive communication in software development refers to providing feedback in a way that is helpful and non-abrasive. It often occurs in pull requests and focuses on asking questions or making indirect statements to guide and teach team members.

  • How can developers provide constructive feedback effectively?

    -Developers can provide constructive feedback effectively by asking questions to understand the thought process, making indirect statements to highlight concerns, and ensuring their feedback is not too blunt or harsh.

  • What are the benefits of using questions in constructive communication?

    -Using questions in constructive communication helps in getting the other person’s perspective, clarifying doubts, and avoiding misunderstandings. It also allows for a more collaborative and less confrontational approach to feedback.

  • When is live communication preferred over asynchronous communication?

    -Live communication is preferred for pairing, explaining complicated topics, ensuring proper tone, and quick back-and-forth discussions. It is particularly useful when the conversation requires immediate feedback and nuanced understanding.

  • What are the advantages of asynchronous communication?

    -Asynchronous communication, like using Slack or email, is better for tasks that do not require immediate feedback. It allows people to work at their own pace, helps in documenting discussions, and is suitable for those who prefer less frequent meetings.

  • How should teams decide between live and asynchronous communication?

    -Teams should decide between live and asynchronous communication based on their culture and the specific needs of the situation. They should follow the team’s established practices unless there is a clear and better way to handle communication.

Outlines

00:00

🗣️ The Importance of Communication for Software Developers

In this opening paragraph, the speaker emphasizes the significance of communication skills for software developers. It's noted that effective communication distinguishes senior engineers from others. The common misconception that development is a solitary activity is addressed, highlighting the team-oriented nature of most software development projects. The speaker introduces the three main topics to be covered: proactive communication, constructive communication, and asynchronous versus live communication.

05:01

🔍 Understanding Proactive Communication

Proactive communication involves setting clear expectations within a team. This includes logistical updates, code-related notifications, and clarifying doubts before starting tasks. The speaker stresses the importance of anticipating potential challenges and addressing them early. By ensuring that everyone is on the same page, proactive communication fosters better teamwork and efficiency.

👥 Constructive Communication in Code Reviews

Constructive communication, primarily occurring in pull requests, serves as a teaching tool and helps elevate the team. The speaker advises against blunt feedback and suggests a more nuanced approach through questions and indirect statements. This method encourages collaboration and understanding, making the feedback process less abrasive and more productive.

💬 Asynchronous vs. Live Communication

The speaker compares asynchronous communication (e.g., Slack, email) with live communication (e.g., Zoom, in-person meetings). While acknowledging a preference for asynchronous methods, the speaker concedes that live communication is often better for pairing, explaining complex topics, and maintaining the right tone. The choice between the two depends on team culture and the specific context of the communication.

🔚 Conclusion and Channel Promotion

In the final paragraph, the speaker recaps the importance of communication for developers and encourages viewers to implement the discussed strategies. The speaker also promotes the channel, which focuses on software engineering and career development, and invites viewers to subscribe. The video ends with a motivational message: 'Stay hungry, stay curious.'

Mindmap

Keywords

💡Proactive communication

Proactive communication involves setting expectations and addressing potential issues before they arise. In the video, the speaker emphasizes the importance of informing team members about one's availability and clarifying tasks to ensure smooth workflow and avoid misunderstandings. Examples include informing teammates about upcoming absences or clarifying doubts before starting a task.

💡Constructive communication

Constructive communication is about providing feedback in a helpful and non-abrasive manner. The speaker suggests using questions and indirect statements to guide colleagues towards better solutions without being overly critical. This approach is especially important during code reviews and helps in team learning and development.

💡Asynchronous communication

Asynchronous communication refers to exchanges that do not happen in real-time, such as emails or messages on Slack. The video highlights that while async communication is useful for many scenarios, it has limitations for tasks requiring quick back-and-forth interactions, such as pair programming or complex problem discussions.

💡Live communication

Live communication involves real-time interactions, such as meetings or video calls. The speaker notes that live communication is crucial for activities like pair programming, explaining nuanced concepts, and maintaining the correct tone in discussions. It helps in resolving issues quickly and effectively.

💡Team collaboration

Team collaboration is the process of working together as a team to achieve common goals. The speaker underscores that effective communication is key to successful collaboration, as most software development work is done in teams. Setting clear expectations and providing constructive feedback are essential components of good team collaboration.

💡Expectations

Expectations refer to the anticipated behaviors and outcomes within a team. Proactive communication about expectations helps ensure everyone is on the same page and can work more efficiently. For instance, informing the team about taking a break or the need to run certain code migrations sets clear expectations and avoids confusion.

💡Code reviews

Code reviews are the process of evaluating code written by others to ensure quality and consistency. Constructive communication during code reviews involves asking questions and making indirect statements to guide improvements without being harsh. This helps in skill development and maintaining a positive team environment.

💡Feedback

Feedback is information provided about someone's performance or work. In the context of the video, constructive feedback is crucial for helping team members improve their code and practices. Asking questions and making gentle suggestions are recommended strategies for giving effective feedback.

💡Pair programming

Pair programming is a collaborative coding practice where two developers work together at one workstation. The speaker mentions that live communication is particularly beneficial for pair programming, as it allows for immediate feedback and discussion, making the process more efficient than asynchronous communication.

💡Nuance

Nuance refers to subtle differences or distinctions in expression, meaning, or response. The speaker points out that live communication is better for conveying nuances, as written communication can often miss the subtleties of tone and intent. This is especially important when explaining complex concepts or providing feedback.

Highlights

Communication is crucial for software developers, especially in teams.

Proactive communication involves setting expectations and thinking ahead about potential challenges.

Examples of proactive communication include notifying the team about being away from the computer and clarifying tasks before starting.

Constructive communication often takes place in pull requests and involves providing feedback in a nuanced way.

Asking questions in pull requests can make feedback more palatable and encourage open discussion.

Indirect statements in feedback can help avoid being abrasive while still voicing concerns.

Live communication is better for activities like pair programming and explaining complex topics.

Live communication allows for better tone conveyance and quicker back-and-forth interactions.

Asynchronous communication, such as Slack or email, is suitable for most other interactions.

Team culture and individual preferences play a significant role in choosing between async and live communication.

Effective communication can distinguish senior engineers from others and enhance team collaboration.

Proactive communication includes logistics and code-related updates, aiming to mitigate potential issues.

Constructive communication should be used as a teaching tool to level up the team.

Developers should avoid blunt feedback and strive for a more nuanced approach.

Finding the right balance between async and live communication depends on the team's needs and the nature of the task.

Transcripts

play00:00

everyone welcome back to the channel

play00:01

today we're going to talk about how to

play00:03

communicate as a software developer and

play00:05

i know what you might be thinking what

play00:07

the heck does this have to do with

play00:08

engineering but the truth is that

play00:11

communication is one of the things that

play00:13

separates senior engineers from

play00:15

everybody else and if you can do this

play00:16

well it will really set you apart it's

play00:18

easy to think that being a developer is

play00:21

just about writing code alone in a dark

play00:23

room but the truth is that most software

play00:25

development is done on teams and because

play00:27

it's done on teams communicating within

play00:29

your team is of the utmost importance

play00:32

all right so i'm going to talk about

play00:33

three things proactive communication

play00:35

constructive communication and

play00:37

asynchronous versus live communication

play00:40

so let's go ahead and get into it so

play00:41

proactive communication is pretty much

play00:43

what it sounds like and for me proactive

play00:46

communication comes down to setting

play00:48

expectations within your team for me

play00:50

proactive communication can encompass a

play00:52

lot of things so it can encompass

play00:53

logistics so saying stuff like hey

play00:56

everyone i'm going to be away from my

play00:57

computer for an hour all the way up to

play00:59

things related to the code so for

play01:01

example hey devs everyone needs to run

play01:03

migrations or watch out for this bug and

play01:05

this part of the application but i'm

play01:07

fixing it stuff like that proactive

play01:09

communication can also be clarifying

play01:11

things before you start on work so let's

play01:13

say you take a ticket from the backlog

play01:15

and as you're starting work on it you

play01:16

have some questions or you need some

play01:18

clarification proactive communication

play01:20

would be reaching out to make sure you

play01:22

have everything set in your mind before

play01:24

you start working basically proactive

play01:26

communication comes down to thinking

play01:28

ahead about things that could go wrong

play01:30

or challenges that might be presented to

play01:32

your team and trying to mitigate those

play01:34

or at least that's how i think of it i'm

play01:36

generally of the school of thought that

play01:38

the better expectations are communicated

play01:40

the better everyone works together and

play01:42

that is why proactive communication is

play01:44

so important all right let's move on to

play01:46

constructive communication so in my mind

play01:48

constructive communication is mostly

play01:50

going to take place in pull requests to

play01:52

either github or gitlab or whatever

play01:54

source control you happen to use and

play01:56

constructive communication is important

play01:58

because it's a teaching tool and it's

play02:00

also a really good way to level your

play02:02

team up if it's done appropriately and

play02:04

with some nuance so developers have a

play02:06

bad reputation for being really blunt

play02:09

and not too nuanced when it comes to

play02:11

feedback so stuff like this is bad this

play02:13

is wrong this is a code smell you know

play02:15

stuff like that and so the way i like to

play02:17

approach constructive communication in a

play02:19

way that's more palatable for the other

play02:21

person is to ask questions so if you

play02:24

notice for example a lot of repeating

play02:26

code i would say hey is there a way to

play02:28

make this more dry or hey for this piece

play02:30

of data we would typically use the

play02:32

context api rather than redux would you

play02:35

mind telling me a little bit more about

play02:36

your thought process or if there's not

play02:38

an opportunity to ask a question

play02:40

directly i might make a statement that

play02:42

is a little bit more passive so for

play02:44

example i might say it seems like the

play02:46

way that you built this modal is in

play02:48

conflict with the pattern that we have

play02:50

in the rest of the app and then maybe

play02:51

you could follow up with a question like

play02:53

does that seem to be the case to you i

play02:54

think the benefit of doing things this

play02:56

way is that you're able to get your

play02:57

point across and voice some concerns

play03:00

without being hopefully too abrasive and

play03:02

you also give the other person an

play03:04

opportunity to express their thoughts a

play03:06

lot of times when i ask a question on a

play03:07

pull request it's not that i'm trying to

play03:09

criticize indirectly it's that i

play03:11

genuinely have a question and a lot of

play03:13

times the person who wrote the code is

play03:15

the person that is best able to answer

play03:17

that question and a lot of times there's

play03:18

just stuff that i didn't think of and so

play03:20

it's a good way to get all on the same

play03:22

page so that's basically constructive

play03:24

communication for me questions and

play03:26

indirect statements all right let's talk

play03:28

about the last topic which is async

play03:31

versus live communication and

play03:33

conversations so if i'm being honest i

play03:35

don't love jumping on zooms just kind of

play03:37

by nature i kind of like being a little

play03:39

bit in a silo and just doing my work

play03:41

without having to do a whole lot of

play03:43

talking during the day but i will say

play03:44

that live communication is better for a

play03:47

lot of things that come up so it's

play03:48

pretty obvious but live communication

play03:50

let's say via a zoom or in person or

play03:52

whatever is better for pairing so trying

play03:54

to pair program with somebody async is

play03:57

kind of a mess it's just really

play03:58

difficult and so i will give the win to

play04:01

live communication as far as that goes

play04:03

and if you have a company that has a

play04:04

strong culture of pairing and that

play04:06

probably means you're going to be on a

play04:07

lot of zooms but that's okay i think

play04:09

live communication is also better for

play04:12

explaining complicated things that have

play04:14

a fair bit of nuance so if there's

play04:16

something that's really complicated it

play04:17

can be a little bit exhausting to have

play04:18

to type out a whole paragraph and then

play04:20

do a bunch of back and forth about

play04:22

whatever the topic is doing it live is

play04:24

also better for tone so it's really hard

play04:26

to communicate tone through written

play04:28

formats and it's also better like i said

play04:30

if there just needs to be a quick back

play04:32

and forth then live is probably better

play04:34

for just getting that out of the way i

play04:35

think async communication like slack or

play04:37

email is better for everything else or

play04:40

for people that don't like getting on

play04:41

calls but i think at a certain point you

play04:43

will kind of run into some friction as

play04:45

it pertains to like i said pairing and

play04:47

stuff like that that is just better

play04:49

suited for a live conversation

play04:51

ultimately this comes down to team

play04:53

culture and to some extent individuals

play04:55

so i would say above all just do what

play04:57

the team does unless there's an obvious

play04:59

way of doing it better so those are my

play05:01

tips on how to do communication as a

play05:03

developer and hopefully do it a little

play05:04

bit better hope you found this helpful

play05:06

if you're still here you'd probably like

play05:07

the rest of my channel which focuses on

play05:09

software engineering and career

play05:11

development so consider subscribing

play05:12

regardless thanks so much for watching

play05:14

to the end remember stay hungry stay

play05:16

curious and i'll see you in the next one

play05:20

[Music]

Rate This

5.0 / 5 (0 votes)

Related Tags
Software DevelopmentCommunication SkillsProactive TipsConstructive FeedbackTeam CollaborationAsync CommunicationLive CommunicationDeveloper TipsEngineering SkillsCareer Development