<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>jarleton.dev · Essays</title>
  <subtitle>Essays, newest first</subtitle>
  <link href="https://jarleton.dev/essays/feed.xml" rel="self" />
  <link href="https://jarleton.dev/?series=essays" />
  <updated>2021-11-01T00:00:00Z</updated>
  <id>https://jarleton.dev/?series=essays</id>
  <author>
    <name>Paul Jarleton</name>
  </author>
  <entry>
    <title>What is my job as a software engineer?</title>
    <link href="https://jarleton.dev/essays/2/" />
    <updated>2021-11-01T00:00:00Z</updated>
    <id>https://jarleton.dev/essays/2/</id>
    <content type="html">&lt;p&gt;A while back at a party someone asked me the usual question: &amp;quot;what do you do for
a living?&amp;quot;.
In a bit of an automated manner I said that I was a software engineer for
TomTom, the location company and that I was working on doing maps for autonomous
vehicle.&lt;/p&gt;
&lt;p&gt;I could see the usual spark in the topic, I make cars drives themselves! What an
incredible thing to be part of.&lt;/p&gt;
&lt;p&gt;As much as it is true I was bothered by how unrealistic that description of my
work was. There are thousands of people making cars drives themselves around the
globe!
So &lt;strong&gt;what do I actually do? what is my actual day-to-day work?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;part-1&quot;&gt;1 · Thinking the complexity and make it reproducible&lt;/h2&gt;
&lt;p&gt;We then started a deeper discussion about our respective jobs, it turns out he
also was a software engineer working into making a test framework for payment
devices.&lt;/p&gt;
&lt;p&gt;So let&#39;s finally answer that question. What we came up with as a job description
is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We think the complexity of a task from one end to the other, looking at all
possible states, all transitions, all constraints and every needed operations.&lt;/p&gt;
&lt;p&gt;Once we have a clear vision of the operations&#39; maze that is needed in our mind
we encode that within a machine to make it endlessly reproducible (given there
is no Zombie apocalypse of course).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Okay, that&#39;s a convoluted way of explaining our work. There is a lot in here,
let&#39;s unfold a bit.&lt;/p&gt;
&lt;p&gt;First it means that whenever we interact with any computer in any way, the logic
to do whatever the computer is doing (rendering this blog for example), was once
spread among multiple of humans thoughts.&lt;/p&gt;
&lt;p&gt;Second, we as developers holds a lot of complexity at any given time in our
brain. We are retaining as much as possible the maze that is our code, from the
format of the data to the error handling channel.&lt;/p&gt;
&lt;p&gt;Third, I am not producing a map ever, the computer is, I am thinking on how to
produce it with my coworkers in order for the machine to do the job.&lt;/p&gt;
&lt;h2 id=&quot;part-2&quot;&gt;2 · The color change&lt;/h2&gt;
&lt;p&gt;So, why am I writing about that besides being able to have an unconventional
answer when asked what I do for a living?&lt;/p&gt;
&lt;p&gt;Have you ever heard about that none technical person who casually asks to change
the website color entirely?&lt;/p&gt;
&lt;p&gt;Well, we as developers we have! Let me tell you what happen at that moment in
our brain, we start to skim through the code in our head.
We load the whole context of where and how those colors are defined, rendered,
if there is any variations of those colors, if changing them might mean changing
other colors to adapt the style, where are those other colors encoded and
ingested by the system?&lt;/p&gt;
&lt;p&gt;While we are loading such huge information context in our head to assess the
query someone is looking at us expecting a quick answer (and often thinking that
changing a color is easy).&lt;/p&gt;
&lt;h2 id=&quot;part-3&quot;&gt;3 · Know yourself and others&lt;/h2&gt;
&lt;p&gt;So what can we draw out of those observations?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As developers our job is to pre-think complexity and make it behave the same
way for eternity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is a heavy task on an everyday job! Every morning loading thousands of
already encoded cases, then thinking the next one, then transcribing it in the
machine!&lt;/p&gt;
&lt;p&gt;This post is not a complaint, I absolutely love my work, but I think it matters
that the rest of the world understand our job from that perspective.
Disturbing us during work is the same as blowing on a house card.
Asking for a simple question is the same as asking for us to load half of the
system in our brain to see where your question would fit.&lt;/p&gt;
&lt;p&gt;Having more people aware of the cognitive load of our job makes working as a
team easier.
The same goes of course for every other job around software, the more we deeply
understand others work the better we handle our interactions at work.&lt;/p&gt;
&lt;p&gt;So next time someone asks you what you do for a living, think twice and ask
yourself, what do you mentally and physically do exactly?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>DevOps: Accelerate software not human</title>
    <link href="https://jarleton.dev/essays/1/" />
    <updated>2021-11-01T00:00:00Z</updated>
    <id>https://jarleton.dev/essays/1/</id>
    <content type="html">&lt;h2 id=&quot;part-1&quot;&gt;1 · Coding is easy, building complex software is hard.&lt;/h2&gt;
