<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matheus Albuquerque</title>
    <description>The latest articles on DEV Community by Matheus Albuquerque (@ythecombinator).</description>
    <link>https://dev.to/ythecombinator</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F172721%2F8c3b535a-7efb-415a-ba38-d9a6eb710d25.png</url>
      <title>DEV Community: Matheus Albuquerque</title>
      <link>https://dev.to/ythecombinator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ythecombinator"/>
    <language>en</language>
    <item>
      <title>2022 Wrapped: Communities, Public Speaking, and Other DevRel Stuff From a Non-DevRel Engineer</title>
      <dc:creator>Matheus Albuquerque</dc:creator>
      <pubDate>Thu, 29 Dec 2022 14:56:27 +0000</pubDate>
      <link>https://dev.to/ythecombinator/2022-wrapped-communities-public-speaking-and-other-devrel-stuff-from-a-non-devrel-engineer-2403</link>
      <guid>https://dev.to/ythecombinator/2022-wrapped-communities-public-speaking-and-other-devrel-stuff-from-a-non-devrel-engineer-2403</guid>
      <description>&lt;p&gt;It’s that epiphany time of the year, again! But, before, a bit of an introduction!&lt;/p&gt;

&lt;p&gt;My passion for developer communities started back in 2014-15 when I first experienced in my hometown (Fortaleza, Brazil) tons of developers meeting in their off hours to discuss their hot takes in the front-end realm back then—HTML5, canvas, Three.js experiments, CoffeeScript, Web Components, Ionic, and Angular to name a few—, challenges they’ve encountered, and different ways of doing things.&lt;/p&gt;

&lt;p&gt;This passion only grew over time, but all of these were hit hard by the pandemics—just like the entire rest of the world, unfortunately. &lt;/p&gt;

&lt;p&gt;I don't know you, but, especially in 2022, I feel all about celebrating the endless ways that thousands of front-end/back-end engineers, UI/UX folks, and overall creators of the web, connected in meetups and conferences throughout the whole year.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Expect Here
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;TLDR: Matheus' very own Hitchhiker's Guide to the Front-End Conferences, 2023 edition.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’ve managed to present a few talks that I think went well, and I decided to share what's worked for me in my process of preparing a tech session.&lt;/p&gt;

&lt;p&gt;Furthermore, throughout this year—in late 2021, to be honest—, I started running a new personal set of practices for organizing my participation in developer conferences—something I found to be even trickier if your official job position is not to be developer relations—and I'd say things went well too!&lt;/p&gt;

&lt;p&gt;Last but not least, I've been to some really amazing conferences and, IMHO, many things went quite well!&lt;/p&gt;

&lt;p&gt;So, that's what this post is about: sharing some lessons learned, a lot of &lt;em&gt;“that went well”&lt;/em&gt; and other exciting stuff.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Speakers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Preparing Sessions
&lt;/h3&gt;

&lt;p&gt;There's nothing set in stone here, and I'd say every speaker has their own very personal tricks &amp;amp; tips. Of course, there are always some common denominators across great sessions, like having a concise idea, a clear execution, etc.—but you probably know that.&lt;/p&gt;

&lt;p&gt;I thought of sharing here some practices I did throughout 2022 more than in any other year that I consider to play a key role in the execution of my talks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Better Structuring The Session
&lt;/h4&gt;

&lt;p&gt;One great thing I've always overlooked is having a good, concise, outline of the presentation from the very beginning.&lt;/p&gt;

&lt;p&gt;I'd say this practice has an easy adoption: you can start with a vague outline, continuously work on it and throughout the process, it's going to help you fill out a lot of gaps and build out the content for each of your sections until there are no blank spaces left.&lt;/p&gt;

&lt;p&gt;Overall, the structure will be more digestible in the end, not only for you but also for the program committees of the conferences you're submitting to, as many of them—e.g., GitNation and CityJS conferences—actually ask for an outline including a more detailed description of the shape and structure of your talk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0q5p075k9ngbg7wvl6x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0q5p075k9ngbg7wvl6x.jpeg" alt="Multiple CFPs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When building the outline, I often structure the presentation following the &lt;a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/TheHerosJourney" rel="noopener noreferrer"&gt;“Hero’s Journey” pattern&lt;/a&gt;. It's a classic story structure, often employed in literature and film, that follows the tale of a protagonist as they embark on a transformative journey.&lt;/p&gt;

&lt;p&gt;Here's an example from my “&lt;a href="https://www.ythecombinator.space/talks/web-performance-apis-you-probably-didnt-know-existed" rel="noopener noreferrer"&gt;Web Performance APIs That You (Probably) Never Knew Existed&lt;/a&gt;” session:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An initial conflict&lt;/strong&gt;: A section that usually goes by &lt;em&gt;“A Little Bit of Context”&lt;/em&gt; or &lt;em&gt;“Why Am I Here?”&lt;/em&gt;. In this talk, the initial conflict is &lt;em&gt;“I know this set of performance best practices, and yet, I've seen these problems with our loading times metrics via Real User Monitoring.”&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hero’s setup&lt;/strong&gt;: Here, we're making the audience think about our journey, with topics like web performance metrics and our path of investigating native APIs for collecting and improving performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Energy peak&lt;/strong&gt; where we beat the villain—bad perceived performance. In this talk, these peaks frequently happen after the audience sees a given technique and how it improved something, with examples and numbers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Epiphany-alike closing ideas&lt;/strong&gt; that will bring an enlightening realization that our performance problems can be understood from a new and more profound perspective. In this talk, there are two sections responsible for this: &lt;em&gt;“Why are we here?”&lt;/em&gt;, which promotes the reflection on why we should care about perceived performance in the first place. Here, we have resources like impacting numbers and statistics about browsers, quality of connection, devices, etc., previous research about how this impacts people’s emotions, and studies on how to correlate them all with business metrics. The other one is &lt;em&gt;“Closing Notes”&lt;/em&gt; where we wrap up with some key takeaways from the session.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my personal experience, building the session within this framework makes it more interesting, increases audience engagement and in general, helps the messaging be more successful.&lt;/p&gt;

