Go first

You can’t expect people to be open with you, if you’re not open with them first.

You’re at a swimming pool. The water looks nice. It’s not quite a warm enough day… But it’s almost summer so why not jump in?

You want others to join you in the pool (it’s more fun that way!). So you wander around and ask each of the pool loungers: “Hey, care to jump in the pool with me? The water looks warm…”

Think anyone jumps in? Especially, if you’re not in the pool yourself?

Not likely.

I view the process of getting honest feedback from employees the same way. If you want everyone in your company to be open and honest with you — if you want everyone to jump into that swimming pool with you — you’ve got to take the first dive.

I call this “going first” as a leader. You must take the first step to show it’s safe to speak up (particularly given that fear plays such a large role in why employees don’t give feedback). You must be forthcoming and candid with your employees first, as a leader. You can’t expect someone else to do something if you don’t do it yourself first.

Here are a few ways to “go first” as a leader and jump into that swimming pool to create a safe environment for employees to speak up…

Share what you’re struggling with.

One of the best ways to “go first” is by sharing something that you’re struggling with. If this makes you feel a little vulnerable as a leader… that’s a good thing! You’re modeling the honesty that you’re similarly looking for from an employee. As a result, you diffuse some of the anxiety and fear an employee may have about offering a critical opinion. An employee may now think, “Well if she, my manager, is struggling with this, then I guess it’s okay to share this…”

Try saying this: I’m struggling with…” or “Can you help me understand something that I’m having trouble grasping?” or “Hey, I don’t have all the answers…

Play devil’s advocate with your own opinion.

Another way to “go first” as a leader is to challenge your own opinion in front of your team. The next time you’re explaining a new idea, pose an opposing viewpoint to it yourself, and then ask for feedback. By playing devil’s advocate with your own opinion, you invite others to give dissenting viewpoints. When you’re a contrarian to your own ideas, you give your team permission to be contrarian too.

Try saying this: I could also take a devil’s advocate point-of-view and say ___. What do you think?” or “Another way to look at it is ____. Would you agree or disagree?

Commend vulnerability when you see it.

“Going first” as a leader also means to positively reinforce the behavior you want to see. If you want meaningful, honest feedback to be given to you more often, be sure to publicly recognize it when you do see it. A CEO who is a Know Your Company customer here in Chicago makes a point to do this every month during her company all-hands meeting. She’ll publicly commend an employee for her vulnerability, and say, “Thank you for sharing an opinion that might not be popular. It’s important.” When you do this, you set the expectation that you want to hear frank, non-sugar-coated information in the future.

Try saying this: That’s a great thought — your honesty is appreciated and important to the team…” or “I’m so glad you’re disagreeing with me. It’s helping me understand a new perspective…” or “Thank you for bringing that up. I’m sure that was not an easy thing to share, so I value you doing that.

As a leader, it’s your job is to make your employees feel as safe as possible to speak up. You can’t sit back and ask other people to be candid and forthcoming without doing it yourself first.

Want others to jump into the pool of honesty and openness? Go first.

I wrote this piece as the latest chapter in our Knowledge Center. Each week, we release a new chapter on how to create an open, honest company culture. To get each chapter sent straight to your inbox, sign up below…

https://medium.com/media/d44dd2a6a03c83b35a6dd9495abb813b/href

P.S.: Please feel free to share + give this piece ❤️ so others can find it too. Thanks 😊 (And you can always say hi at @cjlew23.)


Go first was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.



[Read More …]

Using Kotlin to make Android APIs fun again

Kotlin announcement at Google I/O 2017

If you haven’t heard, Kotlin is now a first class citizen on Android and we couldn’t be more thrilled at Basecamp. We’ve been using Kotlin since it hit 1.0 last year and we recently got to 100% Kotlin in the Basecamp 3 Android app.

One of my favorite features in Kotlin is extension functions. They let you extend functionality in classes without inheriting from them. We make great use of extension functions at Basecamp to simplify and add clarity to Android APIs that are verbose (or that we just don’t like). Below are a few example of ways that we leverage extension functions to make Android development easier on a day-to-day basis.

Set a View height

Setting the height on a View programmatically in Android is annoying (and I’m being nice). With a Kotlin extension, you can pretend that Android makes it easy for you:

fun View.setHeight(height: Int) {
val params = layoutParams
params.height = height
layoutParams = params
requestLayout()
}

Now when you want to set a height for your view instance, you just need to call view.setHeight(newHeight). Super easy!

Set View visibility

To make a view visible or gone by writing view.visibility = View.VISIBLE or view.visibility = View.GONE over and over is tedious. Never again! We have extension functions to make that nicer:

fun View.visible() {
visibility = View.VISIBLE
}
fun View.gone() {
visibility = View.GONE
}

Now we can just write view.visible() and view.gone() and… that’s it.

Read an Asset file into a String

Quick, how do you read one of your packaged asset file resources into a String? The answer is verbose input stream code. No thanks! We wrote an extension function:

fun AssetManager.fileAsString(subdirectory: String, filename: String): String {
return open("$subdirectory/$filename").use {
it.readBytes().toString(Charset.defaultCharset())
}
}

To retrieve the String, now we can write :

val json = context.assets.fileAsString("json", "config.json")

Retrieving a Color resource across API levels

Up until API 23, the way to retrieve a color resource was context.getColor(R.color.my_color). But starting at API 23, the signature added a new parameter for a theme resource. If you don’t need to specify a theme resource, you can make this easier on yourself so the same code can work on all API levels:

fun Context.color(@ColorRes id: Int) = when {
isAtLeastMarshmallow() -> resources.getColor(id, null)
else -> resources.getColor(id)
}

Now call context.color(R.color.my_color) anywhere you like and you have a clean wrapper. You could even make the theme resource an optional parameter with a default, since Kotlin supports this.

Inflate a Layout

Wish it was easier to inflate a new layout?

fun Context.inflate(res: Int, parent: ViewGroup? = null) : View {
return LayoutInflater.from(this).inflate(res, parent, false)
}

We can now write context.inflate(R.layout.my_layout) and avoid the mandatory parameters that Java required. (If you needed to attach your new view to the parent, you’d need account for that above.)

Use the Anko Library from JetBrains

JetBrains has already done a lot of work to make Android development easier. They’ve created many extension functions in their Anko library that you can use without writing any custom extension functions yourself.

For example, obtaining a System Service involves verbose syntax and error-prone type casting. With Anko it’s a lot easier:

val manager = context.notificationManager

That’s it. Under the hood, their extension property looks like this:

val Context.notificationManager: NotificationManager
get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

(Note that this is an extension property not an extension function — another great tool in Kotlin that you should explore.)

Android has many rich and powerful APIs, but they often cater to its legacy and limitations in Java. With Kotlin, you now have the power to shape the APIs you use most often. Imagine how nice it would be to be free of the API annoyances you’ve been living with for years!

I’d love to hear — what are some of your favorite extension functions that you’ve written for Android? Please share!

We’re hard at work making the Basecamp 3 Android app better every day (in Kotlin, of course). Please check it out!


Using Kotlin to make Android APIs fun again was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.



[Read More …]