&lt;p&gt;Coding your first line, learning your first program and starting to get result
takes few weeks to some month, how exciting!
In that regard, coding is easy to learn. Welcome to the beautiful world of
developers.&lt;/p&gt;
&lt;p&gt;After getting started with your new position you will start to hear questions
regarding your code like:&lt;/p&gt;
&lt;p&gt;How to interoperate pieces of software?
When and how to design API?
How will my code look like at runtime?
How to tool my piece of code to be observable?
How to enable end to end tracing?
How to document both features and codes for everybody involved to be able to
participate?
How to react to failure or shortage of services?
How to store the data, in which format, for which kind of queries?
How to display it to none technical user?
How to make a feature available in a nice manner to users?&lt;/p&gt;
&lt;p&gt;Feeling overwhelmed? those are just few examples of all the questions that
revolve around a bunch of line of code which will live for years somewhere
within a data center.&lt;/p&gt;
&lt;p&gt;Feeling overwhelmed by them is totally okay. Coding is easy, engineering and
building complex software across a group of people and to the world is hard.&lt;/p&gt;
&lt;h2 id=&quot;part-2&quot;&gt;2 · DevOps culture and automation to the rescue right?&lt;/h2&gt;
&lt;p&gt;One of the principle of devops is having small changes.
Such changes allow us to answer those question one by one against a context we,
as human, can grasp.&lt;/p&gt;
&lt;p&gt;This way we won&#39;t tool once our entire codebase but do it slowly for every bit
of software we release out in the world.&lt;/p&gt;
&lt;p&gt;Another cool thing about small changes are the fact that it is easier to manage
for the whole development chain, bye bye long night deploying thousands of new
line of codes and dozens of features.
Now that you have small chunks of changes you can deploy in less than a minute.
On top of that you can safely automate it!&lt;/p&gt;
&lt;p&gt;Congratulation you can now gather feedback around a feature in less than a day
and react as quickly... Or can you?
Did the capacity to accelerate deployment and iteration actually change how
fast, as human, we can react to that mountain of information lying in our
observability systems?&lt;/p&gt;
&lt;h2 id=&quot;part-3&quot;&gt;3 · The human brain didn&#39;t become faster&lt;/h2&gt;
&lt;p&gt;Here goes the trap, now that the whole toolchain is as fast as computers can be
to test, deploy and monitor your software, making a change should be as fast
right?&lt;/p&gt;
&lt;p&gt;In reality, it pushes the pressure from deploying once during hours to the
everyday developers&#39; life.&lt;/p&gt;
&lt;p&gt;But the pace of our everyday life didn&#39;t change. It takes the same amount of
time for human to design a feature, investigate a database performance, read a
blog article or learn an entirely new framework.&lt;/p&gt;
&lt;p&gt;Selling DevOps as accelerating and enabling people isn&#39;t fully right in the end.
DevOps pushes some complexity out of the developers way but brings new one that
challenges our time management and at it&#39;s core the time we have to stop and
think about what we are doing, what we are coding, how and why.&lt;/p&gt;
&lt;h2 id=&quot;part-4&quot;&gt;4 · It&#39;s time to stop and think&lt;/h2&gt;
&lt;p&gt;I am not advocating against DevOps, I wouldn&#39;t code any other way now that I
embraced it but that set of practices should be put in it&#39;s right place, not in
the way of our time as developers.
When aligned to the company or team culture, DevOps should actually free
developers, product owner, designers and sales some time to gather, stop and
think about what they are doing and selling and that time is incompressible
whether we like it or not.&lt;/p&gt;
&lt;p&gt;Us as developers should embrace deploying as soon as it is ready and get
comfortable about having automated integration steps to have a safety net around
our probable mistakes.
This, on the other hand should not prevent us from taking the time to think our
code through.&lt;/p&gt;
&lt;p&gt;Let&#39;s respect our human pace and our limits regarding how much data we can
consume or how long it takes to discuss our software.
This way we can take the right decisions and iterate toward the right direction.&lt;/p&gt;
</content>
  </entry>
</feed>