&lt;h4&gt;
  
  
  Dry Runs
&lt;/h4&gt;

&lt;p&gt;Back when I had my college entrance exams, I'd draft the whole essay idea on a separate piece of paper and that'd go around 50/60 lines of text. Then, I'd go through the whole outline and key parts and cut it down to the allowed limit of 30 lines.&lt;/p&gt;

&lt;p&gt;Once the first MVP—aka. &lt;em&gt;Minimum Viable Presentation&lt;/em&gt;—version of the session is ready, I run it for the first time. And, just like those essays in high school, the first run is always larger than the allowed limit! So, this part is a lot about cutting off the outline, tweaking the slides, and iterating again.&lt;/p&gt;

&lt;p&gt;When I feel I have the first “pre-release” of the session, I reach out to a few friends, schedule dry runs with them, and pretend it's the first time. I have a fixed list of people I always go with—a huge shoutout to &lt;a href="https://twitter.com/bmacabeus" rel="noopener noreferrer"&gt;Macabeus&lt;/a&gt;, &lt;a href="https://twitter.com/tsirlucas" rel="noopener noreferrer"&gt;Lucas&lt;/a&gt;, and &lt;a href="https://twitter.com/falcaoaugustos" rel="noopener noreferrer"&gt;Augusto&lt;/a&gt;—and who always provide great feedback on different areas, like the overall visual aspect, my selection of information and ideas, coherence throughout the session, the chosen level of detail and many others!&lt;/p&gt;

&lt;p&gt;Last but not least, whenever I get an existing session approved for another event with a different time slot, I also run again—this time, only on my own—to understand how much I’ll need to cut. Usually, two scenarios fit here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sessions that are originally 45/50/60 minutes long—mostly tailored for general-purpose conferences which have long slots, like the NDC events—and need to be cut to fit front-end/React conferences with slots like 25/30 minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sessions that were 50/60 minutes long on my first rehearsals, had to be shrunk to fit 25/30 minute slots and then got approved to larger slots and need to be adapted again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Audience Interactions
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxhv2lxmi8q8ejxztia0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxhv2lxmi8q8ejxztia0.jpg" alt="Audience raising hands at React Day Berlin 2022" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, there's another practice that I've seen to increase audience engagement is to turn your presentation into an open dialogue.&lt;/p&gt;

&lt;p&gt;I'd say there are a few different ways you can do this here:&lt;/p&gt;

&lt;h5&gt;
  
  
  #1 Contextualization Questions
&lt;/h5&gt;

&lt;p&gt;Here you get to understand your audience's technical background. Examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;checking who's familiar with modern front-end development in a &lt;strong&gt;generic IT conference&lt;/strong&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;checking how much of your audience are advanced React engineers in a &lt;strong&gt;generic front-end&lt;/strong&gt; conference;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;checking who's familiar with a specific bundler, testing library, etc. in a &lt;strong&gt;React conference&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few simple &lt;em&gt;“raise your hands”&lt;/em&gt; questions might sound almost like sharing the mic with every attendee and give you powerful insights to guide your whole presentation strategy, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;how much time you should invest in explaining a given topic;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;whether you should spend some time addressing necessary previous knowledge;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;whether you should focus on diving deep into every aspect of one topic or providing just an overview with a high-level, example-driven, approach.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recent examples of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In &lt;a href="https://frontmania.com/" rel="noopener noreferrer"&gt;Frontmania 2022&lt;/a&gt;, I found out that a considerable part of the audience was working mostly with Angular and Vue. Even though they had knowledge of React, given that my session (“&lt;a href="https://www.ythecombinator.space/talks/inside-fiber-the-in-depth-overview-you-wanted-a-tldr-for" rel="noopener noreferrer"&gt;Inside Fiber: the in-depth overview you wanted a TLDR for&lt;/a&gt;”) was a deep dive into the internals, I had to provide some extra context in some situations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;a href="https://www.buildstuff.events/" rel="noopener noreferrer"&gt;Build Stuff 2022&lt;/a&gt;, I realized about 40% of my audience were primarily back-end engineers. Although my talk was framework-agnostic, in some examples, I had React components. Because I was aware a huge percentage of them probably didn't have a lot of familiarity with React, I spent some extra time in these slides, detailing what was happening there.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  #2 Open Discussion Questions
&lt;/h5&gt;

&lt;p&gt;These are probably my favorite ones because you can always spark exciting discussions and make the messaging of your talk more successful by gathering audience opinions and hot takes on a specific topic. I've done this a few times in my sessions, usually with tricky mental exercises:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“If you were to summarize web performance in one metric, what’d be your pick?”&lt;/em&gt; I asked during my session “&lt;a href="https://www.ythecombinator.space/talks/web-performance-apis-you-probably-didnt-know-existed" rel="noopener noreferrer"&gt;Web Performance APIs That You (Probably) Never Knew Existed&lt;/a&gt;”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“If you were to summarize Concurrent React in one word/expression, what’d be your pick?”&lt;/em&gt; during “&lt;a href="https://www.ythecombinator.space/talks/deep-diving-on-concurrent-react" rel="noopener noreferrer"&gt;Deep diving on Concurrent React&lt;/a&gt;”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This also allows you to run detailed reports and analyze the results after the conference. Then you can power the content/structure decisions we discussed a few paragraphs above for the upcoming talks with actual data/input from your audience.&lt;/p&gt;

