<?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: Francois Stephany</title>
    <description>The latest articles on DEV Community by Francois Stephany (@fstephany).</description>
    <link>https://dev.to/fstephany</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%2F132299%2F47e6c8b8-c100-4a1f-be9d-2eb37cb0ee48.jpg</url>
      <title>DEV Community: Francois Stephany</title>
      <link>https://dev.to/fstephany</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fstephany"/>
    <language>en</language>
    <item>
      <title>Triathlon training ≈ Startup life</title>
      <dc:creator>Francois Stephany</dc:creator>
      <pubDate>Thu, 29 Aug 2019 13:35:59 +0000</pubDate>
      <link>https://dev.to/bismuthlabs/triathlon-training-startup-life-7n5</link>
      <guid>https://dev.to/bismuthlabs/triathlon-training-startup-life-7n5</guid>
      <description>&lt;p&gt;I've completed my first triathlon last week and it struck me how similar the journey to the race was to what I'm experiencing in the creation of &lt;a href="https://bismuthlabs.io"&gt;Bismuth&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---x52GPsm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6768y4tvw1q54d77omdm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---x52GPsm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6768y4tvw1q54d77omdm.jpg" alt="Before the start. Pic by Lindsay Eeckhaudt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting Point
&lt;/h1&gt;

&lt;p&gt;When you're not an accomplished athlete, signing up for a triathlon is not something you do lightly. I was an avid runner in 2012-2015 but have stopped training since then. I regularly commute by bike (~9km each way) so my legs were still in shape but I've hardly done more than a 20km trip in my life.&lt;/p&gt;

&lt;p&gt;When a friend asked me to join a small group of wannabe triathletes training for &lt;a href="https://www.lagileppetrophy.be"&gt;La Gileppe Trophy Orbea&lt;/a&gt; it was hard to resist. We would not train for nothing: we had a well-identified goal. This is very different than just aiming for an abstract objective (being a triathlete). &lt;/p&gt;

&lt;p&gt;The same goes for a startup. Aiming for startup life should not be a goal in itself. You should have a more concrete plan.&lt;/p&gt;

&lt;h1&gt;
  
  
  Team &amp;amp; Network
&lt;/h1&gt;

&lt;p&gt;The social aspect of the endeavour should not be underestimated. We were a group of five guys training for three sports. We were scattered throughout the region (Mons-Brussels-Liège, Belgium) and had only a few trainings together. It made little sense to meet for a one-hour run/swim when you live 2 hours away from each other. We had a couple of longer bike trainings on Sundays though. &lt;/p&gt;

&lt;p&gt;But not training together did not mean that there was no network effect. &lt;a href="https://www.strava.com/"&gt;Strava&lt;/a&gt; logs and a Facebook group conversation are powerful motivation tools. We could greet ourselves when completing an early morning swim session or a late bike ride. The odds that I took my bike for a spin after a long day were a lot greater than if I was alone. It's way too easy to postpone a task when you are the only one in town.&lt;/p&gt;

&lt;p&gt;Humor and camaraderie work well when you are in doubt and think that you're falling behind. Sharing content and training tricks maintained the interest and made sure we learnt faster.&lt;/p&gt;

&lt;p&gt;The same goes for a startup team. Being alone is good when you need to be focused on the work but interactions and discussions are important for ideation, motivation and mental health.&lt;/p&gt;

&lt;h1&gt;
  
  
  Planning
&lt;/h1&gt;

&lt;p&gt;Even though we registered for a short distance (triathlon sprint), one of us showed up with an ambitious training plan. It looked a bit too much for me. I knew from the start that I would not be able to follow. &lt;/p&gt;

&lt;p&gt;And it's alright. Sticking to a training plan you know you cannot follow is a stupid idea. Tune it down until you're confident you can make it.&lt;/p&gt;

&lt;p&gt;On my side, I hadn't swam for ages and could barely cross the pool without losing my breath. Bike was ok-ish thanks to my commute but longer distances were an unknown territory. Running was my strongest point as I had trail running experience and knew the sensation in the legs and in my brain throughout the effort.&lt;/p&gt;

&lt;p&gt;Knowing this, I created a plan custom tailored for me. I still don't know if it was optimal. It probably wasn't but it got me through the race without any hiccups so I consider it a win.&lt;/p&gt;

&lt;h1&gt;
  
  
  Execution and unplanned changes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zIrpoBg6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g5hdm2z7wzi3euah5j0u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zIrpoBg6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g5hdm2z7wzi3euah5j0u.jpg" alt="Bike: Done. Pic by Caroline Vermeulen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having the plan is only the beginning. This is something you cannot delegate, you're the one in charge. Here again, the peer pressure of the group is important. You are not accountable to them but you don't want to be the lazy ass that does not do anything.&lt;/p&gt;

