<?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: Gabriel</title>
    <description>The latest articles on DEV Community by Gabriel (@hamsterasesino).</description>
    <link>https://dev.to/hamsterasesino</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%2F52566%2F6858590a-9a9f-4341-a134-d082be34966e.jpg</url>
      <title>DEV Community: Gabriel</title>
      <link>https://dev.to/hamsterasesino</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamsterasesino"/>
    <language>en</language>
    <item>
      <title>Project Politics or How to Pass your Proposal through Management</title>
      <dc:creator>Gabriel</dc:creator>
      <pubDate>Tue, 26 Mar 2019 03:46:25 +0000</pubDate>
      <link>https://dev.to/hamsterasesino/project-politics-or-how-to-pass-your-proposal-through-management-17h</link>
      <guid>https://dev.to/hamsterasesino/project-politics-or-how-to-pass-your-proposal-through-management-17h</guid>
      <description>&lt;p&gt;It happened again, the frontend test build failed after 40 minutes running. A unit test failed. Funny enough, only 10 of those 40 minutes were consumed by the unit tests themselves, the rest were just cloning, npm installing and doing the same setup operations done by countless other builds before.&lt;/p&gt;

&lt;p&gt;If anybody had had a spare minute - and the required motivation - we would have known that Docker is the perfect tool for this (&lt;a href="https://dev.to/alex_barashkov/using-docker-for-nodejs-in-development-and-production-3cgp"&gt;here is an excellent article from Alex Barashkov&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;After two years, this build represents to me everything that is wrong with my project: there is no time to innovate. The build is only one of the pet peeves that we developers have to face. Sometimes we would come up with proposals for management, and the answers would be like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Yeah but, how do I sell that time to the client? It is not &lt;em&gt;development&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;There's no capacity. The go-live is next month and we have 200 defects! &lt;em&gt;#trueStory&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Hmmm... yeah.. it would be nice but.. - &lt;em&gt;followed by an awkward silence&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tough management. To make things even more complicated, there are many layers of management and divisions in the organization with even more management. Getting something done quickly turns into politics. So, how do you get something done in politics when you are a rookie?&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Define the Problem
&lt;/h3&gt;

&lt;p&gt;This sounds obvious, but sometimes I see people saying: "yeah, let's adopt Docker!" and when you ask them &lt;em&gt;why&lt;/em&gt; they mumble something like: "well, you know, it's better". Not enough. Your problem has to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Be other people's problem&lt;/li&gt;
&lt;li&gt;Be visible to management (it has an impact on the velocity)&lt;/li&gt;
&lt;li&gt;Have a clear cause and consequences (e.g. backend code keeps breaking the page)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Define a solution
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What do we need - Infrastructure / Resources / Technologies?&lt;/li&gt;
&lt;li&gt;What improvements should we expect?&lt;/li&gt;
&lt;li&gt;How are we going to do it and how much time will it take?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Build a small dev team with people interested
&lt;/h3&gt;

&lt;p&gt;This is about making other developers own your proposal as well and joining forces to show management that this is other people's problem too. It also helps you explain it and benefit from other dev's points of view/experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Build an MVP
&lt;/h3&gt;

&lt;p&gt;That's it, you have the idea, you have the people, now build it. Make it small (you just need to prove that it is doable) in your local machine, and when you have it ready it is time to knock on management's door.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Get the votes
&lt;/h3&gt;

&lt;p&gt;In Politics, you don't go to the stand without having the votes first. You do all the talking and convincing and cut the deals before the vote has even been called for. Well, this is the same.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Do not set up a meeting with everybody without knowing the outcome first&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The outcome is decided by the people who have the steering wheel in the project (typically architects and project managers - but not all of them).&lt;/p&gt;

&lt;p&gt;Have some informal chat with them, maybe over Slack or while getting a coffee to get an idea of what the decision would be (do they agree it is a problem? Are they excited about the MVP?). Then set up a meeting with everybody else.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Showtime
&lt;/h3&gt;

&lt;p&gt;Summon all the team to a single meeting. In the invitation email, clearly, outline the agenda, provide resources (E.g. Sharepoint page) and briefly talk about what is this about.&lt;/p&gt;

&lt;p&gt;I usually prepare a high level, non-technical presentation of about 15-20 minutes. Then I allocate another 15-20 minutes for questions. Questions are where you want to go low level technically and prove that you know your stuff without risk of people dozing off.&lt;/p&gt;

&lt;p&gt;I usually run like them this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Hello everybody, thanks for joining, this what I am going to show you (what is the problem the DEV team has, how is it impacting our velocity, what solution have we come up with, and what do we need from you next&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;The problem&lt;/li&gt;
&lt;li&gt;How does it impact our velocity&lt;/li&gt;
&lt;li&gt;Questions?&lt;/li&gt;
&lt;li&gt;The solution&lt;/li&gt;
&lt;li&gt;Demo&lt;/li&gt;
&lt;li&gt;Questions?&lt;/li&gt;
&lt;li&gt;What do we need from you&lt;/li&gt;
&lt;li&gt;Decision time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;-&amp;gt; Yes? get commitments (who is going to do what/when?)&lt;br&gt;
-&amp;gt; No? &lt;code&gt;¯\_(ツ)_/¯ &amp;amp;&amp;amp; exit(RAGE_QUIT)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally, wrap it up: &lt;em&gt;this is what we saw, this is what we are going to do next. Thanks&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Also, it is likely that people will still have questions or need some internal discussions around the proposal. So be prepared to have a follow-up session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bottom line
&lt;/h3&gt;

&lt;p&gt;Many people rush into asking management first and &lt;em&gt;then&lt;/em&gt; work on their proposals. In a project where time is a clear constraint (and I am yet to work in a project where it is not), this is not how things work. Unfortunately, many decision-makers are not there involved in day-to-day development. Simply put, they don't &lt;em&gt;have&lt;/em&gt; your problems. Or, perhaps, they may not see how does your solution fit in because they don't know about the technology. However, sometimes the problem &lt;em&gt;is&lt;/em&gt; your solution and some quick prototyping could have revealed the flaws.&lt;/p&gt;

&lt;p&gt;On top of that, when you have not yet built your status as an experienced software engineer (you are a rookie), they might just not trust in your ability to deliver it.&lt;/p&gt;

&lt;p&gt;And this is the real problem. In a high-pressure project, nobody is going to let you use your working time on that. So (and follow me here) how do you build something, to prove to them that you need the time to build it, without having the time? Here are some options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You build your small team and let them help you whenever they are free.&lt;/li&gt;
&lt;li&gt;You go small, really small on your MVP&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And, no, you should not be using your free time for this. Protect your free time!&lt;/p&gt;

&lt;p&gt;Thank you for reading my post. Looking forward to reading your comments!&lt;/p&gt;

</description>
      <category>management</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>DEV-only tooling for Web Applications</title>
      <dc:creator>Gabriel</dc:creator>
      <pubDate>Tue, 22 Jan 2019 11:44:48 +0000</pubDate>
      <link>https://dev.to/hamsterasesino/dev-only-tooling-for-web-applications-2ga6</link>
      <guid>https://dev.to/hamsterasesino/dev-only-tooling-for-web-applications-2ga6</guid>
      <description>&lt;p&gt;Hi All,&lt;/p&gt;

&lt;p&gt;At work, I am working on a quite complex web application that presents the user with a flow with a series of pages that gather user data. If the user wants to reach a page, she has to go through all the flow to reach it. Sometimes this can mean as much as 10 pages, with 4-10 seconds of saving time with the backend between pages.&lt;/p&gt;

&lt;p&gt;We, developers, used to have to go through the same process every time we wanted to make a change to one of these pages. So you can imagine the pain of revisiting a page on the flow multiple times.&lt;/p&gt;

&lt;p&gt;I came up with a tool that allows you to refresh the page in place, by copying the user data in &lt;code&gt;sessionStorage&lt;/code&gt; and recreating the flow up to the very step where you left it. This happens almost instantly and saves us many hours of combined time.&lt;/p&gt;

&lt;p&gt;My problem is that the tool is hard to set up and this makes other devs reluctant to use it. I have in a separate branch, but it requires tweaking files that get constantly modified, causing merge conflicts every time we want to merge it with our actual code.&lt;/p&gt;

&lt;p&gt;I have thought of using webpack and a variable replaced at compilation time based on environment, so we can have it available only in our locals. The problem is that the code would need to be there along with the Production code, even if deactivated.&lt;/p&gt;

&lt;p&gt;I struggle to find a better way to make it easier to maintain and use. Does anybody have a strong argument against not merging dev-only code along with production code? What could go wrong? Are there any alternatives to the branch-based approach?&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;

</description>
      <category>help</category>
      <category>javascript</category>
      <category>webpack</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