&lt;p&gt;In the example of the Concurrent React session, I was able to draft a few conclusions on top of the results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There’s still a lot of confusion around &lt;em&gt;“parallelism”&lt;/em&gt;, &lt;em&gt;“multithreading”&lt;/em&gt;, and &lt;em&gt;“workers”&lt;/em&gt; vs the actual cooperative, single-rendering-threaded, model. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Results like &lt;em&gt;“pointless”&lt;/em&gt;, &lt;em&gt;“madness”&lt;/em&gt;, and &lt;em&gt;“difficult”&lt;/em&gt;, IMHO, show that it's still not clear how all the features fit together just by looking at the individual pieces.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These will turn into long-term insights you can also use to engage the audience after the session, like when I built a report around the impressions above of React engineers over the new Concurrent React features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57at80vji3zqa1gq18j4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57at80vji3zqa1gq18j4.jpg" alt="Poll results" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depending on what you use for your speaker decks, there are different technologies you can choose to allow your audience to watch results come in live on the big screen. The best option I've found so far for Keynote was the &lt;a href="https://www.polleverywhere.com" rel="noopener noreferrer"&gt;Poll Everywhere&lt;/a&gt; plugin, which is also available for other platforms like PowerPoint and Google Slides.&lt;/p&gt;

&lt;p&gt;Last but not least, this strategy is also great because it works whether you present virtually, in person, or in a hybrid environment—which is getting more and more common in this post-pandemic era.&lt;/p&gt;

&lt;h5&gt;
  
  
  #3 Tech Trivia Questions
&lt;/h5&gt;

&lt;p&gt;I got this technique by watching a session about tricky/unexpected JavaScript behaviors—something along the lines of &lt;a href="https://www.destroyallsoftware.com/talks/wat" rel="noopener noreferrer"&gt;Wat&lt;/a&gt;—by &lt;a href="https://twitter.com/bmacabeus" rel="noopener noreferrer"&gt;Macabeus&lt;/a&gt; about two years ago, where he would play with the audience using a live Kahoot trivia game. &lt;/p&gt;

&lt;p&gt;I admit I loved the idea so much I decided to do something similar with my colleagues at Citrix back then, and I put their knowledge about JavaScript to the test with a similar, five-questions-based-quiz, session in one of our internal front-end meetings. We had some nerdy fun in the process and the feedback was great! &lt;/p&gt;

&lt;p&gt;I never got another chance to prepare something similar ever since, but the technique happened to be of great help this year at &lt;a href="https://reactalicante.es" rel="noopener noreferrer"&gt;React Alicante&lt;/a&gt;, in September. I managed to convince Medallia to sponsor the conference—mostly to raise our awareness and brand visibility among the Spanish front-end community—and, as a part of the sponsorship packages, we got a booth at the venue.&lt;/p&gt;

&lt;p&gt;During the ideation of the activities we'd be doing at the booth, the Kahoot idea popped up again and we decided to give it a try. We prepared some trivia React/TypeScript questions, targeting different seniority levels, and the result went way better than expected!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxmdxf0kslet8b1niljd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxmdxf0kslet8b1niljd.jpg" alt="Tech Trivia at React Alicante" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone was hyped to test how much they knew about these technologies and learn a thing or two. The numbers went like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~90 people playing the trivia;&lt;/li&gt;
&lt;li&gt;~10 rounds played during the coffee breaks;&lt;/li&gt;
&lt;li&gt;70+ Medallia t-shirts given away as prizes;&lt;/li&gt;
&lt;li&gt;12+ people filled out the form for working with us.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am looking forward to my next opportunity to try live tech quizzes again!&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding Events
&lt;/h3&gt;

&lt;p&gt;One of the questions I get the most is how I manage to be aware of so many events and their Call For Papers.&lt;br&gt;
Well, luckily enough, there are plenty of resources out there where one can hear about conferences. My list includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confs.tech" rel="noopener noreferrer"&gt;https://confs.tech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.events" rel="noopener noreferrer"&gt;https://dev.events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.speakerhouse.io/events" rel="noopener noreferrer"&gt;https://app.speakerhouse.io/events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sessionize.com" rel="noopener noreferrer"&gt;https://sessionize.com&lt;/a&gt; (More specifically, it's &lt;em&gt;“Discover Events”&lt;/em&gt; tab that speakers have access to)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Orchestrating Sessions ∩ Events
&lt;/h3&gt;

&lt;p&gt;Okay, now that we discussed the ideation process of a session and where to find events to present your fantastic talk at, we can explore the next step which is: how to coordinate the whole process of submitting different sessions across different events in different parts of the globe!&lt;/p&gt;

&lt;h4&gt;
  
  
  The Old Fashion
&lt;/h4&gt;