&lt;p&gt;Beware though. I've quickly noticed that social life can make it challenging to follow the plan. &lt;em&gt;Up for a beer and pizza tonight?&lt;/em&gt; kind of text will challenge your focus and dedication. There's a balance between turning into a social hermit and going out every night. Keeping the pizza but swapping the beer for sparkling water is the kind of compromise I was willing to make.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://www.nytimes.com/2019/07/09/well/move/leadville-katie-arnold-ultramarathon-training-parenthood.html"&gt;recent interview&lt;/a&gt; of Katie Arnold showed that with a bit of creativity, you can mix a social life with kids and strong long distance training. &lt;/p&gt;

&lt;p&gt;At my level, the plan is just a guideline. The goal was not to finish in the top 10, so flexibility was more important than performance. In a startup though, you might aim for more. This is okay but be aware of the impacts on your life.&lt;/p&gt;

&lt;h1&gt;
  
  
  Polyglot
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Triathlon or how to be mediocre at three sports&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Swim, bike and run are different disciplines. Being at least decent in the three of them is the whole game. For me, it was a revelation: it is much more fun to train for three sports than focus on one.&lt;/p&gt;

&lt;p&gt;In a startup, founders are usually doing a bit of everything. They need to juggle between sales, code, marketing, raising money and more. The result should be a balance between these tasks. Of course, the balance is different at every stage and the founder must quickly react to a new situation. &lt;/p&gt;

&lt;p&gt;This diversity is extremely challenging but also super fun and rewarding.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learning &amp;amp; staying humble
&lt;/h1&gt;

&lt;p&gt;Starting a new endeavor is always full of lessons. In triathlon training, you learn to listen to your body. You experiment. You learn how you can improve efficiency by adjusting your swimming strokes. You listen to advice (&lt;em&gt;try your wetsuit in open water before race day!&lt;/em&gt;). Some are valid in a context but not in another. Keep them in mind though, they could be useful one day.&lt;/p&gt;

&lt;p&gt;You're the beginner with no experience. With practice, you will build confidence and find your rythm. Be patient but don't be passive.&lt;/p&gt;

&lt;h1&gt;
  
  
  Knowing when to slow down
&lt;/h1&gt;

&lt;p&gt;In the second month of training, a pain in my knee started to develop. I slowed down training and quickly identified that the pain came from running. When cross-training it can be hard to identify a single source of trouble but in my case it was easy: my running shoes had more than 1000km. Fortunately, summer sales are always good to buy new shoes and the problem went away as fast as it appeared. &lt;/p&gt;

&lt;p&gt;Not taking the time to slow down and identify the issue could have dramatic consequences. The same goes for a startup. You should always listen to your feelings (and to metrics) and adjust properly. &lt;/p&gt;

&lt;h1&gt;
  
  
  Equipment is not that important
&lt;/h1&gt;

&lt;p&gt;Some would believe that you need top-notch equipment to complete a race. This is far from true and the only two technical pieces of equipment you need is a &lt;a href="https://en.wikipedia.org/wiki/Wetsuit"&gt;swimming wetsuit&lt;/a&gt; and a bike. &lt;/p&gt;

&lt;p&gt;The bike is by far the most expensive thing you'll need. The best bike to start with is the one you already have. A woman finished the triathlon on a foldable &lt;a href="https://www.brompton.com/bikes"&gt;Brompton&lt;/a&gt; and a lot of riders had mountain bikes. Find a cheap second hand bike on craigslist and start riding. &lt;/p&gt;

&lt;p&gt;Nowadays, most startups can be launched without any specific equipment. A laptop and a phone are all you need to get started. You don't need a $3000+ Macbook Pro or an expensive SAP license to get started. Be smart about it and gear up only when you need to. &lt;/p&gt;

&lt;h1&gt;
  
  
  Be hungry for more
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bjAjc68C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/5nft2b3wzbshbh82gtv1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bjAjc68C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/5nft2b3wzbshbh82gtv1.jpg" alt="Let's start. Pic by Caroline Vermeulen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is just the beginning of my triathlon journey. The sprint distance was a nice start but in the end of the race I still had some energy left. This means that training was good enough and that my body and mind were ready. The whole race was fun and a lot of endorphin was released that day. It's time to plan the next one. I'm tempted to go for a longer distance this time. &lt;/p&gt;

