<?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>Forem: Bismuth Labs</title>
    <description>The latest articles on Forem by Bismuth Labs (@bismuthlabs).</description>
    <link>https://forem.com/bismuthlabs</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%2Forganization%2Fprofile_image%2F824%2F13c2b99f-c9ba-42b2-9911-2446e3a67152.png</url>
      <title>Forem: Bismuth Labs</title>
      <link>https://forem.com/bismuthlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bismuthlabs"/>
    <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://forem.com/bismuthlabs/triathlon-training-startup-life-7n5</link>
      <guid>https://forem.com/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://forem.com/bismuthlabs/bismuth-tech-stack-rust-typescript-react-swift-4gfh</link>
      <guid>https://forem.com/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>
    <item>
      <title>Lost in translation - cooperation with technical people</title>
      <dc:creator>Kjell Clarysse</dc:creator>
      <pubDate>Tue, 09 Jul 2019 13:22:03 +0000</pubDate>
      <link>https://forem.com/bismuthlabs/lost-in-translation-cooperation-with-technical-people-18nn</link>
      <guid>https://forem.com/bismuthlabs/lost-in-translation-cooperation-with-technical-people-18nn</guid>
      <description>&lt;p&gt;Several years ago, I was running a humble adtech company. As a non-technical founder, I was quickly facing my limits in managing the dev process. I wanted it all of course: not expensive, fast and great quality; the impossible triangle. The technical people I worked with somehow seemed to have enough confidence to promise it all and what followed is predictable. &lt;/p&gt;

&lt;h1&gt;
  
  
  First issues and finger-pointing
&lt;/h1&gt;

&lt;p&gt;The first issues started with quality. A lot of users and a lot of bugs. If you have 100 users and 10% experience bugs, you’ll have 10 conversations to maintain. If you have several 1000’s of users… When the market buys and the users use, you have a good reason to be confident about your business model. The frustration of not being able to deliver accordingly grows quickly.&lt;/p&gt;

&lt;p&gt;I pointed fingers at ‘incompetent’ devs. They pointed fingers at every person who had been working on the code before them and left it like a spaghetti plate. I understood them. I had been a cheap-skate at the offset to first validate the business model and it is normal that you can get away with this only temporarily. You can guess what happened; a re-write. This time it was a costly one. Not just costly when agreeing on the cooperation, but even more costly when fully delivered because of several surprises in the dev process. I remember being happy with the result but being shocked by how rigid/expensive the new thing was to change. We finally had something nice, but we were kind of stuck with it for a while now. In a fast-changing context, especially as a startup, you want to be able to A/B test, to pivot, to try out this and that, but if your code does not allow you to, your competitive advantage of being small and flexible kind of disappears. That change would be so important, was not something that I had mentioned explicitly to the devs.&lt;/p&gt;

&lt;h1&gt;
  
  
  A lesson in communication
&lt;/h1&gt;

&lt;p&gt;For a long time, my simple conclusion was that good devs are scarce. That’s a claim you will hear from many non-technical managers. Luckily, the company survived the difficult encounter between tech and non-tech, and I like sharing this experience to help others being quicker in identifying and cutting short issues like the ones I had. After all, the real lesson was not that good devs are hard to find as much as it was a lesson in communication. &lt;/p&gt;

&lt;p&gt;On my side, I was judging an outcome of a process that I did not understand. The issue was to be found within that process of course. What was I expecting in the short run and in the long run? Did I really communicate that well? Did I even question myself enough on it? Did I sufficiently made clear that quick pivots, A/B testing, etc.. would be a must? Did I make a realistic request in the sense that a good MVP was more useful than a buggy full-feature? If I am honest with myself, then I have to confess a good portion of naivety on my end. I simply did not know what to ask for or how to express it because I did not know which trade-offs are at play at the dev side. I didn’t know that flexibility and architecture are linked for example. And that is just one example. &lt;/p&gt;

&lt;p&gt;On the dev side, some elements are worth mentioning as well though. I was given what I asked. I was never questioned on what I did not ask. I did not ask for well-structured code or compliance in naming conventions or anything like that. I asked a result that should work starting from a certain day in time. I was never really confronted with the trade-off between flexibility/quality, price and time. I simply didn’t know it existed or mattered. Software architecture and the meaning of code quality were too far from my world. My lack of interest for the job of the developer was probably my biggest mistake and I think it was the developers’ biggest mistake to not have much interest for the true needs of my company in short ànd mid-term.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Genuine mutual interest
&lt;/h1&gt;

&lt;p&gt;One can expect a founder to not be naïve as one can expect a developer to know how to deliver. But in many cases, both are working based upon assumptions; the assumption that you know what the other wants or needs without genuine interest in each other’s challenges. If I asked for quick and cheap, I did not know how that would come back at me and how expensive the cost of change would be. &lt;/p&gt;

&lt;p&gt;I did get everything delivered my way at first: fast, ready to use and inexpensive. And I paid it heavily with the never-ending refactoring. This refactoring comes not only with a financial cost but also with time; valuable time if you are learning fast and not able to steer quickly. It paralyzes your ambitions as a founder. And it paralyzes your entire team if you depend on unpredictable delivery cycles. If I had known that code quality and software architecture determine your code’s tolerance to change, I would have made that a KPI. &lt;/p&gt;

&lt;p&gt;For a long time, I thought my naivety was mostly to do with the fact that I started my business while graduating and not having worked in bigger companies yet. However, in the last couple of years I was a business coach for more than 70 startup companies at incubator Start it @KBC in Belgium and I was surprised to see that people with +20 years of career experience make the same mistakes more than often. I recently met a successful serial entrepreneur who was clearly opinionated about the topic and said “Oh, I have had big fights with all my CTO’s”. It turns out that even many established companies and enterprises have poor understanding between technical staff and non-technical management.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;To conclude, when you are non-technical and you expect a good cooperation with technical people, you need to have a genuine interest in how they will go about it and you should only work with people who have genuine interest in what you really need, not just in what you think you need. You want to know the challenges and the trade-offs a dev team is facing. What is the goal of the code? A quick MVP to test the market or a full version that needs 2, 3, maybe 4 years of product lifetime? How much will flexibility cost and what is your definition of flexible? Which KPI’s will you use to quantify and evaluate expectations? Are these KPI’s indeed telling you the essence of what you are doing and are you sure that some of them are not vanity metrics? Which tools will you use to track, manage and improve? &lt;/p&gt;

&lt;p&gt;I am writing this as a founder of &lt;a href="https://bismuthlabs.io"&gt;bismuthlabs.io&lt;/a&gt;. For existing code, Bismuth tells companies what is worth fixing. For new code Bismuth safeguards architectural compliance, hence protecting the code’s tolerance to change. The goal is to have more tolerance to change, leading to less refactoring, better refactoring where necessary and more predictable delivery cycles. As an interesting by-product some companies look at us for junior training.&lt;br&gt;
Needless to say from the above that when I met my cofounders, I immediately understood the value of the customer pain they are addressing. &lt;/p&gt;

&lt;p&gt;How is your cooperation tech – non-tech going? Similar misunderstandings going on? Did I indicate the right spots to pay attention to? Interested to learn from other experiences. &lt;/p&gt;

</description>
      <category>architecture</category>
      <category>codequality</category>
      <category>communication</category>
      <category>refactoring</category>
    </item>
  </channel>
</rss>