&lt;p&gt;First, I'd like to share my strategy for 2019-20. I had a Trello board with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Four different lists&lt;/strong&gt;: &lt;em&gt;Proposals&lt;/em&gt;, &lt;em&gt;Submitted&lt;/em&gt;, &lt;em&gt;Rejected&lt;/em&gt;, and &lt;em&gt;Approved&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Labels&lt;/strong&gt; representing the conferences/meetups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cards&lt;/strong&gt; representing the sessions that I'd copy-paste all over the four different categories above and label them accordingly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvf344urckrh5s1oawwo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvf344urckrh5s1oawwo.png" alt="Trello: Board with all the sessions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You could then think I'd have information for each of the sessions stored within the card for that session, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr6ameb5t0tv3q2ow50p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr6ameb5t0tv3q2ow50p.png" alt="Trello: Card for one session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nope! It turns out that Trello didn't have support for rich text descriptions of the cards back then. This was a dealbreaker for me, given that, when submitting a proposal, most of the conferences ask you for more information than a simple title/abstract pair; it's fairly common to get prompted for stuff like an &lt;strong&gt;elevator pitch&lt;/strong&gt;, &lt;strong&gt;keywords&lt;/strong&gt;, &lt;strong&gt;target audience&lt;/strong&gt;, &lt;strong&gt;required knowledge of participants&lt;/strong&gt;, etc.&lt;/p&gt;

&lt;p&gt;To suppress this lack of &lt;em&gt;RTE&lt;/em&gt; support, I started then using Trello alongside Google Documents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjyz2icfwp4i1ctjs838.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjyz2icfwp4i1ctjs838.png" alt="Google Docs: Session details" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, I had another Google Document where I'd keep my personal data useful for submitting, like current location, position, company, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4at8qfet2p1utmhr2fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4at8qfet2p1utmhr2fi.png" alt="Google Docs: Personal details" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wasn't happy with the way things were going already—it simply didn't scale—and when I faced myself about to add a third app to the equation (Google Calendar), I decided it was about time to shift to something else.&lt;/p&gt;

&lt;h4&gt;
  
  
  The New Fashion
&lt;/h4&gt;

&lt;p&gt;There are a lot of productivity apps on the market. I had a shortlist of some of them that included Monday, ClickUp, Evernote, and Airtable.&lt;/p&gt;

&lt;p&gt;Because I was using Notion already to organize some personal stuff like traveling, I decided to give it a try as my all-in-one sessions ↔ conferences solution.&lt;/p&gt;

&lt;p&gt;I start from the main sources I listed in the section above—I do check other websites, but these are the best ones IMHO. I then gather and reconcile all the data in Notion. It looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh3skltosd57uof1yjye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh3skltosd57uof1yjye.png" alt="Notion: All sessions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This also helps me organize their status on a calendar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlo37dr142pdm0v6xp84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlo37dr142pdm0v6xp84.png" alt="Notion: Calendar" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, I track which sessions I submitted to a given event so that I can get a better understanding of the actual profile of this conference and what kind of topics they tend to approve/reject.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5jnt4rlsgdnayxt732e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5jnt4rlsgdnayxt732e.png" alt="Notion: Info for each session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To be honest, I am still iterating on this approach but so far, I've enjoyed the experience! Among other stuff, I'd highlight in Notion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's got huge flexibility and a delightful user experience;&lt;/li&gt;
&lt;li&gt;It's free for personal use;&lt;/li&gt;
&lt;li&gt;It does have some tools that enable you to have a certain level of project and task management in one place.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  For Conference Organizers
&lt;/h2&gt;

&lt;p&gt;I have been involved in the organization of meetups and other small events in my hometown back in 2015-18, but I never really got to organize anything for more than 100 people. Given that, my views here are more biased as both an attendee and a speaker, but not an organizer.&lt;/p&gt;

&lt;p&gt;There are a bunch of different practices that result in a remarkable conference experience and I would never come up with an exhaustive list, but here are some things that certainly would make your event great!&lt;/p&gt;

&lt;h3&gt;
  
  
  Budget
&lt;/h3&gt;

&lt;p&gt;First and foremost, ensure you have all the basic stuff to be covered by your budget, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;all the speaker expenses (traveling tickets, accommodation close to the conference venue, commute from the airport to the hotel, etc.);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;speaker dinners and other fun activities;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;proper A/V and room setup (LED displays, proper lighting, etc.);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;food &amp;amp; drinks for everyone;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;staff—of course, here I mean those who are not volunteer work from the community.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Audience Demographics
&lt;/h3&gt;

&lt;p&gt;Now that's something I had never seen in a conference and I have to say it was just an incredible idea by the &lt;a href="https://www.reactindia.io" rel="noopener noreferrer"&gt;React India team&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;A few weeks before the event, they shared some anonymous statistics describing the audience, which included in-person and online attendance numbers, seniority levels (ranging from beginner to expert), and companies they were coming from.  &lt;/p&gt;

&lt;p&gt;This demographic analysis is really helpful for speakers to consider their content beforehand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple Feedback System
&lt;/h3&gt;

&lt;p&gt;In my opinion, that's something most of the front-end/React events should learn from multipurpose development ones. &lt;/p&gt;

&lt;p&gt;Usually, what you see out there are either some digital surveys emailed to the attendees or feedback gathered in apps like Eventee. Although these are great for more complex analysis and fancy stuff like weighted averages, what I notice is that unfortunately, only very few attendees take the time to fill out some sort of survey, no matter if that's during or after the conference.&lt;/p&gt;

