<?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: Dave Hodgkinson</title>
    <description>The latest articles on DEV Community by Dave Hodgkinson (@davehodg).</description>
    <link>https://dev.to/davehodg</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%2F541454%2Fb3966e26-d204-4e00-86d2-d36c20ff4667.jpeg</url>
      <title>DEV Community: Dave Hodgkinson</title>
      <link>https://dev.to/davehodg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davehodg"/>
    <language>en</language>
    <item>
      <title>Interviewing your new employer</title>
      <dc:creator>Dave Hodgkinson</dc:creator>
      <pubDate>Sat, 27 Mar 2021 17:04:16 +0000</pubDate>
      <link>https://dev.to/davehodg/interviewing-your-new-employer-591k</link>
      <guid>https://dev.to/davehodg/interviewing-your-new-employer-591k</guid>
      <description>&lt;p&gt;Following on from my previous post about how to avoid major development speedbumps, here's a list of things to ask prospective employers when they think they're interviewing you and you're actually interviewing them. You want your employer to help you do your job, right?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Are you using GitHub? Within that, how close to GitFlow are you?  Having experienced an awful version control system, this is key. GitHub is really flexible and gives you enough rope to hang yourself in the foot. A fun thing is commenting commits correctly. Google it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s your branching strategy? How long do you expect a branch to live?  Branch lifetime should be of the order of a day. Any longer than that, have a quiet word with your SCRUM master.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How automated are your deployments? Do you create .rpms/.debs?  Packages make deployments and rollbacks so much easier. Add YYYYMMddhhmmss to the name so you can keep track of them, or a build number so you can identify them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which CI system do you use? If not Jenkins, why?  Test automation is great. It builds, runs tests and creates modules. And anything else that makes your life easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s your test automation like? It’s part of CI, right? Do you measure test coverage?  CI is also a good time to run code hygiene tests even if you have them on your commit hook.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How is your test data managed?  Do you create a temporary database and populate it or do you have one database and run your tests within a transaction?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security? How close to the developers is this managed? Separate security departments are often understaffed. Do you keep an eye on the OWASP top ten? Are you religious about escaping strings when composing SQL queries? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How close to continuous delivery are you? How long do rollbacks take? Do you use something like Ansible or puppet to manage your systems? Bonus points for terraform. How fungible are your live servers? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How loosely coupled is your architecture or is it a big ball of mud?  This is another thing that burned me recently. With mod_perl potentially going away in some form, parts of the system could have been moved to a new framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What other tools do you have and who chose them?  Are you running popular systems for monitoring or code review or some open-source system that might wither on the vine?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are you agile? Do you do SCRUM or KANBAN? Do you have a SCRUM master and a product owner?  So many teams think they &lt;em&gt;are&lt;/em&gt; agile when they're merely &lt;em&gt;doing&lt;/em&gt; some agile type things sandwiched in a blob of waterfall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Who authorises changes? Do the developers do it or do you have a separate approvals board?  It's so much better to have decisions made at the lowest level by team members than to be farmed out to some remote change approvers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What system monitoring do you have? What is your average time to fix? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is your ticketing system, and why isn’t it JIRA? Does your SCRUM master visualise progress and use all the tools to measure the team performance. Does your SCRUM master measure project velocity?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So there you have it. How to extend an interview beyond the allotted time. &lt;/p&gt;

&lt;p&gt;Did I miss anything? Comments, as always, welcome. &lt;/p&gt;

</description>
      <category>devops</category>
      <category>development</category>
      <category>interviewing</category>
    </item>
    <item>
      <title>Efficient programming</title>
      <dc:creator>Dave Hodgkinson</dc:creator>
      <pubDate>Fri, 26 Mar 2021 11:33:44 +0000</pubDate>
      <link>https://dev.to/davehodg/efficient-programming-5g54</link>
      <guid>https://dev.to/davehodg/efficient-programming-5g54</guid>
      <description>&lt;p&gt;Coming out of a job where I was working on a 20-year old Perl codebase, I've got some burns to get off my chest. I'm reading "Accelerate" by Forsgren, Humble and Kim which claims to have scientific backing for what makes for efficient development in a team. In my recent experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use decent version control. To me, that means GitHub. Use a branching strategy to code each branch to a JIRA. Make the branches short-lived, preferably a day. GitHub is stateless. Diffs are resolved at merge-time when pull requests are made. Under NO circumstances use something like Perforce. That is like putting a large speed bump under a low slung car. It's stateful. Mapping a repo into your filesystem is a pain. Rewinding commits is a royal pain. Ugh.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release often, releases should be easy. A marker of a high performing team is how frequently they release software. A release should not be confined to one person on the team and take half a day.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great balls of mud are hopeless. We've been writing new software as microservices for a while now, and more recently bundling them up in Docker containers (and if you're really advanced then using Kubernetes). In the Perl world that means using a framework such as Mojolicious, Catalyst or Dancer with excellent modules like the Template Toolkit for the view and DBIx::Class for the model and not v1 of view software that's barely been touched for years and v2 exists. It also highly bound to Apache and hard to use elsewhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ongoing support for mod_perl in Apache 2.x is ongoing. It's already been abandoned in Apache 1.x so I would note that software is doomed at some point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be very careful layering software upon software. Or using features that make things opaque. Oh, and having magic variables and not documenting them. For example, you have Puppet. That's great. Why not layer Heira on top and render most of the puppet documentation useless. Or use a templating system that magically calls in a hierarchy of other templates. Oh, and where does that database handle come from? Somewhere in the bowels of that page startup. Not sure which module.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In summary, I'd say be aware of the speedbumps. How can you improve them?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>perl</category>
    </item>
  </channel>
</rss>