&lt;p&gt;I've started to work full time on &lt;a href="https://bismuthlabs.io"&gt;Bismuth&lt;/a&gt; at around the same time that I started to train for the triathlon. Focusing on both is a challenge and some will say that having two parallel activities both requiring a lot of grit is the best way to waste it. I don't believe it is. On the contrary, I think the two are complementary. &lt;/p&gt;

&lt;p&gt;On bad days for Bismuth going for a run is a great way to let off some steam. On the other side, an early-swim session is a great way to start the day and is a good reason to jump out of the bed.&lt;/p&gt;

&lt;p&gt;I can't wait to see how these two will eventually end up!&lt;/p&gt;

&lt;p&gt;(pictures by &lt;a href="http://www.carolinevml.be/"&gt;Caroline Vermeulen&lt;/a&gt; and &lt;a href="https://www.instagram.com/lilibabulle"&gt;Lindsay Eeckhaudt&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>startup</category>
      <category>triathlon</category>
      <category>career</category>
    </item>
    <item>
      <title>Our Tech Stack: Rust, Typescript, React &amp; Swift</title>
      <dc:creator>Francois Stephany</dc:creator>
      <pubDate>Wed, 17 Jul 2019 14:58:13 +0000</pubDate>
      <link>https://dev.to/bismuthlabs/bismuth-tech-stack-rust-typescript-react-swift-4gfh</link>
      <guid>https://dev.to/bismuthlabs/bismuth-tech-stack-rust-typescript-react-swift-4gfh</guid>
      <description>&lt;h1&gt;
  
  
  tl;dr
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Rust (actix-web, Diesel)&lt;/li&gt;
&lt;li&gt;Swift (SwiftPM, swift-ast)&lt;/li&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;li&gt;React (Atlaskit, Redux)&lt;/li&gt;
&lt;li&gt;AWS (Fargate, PostgreSQL RDS)&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Company Culture
&lt;/h1&gt;

&lt;p&gt;I have a confession to make: I love discussing about tech stacks. They convey values and can tell a lot about company culture and the technical history of a technology team.&lt;/p&gt;

&lt;p&gt;Of course they don't always tell the whole story: I know a place that emphasises on employee happiness and where COBOL is still king.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;holy&lt;/em&gt; stack that will solve all your problems does not exist. There is no &lt;a href="http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf"&gt;silver bullet&lt;/a&gt;, remember? Instead, you pick the stack that makes the more sense to you, the one you're comfortable with, the one that fits your use case.&lt;/p&gt;

&lt;p&gt;It might be tempting to go all-in in the latest technologies and niche languages. When I was at the beginning of my career someone wise told me that a new venture should not have more than one &lt;em&gt;new shiny thing&lt;/em&gt; in its stack. I believe this is true and that developers are sometimes too attracted to technologies that won't survive the next winter.&lt;/p&gt;

&lt;h1&gt;
  
  
  Bismuth
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://bismuthlabs.io"&gt;Bismuth&lt;/a&gt; is a service that takes your code, passes it through the mill and shows you where its structure is not ideal. We are still in the early stage and have hundreds of ideas but the end goal is to improve the process of developing software. Not only for developers but also for &lt;a href="https://dev.to/bismuthlabs/lost-in-translation-cooperation-with-technical-people-18nn"&gt;other stakeholders&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We currently focus on mobile apps but the tools and philosophy can be applied to anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WOp8Qz89--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/v01f5hfhxrj32a99w8tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WOp8Qz89--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/v01f5hfhxrj32a99w8tz.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Tech Stack
&lt;/h1&gt;

&lt;p&gt;Bismuth has four main components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parsers for languages we support,&lt;/li&gt;
&lt;li&gt;REST endpoints for API,&lt;/li&gt;
&lt;li&gt;Workers that process the influx of code,&lt;/li&gt;
&lt;li&gt;Visualisations engine for user interaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Parsers
&lt;/h2&gt;

&lt;p&gt;Parsing source code can be challenging but it's an already solved exercise. Our motto there was not to reinvent the wheel for each programming language and don't roll our own parser. Each environment has its own set of tools that work for them. We probably won't be smarter than them anytime soon.&lt;/p&gt;

&lt;p&gt;For Swift, we use &lt;a href="https://github.com/yanagiba/swift-ast"&gt;swift-ast&lt;/a&gt;, which happen to be written in Swift. There were other options like using the C++ Swift compiler frontend but our team was mostly familiar with Swift and the library provided everything we needed.&lt;/p&gt;

&lt;p&gt;For Java and Kotlin, we will probably go with &lt;a href="https://github.com/JetBrains/intellij-community/tree/master/uast"&gt;Jetbrains UAST&lt;/a&gt; in Kotlin.&lt;/p&gt;

&lt;p&gt;For Javascript and Typescript there are more options: &lt;a href="https://esprima.org/"&gt;Esprima&lt;/a&gt; (JS), &lt;a href="https://github.com/FreeMasen/RESSA"&gt;RESSA&lt;/a&gt; (Rust), and the Typescript compiler itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Endpoints &amp;amp; Workers
&lt;/h2&gt;

&lt;p&gt;We chose &lt;a href="https://www.rust-lang.org/"&gt;Rust&lt;/a&gt;. That might sound surprising for a web API: dynamic languages have a good reputation for this type of work but Rust encompasses values that we believe in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Correctness&lt;/strong&gt;: Rust has a strong tendency to make you do things the right way. Is it very rare that a Rust library reaches the 1.0 version without being really production-ready. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stability&lt;/strong&gt;: The Rust team is very careful not to break things between releases. That does not mean that they are not moving fast (~6 weeks between releases)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;: this is less important for us but Rust is quite fast, even compared with C++ or C. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Libraries &amp;amp; build&lt;/strong&gt;: There are tons of libraries ready to be used in the &lt;a href="https://crates.io/"&gt;crates.io&lt;/a&gt; ecosystem. The build tool &lt;a href="https://doc.rust-lang.org/cargo/"&gt;cargo&lt;/a&gt; feels familiar if you've used Ruby Gems, PHP Composer or Gradle dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All those values reflect in &lt;strong&gt;the community&lt;/strong&gt;. It is helpful, inclusive and newbies are taken care of.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While still being relatively young, Rust ticks a lot of boxes. Software is hard and having a language that promotes good practice feels like a friend holding your hand.&lt;/p&gt;

&lt;p&gt;It usually takes us a bit longer to write Rust code than to hack a Ruby or JS script but the feeling Rust gives when the code compiles is that it will be correct and that it will stands the test of time. Personally, this is a feeling I hadn't had since my &lt;a href="http://ocaml.org/"&gt;OCaml&lt;/a&gt; days. &lt;/p&gt;

&lt;p&gt;We believe that using Rust is also a strength when hiring new developers. Rust developers are usually sensitive to clean code: their brain has been washed by explicit error handling and a very strict compiler.&lt;/p&gt;

&lt;p&gt;They might be much harder to find than Java developers but this can be seen as a strength as the odds to attract good developers is probably higher with Rust than Java (flame war fuel here).&lt;/p&gt;

&lt;h2&gt;
  
  
  UI and Visualisation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.typescriptlang.org/"&gt;Typescript&lt;/a&gt;/&lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt;/&lt;a href="https://redux.js.org/"&gt;Redux&lt;/a&gt; is now one of the standard stacks in frontend those days. Unless 4-5 years ago when the JS frontend war was fierce with a new competitor every week, we believe the winners have emerged and that we won't see too much disruption in the few coming years (i.e., React, Angular and Vue.js have won).  &lt;/p&gt;

&lt;p&gt;Our visualisations are built with &lt;a href="https://d3js.org/"&gt;D3&lt;/a&gt;, the de-facto standard for displaying visual data on the web and our GUI is built with &lt;a href="https://atlaskit.atlassian.com/"&gt;Atlaskit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We use this frontend stack both on the web and on our &lt;a href="https://electronjs.org/"&gt;electron&lt;/a&gt; app. Electron can be really frustrating to work with at times but it is becoming ubiquitous on the desktop front (if God exists, she will destroy humanity when she sees how we waste our RAM). &lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure
&lt;/h2&gt;

&lt;p&gt;All this code sits into one monorepo. This is useful to keep track of everything in one place. On the negative side, it makes CI a bit harder as you have to detect which part of the app was affected. This might be alleviated by using &lt;a href="https://bazel.build/"&gt;Bazel&lt;/a&gt; to build every components of our systems but we are not there yet.&lt;/p&gt;

&lt;p&gt;We deploy on AWS using &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;. We had no experience either with AWS or Terraform but the documentation is good enough and it is quite easy to find support. Who doesn't have someone who knows AWS in their circle these days?&lt;/p&gt;

&lt;p&gt;We use &lt;a href="https://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt; for messaging between all our components. We're &lt;em&gt;very&lt;/em&gt; far from reaching its limit and it serves us well so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future
&lt;/h2&gt;

&lt;p&gt;We don't know yet how the future will look like but we believe our stack is solid enough to withstand it. Time will tell ;)&lt;/p&gt;

</description>
      <category>rust</category>
      <category>typescript</category>
      <category>react</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