&lt;p&gt;I've always wondered what would be a better way to do that—not necessarily a replacement, perhaps a complementary solution—, until I went to &lt;a href="https://devconf.pl/" rel="noopener noreferrer"&gt;DevConf PL&lt;/a&gt; and saw that they had ballot drop boxes available for feedback during the talks. Throughout the year, I then realized that it seems to occur regularly in back-end driven events or generic software development ones, after seeing the same system in conferences like &lt;a href="https://ndcoslo.com/" rel="noopener noreferrer"&gt;NDC Oslo&lt;/a&gt; or &lt;a href="https://www.buildstuff.events/" rel="noopener noreferrer"&gt;Build Stuff&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The voting ballots were colorful cards (🟢 Green / 🟡 Yellow / 🔴 Red) outside the room. They are counted after each of the sessions and then each speaker gets an email after the conference wraps up with their numbers.&lt;/p&gt;

&lt;p&gt;That simple!&lt;/p&gt;

&lt;h2&gt;
  
  
  Accomplishments
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmp8uhldih8zytw02365d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmp8uhldih8zytw02365d.jpg" alt="Me out there" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd say this year brought a lot of new experiences and a ton of wins! I know this post is a bit long already, but I will share a few of them as I feel fortunate and proud of them. Here you'll find some of those mentioned wins and also some not-so-great results.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I helped draft a developer communities program at Medallia from almost nothing with a fantastic crew and we went from zero to sponsoring three conferences: &lt;a href="https://devconf.pl" rel="noopener noreferrer"&gt;DevConf 2022&lt;/a&gt;, &lt;a href="https://dev.toReact%20India%202022"&gt;React India 2022&lt;/a&gt; and &lt;a href="https://reactalicante.es" rel="noopener noreferrer"&gt;React Alicante 2022&lt;/a&gt;. We learned a lot together and are still evolving. This is our Spanish squad in React Alicante! 🤩&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx1h1qn3kz9luweuoh0b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjx1h1qn3kz9luweuoh0b.jpg" alt="Medallia at React Alicante" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I crafted eight different sessions, and four of them I managed to present throughout the year.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I submitted to &lt;strong&gt;41 conferences&lt;/strong&gt; in &lt;strong&gt;25 locations&lt;/strong&gt;—online + 24 countries—and 34 cities. Out of these:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;😅 In &lt;strong&gt;16&lt;/strong&gt; of them, I was not accepted.&lt;/p&gt;

&lt;p&gt;🤩 In &lt;strong&gt;13&lt;/strong&gt; of them I was approved and I managed to deliver the presentation successfully.&lt;/p&gt;

&lt;p&gt;🤦 In &lt;strong&gt;8&lt;/strong&gt; of them, I never heard back from the organization/committee. IMHO, this is a red flag that shows a considerable lack of respect for anyone who spent some time writing down ideas and filling up CFP processes.&lt;/p&gt;

&lt;p&gt;😥 In &lt;strong&gt;4&lt;/strong&gt; of them I was approved, but I had to withdraw my submission for various reasons (e.g., because of calendar conflicts or personal issues).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I traveled to &lt;strong&gt;10 different countries&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was invited to &lt;strong&gt;two podcasts&lt;/strong&gt;, one in English and one in Portuguese—these are yet to be published.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was invited to write &lt;strong&gt;one magazine article&lt;/strong&gt; about web performance. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I improved my overall skills in writing/reviewing CFPs and preparing other less-experienced speakers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Last but not least, I met dozens of amazing people who are now friends and who I'm already hyped to see again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing Time…
&lt;/h2&gt;

&lt;p&gt;Finally, I'd love to wish all of you out there a great Holiday Season! Happy Holidays and a Happy New Year, everyone! &lt;/p&gt;

&lt;p&gt;See you all in 2023! 🎆&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>angular</category>
      <category>jquery</category>
    </item>
    <item>
      <title>Driving Towards a Universal Navigation Strategy in React</title>
      <dc:creator>Matheus Albuquerque</dc:creator>
      <pubDate>Mon, 13 Jan 2020 13:48:09 +0000</pubDate>
      <link>https://dev.to/ythecombinator/driving-towards-a-universal-navigation-strategy-in-react-j60</link>
      <guid>https://dev.to/ythecombinator/driving-towards-a-universal-navigation-strategy-in-react-j60</guid>
      <description>&lt;p&gt;When I joined &lt;a href="https://www.strv.com"&gt;STRV&lt;/a&gt;, they had a specific request for me; to build a front-end app for iOS, Android, and Web, sharing component and business logic among all the platforms.&lt;/p&gt;

&lt;p&gt;Since I’m a front-end developer who loves new areas, I couldn’t say no, and I had to jump at the opportunity.&lt;/p&gt;

&lt;p&gt;I ended up facing a variety of challenges; from lack of real-world-scenarios content related to React Native Web to unexpected lack of documented stuff on popular projects, to struggling to build some platform-specific modules.&lt;/p&gt;

&lt;p&gt;And this post is focused on – a very important – part of this journey: building a navigation solution.&lt;/p&gt;

&lt;p&gt;But first…&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit of context
&lt;/h2&gt;

&lt;p&gt;I had only worked on an example React Native app before (uncompiled and unpublished). At the time of this project, I didn’t know much about React Native, to be honest.&lt;/p&gt;

&lt;p&gt;I first heard of &lt;a href="https://expo.io/"&gt;Expo&lt;/a&gt; and its experimental web support&lt;sup&gt;1&lt;/sup&gt; but I decided not to go for it mostly because I enjoy having control over the project stack and being aware of what's happening; I want to be able to customize the installation, install custom versions of modules and have more control of project dependencies.&lt;/p&gt;

