Touchlab KotlinConf 2019 Recap

Touchlab KotlinConf 2019 Recap

Touchlab attended KotlinConf 2019 in Copenhagen, Denmark. As anticipated, the conference was a milestone event for the development of Kotlin Multiplatform and its community of practitioners and contributors.

VIDEOS! There will most likely be ‘official’ videos published soon, but the content is already up in the live stream so we organized links to each talk for you.

This post also contains reactions to Kotlin Multiplatform sessions attended by Touchlab’s Ben Whitley (multiplatform mobile engineer with iOS background) and Kevin Galligan (Partner).

Before we jump in, we’d like to call out two important moments from the conference:

1. During his keynote, Kotlin Lead Language Designer Andrey Breslav highlighted Touchlab as a critical community member to JetBrains’ mission to usher in a new era of mobile development with Kotlin Multiplatform (view clip).

2. During the closing Q&A panel an audience member asked about approaches for getting iOS developers onboard for a KMP pilot. JetBrains’ VP of Developer Advocacy Hadi Hariri recommended organizations speak to Touchlab as we’re actively working with clients on this exact topic (view clip).

Thursday Recap

Opening Keynote by Andrey Breslav (view keynote)


Pre conference take

The KotlinConf keynote is must watch for anybody that’s interested in Kotlin. Any major new stuff will be announced.

Ben’s reaction

  •  Think of Kotlin as an entire ecosystem, not just a language. 
  • The goal is to make Kotlin the default language for starting any project and make it a universal solution for every platform. For any and all levels of experience, platforms, scales, and application.
  • Dropped the term “full-stack Kotlin” which I personally hadn’t heard before.
  • No major new features in Kotlin 1.4. Focus is on quality and performance, which is smart, given the current build times. 


Kevin’s reaction

  • They are very focused on making Multiplatform a reality. 
  • You’ll be able to run/debug native iOS apps from Android Studio. That will be a huge adoption driver.  
  • 1.4 will bring a lot of stability and performance/compiler improvements, which will be a big deal.

