Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Communicating Effectively as an Engineer

Communicating Effectively as an Engineer

Engineering is often viewed as a highly technical discipline where hard skills are the key to success. But if you take a closer look at what we - engineers - do in our daily jobs, a lot of it boils down to… communication! When we write code, submit pull requests, move tickets on the board, we essentially communicate with each other in one way or another, which means we can benefit from the rules of effective communication to become more successful at our jobs.

This talk will offer you a fresh perspective on common engineering activities and provide practical advice to help you communicate effectively as an engineer!

Avatar for Egor Andreevich

Egor Andreevich

September 05, 2025
Tweet

More Decks by Egor Andreevich

Other Decks in Technology

Transcript

  1. Ground rules • Be kind • Be helpful • Communicate

    clearly • Ask questions • Mind cultural differences
  2. Fun funs vs boring ifs fun funLen(s: String): Int {

    return s.takeIf { it.isNotEmpty() }?.length ?: -1 } fun boringLen(s: String): Int { return if (s.isNotEmpty()) s.length else -1 }
  3. Common suspects • ?.let { … } • .takeIf {

    … } • .runCatching { … } • Less common functional methods (fold, reduce, scan, etc.)
  4. Named args val name = "Alice" println(name.compareTo("Bob", true)) val name

    = "Alice" println(name.compareTo("Bob", ignoreCase = true))
  5. ✅ Lambda param names val emailAliases = contacts .filter {

    it.aliasType == EMAIL } .map { it.alias }
  6. Sometimes you don’t need names! val appConfig = combine( remoteAppConfig,

    localAppConfig ) { remoteAppConfig, localAppConfig -> remoteAppConfig + localAppConfig }
  7. fun findUserNameOrDefault( id: String, db: Database, ): String { val

    user = db.findUserById(id) // Return "Guest" instead of null because the UI // requires a non-empty name. return user?.name ?: "Guest" }
  8. const val DEFAULT_USER_NAME = “Guest" fun findUserNameOrDefault( id: String, db:

    Database, ): String { val user = db.findUserById(id) return user?.name ?: DEFAULT_USER_NAME }
  9. @Provides fun provideMerchantCategoryNameMapping(): Map<String, String> = mapOf( // If the

    category name is "Shopping" this needs // to be replaced with "Shop". // Context here: https://docs.google.com/... "Shopping" to "Shop", )
  10. Documentation • Document API, don’t document implementation • Communicate in

    programming language, resort to comments • Tests as documentation!
  11. // https://github.com/square/kotlinpoet/issues/1696 @Test fun aliasedImportInSamePackage() { val packageName = "com.mypackage"

    val className = ClassName(packageName, "StringKey") val source = FileSpec.builder(packageName, "K") .addAliasedImport(className, "S") .addType( TypeSpec.objectBuilder("K") .addProperty( PropertySpec.builder("test", className) .initializer("%T(%L)", className, 0) .build(), ).build(), ).build() … }
  12. // https://github.com/square/kotlinpoet/issues/1696 @Test fun aliasedImportInSamePackage() { val source = …

    //language=kotlin assertThat(source.toString()).isEqualTo( """ |package com.mypackage | |import com.mypackage.StringKey as S | |public object K { | public val test: S = S(0) |} | """.trimMargin(), ) }
  13. • O(1) — Automated refactoring • O(n) — Well-scoped change

    • O(m * n) — Poorly scoped change • O(n!) — Everything, everywhere, all at once! (›°□°)› ︵ ᵲᴸᵲ
  14. git checkout branch # make changes git add —all &&

    git commit -m “My first PR” gt track # make more changes, create a new branch, commit gt track # rinse and repeat gt submit
  15. # make changes in any PR in the stack #

    commit changes gt restack gt submit
  16. Why not just multiple commits? • Better reviewing experience (at

    least on Github) • Pull requests can be reviewed and merged separately • No way to squash merge
  17. val fruits = listOf( "Apple", "Banana" ) val fruits =

    listOf( "Apple", "Banana", "Pineapple" )
  18. val fruits = listOf( "Apple", "Banana", ) val fruits =

    listOf( "Apple", "Banana", "Pineapple", )
  19. As a pull request author… • Keep PRs small and

    focused • Keep a clean diff • Clearly demonstrate the change
  20. As a pull request reviewer… • Don’t bike shed! •

    Automate code style checks • Trust your teammates • Approve by default • Suggest follow-up improvements
  21. Why is it important? • Helpful when fighting fires 🔥

    • Understand context behind decisions
  22. Cross-linking context • Tickets <-> Commits/PRs • Bug reports/feature requests

    <-> Tickets • Misdirected Slack messages <-> Properly directed Slack messages
  23. Communicate with everybody! • Be mindful of your audience •

    Wear many hats! • Be open to learning and collaboration
  24. Conclusion • Communication is everywhere! • Efficient communication makes you

    more productive • Be kind, be helpful & enjoy the ride!