&lt;p&gt;I then heard of two other initiatives on Github: &lt;a href="https://github.com/necolas/react-native-web"&gt;ReactNative for Web&lt;/a&gt; and &lt;a href="https://github.com/microsoft/reactxp"&gt;ReactXP&lt;/a&gt;. Both share similar goals but the approaches differ. As the official documentation for ReactXP states:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ReactXP is a layer that sits on top of React Native and React, whereas React Native for Web is a parallel implementation of React Native — a sibling to React Native for iOS and Android.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This post won't focus on covering the differences between these two but, after going through some technical blog posts and talks, we ended up going for ReactNative for Web.&lt;/p&gt;

&lt;p&gt;After a bit of digging into articles and trying to implement each environment in its own realm, I found that for me, the best starting point was a great template, called &lt;a href="https://github.com/brunolemos/react-native-web-monorepo"&gt;react-native-web-monorepo&lt;/a&gt;&lt;sup&gt;2&lt;/sup&gt;, which brings support for universal apps using a little help from &lt;a href="https://yarnpkg.com/lang/en/docs/workspaces/"&gt;Yarn Workspaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before starting to implement this approach into your project, though, I would suggest reviewing your requirements and checking whether these tools solve all of your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we have out there
&lt;/h2&gt;

&lt;p&gt;Some popular routing solutions on the React.js ecosystem were not meant to support both DOM and native environments; &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s are different from &lt;code&gt;&amp;lt;View&amp;gt;&lt;/code&gt;s, &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;s are different from &lt;code&gt;&amp;lt;FlatList&amp;gt;&lt;/code&gt;s and most of the web primitives are different from the mobile ones – which makes it difficult to come up with a universal solution. &lt;a href="https://reach.tech/router"&gt;@reach/router&lt;/a&gt; is one example of web solutions that have opted not to face the challenges of supporting both environments.&lt;/p&gt;

&lt;p&gt;As of now (January 2020), though, we have a few ready universal web/native formulas. But they all ended not serving completely our needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ReactTraining/react-router"&gt;react-router&lt;/a&gt; is a great option for the web, but when on &lt;a href="https://reacttraining.com/react-router/native"&gt;mobile&lt;/a&gt;, it lacks screen transitions, modals, navbar, back-button support, and other essential navigation primitives.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://reactnavigation.org/"&gt;react-navigation&lt;/a&gt; suits great on mobile but given its &lt;a href="https://reactnavigation.org/docs/en/web-support.html"&gt;web&lt;/a&gt; support is still considered to be experimental – and has not yet been widely used in production – it's very likely you're going to face a few issues&lt;sup&gt;3&lt;/sup&gt; related to history and query parameters. Also, it lacked TypeScript typings – which made me write part of the definitions on my own since TypeScript was a must-have for the project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And this brings us to the next part!&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking of a solution
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The code from this post is available on GitHub: &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation"&gt;ythecombinator/react-native-web-monorepo-navigation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I admit one of the most puzzling things when we dived into this journey was not being able to find how popular apps out there using React Native for Web (e.g. Twitter, Uber Eats and all the others mentioned &lt;a href="https://github.com/necolas/react-native-web#react-native-for-web"&gt;here&lt;/a&gt;) are doing navigation – and how they faced challenges like the ones I mentioned before.&lt;/p&gt;

&lt;p&gt;So we had to work on our own!&lt;/p&gt;

&lt;p&gt;Our new solution was based on abstracting on top of the most recent releases of react-router-dom&lt;sup&gt;4&lt;/sup&gt; and react-navigation&lt;sup&gt;5&lt;/sup&gt;. Both evolved a lot and now them two seem to share a few goals which I consider to be key-decisions for properly doing navigation/routing in React:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hooks-first API&lt;/li&gt;
&lt;li&gt;Declarative way to implement navigation&lt;/li&gt;
&lt;li&gt;First-class types with TypeScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given that, we came up with a couple of utils and components which aim a universal navigation strategy:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/blob/master/packages/components/src/utils/navigation"&gt;&lt;code&gt;utils/navigation&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Exposes two hooks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useNavigation&lt;/code&gt;: which returns a &lt;code&gt;navigate&lt;/code&gt; function that gets a route as a first param and parameters as other arguments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can be used like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useNavigation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../utils/navigation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Our routes mapping – we'll be discussing about this one in a minute&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../utils/router&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;navigate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useNavigation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Using the `navigate` method from useNavigation to go to a certain route&lt;/span&gt;
  &lt;span class="nx"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;codeSharing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also provides you with a few other known routing utilities like &lt;code&gt;goBack&lt;/code&gt; and &lt;code&gt;replace&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useRoute&lt;/code&gt;: which returns some data about the current route (e.g. &lt;code&gt;path&lt;/code&gt; and &lt;code&gt;params&lt;/code&gt; passed to that route).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is how it could be used to get the current &lt;code&gt;path&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useRoute&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../utils/navigation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRoute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// This will log:&lt;/span&gt;
  &lt;span class="c1"&gt;// '/features/code-sharing' on the web&lt;/span&gt;
  &lt;span class="c1"&gt;// 'features_code-sharing' on mobile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/tree/master/packages/components/src/utils/router"&gt;&lt;code&gt;utils/router&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This basically contains a &lt;code&gt;routes&lt;/code&gt; object – which contains different paths and implementations for each platform – that can be used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigating with &lt;code&gt;useNavigation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Switching logic based on the current route with &lt;code&gt;useRoute&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Specifying the &lt;code&gt;path&lt;/code&gt; – and some extra data – of each route rendered by the &lt;code&gt;Router&lt;/code&gt; component&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/tree/master/packages/components/src/Link"&gt;&lt;code&gt;components/Link&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;It provides declarative navigation around the application. It is built on top of &lt;code&gt;Link&lt;/code&gt; from &lt;code&gt;react-router-dom&lt;/code&gt; &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/blob/master/packages/components/src/Link/index.web.tsx"&gt;on web&lt;/a&gt; and &lt;code&gt;TouchableOpacity&lt;/code&gt; + &lt;code&gt;useNavigation&lt;/code&gt; hook &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/blob/master/packages/components/src/Link/index.native.tsx"&gt;on mobile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Just like &lt;code&gt;Link&lt;/code&gt; from &lt;code&gt;react-router-dom&lt;/code&gt;, it can be used like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../Link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../utils/router&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;webSupport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Check "Web support via react-native-web"&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/tree/master/packages/components/src/Router"&gt;&lt;code&gt;components/Router&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is the router itself. On the web, it's basically a &lt;code&gt;BrowserRouter&lt;/code&gt;, using &lt;code&gt;Switch&lt;/code&gt; to pick a route. On mobile, it's a combination of both &lt;code&gt;Stack&lt;/code&gt; and &lt;code&gt;BottomTab&lt;/code&gt; navigators.&lt;/p&gt;