Sharing Is Caring – Kotlin Multiplatform for Android Developers by Britt Barak (view talk + slides

Pre conference take

This will be a good intro talk. It includes not only native, but JS and backend code.

Ben’s reaction

  • Getting started (aka project configuration and setup) is currently the biggest pain point. Something we can probably all agree on. 
  • Big plurality of different needs, and therefore different architectures. This is still an open ended issue for KMP, and one we’re very familiar with at Touchlab. Because there’s many different use cases and it’s still open ended, this wasn’t intended as a talk on KMP architecture.
  • is a very cool resource to find packages
  • Overall a really good getting started talk, even though a lot of it was very familiar for us at Touchlab.
  • I’d strongly recommend checking out the video of it for Android developers interested in KMP. 


MPP in 1.3.X and beyond by Dmitry Savvinov and Liliia Abdulina (view talk)

Pre conference take 

Another KMP intro, from JetBrains engineers

Ben’s reaction

  • Future goal is a complete KMP ecosystem
  • A lot of the talk was a history of KMP through Kotlin versions up until this point
  • Included a shoutout to Touchlab


Kevin’s reaction

  • For the future they’re going to focus on docs and onboarding much more, as well as for specific use cases like native mobile. The team had been much more focused on “general” multiplatform.
  • The original discussion of “multiplatform” started in 2016, which is around when Kotlin JVM was 1.0. JS has been around and in use significantly longer than native.

Coroutines! Gotta catch ‘em all! by Florina Muntenescu and Manuel Vivo (view talk)


Pre conference take

Concurrency for native will be mostly centered around coroutines, so an intro to coroutines is valuable.

Kotlin Multiplatform in Action: more than 10 projects for iOS and Android with Shared code by Alexandr Pogrebnyak (view talk)


Pre conference take

IceRock has been shipping KMP for a while, and has published templates and libraries to help. This will probably be a useful talk for practical KMP advice.

Kevin’s reaction

  • Have released a set of libraries targeted at native mobile development that we should review for use on projects
  • They have a shared UI library for native mobile. Uses native widgets to render. That’s a lot of work to build but assuming we can mix with fully native screens, this is something we’ll be taking a look at.

Bridge the physical world: Kotlin/Native on Raspberry PI by Qian Jin (view talk)


Pre conference take

More Kotlin Native. It’s being deployed to an IOT device, which may be interesting to see.

Your multiplatform Kaptain has arrived by Ahmed El-Helw (view talk)

Pre conference take

Careem is shipping KMP in a major platform. This is critical info for orgs getting serious about KMP. We’ll be there for sure.

Ben’s reaction

  • Very early users of KMP
  • KMP exciting and nerve-wracking for management
  • Communication processes were a solution to problems between iOS and Android teams
  • This is a very good “lessons learned” type of talk
  • Shoutout to Touchlab generics patch and Kevin’s blog post about generics 
  • Mentioned basically everything Kevin has put out there at this point, including CrashKiOS and Xcode Plugin. 
  • Ended with a cool/funny poem (last pic)

Shipping a Mobile Multiplatform Project on iOS & Android by Ben Asher and Alec Strong (view talk)


Pre conference take

More KMP-in-production experts. We work directly with the Square team doing this, and chat often with Ben, so we’re very much looking forward to see what they have to say.

Ben’s reaction

  • High initial setup cost for KMP, will be worth the effort
  • Features develop parity even if they start out the same (or similar). Good point, not discussed enough
  • Shout-out to Kevin’s concurrency talk. They recommend doing the suspend and lambda methodology (which is what we do pretty regularly).
  • Pros and cons of monorepo, which is under discussed good con for iOS devs: they often don’t even have JVM.
  • Didn’t mention Touchlab CrashKiOS, which is exactly what they need for the improved crash reporting they want. 


Kevin’s reaction

  • Square and PlanGrid are some of the earliest shipping apps, and have really had to figure out a bunch of the stuff.
  • I’ve been involved directly with Square, and have worked a fair bit with Ben because they ship on Windows, so we’ve been publishing our libraries to Windows.
  • Great thoughts for introducing your team to and educating your team on KMP.
  • Pick something that the teams don’t like and/or that’s fairly critical and needs to run the same. Sync for PlanGrid and transaction search for Cash.
  • Stopped taking notes because my talk was happening after theirs


Kotlin Native Concurrency Explained by Kevin Galligan 
(view talk + slides)


Links included in Kevin’s talk

Pre conference take

If you want to do KMP on native, you need to understand concurrency. This is our talk, and a must see, obviously

Friday Recap

I Walk The Line: What Parts Of An App Should be in Kotlin Native – and What Parts Shouldn’t? by Ellen Shapiro (view talk)


Pre conference take

Ellen knows mobile tech, and brings a lot of iOS experience to the KMP equation. We’re definitely checking this talk out.

Ben’s reaction

  • Developer enthusiasm is key to adoption of cross platform products
  • Gave away copies of Ray Wenderlich Kotlin book to people who ask interesting questions – good idea for engagement
  • Ellen came up with MVSP (Model ViewState Presenter) architecture to replace MVP. It’s a form of unidirectional data flow partially inspired by SwiftUI
  • Shoutout to Kevin’s talk yesterday, she said “it goes into a ton of detail” 
  • Know why you’re using Kotlin Multiplatform, that will dictate how much and what KMP you should do

Going Native: How I Used Kotlin Native to Port 6 Years of Android Games to iOS in 6 Months by Ana Redmond (view talk)


Pre conference take

Ana got into native early on and has done very interesting work. This will be a really good talk.


Ben’s reaction

  • Ana is a perfect example of what Kevin (and Ellen in her talk) says: if you’re going to do cross platform or common code, know why you’re doing it. 
  • She’s using KMP for shared UIs; very difficult and impressive. As she says, this is possible because of few external dependencies (basically none), which is why this is a good use case for shared UI.
  • She wrote her own KMP WeakRef wrapper to avoid retain cycles in iOS, pretty smart and cool. Has its limitations, won’t catch retain cycles across KMP and native code. 
  • Lessons learned
    • Classes > Objects: to avoid the threading and mutability issues that Kevin’s always talking about
    • Lists > Arrays: this is vindicating as I’ve found this myself and I’ve been saying it for a while now
    • Initialization order: she found very weird behavior in overriding initializers in KMP. See corresponding pic. Something we’ll be looking into at Touchlab. 

Effective Kotlin-Swift Interoperability by John Rodriguez (view talk)


Pre conference take

Kotlin/Swift communication is a huge topic for KMP. Improving the situation for iOS developers will be critical for adoption, so this is a critical topic to understand.

Kevin’s reaction

  • Went very deep on interop details. I learned some new things, especially WRT enums.

Kotlin/Native: Answers Your Won’t Find on the Internet 
Eugenio Marletti (view talk)

Pre conference take

Eugenio is a member of the JetBrains developer relations team, focused on KMP and native. He’s going to be critical to improving the documentation and onboarding experience, so you should definitely check this talk out.

Kotlin Multiplatform Sessions Touchlab is Attending at KotlinConf 2019

Kotlin Multiplatform Sessions Touchlab is Attending at KotlinConf 2019

Touchlab will be attending KotlinConf 2019 in Copenhagen, Denmark. We anticipate the conference to be a milestone event for the development of Kotlin Multiplatform and its community of practitioners and contributors.

If you’re in town, please let us know because we’d love to meet with you.

If you’re unable to attend the conference, no worries. We’re hosting a Kotlin Multiplatform Fireside Chat in New York City for engineering managers. We’ll discuss and review all the KMP updates from the 2019 conference. Register here.

The following is a list of KMP talks we’ll be attending. If you’d like to be notified when the live stream for these sessions is available, register on the KotlinConf website.

Day 2 (Thursday, December 5th)

Opening Keynote by Andrey Breslav  

Time: 9:00 – 10:00

Our take: The KotlinConf keynote is must watch for anybody that’s interested in Kotlin. Any major new stuff will be announced.

Day 3 (Friday, December 6th)

Nice to See VMWare Adopting Kotlin Multiplatform

Nice to See VMWare Adopting Kotlin Multiplatform

I saw Hadi’s tweet and I couldn’t agree more.

There are more and more (respected and influential) companies experimenting with and talking about Kotlin Multiplatform. Some have put it into production already. 

Personal Thoughts

Here are a few quotes from VMWare’s post and my thoughts:

Experimental Technology


Kotlin Multiplatform is still an experimental technology. It’s very early on in its days, and is subject to breaking changes going forward.

There are a lot of people who are afraid of this, but we should remember that Swift was also in that state until version 4, and version 5 was the first to introduce binary stability so binary frameworks would work with future releases of Swift. That didn’t stop people from learning it, experimenting with it, and putting it into production. Because they trusted Apple.

JetBrains has a long history of building developer trust. The Kotlin Multiplatform early adopters trust JetBrains. And, it is again, well deserved. Android Studio is built on IntelliJ and Google made Kotlin the official language of Android starting in 2017. You and VMWare aren’t risking much to experiment with Kotlin Multiplatform now.


Library Support

One issue you will most likely encounter with Kotlin Multiplatform, is that the set of libraries that support it are very small at this point

This is true. And that’s why Touchlab is working with Square and developing the xcode-kotlin plugin and making SQLDelight the recommended multiplatform persistence solution (see @joreilly ‘s writeup) and we want to support and elevate community projects when we can, like Multiplatform Settings and more.

And, of course, JetBrains isn’t letting us down on this front. The most recent example is ongoing work to support multithreaded coroutines in Kotlin Native. It’s one of the biggest missing pieces and it’s getting very close to ready.

Leverage Native Android and iOS Libraries

It wasn’t the most elegant solution, but it was better than writing our own version of libphonenumber by a mile (or several).

The interop story is really where Kotlin Multiplatform shines. Other solutions require bridges, channels, JNI on Android, and/or excessive boilerplate. When you run into the “set of libraries” issue above, you can still use existing, battle-tested libraries from the native ecosystems.

This interop story also allows for incremental refactoring that significantly lowers the risk of adopting an “experimental” technology. I wrote about this in some detail in Kotlin Multiplatform Can’t Do It All. Which is Exactly Why You Should Try It!

More to Come

Stay on the lookout for follow up posts where I will talk more about additional features, issues, and how to get the most out of Kotlin Multiplatform

I am very much looking forward to more. And I hope you all are too!

    Kotlin Multiplatform Library

    Kotlin Multiplatform Library

    The following blog post is an overview on Kotlin Multiplatform libraries by the KMP experts, Touchlab. You’ll find a. list of recommended libraries we use today for Kotlin Multiplatform development (including some of our own) b. video recording of Kevin presenting at Øredev 2019 on library development for Kotlin Multiplatform and c. slides from that presentation. 

    What Kotlin Multiplatform libraries is Touchlab using today? 


    Touchlab’s libraries

    • Stately: Stately is a state utility library to facilitate state management in Kotlin Multiplatform.
    • SQLiter: Sqlite driver for Kotlin Native
    • xcode-kotlin: Xcode plugin for Kotlin debugging and source formatting

    Jetbrains’ libraries

    Community Libraries We Use

    • Multiplatform Settings: A Kotlin Multiplatform library for saving simple key-value data
    • SqlDelight: Multiplatform SQLite model facilitation library.
    • Koin: Service Locator/DI. Multiplatform in progress.

    Libraries We Find Interesting

    Sample Apps

    Useful introduction to Kotlin Multiplatform resources 

    Kotlin Multiplatform Frequently Asked Questions

    Kotlin Multiplatform Frequently Asked Questions

    Can I use Kotlin Multiplatform for an existing app? 

    Sam: Yes, being able to optionally share even small parts of your application lets you plug KMP in where it makes the most sense for you.

    What Kotlin Multiplatform libraries is Touchlab using today? 

    Touchlab’s libraries

    • Stately: Stately is a state utility library to facilitate state management in Kotlin Multiplatform.
    • SQLiter: Sqlite driver for Kotlin Native
    • xcode-kotlin: Xcode plugin for Kotlin debugging and source formatting

    Jetbrains’ libraries

    Community Libraries We Use

    • Multiplatform Settings: A Kotlin Multiplatform library for saving simple key-value data
    • SqlDelight: Multiplatform SQLite model facilitation library.
    • Koin: Service Locator/DI. Multiplatform in progress.

    Libraries We Find Interesting

    Sample Apps

    How much of my code are we going to be able to share with KMP? 

    Sam: One of the great things about KMP is that you have a lot flexibility in how much code is shared. As a rule we don’t recommend trying to share your UI code. Creating high quality UI is generally best accomplished using the tools and environment of each platform. Everything else is fair game. In practice you will find that the code you share will be the most critical business logic and the layers your platform developers are sick of doing twice.

    How much weight does KMP add to our apps?  

    Kevin: Minimal relative to other options, and proportional to how much you use. There is no re ection, and the standard library is small, so the Kotlin compiler includes only what’s actually being used. In general, minimal us- age of Kotlin in a native app will add a binary size in the 100’s of K’s. Major logic will likely get into the low megabytes.

    We use Swift. How’s the interop with KMP?   

    KevinIt currently presents to Swift/Objc as an Objc library. The usual Swift Objc interop issues will apply, but the generated header takes advantage of many of the naming you can insert for Swift. You can also now have ge- nerics (I highlight that because we did that, too). With ABI stability, direct Swift interop will be more of a priority. Possibly early next year, but there is no timeline yet from the team.

    What type of ecosystem and tool are available? 

    JustinThe existing, mature, and exciting ecosystems of native Android and iOS development are available. Not everything can be pulled into shared code, but the beauty of sharing business logic is that most of it can be shared. A mature and loved library that is already in Kotlin is very close to joining the KMP ecosystem. For example, once SqlDelight was set up to output Kotlin, it didn’t take long to make it compatible with shared code…and iOS developers love that they don’t need to deal with CoreData anymore but they can keep all the other stuff they love.

    KevinMajor libraries have been appearing over the last year, from JetBrains and other groups. This will continue as more libraries from the mobile world are ported. The Kotlin community on Android is already one of the most active in technology, so there is an existing and active develop- er base. As for tools, Jetbrains makes tools as a core business. They have tools already for multiplatform, and will continue to improve them. One of the main reasons why Kotlin is successful now, and why Kotlin Multi- platform will be successful in the near future, is because JetBrains will be building the tools.”

    How will KMP affect our ability to recruit and onboard new iOS devs? 

    JustinEqual or better. Some iOS devs will be happy to spend time on getting the UI and platform-specific stu right. Some iOS devs want to become mobile devs and will be happy to start learning Kotlin. All iOS devs will be happy to know that it doesn’t force them out of the ecosystem and lose their identity.

    SamKotlin Native will be much better received by new iOS developers than many other code sharing schemes. The ability to code UI natively while treating the common code as a normal framework is much less foreign than tools which require them to learn an all new framework.

    Kevin: Developers tend to prefer the platform they use, but the idea that they are all violently opposed to change is overblown. Developers are skeptical to new tech, and often for good reason. Hopefully, including Kotlin will attract developers interested in new tech. In general, the decision to move to any “cross-platform” technology is not coming from the developers but from the management level, and it is often a mandate to pick something. It’ll be much easier to recruit iOS developers if they get to embrace Swift- UI and other new Apple tools and learn Kotlin code sharing as opposed to learning React Native or Flutter. 

    How fast is the compilation time? 

    KevinNot super fast, but the general dev process is to code on the JVM side first, which is more optimized, then rebuild the Xcode framework and call it from iOS. The next major version of Kotlin should be focused on various performance improvements (compilation being one of them).

    Thoughts on handling concurrent operations in Kotlin Multiplatform? 

    KevinKotlin Native’s concurrency model is different than the “classical” mod- els of the JVM and Swift/Objective C. It is something that new developers, coming from either Android or iOS backgrounds, will need to understand. It can be confusing at first, but the goal of these changes is less error- prone concurrency. There are some early libraries to assist with concurrency, but later this year we expect multithreaded coroutines to emerge for Native. At that point, most concurrency will be managed by libraries (like most concurrency is managed now). You’ll need to understand how it works, but the libraries will handle the heavy lifting for you.

    How do I encourage optimal code sharing from the beginning? 

    JustinFocus on well-established architecture principles of keeping the UI layer thin and modularizing code. Something new may be separating Android-specific libraries from common code but this is often a small amount because business logic is, by its nature, less platform-specific.

    What’s the value-add over other technologies? 

    JustinKotlin is THE language for Android. KMP doesn’t significantly change the way you develop native Android apps. KMP interop is native so there is very little run-time overhead and less boiler-plate code while developing. KMP outputs a standard iOS framework so iOS devs are still in familiar territory. By its nature, it keeps up with platform-specific technologies that motivate and excite strong native developers and those looking to join the space (retention and hiring). It doesn’t create its own ecosystem so it’s not a ‘B’ big decision, easy to iterate and revert, very little up-front cost compared to others.

    SamIt’s optional, meaning you can do some, and no big decisions. Natively integrated: the interop is platform native, which is unlike pretty much all other options. Open source. Code sharing, so you can write and test your critical logic and architecture, but don’t build a dissatisfying UI. The language is popular and modern. That is important for libraries, hiring, and productivity.

    Does KMP work with Android WearOS, Apple WatchKit, TVOS?

    KevinKotlin 1.3.60 will add support for WatchKit and TvOS. Anything on the Android side already uses Kotlin, so there are no compatibility issues (Kotlin is the preferred language for Android).

    How mature and stable is KMP?

    KevinThe language and tooling have gone through significant change over the past couple years, but the build tools and features of the ecosystem have stabilized. The tooling and support libraries will continue to mature rap- idly during the remainder of 2019 and into 2020. As for stability, there is no “multiplatform” at runtime. It is a build time construct. Kotlin JVM is super stable. Kotlin Native’s runtime is stable, although you will occasion- ally run into things you don’t expect. Usually a result of cryptic messaging. That will also improve over the next year. Major apps are releasing Kotlin Native into production now.

    What’s the best way to set up the dev experience for iOS devs?

    KevinI think it’s important to establish that the plan is not to start writing everything in Kotlin. The shared code will support the native development experience of Swift and Xcode, especially as SwiftUI takes over UI development on iOS. Introduce Kotlin as a modern language that shares much of the syntax and concepts of Swift, and at an architectural level, it’s important to start thinking of our teams as “mobile developers” rather than specifically Android and iOS. Having an Xcode plugin for Kotlin means iOS developers can start reading and debugging Kotlin in the shared code without needing to dive in with new languages and tools. Once that knowledge is learned, the iOS team can start pushing code that the Android (and possibly web) teams will use. It’s important to minimize the idea that the iOS teams will just be getting code from the Android app, although that is often the initial reaction, as Kotlin is an ‘Android thing’.

    How do you start migrated a codebase to KMP?

    KevinPick one part that needs to happen on both platforms, ideally something that the iOS team isn’t excited about. SQLite is a good option, if you’re us- ing it. Nobody likes Coredata. SqlDelight is a far better option. From there, possibly networking, analytics, or any logic intensive operations that need solid testing. Because it’s “optional” sharing and natively integrated, it’s easy to weave shared code into existing code.

    Can I hire for Kotlin Multiplatform? 

    Justin: The community is growing quickly but this is new technology. At this point, there are very few experts, some devs with experience, and many more getting to know it. The greatest thing WRT hiring for KMP is that Kotlin is an easy language to hire for, and since it integrates well with new tech like Jetpack Compose and SwiftUI, even the people who built their careers on Android or iOS welcome it.

    Kevin: In general, hiring for positions that are seen as forward-thinking and working with popular technology will be appealing to developers. KMP is new, so there isn’t a lot of experience out there. However, there are many developers experienced with Kotlin for Android, and a lot of developer community interest in KMP. Competing for talent will be easier if you embrace technologies that developers are excited about. KMP is certainly no exception. Today, you should expect some ramp-up time for people with experience writing Kotlin for Android. However, offering experienced Android developers the chance to focus on KMP will increase the pool of candidates interested.

    Useful introduction to Kotlin Multiplatform resources 

    A First Time Speaker’s Journey from CFP to Stage

    A First Time Speaker’s Journey from CFP to Stage

    One Week to Decide

    On October 29, I found out The Lead Developer New York had open CFPs — and the deadline was November 5.

    I sent a slack message to my team saying “I’d love for us to send proposals regarding how multiplatform development, specifically kotlin multiplatform, changes your team, development, processes, lowers technical risk, schedule risk, cost, etc, etc.”

    This was the first time I ever thought about responding to a CFP and didn’t know if it made sense to the company, to my schedule, or to any of my colleagues. What I did know was:

    Thankfully, @namnum was super supportive, immediately responding to my slack message with “Hell yes! How can I help?” 

    Since this is a “Lead Developer” conference, I roped in @samhill303, our head of engineering, to go through the process with me.

    We only had a week, so we had to work fast. Here’s what we did:

    1. Brainstormed titles with very light outlines to add some context
    2. Talked through which ones resonated more with us personally, as a company, and the potential audience
    3. Stopped thinking about the ones that didn’t resonate
    4. Added more definition to the outlines that survived
    5. Talked about what makes a title and description interesting (both @kpgalligan and @namnum have read and written a lot of proposals)
    6. Turned 2 outlines each into descriptions with interesting titles
    7. Quick peer review
    8. Send 2 proposals each

    Two Months to Wait

    Normally, The Lead Developer organizers get back to applicants within a month, but, because of the holidays and some unforeseen scheduling changes, we had to wait until January.

    I didn’t know that until they sent a note mid-december so I was looking at my email pretty often until then. Waiting is definitely not fun, but it is important that the people reading through proposals take their time to figure out if the talk will fit well with the conference goals and time-slots. I talked to @Geek_Manager afterwards about this and I was very impressed with how much effort the organizers put into choosing the talks for a successful conference.

    The CFP response form also asked whether the talk could be 30 minutes or 10 minutes. Since I checked both options, I had the extra suspense of not knowing how long I would be on stage if I were accepted. Though that added to my anxiety, I was glad to have both options available.

    In early January, I finally learned that I was accepted to give a 10 minute lightning talk!

    Three Months to Prepare

    The Long Outline

    We had a lot going on at Touchlab in January so “prepare for the conference” was in the “Important but not Urgent” category. Being the first time I’ve done this, I really should have gotten started immediately, but, at the time, putting it off a little later made a lot of sense (see @allspaw).

    The urgency came when I found out there was an opening for the February meetup. I got started right away (Feb 4) on an outline which turned into a MUCH longer effort than I planned so @kpgalligan filled in my slot with some KMP updates.

    I promised to have things ready for the March meetup — and I did! It was difficult because I had such a long outline. The prep I put into the outline — organizing, researching, reorganizing, more researching, more reorganizing — was invaluable not only for putting together the meetup slides but for sharing knowledge with Touchlabers, and speaking more intelligently with existing clients and prospects. In fact, as a concrete benefit, I published an initial blog post for some of these which got picked up by Hacker Noon!

    The Meetup Slides

    Even though the outline was so long, it was incredibly useful for speeding up the slide making process. Here’s what I did:

    1. Move the outline 1:1 to slides — copy/pasting line items into slides, batching multiple lines into one slide if that seemed appropriate
    2. Replace outline in slides to more slide-friendly bullet points and move outline to speaker notes
    3. Lower the amount of text on each slide by incorporating graphical representations
    4. Replace outline in speaker notes with natural language

    I went through a few iterations of graphics, speaker notes, and slide CRUD. By demoing sections of the slides internally, I could incorporate feedback and iterate towards the following goals:

    • Language sounds natural
    • Individual slides aren’t confusing given what I’m saying at that point or what I’ve said up to that point
    • Individual slides aren’t distracting
    • Organization of slides tells a story
    • The story isn’t more than 30 minutes

    Not all the goals were met for the meetup but there was very good progress. Here are the Meetup slides with some transitions removed. The talk came in at about 20 minutes, there were a ton of good questions at the end, I was told the content was good, my ability to present was good, and, most importantly, I felt much more confident afterwards.

    The Webinar Slides

    This event was a “crazy idea” from marketing. We didn’t know if it made sense or if it would actually happen but from the blog post and the success of the meetup, we knew it could happen.

    The meetup slides didn’t include the images from the blog post and our webinar was meant to be more about “How to Evaluate Mobile Multiplatform Solutions” so I worked on editing the Meetup slides to include them and also update the story for a different audience.

    I followed essentially the same process as putting together the meetup slides, the big difference being Touchlab’s designers (Nelmer, Frances) gave me some help. They had only a few days to improve my slides and we were all working feverishly until 5 minutes before to integrate designs into the final version. It didn’t all get done, but they did an incredible job, and we knew this wouldn’t be the last time they could help (the real show would be Lead Dev). Next time, I’ll bring design in earlier, much earlier.

    The webinar surpassed expectations! We were expecting about 50 people to show up…we had over 100 and 70% stuck around for the entire presentation!

    The Lightning Outline

    The meetup presentation was about 20 minutes and the webinar was about 30 minutes. I needed to take what I made and learned from both, and bring it down to 10 minutes. Making the meetup 30 minutes from the original outline was difficult enough, so I knew there’d have to be some drastic changes.

    So I made a new, hyper-focused outline, the lighting outline and got to work slicing, dicing, mixing, and matching the meetup and webinar slides.

    Keeping the technical model from the webinar, the 3 dimensional perspective inspired by the above-the-line/below-the-line framework, and the timeline from the meetup — even after removing all but the most currently relevant solutions (goodbye RoboVM, j2objc, etc) — it was nearly 20 minutes 😩.

    The Lightning Slides

    In order to make this a 10 minute lightning talk I started thinking of it as a movie trailer. If a 2 hour movie can have a 2 minute trailer, I should be able to bring this down to 10 minutes. Luckily, White October Events has a youtube channel with all of the past Lead Dev recordings. I could use previous lightning talks as inspiration.

    I removed the intro to me, Touchlab, and the talk. I removed orienting the audience with what I will talk about. I removed extra details/context for various slides.

    This got it down to 13 minutes…nearly there. I experimented with talking faster: down to 10 minutes! OK, but I didn’t want to rush too much. What was left was editing the speaker notes. I removed adverbs, adjectives, combined sentences then simplified them. I was ruthless in prioritizing details and removing the less important ones. Then, finally, I ran through a couple times clocking in under 11 minutes 😅 

    Editing down from 30 minutes to 20 didn’t take very long. Editing down from 20 to 13 took a little bit longer. Editing down to 11 took a lot longer because there’s so much that I felt important that I didn’t want to lose and when I made the decision to lose it, I’d read through again and want to bring it back in favor of losing something else.

    I knew I couldn’t make it shorter without modifying pacing so that’s what I worked on until the day of the conference. I also found out there would be a clicker and confidence monitors, so I tried to recreate that the best I could too.

    One week before the conference, I was about to submit my final slides. But then Touchlab announced partnering with Square and introduced the Kotlin Xcode Plugin. These were both such important news I had to find a way to add them to the slides. I already had one slide where I described what KMP will look like for iOS in the near future so I broke it up into multiple slides to showcase the partnership, the plugin, and a few select multiplatform libraries that are pushing the ecosystem forward. My final lightning slides were finally final and I sent off the email to make it official.

    10 Minutes to Speak

    After all the prep — the meetup, the webinar, the seemingly endless rounds of practice while editing down to 10 minutes — I was feeling really good. I was still nervous (even writing this, thinking about “the day of” is making my heart race and my hands shake) but I knew it would work.

    Thanks to the speaker’s dinner, I got to meet people I’d be sharing the stage with. Talking about stuff other than “the day of” allowed me to relax and, most importantly, understand that everyone else on the stage are also people who get nervous and have to prepare. I could think of them as friends which meant when I walked to the venue the next day, it felt like a reunion.

    Because of my prep the weeks before and because of the speaker’s dinner, I was much less nervous. What I was worried about was the execution. Since I used Keynote, I expected the layout, size, animations, graphics would all be fine. But I had never used confidence monitors before and I knew from practice that it’s possible my speaker notes would be too small, I’d get lost in my notes, lose my pacing, and potentially choke (not really, because I did get lost in the Meetup and it was fine, but this was crossing my mind because anxiety is real).

    That morning, I saw other speakers running over their talks one last time, I saw them chatting about nothing in particular, and I saw them go to the stage before the audience arrived to become familiar with the setup. So I asked to pull up my slides, I stood on the stage, and flipped through the first few to test the speaker notes. They looked great.

    I spent the rest of the time before my talk watching those before me, getting into the feel of the conference, getting wowed at the presentations (while not feeling bad about mine).

    And then it was time to mic up. I talked to @lara_hogan, @Geek_Manager, and @samhill303 before the lights dimmed. Then started feeling my hands shake again, but I wasn’t first on stage, so I did some breathing and thinking (sorry @iamagiantnerd for not giving you my full attention).

    And then I was on the stage shaking @lara_hogan’s hand. And then I started to talk. And then I noticed I didn’t have the clicker. And then I saw the countdown clock. And then I heard the audience laugh. And then I saw some people look interested. And then I was done.

    Closing Thoughts

    Speaking in front of so many engineering leaders was amazing and I spent the rest of the day winding down talking to other speakers, audience members, sponsors, and even some potential business partners.

    When the recording came online, I was expecting the worst. But other than looking down at my notes a bit too much, I’m actually really proud of how it turned out. Once again, @whiteoctevents did an amazing job with everything.

    I know for sure that I have grown in so many ways from this experience and I plan to speak again. The personal benefits of going through this entire journey are immense and I highly recommend giving it a try. I hope writing down my journey helps you on your journey.