&lt;p&gt;Wrapping up everything above, what you get is going through each &lt;a href="https://github.com/ythecombinator/react-native-web-monorepo-navigation/tree/master/packages/components/src/screens"&gt;screen&lt;/a&gt; of the app and seeing how &lt;code&gt;useRoute()&lt;/code&gt;, &lt;code&gt;useNavigation()&lt;/code&gt; and &lt;code&gt;&amp;lt;Link /&amp;gt;&lt;/code&gt; can be used regardless of the platform you are.&lt;/p&gt;

&lt;p&gt;If I was asked about future work on this, I'd mention as next steps:&lt;/p&gt;

&lt;p&gt;1) Adding more utilities – e.g. a &lt;code&gt;Redirect&lt;/code&gt; component aiming at a more declarative navigation approach&lt;sup&gt;6&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;2) Tackling edge cases on both platforms&lt;/p&gt;

&lt;p&gt;3) Reorganizing most of the things inside a navigation library and leaving only the main &lt;code&gt;Router&lt;/code&gt; component and &lt;code&gt;utils/router&lt;/code&gt; to be written on the application side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;My feeling is that web, mobile web, and native application environments all require a specific design and user experience&lt;sup&gt;7&lt;/sup&gt; – and by the way, this matches the mentioned &lt;em&gt;“learn once, write anywhere”&lt;/em&gt; &lt;a href="https://reactjs.org/blog/2015/03/26/introducing-react-native.html"&gt;philosophy behind React Native&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although codesharing is a great advantage to React and React Native, I'd say that it is very likely that shared cross-platform code should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business Logic&lt;/li&gt;
&lt;li&gt;Config files, translation files, and most constant data – those that are not render-environment-specific&lt;/li&gt;
&lt;li&gt;API / Formatting; e.g. API calls, authentication and formatting of request and response data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few other layers of the app, like routing, should use a library that is most appropriate for the platform, i.e. &lt;code&gt;react-router-dom&lt;/code&gt; for web, and &lt;code&gt;react-navigation&lt;/code&gt; or similar for native.&lt;/p&gt;

&lt;p&gt;Perhaps in the future, we can have a truly unified code base, but for now, it doesn't feel like the technology is ready and the approach shared here seemed to be the most suitable one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;p&gt;1) There's an amazing &lt;a href="https://www.youtube.com/watch?v=k1FdrhA2sCY"&gt;talk by Evan Bacon on Expo for Web&lt;/a&gt; this year at Reactive Conf – if you haven't checked it out, I really recommend you to.&lt;/p&gt;

&lt;p&gt;2) This one was authored and is the same used by Bruno Lemos, the author of &lt;a href="https://devhubapp.com/"&gt;DevHub&lt;/a&gt;, a Github client that runs on Android, iOS, Web, and Desktop with 95%+ code sharing between them. If you're interested in how he came up with this solution, check &lt;a href="https://dev.to/brunolemos/tutorial-100-code-sharing-between-ios-android--web-using-react-native-web-andmonorepo-4pej"&gt;this&lt;/a&gt; out.&lt;/p&gt;

&lt;p&gt;3) These issues include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functionality-wide

&lt;ul&gt;
&lt;li&gt;Query parameters from URL not passed down (&lt;a href="https://github.com/react-navigation/web/issues/45"&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pushing back not working (&lt;a href="https://github.com/react-navigation/web/issues/22"&gt;here&lt;/a&gt; and &lt;a href="https://github.com/react-navigation/web/issues/41"&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Some params pushed from one route to the other for convenience being encoded to the URL&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Developer-experience-wide

&lt;ul&gt;
&lt;li&gt;Lack of TypeScript typings (&lt;a href="https://github.com/react-navigation/web/issues/34"&gt;here&lt;/a&gt;) – which made me write part of the definitions on my own&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4) &lt;a href="https://reacttraining.com/blog/react-router-v5/"&gt;React Router v5&lt;/a&gt; focused mostly on introducing structural improvements and a few new features. But then &lt;a href="https://reacttraining.com/blog/react-router-v5-1/"&gt;v5.1&lt;/a&gt; brought a bunch of some useful hooks which allowed us to implement the mentioned ones for the web.&lt;/p&gt;

&lt;p&gt;5) &lt;a href="https://blog.expo.io/announcing-react-navigation-5-0-bd9e5d45569e"&gt;React Navigation v5&lt;/a&gt; also did many efforts for bringing a modern, hooks-first API, allowed us to implement the mentioned ones for mobile.&lt;/p&gt;

&lt;p&gt;6) There's a very good post about doing declarative and composable navigation with &lt;code&gt;&amp;lt;Redirect /&amp;gt;&lt;/code&gt; &lt;a href="https://tylermcginnis.com/react-router-programmatically-navigate/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;7) If you're interested in this topic, in &lt;a href="https://www.ythecombinator.space/talks/code-sharing-at-scale-one-codebase-for-web-mobile-and-desktop"&gt;this talk&lt;/a&gt; I share a couple of lessons learned while building an app with code sharing as a primary objective — from project setup, through shared infrastructure, all the way up to shared components and styling — and how you can achieve the same thing.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>reactrouterdom</category>
      <category>reactnavigation</category>
    </item>
    <item>
      <title>It's All About Trusting the Magic of Beginnings</title>
      <dc:creator>Matheus Albuquerque</dc:creator>
      <pubDate>Fri, 12 Jul 2019 07:59:22 +0000</pubDate>
      <link>https://dev.to/ythecombinator/it-s-all-about-trusting-the-magic-of-beginnings-3flf</link>
      <guid>https://dev.to/ythecombinator/it-s-all-about-trusting-the-magic-of-beginnings-3flf</guid>
      <description>&lt;p&gt;After almost two years immersed in countless exciting challenges, it's time to move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Journey in a Nutshell
&lt;/h2&gt;

&lt;p&gt;One of the funniest things, when I started working at &lt;a href="https://beakyn.com" rel="noopener noreferrer"&gt;Beakyn&lt;/a&gt;, was realizing that every single piece of code I wrote would run in thousands of computers around America. Up to that moment in my career, I had only worked on small local startups, where the impact of their products had way smaller proportions.&lt;/p&gt;

&lt;p&gt;At Beakyn, I had the chance to contribute to a couple of projects that impacted the whole assets inventory management and audience demographic analysis lifecycle of our client, &lt;a href="https://www.outfrontmedia.com" rel="noopener noreferrer"&gt;Outfront Media&lt;/a&gt; – one of the largest outdoor media companies in America. &lt;/p&gt;

&lt;p&gt;It all happened combined with efforts to shape a culture of sharing and openness, and I'm so proud of the achievements we've made!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F43P7ad2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F43P7ad2.jpg" alt="Our crew"&gt;&lt;/a&gt;&lt;/p&gt;
Dope team; always doing some crazy dope stuff in the city that never sleeps! 🗽



&lt;p&gt;I also had the opportunity to present &lt;a href="https://www.ythecombinator.space/talks" rel="noopener noreferrer"&gt;some of the cool things I learned&lt;/a&gt; while working on our projects in conferences and meetups. This allowed me to grow my presentation skills (I know there is always a wide room for improvement here, tho) and to create a great network of contacts among our community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FA65WGOO.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FA65WGOO.jpg" alt="A few talks"&gt;&lt;/a&gt;&lt;/p&gt;
I had never traveled that much to attend conferences. 🛫 



&lt;p&gt;On the personal side, I feel that I have grown so much! My remote working routine allowed me not only to travel a lot more through my country – not staying for too long in any city – but to visit new ones. This made me meet tons of great people, get to know wonderful cultures, experience great things and capture all of &lt;a href="https://www.instagram.com/ythecombinator" rel="noopener noreferrer"&gt;these moments&lt;/a&gt; in photos! By the way, it all showed me photography is a strong candidate to become the hobby I've been constantly looking for 📸.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FAdwUSvS.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FAdwUSvS.jpg" alt="Ah, the sky..."&gt;&lt;/a&gt;&lt;/p&gt;
Watching the sunrise by the window in a plane became one of my greatest moments of peace. 🙏



&lt;h2&gt;
  
  
  The Need for a Change
&lt;/h2&gt;

&lt;p&gt;Earlier this year, though, I caught myself on LinkedIn, casually looking for a new job, and this made me think that it was time to move on. You know what they say… &lt;strong&gt;when you're feeling attracted by other opportunities, it's a big sign you need a change&lt;/strong&gt;. I then applied to some companies and met plenty of great people during the interviews, but one of them really had me from hello… &lt;/p&gt;

&lt;h2&gt;
  
  
  Coming Next
&lt;/h2&gt;

&lt;p&gt;In the coming days, I'll be joining the Front-End division at &lt;a href="https://www.strv.com" rel="noopener noreferrer"&gt;STRV&lt;/a&gt; – a mobile &amp;amp; web application development company that supplies start-ups all over the world with applications developed in such prestigious incubators like Y Combinator, 500 Startups, and others. &lt;/p&gt;

&lt;p&gt;I must say that I couldn't be more excited about it, but many things need to happen before I move definitively to the Czech Republic. Meanwhile, I'll be working remotely.&lt;/p&gt;

&lt;p&gt;I'm very enthusiastic about what's coming down the line. I really hope to make an impact on the projects, make countless new friends, and bring the best of me to this company and all of its clients and partners.&lt;/p&gt;

&lt;p&gt;Furthermore, I also hope to keep pushing great things to production, attend conferences, open-source stuff and help to grow the React.js (and front-end) community.&lt;/p&gt;

&lt;p&gt;For those who made it to the end of this post and are somehow part of this journey, thank you so much for everything. I learned more than ever during this time. I really appreciate all kinds of learning and experiences you guys provided to me. &lt;/p&gt;

&lt;p&gt;Wish me luck! 🤞🎆&lt;/p&gt;

</description>
      <category>career</category>
      <category>life</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
