<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Sledgeworx Software</title><link>https://blog.sledgeworx.dev/</link><description>Recent content in Home on Sledgeworx Software</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 15 Apr 2026 13:27:21 -0600</lastBuildDate><atom:link href="https://blog.sledgeworx.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Agentic AI changes cloud economics</title><link>https://blog.sledgeworx.dev/ai-agent-cloud-economics/</link><pubDate>Wed, 15 Apr 2026 13:27:21 -0600</pubDate><guid>https://blog.sledgeworx.dev/ai-agent-cloud-economics/</guid><description>&lt;p&gt;The fundamental mechanic of cloud computing is that it pools usage across hardware. Canonically, Netflix had peak traffic in the evening when people watch tv shows, and much less traffic the rest of the day. If they had built their own data centers they would need 5x the hardware to serve peak traffic compared to their average. Doing so would have been super expensive so they used AWS EC2 instead.&lt;/p&gt;</description></item><item><title>Moving to Hugo</title><link>https://blog.sledgeworx.dev/moving-to-hugo/</link><pubDate>Mon, 02 Feb 2026 14:12:29 -0700</pubDate><guid>https://blog.sledgeworx.dev/moving-to-hugo/</guid><description>&lt;p&gt;Moving the blog to Hugo&lt;/p&gt;
&lt;p&gt;It’s time to move the blog off of wordpress. The current hosting setup crashes regularly. And frankly, I have no desire to figure out why. When I originally launched the blog I hoped to make money off of it. So I used wordpress and setup a mailing list. That dream never materialized. If you want to get updates I recommend setting up your RSS reader to track the blog.&lt;/p&gt;</description></item><item><title>The end of the age of the Programmer</title><link>https://blog.sledgeworx.dev/the-end-of-the-age-of-the-programmer/</link><pubDate>Tue, 20 Jan 2026 13:08:46 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-end-of-the-age-of-the-programmer/</guid><description>&lt;p&gt;Long ago digital calculators did not exist. Instead offices full of humans spent their days doing mathematics on slide rules assisted by charts of logic tables. The invention of the mainframe and eventually the digital pocket calculators eliminated those jobs. Yet today our civilization does more calculation than ever before. It just doesn’t involve humans in offices.&lt;/p&gt;
&lt;p&gt;Today we face another cliff. That of the human programmer being replaced by an AI programer. For the last 40 years programming has been done by humans. The work of converting simple product requirements “Make the button blue” have been done by human hands. We don’t need to do that anymore. AI coding tools are quite capable of adjusting buttons for product teams. AI is quite good at writing for loops. AI is quite capable of building an integration with an external AI and plumbing it into the rest of the system. You can just tell it to do those things using english and links of examples. &lt;/p&gt;</description></item><item><title>Why AI Investments makes sense</title><link>https://blog.sledgeworx.dev/why-ai-investments-makes-sense/</link><pubDate>Wed, 03 Dec 2025 19:09:21 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-ai-investments-makes-sense/</guid><description>&lt;p&gt;With AI investment arguably exceeding $1 trillion over the last few years many people are concerned about a bubble. Unlike the constant doomsayers claiming ‘AI has peaked’ despite the last improvement being released a week ago, a bubble could be a concern. But frankly I don’t think we are in that much of a bubble. &lt;/p&gt;
&lt;p&gt;Anthropic has revenues around 7 billion a year at this point. Google has been profitable for a long time. OpenAI has raised the most money relative to its revenues but it has 700 million weekly active users. Once they roll out ads and monetization the economics will change quite a lot. &lt;/p&gt;</description></item><item><title>The cybersecurity bar has risen</title><link>https://blog.sledgeworx.dev/the-cybersecurity-bar-has-risen/</link><pubDate>Fri, 14 Nov 2025 11:44:35 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-cybersecurity-bar-has-risen/</guid><description>&lt;p&gt;Anthropic just released a report on a sophisticated Claude Code and MCP based hacking ring. Based on their estimates humans provided less than 10% of the decision making for the operation. The hack involved multiple requests per second to Anthropic APIs across dozens of &amp;lsquo;agents&amp;rsquo;. The attackers managed to infiltrate several technology firms and exfiltrated credentials.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.anthropic.com/news/disrupting-AI-espionage"&gt;https://www.anthropic.com/news/disrupting-AI-espionage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you’ve ever run a website on the open internet you have likely seen server logs of automated exploit programs. Hackers run bots which automatically attempt dozens of well known attacks against every server on the internet. These scripts attempt everything from sql injection to server stack specific vulnerabilities. If you aren’t keeping up with updates eventually they will get you. &lt;/p&gt;</description></item><item><title>Common AI tropes that scare me in 2025</title><link>https://blog.sledgeworx.dev/common-ai-tropes-that-scare-me-in-2025/</link><pubDate>Thu, 02 Oct 2025 07:39:55 +0000</pubDate><guid>https://blog.sledgeworx.dev/common-ai-tropes-that-scare-me-in-2025/</guid><description>&lt;p&gt;&lt;strong&gt;The “@grok is this true” phenomenon&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; users often reply to a post with “@grok is this true” which triggers Elon’s LLM to respond to their post. As UX go it works pretty well. The problem is that people use it for the most mundane questions. It really emphasizes how little the average person knows about things. Even worse people attempt to use “@grok is this true” in online arguments. I’ve also had people attempt to use their ChatGPT Deep research output in arguments against me. This is a problem. Because LLMs will say whatever you want them to. You can’t use an LLM in an argument. An LLM is not a reliable source. But more importantly using LLMs in arguments is bad because it makes arguing with you comparable to a conversation with an LLM. Why bother talking to you if it’s the same as talking to an LLM? &lt;/p&gt;</description></item><item><title>Have you written your last for loop?</title><link>https://blog.sledgeworx.dev/have-you-written-your-last-for-loop/</link><pubDate>Thu, 21 Aug 2025 07:07:49 +0000</pubDate><guid>https://blog.sledgeworx.dev/have-you-written-your-last-for-loop/</guid><description>&lt;p&gt;Lately I’ve been doing a lot of coding using the AI Agent Claude Code. It is a terminal application which allows you to chat to it live while it attempts to code whatever you direct it to. My game Forward Blaster  &lt;a href="https://github.com/Sevii/forward-blaster"&gt;https://github.com/Sevii/forward-blaster&lt;/a&gt; was written by AI except for a few places where I edited constants. Needless to say the game includes a lot of loops. But I didn’t write any of them. I never felt the need to leave the AI agent workflow and start manually coding. &lt;/p&gt;</description></item><item><title>Vibecoding Demo</title><link>https://blog.sledgeworx.dev/vibecoding-demo/</link><pubDate>Sat, 28 Jun 2025 06:18:56 +0000</pubDate><guid>https://blog.sledgeworx.dev/vibecoding-demo/</guid><description>&lt;p&gt;I released a short demo of AI assisted vibe coding to the youtube channel. Basic games like this are one of my favorite use cases for vibecoding. LLMs are pretty good at it and the pay off is quick. Back in my teens I tried to learn programming to make games. I&amp;rsquo;d have gotten a lot farther if we&amp;rsquo;d had AI then instead of trying to figure out C++ from a two inch think book!&lt;/p&gt;</description></item><item><title>The original launch of Copilot soured a lot of people on AI for coding</title><link>https://blog.sledgeworx.dev/the-original-launch-of-copilot-soured-a-lot-of-people-on-ai-for-coding/</link><pubDate>Wed, 04 Jun 2025 07:02:43 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-original-launch-of-copilot-soured-a-lot-of-people-on-ai-for-coding/</guid><description>&lt;p&gt;In 2023 I was one of the many software engineers whose management pushed them into trying Github Copilot. I was not impressed. At the time Copilot was basically pointless for Java developers. IntelliJ already had Intellisense which did everything Copilot did, but more deterministically.&lt;/p&gt;
&lt;p&gt;In retrospect autocomplete was not the use case for AI to assist in the programing process. Personally, I find the AI chatbots to be very useful coding assistants for writing scripts and functions. And this last year AI coding Agents have really come into their own.&lt;/p&gt;</description></item><item><title>Code Without Learning to Code</title><link>https://blog.sledgeworx.dev/code-without-learning-to-code/</link><pubDate>Thu, 08 May 2025 17:47:36 +0000</pubDate><guid>https://blog.sledgeworx.dev/code-without-learning-to-code/</guid><description>&lt;p&gt;&lt;a href="https://codewithoutlearningtocode.com"&gt;https://codewithoutlearningtocode.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m working on a new book on Vibe Coding for people who don’t know how to code. Using LLMs to build simple programs unlocks a lot of programming ability for people who either tried and failed to learn to program or never got started. You no longer need to learn the basics of programming logic or syntax to build useful programs to solve your problems. &lt;/p&gt;
&lt;p&gt;The current target of the book is people who don’t know how to code but are willing to learn to run and test computer programs they create through Vibe Coding. &lt;/p&gt;</description></item><item><title>Reducing toil with AI</title><link>https://blog.sledgeworx.dev/reducing-toil-with-ai/</link><pubDate>Wed, 26 Mar 2025 06:37:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/reducing-toil-with-ai/</guid><description>&lt;p&gt;LLMs are at the point where they can reduce toil for software engineers across a host of use cases. Here we will explore a few I&amp;rsquo;ve thought of.&lt;/p&gt;
&lt;h4 id="reduces-time-spent-on-toil"&gt;Reduces time spent on toil&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Resize this button -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;Refactor this function -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;Connect these endpoints -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;Write more tests -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;Add more comments -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;Create PlantUML diagrams from a sketch -&amp;gt; AI&lt;/li&gt;
&lt;li&gt;First pass code reviews -&amp;gt; AI&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="reduces-time-spent-researching-small-things"&gt;Reduces time spent researching small things&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;AI is a better stack overflow&lt;/li&gt;
&lt;li&gt;Examine stack traces &lt;/li&gt;
&lt;li&gt;Easier to write architecture documents &lt;/li&gt;
&lt;li&gt;Faster development of small utilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="what-ai-still-cannot-do"&gt;What AI still cannot do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Test if a library will work for your use case &lt;/li&gt;
&lt;li&gt;Respond to outages &lt;/li&gt;
&lt;li&gt;Decide the product direction&lt;/li&gt;
&lt;li&gt;Argue with stakeholders &lt;/li&gt;
&lt;li&gt;Yell at people who want to do stupid things&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="a-few-opportunities-to-reduce-operational-toil"&gt;A few opportunities to reduce operational toil&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;AI can review graphs and notice changes&lt;/li&gt;
&lt;li&gt;AI can check if a website is down&lt;/li&gt;
&lt;li&gt;File bug reports &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For me the most valuable use of Claude as a coding assistant has been how it makes getting started much easier. Usually, to program a swift game I&amp;rsquo;d have to spend a couple hours breaking into swift development and building up my program off of examples. Claude was able to create a basic version of the game I wanted off of a detailed prompt. It didn&amp;rsquo;t manage to create the game in one shot, I had to edit the code a bit to get it to run. But it turned a project that would have taken me a few days into one that took a few hours.&lt;/p&gt;</description></item><item><title>An Excellent AI use case: Generating PlantUML and Mermaid schemas.</title><link>https://blog.sledgeworx.dev/an-excellent-ai-use-case-generating-plantuml-and-mermaid-schemas/</link><pubDate>Tue, 04 Feb 2025 08:13:06 +0000</pubDate><guid>https://blog.sledgeworx.dev/an-excellent-ai-use-case-generating-plantuml-and-mermaid-schemas/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever worked with PlantUML or Mermaid before it&amp;rsquo;s easy to forget the domain specific language used to build the diagrams. You sketch out your whiteboard diagram, discuss it with coworkers and are ready to start on your architecture document only to sit there stumped trying to remember how to convert your drawing into PlantUML.&lt;/p&gt;
&lt;p&gt;Well the good news is that Claude can do it for you. Just take a picture of your whiteboard and Claude can convert it into Mermaid or PlantUML for you. I tried both and Claude is better at Mermaid but can do PlantUML.&lt;/p&gt;</description></item><item><title>Links October 2024</title><link>https://blog.sledgeworx.dev/links-october-2024/</link><pubDate>Sat, 19 Oct 2024 21:50:03 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-october-2024/</guid><description>&lt;h2 id="great-article-on-mac-setup"&gt;Great article on mac setup&lt;/h2&gt;
&lt;p&gt;Lots of tools are outdated by default. Got to take advantage of this blog post since I got a new laptop this summer.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://matt.sh/setup-2021-late"&gt;https://matt.sh/setup-2021-late&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="operating-systems-use-out-of-date-assumptions"&gt;Operating Systems use out of date assumptions&lt;/h2&gt;
&lt;p&gt;Interesting talk on how modern systems on a chip differ from how we imagine computers to actually work. Over the last two decades hardware has gradually abstracted away many features from the actual operating system. The computer board is now a collection of sub-computers which cooperate to mimic the operation of an actual traditional computer.&lt;/p&gt;</description></item><item><title>A clear sign you are overdoing microservices</title><link>https://blog.sledgeworx.dev/a-clear-sign-you-are-overdoing-micro-services/</link><pubDate>Sat, 24 Feb 2024 12:15:38 +0000</pubDate><guid>https://blog.sledgeworx.dev/a-clear-sign-you-are-overdoing-micro-services/</guid><description>&lt;p&gt;&lt;strong&gt;Fine grained services&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microservices have been the thing for over 15 years. They are great in large companies with CI/CD environments. But as your situation drifts farther away from the ideal microservice use case traps abound. &lt;/p&gt;
&lt;p&gt;**Building a new service for one endpoint  **&lt;/p&gt;
&lt;p&gt;If you find yourself having a conversation where you need to create a new endpoint somewhere, but adding it to any of your existing services would break the concept of that microservice. Turning it instantly into a ball of mud with no clear purpose. You have fallen into this trap. microservice does not mean each service has only one HTTP endpoint. That use case is better served with Cloud functions like AWS lambda. &lt;/p&gt;</description></item><item><title>KPIs for Software Engineers</title><link>https://blog.sledgeworx.dev/guides/kpis-for-software-engineers/</link><pubDate>Sun, 16 Jul 2023 07:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/kpis-for-software-engineers/</guid><description>&lt;p&gt;Key Performance Indicators are a common business practice. They are a quantifiable measure of performance for a specific objective. Occasionally, I am asked to create my own KPIs as an individual contributor. I think it is a bit strange, after all I work for the company, you’d think they would tell me what the KPIs are!&lt;/p&gt;
&lt;p&gt;Ideally we want to avoid metrics which are created arbitrarily by team members. Hours worked is a great example of this especially in remote work environments. In hourly workplaces employees check in and check out to validate hours worked. I have never seen a software company do anything comparable. Typically, the software company employee is asked to fill in timesheets based on their personal memory with zero accountability. That scenario does not make for a good KPI. &lt;/p&gt;</description></item><item><title>Up in the air</title><link>https://blog.sledgeworx.dev/up-in-the-air/</link><pubDate>Mon, 27 Mar 2023 18:51:15 +0000</pubDate><guid>https://blog.sledgeworx.dev/up-in-the-air/</guid><description>&lt;p&gt;We are in a phase where planning becomes quite difficult. ChatGPT has started a capitalistic AI war. Microsoft swept in to shepherd commercialization. Google is on the back foot for now. Amazon will launch something I have no doubt. ChatGPT style tech would make Alexa viable by solving the fractal conversation problem.&lt;/p&gt;
&lt;p&gt;The players are moving, immense amounts of capital has been unleashed. But for us on the outside it’s a difficult time. You can’t really plan for the future. Because the technology is advancing rapidly and is already transforming jobs in various industries.&lt;/p&gt;</description></item><item><title>Agile has gone from ‘people over process’ to ’no process’</title><link>https://blog.sledgeworx.dev/agile-has-gone-from-people-over-process-to-no-process/</link><pubDate>Sun, 26 Feb 2023 06:28:34 +0000</pubDate><guid>https://blog.sledgeworx.dev/agile-has-gone-from-people-over-process-to-no-process/</guid><description>&lt;p&gt;In practice &amp;lsquo;agile&amp;rsquo; means &amp;lsquo;we have no process in place and each team does whatever random thing the manager wants to try next&amp;rsquo;. Sometimes that is SAFE sometimes its SCRUM, usually it’s a combination of different things. This isn’t necessarily a bad thing, but there are trade offs. &lt;/p&gt;
&lt;p&gt;The first is standardization. If every team follows a different process it’s difficult to understand what is going on at a management level. Which teams are productive? Which teams are in downward spirals? If you don’t have a standard to judge against you can’t find out.&lt;/p&gt;</description></item><item><title>When creating processes (mechanisms) its important to consider who benefits</title><link>https://blog.sledgeworx.dev/when-creating-processes-mechanisms-its-important-to-consider-who-benefits/</link><pubDate>Sun, 19 Feb 2023 06:27:47 +0000</pubDate><guid>https://blog.sledgeworx.dev/when-creating-processes-mechanisms-its-important-to-consider-who-benefits/</guid><description>&lt;p&gt;A business process is any procedure that is done manually by employees. In the software engineering environment this includes everything from code reviews to standup and 1 on 1s. &lt;/p&gt;
&lt;p&gt;Compliance with processes involves education, incentives and punishments. People need to know about the process to follow it. And if you don’t attach incentives to the process, negative or positive, people won’t feel a need to follow it. &lt;/p&gt;
&lt;p&gt;A common cycle I see is that management will think of a new process which could solve a problem the development organization is facing. They then declare the new process and are surprised when later on no one is following the new process. &lt;/p&gt;</description></item><item><title>I'm excited to announce Sledgeconf 2023: architecture success stories.</title><link>https://blog.sledgeworx.dev/i-excited-to-announce-sledgeconf-2023-architecture-success-stories/</link><pubDate>Mon, 06 Feb 2023 15:36:34 +0000</pubDate><guid>https://blog.sledgeworx.dev/i-excited-to-announce-sledgeconf-2023-architecture-success-stories/</guid><description>&lt;p&gt;For the next sledgeconf we will focus on software architecture success stories. &lt;/p&gt;
&lt;p&gt;What does architecture success mean? Software architecture is the way we structure our software programs. A successful architecture enables us to support user requests, integrate improvements all while making it easy for the engineers working on the project. &lt;/p&gt;
&lt;p&gt;A bad architecture has to fail in some major way. It might have simply not worked once it was built. It might have made it hard for maintainers to fix bugs. it might have been too expensive to operate. &lt;/p&gt;</description></item><item><title>Trying a new language won’t solve your development problems.</title><link>https://blog.sledgeworx.dev/trying-a-new-language-wont-solve-your-development-problems/</link><pubDate>Sun, 22 Jan 2023 08:49:59 +0000</pubDate><guid>https://blog.sledgeworx.dev/trying-a-new-language-wont-solve-your-development-problems/</guid><description>&lt;p&gt;I’ve had a conversation where someone proposes trying a new language like Go or Scala or Typescript for new development several times. Typically, the argument is that we have problems x, y and z with our current language and they would all be better under $new_language. The arguments are always things like x has better performance, y has better typing, z is more functional. &lt;/p&gt;
&lt;p&gt;There is no free lunch within modern programming languages. There are no opportunities to switch to a new language without paying new costs. Java requires a lot of boiler plate and is very heavy weight. Typescript is async by default and has non-reliable typing. Go has a litany of problems (tool chain, exceptions, generics, etc) downstream of Google making all the serious decisions for the language. Rust is very strict and gives you excess performance you can’t use. &lt;/p&gt;</description></item><item><title>What makes a low tier software engineering culture?</title><link>https://blog.sledgeworx.dev/what-makes-a-low-tier-software-engineering-culture/</link><pubDate>Sun, 15 Jan 2023 08:22:11 +0000</pubDate><guid>https://blog.sledgeworx.dev/what-makes-a-low-tier-software-engineering-culture/</guid><description>&lt;p&gt;In my conceptualization a low tier software engineering culture is one where engineers have low wages, low accountability, little responsibility and little control over the software development lifecycle. In my experience this is typically due to economic reasons more so than ineptitude. &lt;/p&gt;
&lt;p&gt;One example is specification work for hardware integration projects. This article talks about how a culture of spec work killed the Japanese software industry for decades &lt;a href="https://www.disruptingjapan.com/the-forgotten-mistake-that-killed-japans-software-industry/"&gt;https://www.disruptingjapan.com/the-forgotten-mistake-that-killed-japans-software-industry/&lt;/a&gt;. These kinds of projects have inflexible deadlines, clear feature requirements and no customer flexibility. Customer’s can’t shop around for toaster software. The result is that engineers have little freedom or control over the software product. And since the software is merely a cost factor, little compensation is available for the developers. &lt;/p&gt;</description></item><item><title>Please don’t learn software architecture off the internet</title><link>https://blog.sledgeworx.dev/please-dont-learn-software-architecture-off-the-internet/</link><pubDate>Mon, 09 Jan 2023 16:48:47 +0000</pubDate><guid>https://blog.sledgeworx.dev/please-dont-learn-software-architecture-off-the-internet/</guid><description>&lt;p&gt;The internet isn’t the best place to learn software architecture. While you can quickly read about dozens of novel ways to structure software applications the internet tends to pull people towards poor solutions. &lt;/p&gt;
&lt;p&gt;Software architectures are ways of structuring software to support various demands. &lt;/p&gt;
&lt;p&gt;- development speed&lt;/p&gt;
&lt;p&gt;- hardware platform (web, mobile, point of sale, drone, etc)&lt;/p&gt;
&lt;p&gt;- team structure &lt;/p&gt;
&lt;p&gt;- ability to scale aggressively (If we get a big customer can we scale 100x quickly)&lt;/p&gt;</description></item><item><title>Links Post | Year End</title><link>https://blog.sledgeworx.dev/links-post-year-end/</link><pubDate>Sat, 31 Dec 2022 12:54:05 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post-year-end/</guid><description>&lt;p&gt;&lt;strong&gt;Quite good science fiction novella.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://borretti.me/fiction/eog581"&gt;https://borretti.me/fiction/eog581&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Standford Hates fun&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://johnhcochrane.blogspot.com/2022/12/stanford-hates-fun.html"&gt;https://johnhcochrane.blogspot.com/2022/12/stanford-hates-fun.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I noticed something similar to the no-fun policy at Standford. But I can’t say if it was because of bureaucracy or simply the schools I went to. My freshman year I went to Saint John’s College in Santa Fe studying liberal arts. The school was small with around 400 students. We had all the classic college stuff. Plenty of underage drinking, fun traditions like making the freshman class carry a keg around the campus in an imitation of the ark of the covenant. There was a lot of underage drinking and partying, everyone knew everyone else and we had lots of club activities. It was basically a fraternity experience except for everyone. &lt;/p&gt;</description></item><item><title>Can ChatGPT write?</title><link>https://blog.sledgeworx.dev/can-chatgpt-write/</link><pubDate>Sat, 03 Dec 2022 12:52:34 +0000</pubDate><guid>https://blog.sledgeworx.dev/can-chatgpt-write/</guid><description>&lt;p&gt;ChatGPT &lt;a href="https://chat.openai.com/chat"&gt;https://chat.openai.com/chat&lt;/a&gt; came out last week and I figured I may as well experiment with it a bit.&lt;/p&gt;
&lt;p&gt;The below is 100% output from ChatGPT. I&amp;rsquo;ve removed the prompts but otherwise have not edited it at all. This is based on a short story I&amp;rsquo;ve been working on in the traditional way of writing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Dragon Slayer&amp;rsquo;s apprentice&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Erlich is a monster hunter. Working for the crown his duty is to hunt the wolves, goblins, bears and other creatures that prey on the peasantry. After reports of goblin raids, his assistance has been requested by a local lord. What started out a simple job quickly becomes more complicated as the lord’s son insists on being allowed to participate in the great sport of goblin hunting. &lt;/p&gt;</description></item><item><title>Code Review Handbook</title><link>https://blog.sledgeworx.dev/guides/code-review-handbook/</link><pubDate>Tue, 11 Oct 2022 16:03:41 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/code-review-handbook/</guid><description>&lt;p&gt;Previously published as a PDF&lt;/p&gt;
&lt;p&gt;**Code Review Handbook:**&lt;strong&gt;Code Review Basics&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How do you do a code review? Typically, I get an email from bitbucket or Github saying &lt;em&gt;“Adam added you as a reviewer on ‘SMB-1182-larger-buttons’”&lt;/em&gt;. This is probably the 10th PR of the day, it is a constant stream. Often there is a 20 file PR that I just do not want to get started on. This is the industry standard PR environment, where the requests are constant and each PR blocks the writer until he gets the magical number of review checkmarks that let him move that JIRA ticket to ‘Ready for QA’.&lt;/p&gt;</description></item><item><title>Links Post</title><link>https://blog.sledgeworx.dev/links-post-3/</link><pubDate>Sun, 09 Oct 2022 11:04:55 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post-3/</guid><description>&lt;p&gt;Real time analytics article&lt;/p&gt;
&lt;p&gt;&lt;a href="https://adamsinger.substack.com/p/demystifying-real-time-analytics?utm_source=url&amp;amp;s=r"&gt;https://adamsinger.substack.com/p/demystifying-real-time-analytics?utm_source=url&amp;amp;s=r&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Danluu on the issues with purchasing solutions.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://danluu.com/nothing-works/"&gt;https://danluu.com/nothing-works/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nuclear Stuff &lt;/p&gt;
&lt;p&gt;&lt;a href="https://austinvernon.site/blog/nuclear.html"&gt;https://austinvernon.site/blog/nuclear.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://whatisnuclear.com/economics.html"&gt;https://whatisnuclear.com/economics.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Are we really engineers?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hillelwayne.com/post/are-we-really-engineers/"&gt;https://www.hillelwayne.com/post/are-we-really-engineers/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SledgeConf 2022 Videos released</title><link>https://blog.sledgeworx.dev/sledgeconf-2022-videos-released/</link><pubDate>Mon, 08 Aug 2022 08:49:15 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-2022-videos-released/</guid><description>&lt;p&gt;I’ve uploaded the videos from the 2022 SledgeConf to the youtube channel! Feel free to take a look. This gives you a good idea of how SledgeConf works in practice. &lt;/p&gt;
&lt;p&gt;Planning your Cloud Migration - Jay Manning&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SSXVGlVfqn8"&gt;https://www.youtube.com/watch?v=SSXVGlVfqn8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Practical Software Estimation - Nicholas Sledgianowski&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=DHdOldaXtYQ"&gt;https://www.youtube.com/watch?v=DHdOldaXtYQ&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Configuration - Best Practices</title><link>https://blog.sledgeworx.dev/configuration-best-practices/</link><pubDate>Sun, 17 Jul 2022 09:11:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/configuration-best-practices/</guid><description>&lt;h2 id="static-vs-dynamic-configuration"&gt;Static vs Dynamic Configuration&lt;/h2&gt;
&lt;p&gt;There are two main types of configuration static and dynamic. The main difference is in how the configuration is consumed by your services. &lt;/p&gt;
&lt;p&gt;Static configuration is immutable in the life time of an instance of your service. The service can read it once on startup and safely assume it will never change. &lt;/p&gt;
&lt;p&gt;Dynamic configuration is mutable in the life of a service instance. The service cannot assume the configuration it has in memory is still accurate. It must have a reliable way to get configuration changes. &lt;/p&gt;</description></item><item><title>SledgeConf July 15th 2022</title><link>https://blog.sledgeworx.dev/sledgeconf-july-15th-2022/</link><pubDate>Sat, 18 Jun 2022 11:36:32 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-july-15th-2022/</guid><description>&lt;p&gt;4:30PM Pacific Time&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;https://sledgeconf.dev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hey, I’m bringing back Sledgeconf on July 15th. We have two talks this time ‘Planning your Cloud Migration’ and ‘Practical Software Estimation’. &lt;/p&gt;
&lt;h2 id="planning-your-cloud-migration"&gt;“Planning your Cloud Migration”&lt;/h2&gt;
&lt;p&gt;Jay Manning joins us again to talk about planning and executing Cloud Migrations. Jay has extensive experience with AWS partners working through their Cloud journey. &lt;/p&gt;
&lt;h2 id="practical-software-estimation"&gt;“Practical Software Estimation” &lt;/h2&gt;
&lt;p&gt;I will be speaking on my research and interviews on the subject of practical software estimation. How do we estimate software today and what are the best practices?&lt;/p&gt;</description></item><item><title>Querying complex JSON objects in AWS Athena</title><link>https://blog.sledgeworx.dev/guides/querying-complex-json-objects-in-aws-athena/</link><pubDate>Sun, 15 May 2022 10:39:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/querying-complex-json-objects-in-aws-athena/</guid><description>&lt;p&gt;AWS Athena is a managed big data query system based on S3 and Presto. It supports a bunch of big data formats like JSON, CSV, Parquet, ION, etc. Schemas are applied at query time via AWS Glue. &lt;/p&gt;
&lt;p&gt;To get started with Athena you define your Glue table in the Athena UI and start writing SQL queries. For my project I’ve been working on heavily nested JSON. The schema for this data is very involved so I opted to just use JSON path and skip defining my schema in AWS Glue. Of course that was after I wasted two days trying to figure out how to do it.&lt;/p&gt;</description></item><item><title>What is your design budget</title><link>https://blog.sledgeworx.dev/what-is-your-design-budget/</link><pubDate>Sun, 01 May 2022 10:44:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/what-is-your-design-budget/</guid><description>&lt;p&gt;We all want to have good longterm software architecture. Build it right the first time. But some organizations fall into the trap of trying to get a perfect design before they start building.&lt;/p&gt;
&lt;p&gt;They include more stakeholders, try to plan for contingencies, develop a high availability strategy. &lt;/p&gt;
&lt;p&gt;Those things are all good to have. But you don’t need them before you have users. If you have no users you shouldn’t be thinking about high availability. If your product doesn’t work yet you don’t need scalability.&lt;/p&gt;</description></item><item><title>Polyglot programming is a bad goal&amp;nbsp;</title><link>https://blog.sledgeworx.dev/polyglot-programming-is-a-bad-goal/</link><pubDate>Sun, 24 Apr 2022 15:55:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/polyglot-programming-is-a-bad-goal/</guid><description>&lt;p&gt;People have extended the goal of building micro service systems such that we aren’t locked into a language to a new goal of every repository being able to use any language.&lt;/p&gt;
&lt;p&gt;It’s phrased as ‘shouldn’t we use the best language for the job.‘ But the implication is that we should be able to pick a language for this new project independent of the rest of our existing software stack.&lt;/p&gt;
&lt;p&gt;The problem is that it’s not a free choice. Even if you’re in an ideal microservices environment where everything is API based, logging and metrics are handled by the platform and shared libraries are banned there are costs to having more languages in play.&lt;/p&gt;</description></item><item><title>Away team work</title><link>https://blog.sledgeworx.dev/away-team-work/</link><pubDate>Sun, 17 Apr 2022 15:04:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/away-team-work/</guid><description>&lt;p&gt;Away team work is a critical component of high performance software organizations. It is a way for high priority teams to work around other teams’ manpower constraints to deliver software. Without a well established culture of away team project work your organization will default to a standard of ‘shut up and wait while your item is in the backlog’. &lt;/p&gt;
&lt;p&gt;What is away team work exactly? Away team work is when your team implements a feature or integration in another team’s codebase. Strictly speaking in away team work the host team does not review or approve pull requests. Your team’s senior engineers will get approval at an architectural level then handle pull request review themselves. &lt;/p&gt;</description></item><item><title>The core problem of micro services - how many feature can you fit through the pipeline before it breaks down?</title><link>https://blog.sledgeworx.dev/the-core-problem-of-micro-services-how-many-feature-can-you-fit-through-the-pipeline-before-it-breaks-down/</link><pubDate>Mon, 04 Apr 2022 23:06:11 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-core-problem-of-micro-services-how-many-feature-can-you-fit-through-the-pipeline-before-it-breaks-down/</guid><description>&lt;p&gt;At Amazon I had the chance to watch a monolithic service reach the point where it had to be split up into microservices. When I started we had about thirty software engineers contributing to our service. We had the great idea of developing a framework to speed up feature delivery for everyone in Alexa Shopping. The framework ended up working and the number of people contributing code to our service shot up over the next two years. As of July 2021 we had around 200-300 people in our partner support slack channel.&lt;/p&gt;</description></item><item><title>Self-hosted is not cheaper or better. Your options are pay Amazon insane markups or deal with a Platform as a Service built by the lowest bidder.</title><link>https://blog.sledgeworx.dev/self-hosted-is-not-cheaper-or-better-your-options-are-pay-amazon-insane-markups-or-deal-with-a-platform-as-a-service-built-by-the-lowest-bidder/</link><pubDate>Wed, 09 Feb 2022 12:21:22 +0000</pubDate><guid>https://blog.sledgeworx.dev/self-hosted-is-not-cheaper-or-better-your-options-are-pay-amazon-insane-markups-or-deal-with-a-platform-as-a-service-built-by-the-lowest-bidder/</guid><description>&lt;p&gt;We often see posts on hacker news about how Amazon charges an insane markup for hosting or data transfer, or anything. Then someone will post a comparison where they price out an equivalent amount of hardware and show that it would cost 1/5th or 1/10th the cost. They then assume, obviously, hiring an IT department that can run this hardware is an achievable goal. &lt;/p&gt;
&lt;p&gt;Sorry, no it’s not achievable. Most companies cannot build a decent IT team that could run their own servers. They don’t have the ability to organize or hire the IT people needed. Not to mention they would never be willing to pay the salary costs. Quite simply, most businesses that try to run their own hardware will have a lower quality internal platform than if they just paid Microsoft. Whats the point of having faster hardware if your software stack is stuck in 2005 and managed by college drop outs?&lt;/p&gt;</description></item><item><title>Collected Sledgeworx</title><link>https://blog.sledgeworx.dev/collected-sledgeworx/</link><pubDate>Wed, 12 Jan 2022 13:50:48 +0000</pubDate><guid>https://blog.sledgeworx.dev/collected-sledgeworx/</guid><description>&lt;p&gt;&lt;a href="https://www.amazon.com/dp/B09QB8T6T9"&gt;https://www.amazon.com/dp/B09QB8T6T9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The collection is out now!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve finally released my collection &lt;em&gt;Collected Sledgeworx&lt;/em&gt; on amazon.&lt;/p&gt;
&lt;p&gt;I started blogging to share my thoughts and vent frustrations. My first blog was about futurism and politics, my second on fitness, my third was Sledgeworx.io. I ended up being much better at a writing about software than anything else.&lt;/p&gt;
&lt;p&gt;In this book I have collected many of the posts on the blog from its inception until the second half of 2021. These writings can be found on the blog in similar form. But you will find that the works in this book have been edited and supplemented in small ways.&lt;/p&gt;</description></item><item><title>What happened to Seviipay</title><link>https://blog.sledgeworx.dev/what-happened-to-seviipay/</link><pubDate>Sun, 02 Jan 2022 08:03:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/what-happened-to-seviipay/</guid><description>&lt;p&gt;Seviipay is a SAAS startup I launched in Summer 2021. The idea was to bring best in class UI/UX to native cryptocurrency payments. Basically the stripe of cryptocurrency payments. The MVP worked on mobile and desktop just for Ethereum. I did a few product discovery calls without getting any buyers.. Eventually the project kind of stalled and I moved on to other projects.&lt;/p&gt;
&lt;p&gt;The big thing here was motivation. My motivation for leaving my job was not Seviipay. The idea for Seviipay just came up at a time when I was really motivated to get out. Handling burnout and starting a business at the same time is not a great idea. &lt;/p&gt;</description></item><item><title>What is Web3? It’s about owning your user identity.</title><link>https://blog.sledgeworx.dev/what-is-web3-its-about-owning-your-user-identity/</link><pubDate>Fri, 17 Dec 2021 09:30:33 +0000</pubDate><guid>https://blog.sledgeworx.dev/what-is-web3-its-about-owning-your-user-identity/</guid><description>&lt;p&gt;There is a lot of discussion of Web3 lately. Is it a scam? Is decentralized finance Web3? Will Web3 &lt;strong&gt;destroy&lt;/strong&gt; Web2? In this blog post we will talk about what Web3 is now and what Web3 allows us to build tomorrow.&lt;/p&gt;
&lt;p&gt;**What is Web3 now?  **&lt;/p&gt;
&lt;p&gt;Right now Web3 is a technology paradigm which supports two main types of services Decentralized Finance (Defi) and Non-Fungible Tokens (NFTs). A lot of online discussion about Web3 focuses on whether NFTs are valuable or if Defi is a scam. People want Web3 to be a scam. In my opinion that is the same as looking at &lt;a href="http://pets.com"&gt;pets.com&lt;/a&gt; in 2000 and concluding that Web 1.0 was a scam.  &lt;/p&gt;</description></item><item><title>So you’re making an NFT….</title><link>https://blog.sledgeworx.dev/so-youre-making-an-nft/</link><pubDate>Thu, 21 Oct 2021 15:46:49 +0000</pubDate><guid>https://blog.sledgeworx.dev/so-youre-making-an-nft/</guid><description>&lt;p&gt;Hey, everyone I’m working on an NFT project. Originally, I wanted to get programmer NFTs for the team at Guava Labs. I wanted to do something like &lt;em&gt;Coders waiting for Compilers&lt;/em&gt; , but that didn’t have enough pizazz.  Then I was talking to some NFT artists and seeing if we could sell them a website with web3 components to tie into their NFT projects, but none of them were ready to go. So I ended up getting getting an idea and making up a mythos.&lt;/p&gt;</description></item><item><title>How will Remote Works effect the Employee Employer relationship?</title><link>https://blog.sledgeworx.dev/how-will-remote-works-effect-the-employee-employer-relationship/</link><pubDate>Tue, 19 Oct 2021 13:46:04 +0000</pubDate><guid>https://blog.sledgeworx.dev/how-will-remote-works-effect-the-employee-employer-relationship/</guid><description>&lt;p&gt;The American workforce has been operating in a post-Organization Man &lt;a href="https://www.amazon.com/Organization-Man-William-H-Whyte/dp/0812218191"&gt;https://www.amazon.com/Organization-Man-William-H-Whyte/dp/0812218191&lt;/a&gt; manner since the 1990s when outsourcing ended the job security paradigm. &lt;/p&gt;
&lt;p&gt;The current paradigm ‘millenial’ (1990-2020), expects workers to work for a single company at a time. The corporation provides the buildings, furnishes the offices, provides all the tools and requires everyone to work from the comforts of the corporate office. Middle managers accompany the workers sharing out of touch jokes and ensuring that the office is a place of work. &lt;/p&gt;</description></item><item><title>SledgeConf Update!</title><link>https://blog.sledgeworx.dev/sledgeconf-update/</link><pubDate>Mon, 04 Oct 2021 10:38:28 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-update/</guid><description>&lt;p&gt;&lt;strong&gt;Fall into SledgeConf&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;November 5th 2021 4:30PM Pacific Time!&lt;/p&gt;
&lt;p&gt;This quarter we have Jay Manning presenting on working with recruiters, negotiating offers and more!&lt;/p&gt;
&lt;p&gt;I will also be presenting on Big Software and Big Tech!&lt;/p&gt;
&lt;p&gt;This SledgeConf should be a bit more relaxed since we will only have 2 speakers.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;https://sledgeconf.dev&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How will remote work change the employee - employer relationship?</title><link>https://blog.sledgeworx.dev/how-will-remote-work-change-the-employee-employer-relationship/</link><pubDate>Tue, 28 Sep 2021 10:30:16 +0000</pubDate><guid>https://blog.sledgeworx.dev/how-will-remote-work-change-the-employee-employer-relationship/</guid><description>&lt;p&gt;**** The American workforce has been operating in a post-Organization Man &lt;a href="https://www.amazon.com/Organization-Man-William-H-Whyte/dp/0812218191"&gt;https://www.amazon.com/Organization-Man-William-H-Whyte/dp/0812218191&lt;/a&gt; manner since the 1990s when outsourcing ended the job security paradigm.&lt;/p&gt;
&lt;p&gt;The current ‘millenial’ paradigm (1990-2020), expects workers to work for a single company at a time. The corporation provides the buildings, furnishes the offices, provides all the tools and requires everyone to work from the comforts of the corporate office. Middle managers accompany the workers sharing out of touch jokes and ensuring that the office is a place of work.&lt;/p&gt;</description></item><item><title>Doorkeeper with Rails and Zapier</title><link>https://blog.sledgeworx.dev/guides/doorkeeper-with-rails-and-zapier/</link><pubDate>Mon, 13 Sep 2021 11:23:46 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/doorkeeper-with-rails-and-zapier/</guid><description>&lt;p&gt;I set up Oauth2 authentication with Zapier for Seviipay.com recently and figured it was worth a short post on the gotchas I encountered.&lt;/p&gt;
&lt;p&gt;The biggest problem I had was with the Refresh token configuration. I would do a test connection, validate that I wanted to give Zapier access, send a test notification and it would work. Then an hour later I get an email from Zapier that they got a 401 error and are turning off my integration. The issues were that Doorkeeper does not enable refresh tokens by default and that Zapier does not pass the client ID or secret by default to the refresh api.&lt;/p&gt;</description></item><item><title>Seviipay - cryptocurrency payments for everyone</title><link>https://blog.sledgeworx.dev/seviipay-cryptocurrency-payments-for-everyone/</link><pubDate>Sat, 11 Sep 2021 11:39:33 +0000</pubDate><guid>https://blog.sledgeworx.dev/seviipay-cryptocurrency-payments-for-everyone/</guid><description>&lt;p&gt;I’m working on a new project. Seviipay is a software as a service project through which I hope to make blockchain integration easy for everyone. It is in free alpha launch right now and you can check it out at &lt;a href="http://www.seviipay.com"&gt;www.seviipay.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Why blockchain integration? And why now?&lt;/p&gt;
&lt;p&gt;I first got involved with Ethereum back in 2015 before the network went live. It was a fun toy then and I spent some time getting the test version running on my gaming desktop in college. Then I got bored of it and stopped paying attention until the 2017/18 bubble. The story would have ended there except one of my friends did a NFT project this spring and I decided to buy one of them to support him. That led me to seeing the UI at &lt;a href="http://opensea.io"&gt;opensea.io&lt;/a&gt;, &lt;a href="http://veefriends.com"&gt;veefriends.com&lt;/a&gt; and other web3 applications. Let me tell you the user experience has come a long way in the last six years.&lt;/p&gt;</description></item><item><title>A few things I learned after 3~ years at Amazon</title><link>https://blog.sledgeworx.dev/a-few-things-i-learned-after-3-years-at-amazon/</link><pubDate>Mon, 06 Sep 2021 08:14:23 +0000</pubDate><guid>https://blog.sledgeworx.dev/a-few-things-i-learned-after-3-years-at-amazon/</guid><description>&lt;p&gt;&lt;strong&gt;“&lt;/strong&gt; &lt;em&gt;two is better than zero&lt;/em&gt;**” is definitely harmful.  **&lt;/p&gt;
&lt;p&gt;The phrase &lt;em&gt;“two is better than zero” - Jeff Bezos&lt;/em&gt; drives a lot of the technical disfunction inside of Amazon. I typically explain it to people by saying “ &lt;em&gt;Amazon has 3 internal tools for every job with one tool’s worth of documentation&lt;/em&gt; ”.  Which is basically true, for every problem internally we have 0-3+ tools to tackle it. When our team would come upon issues we would review the internal solutions typically one would be deprecated, another had poor documentation, the third kind of fit our use case, the AWS service would have too high latency.&lt;/p&gt;</description></item><item><title>Two issues facing software in the 2020s</title><link>https://blog.sledgeworx.dev/two-issues-facing-software-in-the-2020s/</link><pubDate>Mon, 30 Aug 2021 14:47:30 +0000</pubDate><guid>https://blog.sledgeworx.dev/two-issues-facing-software-in-the-2020s/</guid><description>&lt;p&gt;I have been thinking about the problems in software a bit lately. As I see it we have 2 core issues, the first is the diseconomies of scale in software. The more and bigger the software, the more it costs to develop. The second issue is software security and maintenance.&lt;/p&gt;
&lt;p&gt;Diseconomies of scale are an issue because we keep writing more software. And the expectations of that software continue to rise. Smartphones started out with phone calls, texting, and surfing the web. Now your smartphone tracks your exercise, interacts with your smart home devices, does payments and more. As the smartphone becomes your main connection to the digital its complexity increases, and at the same time the expectations for everything else increase. &lt;/p&gt;</description></item><item><title>Links Post</title><link>https://blog.sledgeworx.dev/links-post-2/</link><pubDate>Sun, 15 Aug 2021 16:06:58 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post-2/</guid><description>&lt;p&gt;Lots of links this round. I’ve had a lot of time to surf around the interwebz and came across a number of belief updating thoughts. Overall these updates make me feel very optimistic about the future.&lt;/p&gt;
&lt;p&gt;Watch out for the Zircon 5 though!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Chemical Hunger&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why is everyone so fat these days? Is it just because humans are lazy gluttons? This series of posts dives into possible chemical factors to fatness. &lt;/p&gt;</description></item><item><title>RSS still works and is pretty awesome</title><link>https://blog.sledgeworx.dev/rss-still-works-and-is-pretty-awesome/</link><pubDate>Tue, 10 Aug 2021 10:33:41 +0000</pubDate><guid>https://blog.sledgeworx.dev/rss-still-works-and-is-pretty-awesome/</guid><description>&lt;p&gt;Despite it being the age of social media, I get a lot of my content via RSS. I have the mac Reeder app which lets me subscribe to blogs. It is nice because without RSS I will see a blogger on Hacker News or reddit, enjoy their post and then their next post won’t be on the front page so I won’t see it. RSS fixes that because I can read their post and if I enjoy it, subscribe to their RSS feed.&lt;/p&gt;</description></item><item><title>Blockchains are the first mega scale software daemons</title><link>https://blog.sledgeworx.dev/blockchains-are-the-first-mega-scale-software-daemons/</link><pubDate>Mon, 02 Aug 2021 14:24:34 +0000</pubDate><guid>https://blog.sledgeworx.dev/blockchains-are-the-first-mega-scale-software-daemons/</guid><description>&lt;p&gt;A software daemon is some bit of software that runs independently of human control. We have been creating them for most of computing history. But the majority are not that important. Nobody knows their names. Nobody really cares that much if they have bugs. If one stops working you restart it and move on with your life.&lt;/p&gt;
&lt;p&gt;Cryptocurrency blockchains are also daemons. Each blockchain is just software that performs whatever tasks it is programmed to do. The interesting differences are the scale and the distributed nature of the blockchain. Millions of people contribute hardware to run blockchain software as opposed to a cronjob running only on my laptop. &lt;/p&gt;</description></item><item><title>Summer of Sledge Conference Announcement</title><link>https://blog.sledgeworx.dev/summer-of-sledge-conference-announcement/</link><pubDate>Wed, 21 Jul 2021 08:33:22 +0000</pubDate><guid>https://blog.sledgeworx.dev/summer-of-sledge-conference-announcement/</guid><description>&lt;p&gt;The next SledgeConf is coming August 27th 2021 at 4:30PM PST!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;https://sledgeconf.dev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This SledgeConf my talk will focus on big software monoliths at big tech. But a lot of people agreed to speak this time so my talk might get squeezed out of the line up! Speakers will be announced as we approach the day of Sledgeconf Summer 2021.&lt;/p&gt;</description></item><item><title>Why don't people use functional languages more.</title><link>https://blog.sledgeworx.dev/why-dont-people-use-functional-languages-more/</link><pubDate>Sun, 20 Jun 2021 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-dont-people-use-functional-languages-more/</guid><description>&lt;p&gt;“There are only two kinds of languages: the ones people complain about and the ones nobody uses” — common quote&lt;/p&gt;
&lt;p&gt;This is a fun statement if you think about it. Because the languages everyone complains about are obviously better than the ones nobody uses. It seems controversial but a simple thought example shows why it has to be this way.&lt;/p&gt;
&lt;p&gt;Imagine a world where the mainstream languages were worse than the niche languages like Haskell or Crystal. In this world Haskell has a clear 2x productivity advantage over Java. Since Haskell is clearly better than Java most projects that use Haskell will execute roughly twice as fast. Double productivity is enough that companies using Haskell will be able to achieve the same results with less money spent on developers and thus achieve higher profits. We should see companies that don’t use Haskell going out of business. Eventually we would expect all greenfield development to happen in Haskell. &lt;/p&gt;</description></item><item><title>Expecting people to become ‘Senior’ Engineers in 3 years is ridiculous.</title><link>https://blog.sledgeworx.dev/expecting-people-to-become-senior-engineers-in-3-years-is-ridiculous/</link><pubDate>Sun, 13 Jun 2021 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/expecting-people-to-become-senior-engineers-in-3-years-is-ridiculous/</guid><description>&lt;p&gt;Becoming a ‘Senior’ engineer in three years is a ridiculous concept. Programming is a complex enough endeavor that you can’t learn the basics of most areas in 3 years of work experience. By the 3 year mark great programmers will have achieved a high level of expertise in one programming domain. For example 3 years might be enough time to master web development with Django. But web development with Django is just one of many domains within computer programming. Mastering Django does not require a software engineer to learn anything about operating systems, low latency computing or graphics computing. In some environments web developers might not have any involvement with DNS or how their software is made available to users as deployment is handled by a infrastructure as code team.&lt;/p&gt;</description></item><item><title>Design Documents for Distributed Companies</title><link>https://blog.sledgeworx.dev/design-documents-for-distributed-companies-2/</link><pubDate>Sun, 06 Jun 2021 08:56:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/design-documents-for-distributed-companies-2/</guid><description>&lt;p&gt;How do you hash out architecture and design at a remote only company? Slack chats and phone calls are a slow way to communicate with an entire team. And miscommunication with people 1000s of miles away can cost you the time and money you were hoping to save by working remotely.&lt;/p&gt;
&lt;p&gt;The Design Document workflow&lt;/p&gt;
&lt;p&gt;Some companies have a design document centric workflow. At the beginning of a project instead of writing Jira tickets or tasking out stories, an engineer will spend some time writing a 3-10 page document which describe the plan of attack for the project. This doc will include assumptions, design decisions and constraints, as well as a summary of the changes to be made. The document is not an exhaustive specification, but can include proposed interface or library changes. Then the team will have a review session to read and ask questions about the design. Next after some revisions, and possibly a follow up session, development will begin. &lt;/p&gt;</description></item><item><title>Wide vs Deep software</title><link>https://blog.sledgeworx.dev/wide-vs-deep-software/</link><pubDate>Sun, 30 May 2021 08:55:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/wide-vs-deep-software/</guid><description>&lt;p&gt;Voice assistants are wide software. In the industry we call it the ‘long tail’ of functionality. There are hundreds of ‘tasks’ that your Alexa or Google assistant can perform for you. You probably don’t know that most of them even exist. But not knowing that these tasks exist costs you nothing. The fact that you can buy pizzas via Alexa has no impact on your ability to get news briefs. You can do either without ever engaging with the other. &lt;/p&gt;</description></item><item><title>Consulting</title><link>https://blog.sledgeworx.dev/free-consultations/</link><pubDate>Sun, 23 May 2021 13:23:05 +0000</pubDate><guid>https://blog.sledgeworx.dev/free-consultations/</guid><description>&lt;p&gt;&lt;a href="https://sledgeworx.dev/"&gt;https://sledgeworx.dev/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I offer free 30 minute technical consultations and deep dives. This is useful if you are considering a project or startup but don&amp;rsquo;t have a good idea of what work would be required to make it a reality.&lt;/p&gt;
&lt;p&gt;I will do some research into the problem and give you a summary with notes and my recommendations to make your project a reality. If warranted we can setup a 30 minute zoom call to review my research and discuss next steps.&lt;/p&gt;</description></item><item><title>The next 10 Years of Remote Work</title><link>https://blog.sledgeworx.dev/the-next-10-years-of-remote-work/</link><pubDate>Sun, 23 May 2021 07:58:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-next-10-years-of-remote-work/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This post was developed in conjunction with my talk of the same name for Spring into SledgeConf 2021&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My belief is that most tech startups going forward will be 100% remote. Setting up an office for a company that might not last isn’t a great idea. And after 2020 spending your runway on an office is basically wasting money.&lt;/p&gt;
&lt;p&gt;The complication is that remote work requires more discipline from the team than office based approaches. If you have unmotivated employees, managers, management skills, or outdated processes you will not be as productive as a remote company. Going forward there will be a dichotomy between startups that try to succeed with the colocation approach and startups that commit to remote work. My belief is that overtime collocated startups will consistently fail against remote startups. The reasons remote startups pull ahead are lower fixed office costs, easier access to talent at lower prices and that remote work requires more disciplined processes.&lt;/p&gt;</description></item><item><title>Spring into SledgeConf!</title><link>https://blog.sledgeworx.dev/spring-into-sledgeconf/</link><pubDate>Wed, 19 May 2021 22:56:51 +0000</pubDate><guid>https://blog.sledgeworx.dev/spring-into-sledgeconf/</guid><description>&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;https://sledgeconf.dev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our next SledgeConf is coming on Friday May 21st at 4:30pm PST!&lt;/p&gt;
&lt;p&gt;Join us for discussion of the next 10 years of remote work. &lt;/p&gt;
&lt;p&gt;My presentation for this SledgeConf is titled. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;_&amp;ldquo;The next decade in remote work.&amp;rdquo;  _&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’m joined by Mason Traylor presenting!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;“How to waste Everybody’s Time with Remote Meetings”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agenda:&lt;/p&gt;
&lt;p&gt;4:30 Introductions &lt;/p&gt;
&lt;p&gt;4:45 Presentation “How to waste Everybody’s Time with Remote Meetings”&lt;/p&gt;
&lt;p&gt;5:00 Questions + Discussion&lt;/p&gt;</description></item><item><title>Remote Startup Wishlist</title><link>https://blog.sledgeworx.dev/remote-startup-wishlist/</link><pubDate>Fri, 07 May 2021 15:22:17 +0000</pubDate><guid>https://blog.sledgeworx.dev/remote-startup-wishlist/</guid><description>&lt;p&gt;My belief is that most tech startups going forward will be 100% remote. Setting up an office for a company that might not last isn’t a great idea. And after this last year spending your runway on an office is basically wasting money. &lt;/p&gt;
&lt;p&gt;What would a ‘best practice’ startup look like if it launched today? &lt;/p&gt;
&lt;p&gt;**Tech stack  **&lt;/p&gt;
&lt;p&gt;The tech stack really depends on what you are doing. There are a bunch of right answers just do your do diligence and commit to one. &lt;/p&gt;</description></item><item><title>Burnout or health problem?</title><link>https://blog.sledgeworx.dev/burnout-or-health-problem/</link><pubDate>Sat, 27 Mar 2021 13:42:28 +0000</pubDate><guid>https://blog.sledgeworx.dev/burnout-or-health-problem/</guid><description>&lt;p&gt;I experienced a lot of burnout last year. Usually, I can just outlast burnout and it goes away when I start a new project. This time it lasted most of the year and I didn’t really get back to normal until 2021. In my case the reason my ‘burnout’ lasted so long and was hard to get rid of is because it was actually a health problem. I got into this industry because I love coding but I didn’t really feel that way last year and even considered leaving the industry. I had a lot of troubling focusing with the single minded obsession you need to beat down tricky bugs. At the time I thought I had burnout, I was depressed, it had to be something like that right? &lt;/p&gt;</description></item><item><title>Solutions Engineer, Cloud Architect what does it all mean?</title><link>https://blog.sledgeworx.dev/solutions-engineer-cloud-architect-what-does-it-all-mean/</link><pubDate>Sun, 14 Feb 2021 07:03:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/solutions-engineer-cloud-architect-what-does-it-all-mean/</guid><description>&lt;p&gt;There are a ton of titles in the software industry. Two slightly misleading ones are Solutions Engineer and Cloud Architect. These sound like technical roles but they are not on the software engineering career ladder. Solutions Engineer and Cloud Architect are pre-sales roles.&lt;/p&gt;
&lt;p&gt;What is Pre-Sales? &lt;/p&gt;
&lt;p&gt;Pre-Sales is the part of a project that happens before the sale. If you are selling a software product or digital transformation, you need someone technical to evaluate where the prospect’s software stack is. The Solutions Engineer is the technical expert who joins the sales team and helps build out what needs to be included in the deal. That entails researching the prospect’s tech stack, interviewing their engineers and doing technical demos for the potential client. Solutions Engineers sometimes need to travel to client offices as part of the job. You might do some coding to create demos and prototypes but that is about it. Don’t expect your technical skills to grow while working as a Solutions Engineer. But you will get lots of opportunities to interact with clients, make connections and learn about what different companies are doing on the tech side. &lt;/p&gt;</description></item><item><title>Software advances are slower than you expect.</title><link>https://blog.sledgeworx.dev/software-advances-are-slower-than-you-expect/</link><pubDate>Sun, 07 Feb 2021 06:51:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-advances-are-slower-than-you-expect/</guid><description>&lt;p&gt;Most people think of technological advances using the eureka metaphor. But software doesn’t work like that. Take a clear technological advance like a self-driving tractor. They are on the market now but there was no eureka moment, no sudden breakthrough. Self-driving technology just advanced to the base level required for tractors on clearly mapped fields, then a team of software engineers built a working system over several years.&lt;/p&gt;
&lt;p&gt;There’s no invention or breakthrough moment, just a slow build in none software capabilities than an investment in building out software to leverage those capabilities. &lt;/p&gt;</description></item><item><title>How to make oncall great on your team.</title><link>https://blog.sledgeworx.dev/guides/how-to-make-oncall-great-on-your-team/</link><pubDate>Sun, 31 Jan 2021 08:01:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/how-to-make-oncall-great-on-your-team/</guid><description>&lt;p&gt;Being on-call for software can suck. It seems like everyone has a horror story of being woken up at 3am for an outage in their service, and then having to work until daylight to get things working again. I have been on an on-call rotation for about two years now and it has gone very well. We typically get paged during off hours once per week and resolving a page usually takes under three hours. Here are some thoughts on what makes an on-call experience great.&lt;/p&gt;</description></item><item><title>January Links</title><link>https://blog.sledgeworx.dev/january-links/</link><pubDate>Thu, 28 Jan 2021 18:41:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/january-links/</guid><description>&lt;p&gt;&lt;a href="https://www.nytimes.com/2020/07/11/science/windows-street-noise.html"&gt;https://www.nytimes.com/2020/07/11/science/windows-street-noise.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Scientists Say You Can Cancel the Noise but Keep Your Window Open&lt;/p&gt;
&lt;p&gt;They will integrate these speakers into windows/walls and make it smaller&lt;/p&gt;
&lt;p&gt;Concept of ‘feature store’ for typed ML model inputs (tensors, vectors, etc)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.logicalclocks.com/blog/feature-store-vs-data-warehouse"&gt;https://www.logicalclocks.com/blog/feature-store-vs-data-warehouse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;VM performance tests, very good blog series.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tratt.net/laurie/blog/entries/why_arent_more_users_more_happy_with_our_vms_part_1.html"&gt;https://tratt.net/laurie/blog/entries/why_arent_more_users_more_happy_with_our_vms_part_1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tratt.net/laurie/blog/entries/why_arent_more_users_more_happy_with_our_vms_part_2.html"&gt;https://tratt.net/laurie/blog/entries/why_arent_more_users_more_happy_with_our_vms_part_2.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Compressing for pub/sub results in great savings.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.lawrencejones.dev/compress-everything/"&gt;https://blog.lawrencejones.dev/compress-everything/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The meta programming problem with functional programming in software leviathans.</title><link>https://blog.sledgeworx.dev/the-meta-programming-problem-with-functional-programming-in-software-leviathans/</link><pubDate>Sun, 24 Jan 2021 19:17:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-meta-programming-problem-with-functional-programming-in-software-leviathans/</guid><description>&lt;p&gt;Few of the software leviathans are built in functional languages. Facebook uses PHP/Hack, Google Java, C++, Amazon Java, Netflix Java. The common consensus about functional languages is that they provide large benefits over object oriented and procedural languages like Java. One particular claim is that functional languages like Haskell can do the same work in 1/10th the lines of code. If functional languages really are better we would expect to see the big tech companies investing heavily in adopting functional languages. We might even expect them to create a functional programming language just for their use case, but instead Google created Go possibly the least functional programming language created in the 21st century. What is going on here? Why aren’t functional programming languages being adopted in the biggest software systems on the planet?&lt;/p&gt;</description></item><item><title>Software Leviathans strain on the programming job market.</title><link>https://blog.sledgeworx.dev/software-leviathans-strain-on-the-programming-job-market/</link><pubDate>Sun, 17 Jan 2021 07:09:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-leviathans-strain-on-the-programming-job-market/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Why I’m not worried about H1B, outsourcing or remote work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Software leviathans dominate the market due to diseconomies of scale. Leviathans are a bit of a self-fulfilling prophesy. You create a thing like Facebook and it starts to take off. Then you find a way to make money off of it. Then due to marginal costs you end up hiring 10,000 engineers to maximize the value of ads on facebook. &lt;/p&gt;</description></item><item><title>Software Leviathans and the weird dominance of good enough.</title><link>https://blog.sledgeworx.dev/software-leviathans-and-the-weird-dominance-of-good-enough/</link><pubDate>Sun, 10 Jan 2021 07:42:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-leviathans-and-the-weird-dominance-of-good-enough/</guid><description>&lt;blockquote&gt;
&lt;p&gt;One day in Spring 1989, I was sitting out on the Lucid porch with some of the hackers, and someone asked me why I thought people believed C and Unix were better than Lisp. I jokingly answered, &amp;ldquo;because, well, worse is better.&amp;rdquo; We laughed over it for a while as I tried to make up an argument for why something clearly lousy could be good.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.dreamsongs.com/WorseIsBetter.html"&gt;https://www.dreamsongs.com/WorseIsBetter.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=""&gt;&lt;/a&gt;It has long been wondered why Java took the crown for the ‘enterprise’ language. I can’t really argue on that topic since I came onto the scene long after Java was all there was. This article is about why software leviathans are written in Java more than anything else.&lt;/p&gt;</description></item><item><title>Software Leviathans</title><link>https://blog.sledgeworx.dev/software-leviathans/</link><pubDate>Sun, 03 Jan 2021 09:15:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-leviathans/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Dis-economies of scale, why FAANG pays high salaries, the dominance of Java&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The top end of software engineering jobs are dominated by what I’ve started thinking of as ‘Software Leviathans’, large software systems that are staffed by thousands of engineers. A few that come to mind are Amazon Alexa, &lt;a href="http://Amazon.com"&gt;Amazon.com&lt;/a&gt;, Google Search, Salesforce, &lt;a href="http://Facebook.com"&gt;Facebook.com&lt;/a&gt;. These are not “monoliths’ or large services that do everything. Instead they are the result of combining 100s of smaller ‘micro-services’ into one massive software product.&lt;/p&gt;</description></item><item><title>Why I stopped going on twitter, using time tracking apps to monitor your time with Qbserve</title><link>https://blog.sledgeworx.dev/why-i-stopped-going-on-twitter-using-time-tracking-apps-to-monitor-your-time-with-qbserve/</link><pubDate>Sun, 27 Dec 2020 05:46:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-i-stopped-going-on-twitter-using-time-tracking-apps-to-monitor-your-time-with-qbserve/</guid><description>&lt;p&gt;I’ve been an avid twitter user for years, but had to stop this winter. I have been listening to ‘Deep Work’ while driving cross country and have done a lot of thinking about how to do better work. One of the things recommended in the book is to quit social media or at least exclude it from the part of your day when you work. I’ve typically just blocked twitter from my network during the workday then used it as much as I wanted afterwards.&lt;/p&gt;</description></item><item><title>Burnout</title><link>https://blog.sledgeworx.dev/burnout/</link><pubDate>Tue, 15 Dec 2020 21:27:25 +0000</pubDate><guid>https://blog.sledgeworx.dev/burnout/</guid><description>&lt;p&gt;I’ve dealt with burnout many times in my 6 years as a software engineer. Usually, it’s when I get bored of a project or there is a slow period where I don’t have a lot of work to do. Counter to what you would expect having less work makes it harder to get that work done than when there is more to do. I think it is because when there is less of it, the work feels less important and subconsciously it feels like I’m not really needed. Like when you are in a meeting trying to estimate the impact of an issue with the whole team, but only three out of ten people are actually able to do anything before people are duplicating work. Then you end up waiting for other people to do basic things like read logs and tell you what they say. You could just read them yourself, but do we need 3 people reviewing the same logs right now?&lt;/p&gt;</description></item><item><title>Links Post October</title><link>https://blog.sledgeworx.dev/links-post-october/</link><pubDate>Sun, 18 Oct 2020 11:21:02 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post-october/</guid><description>&lt;p&gt;Here are some links I have seen lately that were pretty interesting.&lt;/p&gt;
&lt;h2 id="in-window-noise-canceling-speakers"&gt;In window noise canceling speakers&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.nytimes.com/2020/07/11/science/windows-street-noise.html"&gt;https://www.nytimes.com/2020/07/11/science/windows-street-noise.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In window noise canceling speakers.&lt;/p&gt;
&lt;p&gt;They will integrate these speakers into windows/walls and make it smaller. Increasing the quality of life in dense cities. It is something thats needed since cities just keep getting larger.&lt;/p&gt;
&lt;h2 id="concept-of-feature-store-for-typed-ml-model-inputs-tensors-vectors-etc"&gt;Concept of ‘feature store’ for typed ML model inputs (tensors, vectors, etc)&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.logicalclocks.com/blog/feature-store-vs-data-warehouse"&gt;https://www.logicalclocks.com/blog/feature-store-vs-data-warehouse&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="vm-performance-tests"&gt;VM performance tests&lt;/h2&gt;
&lt;p&gt;Finally we have a pair of great posts from tratt.net about VM warmup with lots of data.&lt;/p&gt;</description></item><item><title>SledgeConf Retrospective</title><link>https://blog.sledgeworx.dev/sledgeconf-retrospective/</link><pubDate>Fri, 21 Aug 2020 08:23:48 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-retrospective/</guid><description>&lt;p&gt;I envisioned SledgeConf as a tiny in person conference, inspired by &lt;a href="https://briancasel.com/tiny-conferences/"&gt;https://briancasel.com/tiny-conferences/&lt;/a&gt;. I hoped to hold one sometime in 2020, but was focused on some other projects. After the pandemic shut everything down the idea of holding it remotely seemed pretty achievable. So I took my original plan for a 2 day event and tried to launch a 2 day virtual event.&lt;/p&gt;
&lt;p&gt;Marketing and promotion were the two sticking points for SledgeConf, my audience is not very large and I’m not any kind of event promoter. In the end only one of my friends agreed to present at the remote conference. I considered canceling the event, but I had already taken a day off from my job so I went ahead with the ‘conference’. &lt;/p&gt;</description></item><item><title>SledgeConf Schedule</title><link>https://blog.sledgeworx.dev/sledgeconf-schedule/</link><pubDate>Thu, 06 Aug 2020 20:22:17 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-schedule/</guid><description>&lt;p&gt;August 7th 2020 &lt;/p&gt;
&lt;p&gt;3-5pm PST&lt;/p&gt;
&lt;p&gt;4-6pm MTN&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Times in Mountain below&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4PM: Sean Michael  : Micro Frontends&lt;/p&gt;
&lt;p&gt;4:50: Break&lt;/p&gt;
&lt;p&gt;5PM: Nicholas Sledgianowski : Business Intelligence Publishing Pitfalls &lt;/p&gt;
&lt;p&gt;5:50: Closing discussion&lt;/p&gt;
&lt;p&gt;Sign up to the Mailing List for the zoom link when we start.&lt;/p&gt;</description></item><item><title>Don’t use internal tooling, contribute to your tools.</title><link>https://blog.sledgeworx.dev/dont-use-internal-tooling-contribute-to-your-tools/</link><pubDate>Sun, 12 Jul 2020 07:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/dont-use-internal-tooling-contribute-to-your-tools/</guid><description>&lt;p&gt;There is a dichotomy in software engineering organizations, some only use public tooling, entirely avoiding building their owns tools. Other companies follow the ‘Not invented here’ principle and try to only use software developed internally.&lt;/p&gt;
&lt;p&gt;There are two forces driving this split, first building software tooling is expensive, small companies often cannot afford to build and support internal tools. It is an expensive recurring cost that can easily get out of hand. Building 2 internal tools a year will set you on a path to supporting 20 tools 10 years from now eating huge chunks of your operations budget. &lt;/p&gt;</description></item><item><title>Previewing image uploads with stimulus.js</title><link>https://blog.sledgeworx.dev/guides/previewing-image-uploads-with-stimulus-js/</link><pubDate>Sun, 05 Jul 2020 07:41:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/previewing-image-uploads-with-stimulus-js/</guid><description>&lt;p&gt;I’ve been working on a website with file uploads lately and after a bunch of googling put together a solution using stimulus.js instead of jQuery as not using jQuery is the thing now.&lt;/p&gt;
&lt;p&gt;The website I’m working on allows people to upload images and then to tag them before sharing and I thought it was a bit sub-optimal to ask people to tag their images without being able to see them. &lt;/p&gt;</description></item><item><title>Who should present at SledgeConf?</title><link>https://blog.sledgeworx.dev/who-should-present-at-sledgeconf/</link><pubDate>Sat, 20 Jun 2020 12:23:43 +0000</pubDate><guid>https://blog.sledgeworx.dev/who-should-present-at-sledgeconf/</guid><description>&lt;p&gt;SledgeConf is a remote ‘tiny conference’ focused on the software industry and software development. Anyone is welcome to present on our three themes &lt;em&gt;“Software, Consulting and Teams”.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;See our article below on the SledgeConf themes.&lt;/p&gt;
&lt;p&gt;/sledgeconf-request-for-talks-and-date-announcement/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do you need to be a software engineer to present at SledgeConf?&lt;/strong&gt;&lt;br&gt;
No, you don’t need to be a software engineer or even able to code to present at SledgeConf. We just ask that your topic be pertinent to the Software industry. &lt;/p&gt;</description></item><item><title>SledgeConf Request for Talks and Themes guide</title><link>https://blog.sledgeworx.dev/sledgeconf-request-for-talks-and-date-announcement/</link><pubDate>Thu, 11 Jun 2020 10:45:04 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeconf-request-for-talks-and-date-announcement/</guid><description>&lt;p&gt;We are open to talk submissions for SledgeConf 2020. Please apply today. To apply please email me at &lt;a href="mailto:nick@sledgeworx.io"&gt;nick@sledgeworx.io&lt;/a&gt; with a 3-5 sentence summary of your talk.&lt;/p&gt;
&lt;p&gt;SledgeConf is a remote tiny conference (&lt;a href="https://briancasel.com/tiny-conferences/"&gt;https://briancasel.com/tiny-conferences/&lt;/a&gt;) debuting August 7th and 8th 2020. So far our survey of whether people preferred weekdays or weekends is a flat tie, so we are doing both. There will be up to six 50 minute presentations and six lightening talks spread across two days of festivities.&lt;/p&gt;</description></item><item><title>Software is a depreciating Good</title><link>https://blog.sledgeworx.dev/software-is-a-depreciating-good/</link><pubDate>Thu, 11 Jun 2020 08:45:31 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-is-a-depreciating-good/</guid><description>&lt;p&gt;“If customers are paying for the work, presumably by the hour, then you can&amp;rsquo;t expect them to pay for weeks (or more) of work every few years just to arrive back at the same product they started with.”&lt;br&gt;
- From reddit user /u/&lt;a href="https://www.reddit.com/user/PragmaticFinance/"&gt;PragmaticFinance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;People have the idea that because the software has the same features as it did five years ago, it still is just as ‘good’ as it was five years ago. And if we can keep running it without modifications that is a reasonable practice. Unfortunately, while it feels intuitive that is not the reality with software.&lt;/p&gt;</description></item><item><title>SledgeConf</title><link>https://blog.sledgeworx.dev/sledge-conf/</link><pubDate>Mon, 25 May 2020 17:02:06 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledge-conf/</guid><description>&lt;p&gt;&lt;img src="https://blog.sledgeworx.dev/images/2021/03/sledgeconf_general-1-1024x717.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;SledgeConf is a &lt;a href="https://briancasel.com/tiny-conferences/"&gt;tiny conference&lt;/a&gt; for software industry professionals. In 2020 the first SledgeConf was fully remote focusing on three themes Software, Consulting and Teams. I post some of the presentations on the &lt;a href="https://www.youtube.com/channel/UCB0csY7Nkn-fcpu_QFfszqw"&gt;Youtube channel.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Visit &lt;a href="https://www.sledgeconf.dev"&gt;www.sledgeconf.dev&lt;/a&gt; for dates and times.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;https://sledgeconf.dev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sign up to the mailing list for updates&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>2020 Age of the remote conference</title><link>https://blog.sledgeworx.dev/2020-age-of-the-remote-conference/</link><pubDate>Mon, 25 May 2020 13:40:33 +0000</pubDate><guid>https://blog.sledgeworx.dev/2020-age-of-the-remote-conference/</guid><description>&lt;p&gt;At this point, in person conferences with 1000s of attendees are done for the year. Lockdowns are easing in general, but most people won’t be comfortable going to a massive conference with 1000s of people from all over the world anytime soon.&lt;/p&gt;
&lt;p&gt;We are likely to be disrupted by this pandemic until spring 2021, by when travel is hopefully back to normal. I’ve been working from home for months now and will be doing so officially until October. &lt;/p&gt;</description></item><item><title>Recruiter spam of underpar jobs</title><link>https://blog.sledgeworx.dev/recruiter-spam-of-underpar-jobs/</link><pubDate>Sun, 17 May 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/recruiter-spam-of-underpar-jobs/</guid><description>&lt;p&gt;As your career progresses recruiters will start to spam you with lower quality jobs. I’ve had weeks where I was messaged on linkedin about a job several times per day. Normally that would be great, except most of these jobs would be worse than the job I already have.&lt;/p&gt;
&lt;p&gt;I’m not looking to make a downward move in my career. At some point I might start a startup or take a position as a cofounder, but otherwise I’m looking to move up in my career. Meaning that I am looking for jobs that are higher paying and higher responsibility. Not jobs that are lower paying and require less skill than my current job. &lt;/p&gt;</description></item><item><title>Figure out how to debug everything, kill blackboxes</title><link>https://blog.sledgeworx.dev/figure-out-how-to-debug-everything-kill-blackboxes/</link><pubDate>Sun, 10 May 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/figure-out-how-to-debug-everything-kill-blackboxes/</guid><description>&lt;p&gt;**** Avoid blackboxes in your tech stack. It is tempting to say &lt;em&gt;&amp;ldquo;oh, this piece of software is acting up, but its not our team’s responsibility its xyz team’s problem&amp;rdquo;&lt;/em&gt;. Or this vendor’s software is acting up, &lt;em&gt;“Guess we have to take 30 minutes off while we wait for it to come back up”&lt;/em&gt;. Sometimes this pattern shows up in the use of 3rd party libraries.&lt;/p&gt;
&lt;p&gt;It is tempting to allow the resistance to figuring out another piece of software block you from making progress on your project. But letting yourself take the easy route will slow down your progress as a software engineer. A blackbox is just a piece of software you don’t understand yet. You have worked with and figured out hundreds of programs in your career. This one isn’t anything special. &lt;/p&gt;</description></item><item><title>Working from home</title><link>https://blog.sledgeworx.dev/working-from-home/</link><pubDate>Sun, 03 May 2020 15:24:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/working-from-home/</guid><description>&lt;p&gt;I’ve been lucky enough not to be laid off yet, and have been plunged headfirst in working from home. Before this pandemic I avoided working from home because I got distracted pretty easily and found it easier to get work done in the office. I’ve typically been a high performer and like to maintain work life balance so falling behind because I worked from home is not an option.&lt;/p&gt;
&lt;p&gt;Now I’ve been required to work from home since early march. The first couple weeks were rough. Working in a new setting, big changes going on in the world, combined to make focus difficult. I fell behind where I wanted to be on several projects. It was all dragging me down.&lt;/p&gt;</description></item><item><title>Expecting end users to customize the experience is madness</title><link>https://blog.sledgeworx.dev/expecting-end-users-to-customize-the-experience-is-madness/</link><pubDate>Sun, 26 Apr 2020 15:23:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/expecting-end-users-to-customize-the-experience-is-madness/</guid><description>&lt;p&gt;Don’t do it to yourselves&lt;/p&gt;
&lt;p&gt;Don’t do it to customers &lt;/p&gt;
&lt;p&gt;Do the work to make a good product&lt;/p&gt;
&lt;p&gt;Enterprise software sucks. Its not bought by the people using it, but by a guy wearing a suite on the 37th floor the day after eating a fabulous steak dinner paid for by Oracle sales guys.  By the time you start using it, it is bought and paid for. Suck it up and learn how this pile of code works. &lt;/p&gt;</description></item><item><title>Business Intelligence what is it?</title><link>https://blog.sledgeworx.dev/business-intelligence-what-is-it/</link><pubDate>Sun, 19 Apr 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/business-intelligence-what-is-it/</guid><description>&lt;p&gt;Business Intelligence is the process of exposing the results of customer workflows in an easy to consume fashion for Business Analysts, Accountants and Executives. &lt;/p&gt;
&lt;p&gt;When your product is software that your customers’ use, it can be hard to know how customers are using it in the large. For BI you log whatever the customer did in a format that is easy to query via SQL. For purchasing flow you log.&lt;/p&gt;</description></item><item><title>Multiple promotions for solving the same problem</title><link>https://blog.sledgeworx.dev/multiple-promotions-for-solving-the-same-problem/</link><pubDate>Sun, 12 Apr 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/multiple-promotions-for-solving-the-same-problem/</guid><description>&lt;p&gt;One failure mode I’ve seen in software organizations is multiple promotions for building the same solution to a problem. Suppose, in your software organization you have 10 teams working in a similar problem space. In one year you see two promotions for building an asset management pipeline. When I saw the second promotion announcement, I was thinking to myself “Wait, didn’t Tyler get promoted for building an asset management pipeline?”&lt;/p&gt;</description></item><item><title>Peak to Trough</title><link>https://blog.sledgeworx.dev/peak-to-trough/</link><pubDate>Sun, 05 Apr 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/peak-to-trough/</guid><description>&lt;p&gt;The importance of auto-scaling &lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.sledgeworx.dev/images/2020/03/peak_to_trough-1024x556.jpg" alt=""&gt; &lt;em&gt;peak to trough traffic&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The cloud enables us to acquire hardware on demand for our services. I have never had to rack a server or worry about hardware failure. My entire software career has been in the cloud. As an industry most of us don’t need to worry about forecasting hardware requirements months in advance. We just increase the number of virtual machines we need in the PAAS dashboard. &lt;/p&gt;</description></item><item><title>Designing your development environment</title><link>https://blog.sledgeworx.dev/designing-your-development-environment/</link><pubDate>Sun, 29 Mar 2020 08:09:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/designing-your-development-environment/</guid><description>&lt;p&gt;What should your development environment look like? People talk about how its hard to setup development environments, this or that component are tricky etc. &lt;/p&gt;
&lt;p&gt;But what components should you actually have? For a backend API server in a major language you will probably have an application that serves requests while writing to a database, logging and emitting metrics. &lt;/p&gt;
&lt;p&gt;If you follow best practices you will have unit tests, a deployment pipeline, integration and end-to-end tests. All that stuff is great, but what about the development environment. &lt;/p&gt;</description></item><item><title>Why do we have unit tests for things that can never happen</title><link>https://blog.sledgeworx.dev/why-do-we-have-unit-tests-for-things-that-can-never-happen/</link><pubDate>Sun, 15 Mar 2020 09:36:30 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-do-we-have-unit-tests-for-things-that-can-never-happen/</guid><description>&lt;p&gt;So you finally have established good development practices for your team. Linters enforce code coverage of 90% and everyone is adding tests. Month over month test count increases and obviously code quality is increasing as well…&lt;/p&gt;
&lt;p&gt;Until a partner contributing code to your project notices a test that validates something that can never happen. This test in particular validates the behavior of an endpoint when a particular input is null. The issue is that our platform ensures this input is never null, any requests to our service without that input will be a platform error, and never make a request to our API. &lt;/p&gt;</description></item><item><title>Story development</title><link>https://blog.sledgeworx.dev/story-development/</link><pubDate>Sun, 01 Mar 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/story-development/</guid><description>&lt;p&gt;It’s a common statement that once you are a senior engineer you don’t get to code anymore. It’s not that senior engineers are forbidden from coding, it’s still on the job description.&lt;/p&gt;
&lt;p&gt;But senior engineers get pulled into so many tasks they rarely have time for coding. &lt;/p&gt;
&lt;p&gt;A senior engineers might get pulled into a critical outage, a roadmap meeting, defending architectural boundaries from other teams, assisting team members with their tasks, reviewing code, coordinating large projects with other teams. &lt;/p&gt;</description></item><item><title>Estimating.dev Launch</title><link>https://blog.sledgeworx.dev/estimating-dev-launch/</link><pubDate>Sun, 23 Feb 2020 10:08:53 +0000</pubDate><guid>https://blog.sledgeworx.dev/estimating-dev-launch/</guid><description>&lt;p&gt;I have launched a new website, &lt;a href="http://estimating.dev"&gt;estimating.dev&lt;/a&gt; to focus on software development estimates. My goal is to put longer form and higher quality posts focused on estimates on the new website. I will still be posting here regularly on all things software.&lt;/p&gt;
&lt;p&gt;Software development is a massive multi-billion dollar industry, but our estimation practices are not great. Computer Science degrees focus on math and algorithms without any consideration of estimating projects as a core skill. Most of us in the industry work off of whatever our flavor of Agile practice recommends whether its Scrum, Kanban, SAFE, etc. My goal is to research what we know about estimating software projects, and develop simple ways we can use that in industry. The goal is to do a combination of popularizing better techniques and developing a recommended style of performing estimates. &lt;/p&gt;</description></item><item><title>People have given up on performance in favor of Scalability</title><link>https://blog.sledgeworx.dev/people-have-given-up-on-performance-in-favor-of-scalability/</link><pubDate>Sun, 23 Feb 2020 08:23:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/people-have-given-up-on-performance-in-favor-of-scalability/</guid><description>&lt;p&gt;Scalability has been all the rage since the cloud made horizontal scaling easy. No longer do we have to order parts, lease colo space or rack servers. Instead there is an infinite supply of Virtual Machines out there we can rent at the press of a button. Because of this there is a tendency to start development with an architecture that will scale well horizontally. My entire career has been during the post AWS period. Pre-mature optimization is the root of all evil, but make sure to create a stateless service so we can scale it up later when its slow.&lt;/p&gt;</description></item><item><title>Matias Ergo Pro review + affiliate link</title><link>https://blog.sledgeworx.dev/matias-ergo-pro-review-affiliate-link/</link><pubDate>Sun, 16 Feb 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/matias-ergo-pro-review-affiliate-link/</guid><description>&lt;p&gt;I had a Matias Ergo Pro mac version for about 3 years, purchased in May 2016. It lasted until the end of 2019 when the USB C port that connects the keyboard to the computer died. I bought the keyboard after I started getting pains in my fingers during a gaming phase. Using this keyboard with a vertical mouse eliminated my hand pain.&lt;/p&gt;
&lt;p&gt;The Ergo Pro is pretty solidly built, the wrist pads are comfortable. I replaced the wrist pads after about 2 years when they started to come apart. The two halves of the keyboard can be positioned to match your natural hand tilt which is very nice. &lt;/p&gt;</description></item><item><title>Load testing Overview</title><link>https://blog.sledgeworx.dev/load-testing-overview/</link><pubDate>Sun, 09 Feb 2020 07:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/load-testing-overview/</guid><description>&lt;p&gt;[This is a draft from my in progress handbook on running software in production]&lt;/p&gt;
&lt;p&gt;Load testing helps us estimate how much load our system can handle. This helps us decide how much hardware we need, whether we need to switch to a more performant architecture, and prepare for a peak event like a big sale. &lt;/p&gt;
&lt;h2 id="natural-vs-synthetic-traffic-"&gt;**Natural vs Synthetic traffic  **&lt;/h2&gt;
&lt;p&gt;When we load test the traffic has to come from somewhere. If we want to load test in preparation for a 10x peak of traffic during a sale, we need to get 10x our regular traffic from somewhere. An easy way to do it is to write a script that makes request to our website. This is called synthetic traffic, its typically very predictable or targets a subset of the systems functionality. Developing synthetic traffic is pretty expensive, but it is also easy, you just write some code and prepare some test accounts. &lt;/p&gt;</description></item><item><title>Never get in the way of people with the momentum to get things done</title><link>https://blog.sledgeworx.dev/never-get-in-the-way-of-people-with-the-momentum-to-get-things-done/</link><pubDate>Sun, 02 Feb 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/never-get-in-the-way-of-people-with-the-momentum-to-get-things-done/</guid><description>&lt;p&gt;Most of us have productivity swings. Some weeks you are energized and getting things done. Then the next project just seems to drag on and on. Slumps and burnout happen. But usually at least one person on the team still has some momentum going. &lt;/p&gt;
&lt;p&gt;Don’t slow them down. Do what you can to assist in their effort. Don’t think you have to operate as effectively as they are this week. It can be intimidating to see another person delivering more value than you. Don’t hit yourself thinking “If only I was more motivated I could outperform Jack.” &lt;/p&gt;</description></item><item><title>Pros and cons of working at a consulting company</title><link>https://blog.sledgeworx.dev/pros-and-cons-of-working-at-a-consulting-company/</link><pubDate>Sun, 26 Jan 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/pros-and-cons-of-working-at-a-consulting-company/</guid><description>&lt;p&gt;It seems like we get lots of questions on the subreddit r/cscareerquestions about working at a consulting company. I worked at a small company that did a mix of staff augmentation, application development, devops, and agile process consulting. Here are some thoughts on the pros and cons.&lt;/p&gt;
&lt;h2 id="pros"&gt;Pros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Work on lots of projects and technologies &lt;/li&gt;
&lt;li&gt;Willingness to train you on the job&lt;/li&gt;
&lt;li&gt;Teams rotate frequently - get to know lots of people &lt;/li&gt;
&lt;li&gt;Don’t have to worry about legacy code as much&lt;/li&gt;
&lt;li&gt;No Oncall rotation &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cons"&gt;Cons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Don’t run code in production&lt;/li&gt;
&lt;li&gt;Travel a lot&lt;/li&gt;
&lt;li&gt;Don’t own your code or service&lt;/li&gt;
&lt;li&gt;Experience is shallow and short term&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I worked at a software consulting company for about four years right after college. I had the choice between the consulting company that did work in the cloud or a company that made a medical software system, I went for the cloud. The company had around 100 employees with some shifts up and down. As far as work, we did the whole gamut from staff augmentation, agile training, ‘digital transformation’, migrated people to the cloud, built platforms as a service, and more. &lt;/p&gt;</description></item><item><title>Everyone uses (failing) software all the time.</title><link>https://blog.sledgeworx.dev/everyone-uses-failing-software-all-the-time/</link><pubDate>Sun, 19 Jan 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/everyone-uses-failing-software-all-the-time/</guid><description>&lt;p&gt;Because you use it all the time at least one piece of software is broken for you at all times.&lt;/p&gt;
&lt;p&gt;I stopped using Facebook after my freshman year of college, but recently got pulled back in by a Facebook group. As a result I now have the pleasure of enjoying a 10+ second loading phase every time I open the homepage. &lt;/p&gt;
&lt;p&gt;Recently, I tried to buy a CODE mechanical keyboard on the &lt;a href="http://wasdkeyboards.com"&gt;wasdkeyboards.com&lt;/a&gt; website. But every time I submitted my order it failed. I tried different browsers. I had to look into the console to find out that a http request was failing to find a paypal advertising domain that my PiHole blocks on the network. To buy my keyboard I had to tether wifi from my smartphone. A non-technical user wouldn’t have been able to find out why the order failed because there was no error message. There was a spinning symbol that just disappeared after a while without a message to the user. &lt;/p&gt;</description></item><item><title>Software updates are a liability for customers</title><link>https://blog.sledgeworx.dev/software-updates-are-a-liability-for-customers/</link><pubDate>Sun, 12 Jan 2020 08:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-updates-are-a-liability-for-customers/</guid><description>&lt;p&gt;Software Updates are a liability for customers. Imagine a business, say a restaurant, which uses some POS (point of sale) software to run its business. Every time the software is updated the business’s employees have to relearn some of the software. That costs money. They would rather buy software that never needs to be updated.&lt;/p&gt;
&lt;p&gt;You might say “Well, what if there are security vulnerabilities”. Fixing those vulnerabilities still costs money. Customers will have to update their software which costs money even if there is no functional change. Its essentially saying, “Hey, Customers, we shipped you a defective product, please spend money to get the update which fixes this vulnerability”. &lt;/p&gt;</description></item><item><title>Links Post — Q4 2019</title><link>https://blog.sledgeworx.dev/links-post-q4-2019/</link><pubDate>Sun, 05 Jan 2020 20:39:20 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post-q4-2019/</guid><description>&lt;p&gt;Here are some interesting links I’ve come across over the last few months.&lt;/p&gt;
&lt;p&gt;**htop explained  **&lt;/p&gt;
&lt;p&gt;&lt;a href="https://peteris.rocks/blog/htop/#htop-on-ubuntu-server-16-04-x64"&gt;https://peteris.rocks/blog/htop/#htop-on-ubuntu-server-16-04-x64&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;**4 Types of Documentation  **&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.divio.com/blog/documentation/"&gt;https://www.divio.com/blog/documentation/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;**Making a Language Server  **&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nickmqb.github.io/2019/11/24/building-a-language-server-for-muon.html"&gt;https://nickmqb.github.io/2019/11/24/building-a-language-server-for-muon.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Don’t move to the Cloud to increase CPU utilization</title><link>https://blog.sledgeworx.dev/dont-move-to-the-cloud-to-increase-cpu-utilization/</link><pubDate>Sun, 05 Jan 2020 07:00:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/dont-move-to-the-cloud-to-increase-cpu-utilization/</guid><description>&lt;p&gt;I have worked with a bunch of companies that launched major initiatives to move their hardware onto the public cloud. None of those companies managed to get their CPU utilization over 10%. At my current job we run Java with 10-20% cpu utilization and 90% memory reserved for the JVM. The standard software development approach does not result in amazing hardware utilization rates.&lt;/p&gt;
&lt;p&gt;The consulting clients we worked with at my previous job expressed a lot of interest in increasing efficiency. We theorized complex tagging and did proof of concepts with Cloudability. But I do not recall actual savings coming out of it. Although there was a lot of complaining about the AWS bill being high. &lt;/p&gt;</description></item><item><title>The top cause of outages is changing code.</title><link>https://blog.sledgeworx.dev/the-top-cause-of-outages-is-changing-code/</link><pubDate>Sun, 29 Dec 2019 04:07:00 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-top-cause-of-outages-is-changing-code/</guid><description>&lt;p&gt;The last week of my oncall shift has been pretty quite. The holiday season has elevated traffic around 50% higher than normal, but I haven’t really noticed. There haven’t been any service outages and it almost feels like I’m not really oncall. Why has it been so quite? We haven’t deployed any code for two weeks. Not deploying code means we aren’t deploying any bugs to production.&lt;/p&gt;
&lt;p&gt;After a deployment you will probably notice any defects over the next couple days. Once you have fixed those it is smooth sailing for that version. &lt;/p&gt;</description></item><item><title>Sorry, we didn't mean to break that for you! But we aren’t going to fix it.</title><link>https://blog.sledgeworx.dev/sorry-we-didnt-mean-to-break-that-for-you-but-we-arent-going-to-fix-it/</link><pubDate>Sun, 22 Dec 2019 04:45:01 +0000</pubDate><guid>https://blog.sledgeworx.dev/sorry-we-didnt-mean-to-break-that-for-you-but-we-arent-going-to-fix-it/</guid><description>&lt;p&gt;Using Business to Consumer SAAS means getting your UX broken all the time.&lt;/p&gt;
&lt;p&gt;Sorry, but we are moving the product in another direction. We have changed the interface to a whole new design. Yes, we don’t have feature parity with the old experience, but we will get there soon. Soon in this case means in six months, after we finish the international rollout we will start to fill in the missing features. &lt;/p&gt;</description></item><item><title>git format-patch and git am</title><link>https://blog.sledgeworx.dev/guides/git-format-patch-and-git-am/</link><pubDate>Sat, 19 Oct 2019 23:39:27 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/git-format-patch-and-git-am/</guid><description>&lt;pre tabindex="0"&gt;&lt;code&gt;# format-patch creates a patch file
# the -1 $COMMIT arguments take the last commit and put it into the file
git format-patch -1 14ab6d…..

#Applies the commits in the patch file onto the current branch
git am ../folder/2019-10-17/0001-SLEDGE-32

#This git log command pulls the history of a file into one patch
git log --pretty=email --patch-with-stat --reverse -- path/file_or_dir 
git am &amp;lt; path/to/file_or_dir
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>PlantUML a text based diagramming language</title><link>https://blog.sledgeworx.dev/plantuml-a-text-based-diagramming-language/</link><pubDate>Sat, 28 Sep 2019 20:17:22 +0000</pubDate><guid>https://blog.sledgeworx.dev/plantuml-a-text-based-diagramming-language/</guid><description>&lt;p&gt;One of the senior engineers at my job is a big fan of PlantUML, so I recommended it to one of the junior guys who needed a diagramming tool. I’ve been taking a look myself since I have never had a goto diagramming tool. &lt;/p&gt;
&lt;p&gt;PlantUML is text based language. You can define structs and their relationships with other items. There are a lot of keywords, which can be a bit confusing, but it generates pretty good diagrams.&lt;/p&gt;</description></item><item><title>Turtle Generator Project Idea</title><link>https://blog.sledgeworx.dev/turtle-generator-project-idea/</link><pubDate>Sun, 11 Aug 2019 22:39:42 +0000</pubDate><guid>https://blog.sledgeworx.dev/turtle-generator-project-idea/</guid><description>&lt;p&gt;New programmers sometimes ask me “what project should I work on next?”. This project is one I drafted up for myself because I wanted to build a more complex application with Django and pytorch.&lt;/p&gt;
&lt;p&gt;The Turtle Generator Project is an attempt to create a website on which people can submit pictures of turtles and vote on whether machine generated turtles are “turtle” or “not turtle”. The user submissions and votes form a GAN or generative adversarial network, both classifying and producing pictures of turtles, although we may use user submissions as part of our dataset of turtles.&lt;/p&gt;</description></item><item><title>Software as a Service benefits both companies and consumers</title><link>https://blog.sledgeworx.dev/software-as-a-service-benefits-both-companies-and-consumers/</link><pubDate>Sun, 11 Aug 2019 08:10:35 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-as-a-service-benefits-both-companies-and-consumers/</guid><description>&lt;p&gt;I was surfing reddit this week and I saw a great comment from u/Swordbow. &lt;/p&gt;
&lt;p&gt;_“Thus as the obligation stretches across time, the cash flow must stretch across time.”  _&lt;/p&gt;
&lt;p&gt;--Quote from u/Swordbow on reddit&lt;/p&gt;
&lt;p&gt;Computer software isn’t like classical machinery in that bugs and vulnerabilities can be discovered after release that destroy the security of the application. A year after release you might have to perform an urgent patch to protect your customers from hacking. If your company goes bankrupt during that year, customers are in a very bad situation. Software needs to be maintained and unlike typical machinery it has to be maintained by the creators not the end users. &lt;/p&gt;</description></item><item><title>Creating a good Project README</title><link>https://blog.sledgeworx.dev/guides/creating-a-good-project-readme/</link><pubDate>Sun, 04 Aug 2019 08:11:29 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/creating-a-good-project-readme/</guid><description>&lt;p&gt;Project README flies are typically an after thought in the software development process. If a question comes up repeatedly it gets added in an unstructured fashion. This is unfortunate, because the people who need READMEs the most are new engineers who joining the team. They don’t know any of the team&amp;rsquo;s jargon. They probably don’t have a good understanding of what the project does. And they probably don’t understand the internal architecture of the project.&lt;/p&gt;</description></item><item><title>Rework book review</title><link>https://blog.sledgeworx.dev/rework-book-review/</link><pubDate>Sun, 28 Jul 2019 07:45:37 +0000</pubDate><guid>https://blog.sledgeworx.dev/rework-book-review/</guid><description>&lt;p&gt;I read REWORK by Jason Fried and David Heinemeier Hansson the founders of basecamp. The book is a series of short 200-500 word ‘sections’ that elaborate on a point. No wasted space or pages full of empty words where the point has already been made. As a result the book flows incredibly well. It is a quick and light read. The ideas in the book are commonsense lessons learned from running a successful small business. A lot of the ideas are shared with agile and the ‘lean startup’ schools of thought. But REWORK is a superior book to the ‘The Lean Startup’. Comparing the two books its clear Hansson and Fried understand the space better. &lt;/p&gt;</description></item><item><title>Looking from the inside out.</title><link>https://blog.sledgeworx.dev/looking-from-the-inside-out/</link><pubDate>Sun, 21 Jul 2019 08:00:07 +0000</pubDate><guid>https://blog.sledgeworx.dev/looking-from-the-inside-out/</guid><description>&lt;p&gt;I started my software engineering career in consulting. We did application development for large companies that did not have enough engineers on staff to get their projects done. We had a Statement of Work and a list of stories to do. Then we handed over the code and went back to our nice benches. Consulting was a big thing, we had executives, million dollar contracts, etc. I often ran in situations where I was spinning my wheels waiting for people to make decisions or to sell another contract. We ran some internal projects, but they were always an after thought. &lt;/p&gt;</description></item><item><title>Solutions Pyramid</title><link>https://blog.sledgeworx.dev/solutions-pyramid/</link><pubDate>Sun, 14 Jul 2019 08:04:16 +0000</pubDate><guid>https://blog.sledgeworx.dev/solutions-pyramid/</guid><description>&lt;p&gt;&lt;img src="https://blog.sledgeworx.dev/images/2019/05/solutions_pyramid-1024x768.jpeg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;In College Computer Science Majors worry a lot about the optimal solution to algorithmic problems. What is the optimal solution? Is it in logarithmic or polynomial time? Did you pass or fail the test? My Algorithms class had a group class competition to see which team could find the best solution to a particular algorithmic problem. &lt;/p&gt;
&lt;p&gt;Then when they start looking for jobs they run into whiteboarding interviews where they are supposed to find the optimal solution in 50 minutes so we have time for questions. &lt;/p&gt;</description></item><item><title>You should not “build it here” even if your core competency IS Software.</title><link>https://blog.sledgeworx.dev/you-should-not-build-it-here-even-if-your-core-competency-is-software/</link><pubDate>Sun, 07 Jul 2019 22:15:56 +0000</pubDate><guid>https://blog.sledgeworx.dev/you-should-not-build-it-here-even-if-your-core-competency-is-software/</guid><description>&lt;p&gt;Some companies try to avoid developing software that doesn’t directly contribute to making money. Other companies do the opposite and try to only use internal software. Falling into the “not invented here” trap.&lt;/p&gt;
&lt;p&gt;Large software companies fall into a different failure case where they build large massively integrated internal development platforms. &lt;/p&gt;
&lt;p&gt;At the beginning these companies were solving a problem that had no existing solution and they correctly chose to create internal solutions. &lt;/p&gt;</description></item><item><title>A better way to do Agile Estimates</title><link>https://blog.sledgeworx.dev/guides/a-better-way-to-do-agile-estimates/</link><pubDate>Sun, 30 Jun 2019 08:00:21 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/a-better-way-to-do-agile-estimates/</guid><description>&lt;p&gt;This post has moved to my new website &lt;a href="https://www.estimating.dev"&gt;estimating.dev&lt;/a&gt;. Which is the place for all information and best practices around software development project estimates.&lt;/p&gt;
&lt;p&gt;Here is the link to this posts new home.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.estimating.dev/a-better-way-to-do-agile-estimates/"&gt;https://www.estimating.dev/a-better-way-to-do-agile-estimates/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Bookshelf Post</title><link>https://blog.sledgeworx.dev/bookshelf-post/</link><pubDate>Sun, 23 Jun 2019 16:27:34 +0000</pubDate><guid>https://blog.sledgeworx.dev/bookshelf-post/</guid><description>&lt;p&gt;I have gotten back into reading Software Engineering books. It has been a good change of pace to study a bit in the mornings. My current focus is on Estimation. I want to come up with a better more accurate way for us to estimate software projects in agile environments.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.sledgeworx.dev/images/2019/05/books_1-1024x768.jpeg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;These two books are great references. &lt;em&gt;Designing Data-Intensive Applications&lt;/em&gt; is a good read and believe it or not my workplace still uses Java 8 so &lt;em&gt;Java Performance&lt;/em&gt; is not out of date.&lt;/p&gt;</description></item><item><title>How much does using Haskell instead of Java cost your company?</title><link>https://blog.sledgeworx.dev/how-much-does-using-haskell-instead-of-java-cost-your-company/</link><pubDate>Sun, 16 Jun 2019 15:17:58 +0000</pubDate><guid>https://blog.sledgeworx.dev/how-much-does-using-haskell-instead-of-java-cost-your-company/</guid><description>&lt;p&gt;Following on my earlier post “How much is turnover costing your company?” this post is about how much using non-standard technology stacks costs your company. Lets say company A is high performance company with a custom functional programming stack that uses Haskell and Miso for development. Company A doesn’t ship a lot of bugs to production, in fact they run CI/CD with deployments to prod everyday. Their SAAS product is one of the best in the industry and is growing at a good rate. &lt;/p&gt;</description></item><item><title>Estimating in Agile</title><link>https://blog.sledgeworx.dev/estimating-in-agile/</link><pubDate>Sun, 09 Jun 2019 08:00:52 +0000</pubDate><guid>https://blog.sledgeworx.dev/estimating-in-agile/</guid><description>&lt;p&gt;This post has moved to my new website &lt;a href="https://www.estimating.dev"&gt;estimating.dev&lt;/a&gt;. Which is the place for all information and best practices around software development project estimates.&lt;/p&gt;
&lt;p&gt;Here is the link to this posts new home.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.estimating.dev/a-better-way-to-do-agile-estimates/"&gt;https://www.estimating.dev/a-better-way-to-do-agile-estimates/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The usefulness of linking email threads in stories and tickets.</title><link>https://blog.sledgeworx.dev/the-usefulness-of-linking-email-threads-in-stories-and-tickets/</link><pubDate>Sun, 02 Jun 2019 20:40:46 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-usefulness-of-linking-email-threads-in-stories-and-tickets/</guid><description>&lt;p&gt;Have you ever had a great email thread about a feature? You and your manager hashed out a solution with the product team and everyone is in agreement. All that is left to do, is to create a JIRA ticket and get working. Now wouldn’t it be nice if you could just LINK THE EMAIL THREAD IN THE STORY!&lt;/p&gt;
&lt;p&gt;I have seen email archives, I know they exist. Linux has them. My employer even has email archives. But how can I link to the archive from Outlook? There should be a way to do this super simple thing to share my emails in a story. &lt;/p&gt;</description></item><item><title>How much is turnover costing your company?</title><link>https://blog.sledgeworx.dev/how-much-is-turnover-costing-your-company/</link><pubDate>Sun, 26 May 2019 20:39:21 +0000</pubDate><guid>https://blog.sledgeworx.dev/how-much-is-turnover-costing-your-company/</guid><description>&lt;p&gt;The software industry has a turnover problem. The general consensus is that it takes around 6-12 months to fully onboard a new hire. Essentially, you hire someone for 100k a year. Then it takes roughly 6-12 months before that person starts producing work at the 100k level. This would be fine if Software Engineers did not change jobs frequently, but we tend to switch jobs every 1-3 years for higher pay. &lt;/p&gt;</description></item><item><title>Onboarding Preparedness Quiz</title><link>https://blog.sledgeworx.dev/guides/onboarding-preparedness-quiz/</link><pubDate>Sun, 19 May 2019 20:37:09 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/onboarding-preparedness-quiz/</guid><description>&lt;p&gt;I am working on some materials around onboarding new engineers.&lt;/p&gt;
&lt;p&gt;The Quiz&lt;/p&gt;
&lt;p&gt;When was the last time you onboarded a new engineer?&lt;/p&gt;
&lt;p&gt;Do different team members use different development environments to run integration tests locally?&lt;/p&gt;
&lt;p&gt;Do you have architecture diagrams that are up to date as of last month? &lt;/p&gt;
&lt;p&gt;Do you have an up to date list of the APIs you consume and what their SLAs are? &lt;/p&gt;
&lt;p&gt;Do you have a list of all the internal tools your team uses to complete their work? &lt;/p&gt;</description></item><item><title>You can’t estimate a story in 2 minutes.</title><link>https://blog.sledgeworx.dev/you-cant-estimate-a-story-in-2-minutes/</link><pubDate>Sun, 12 May 2019 08:35:52 +0000</pubDate><guid>https://blog.sledgeworx.dev/you-cant-estimate-a-story-in-2-minutes/</guid><description>&lt;p&gt;The typical agile process involves 5-10 people in a room. They go through one sentence descriptions of tasks, and each secretly comes up with their own estimate before every turns over their cards like in the final round of poker.&lt;/p&gt;
&lt;p&gt;Then there will be a couple minutes spent discussing the estimates which will end with the average of the “votes”.&lt;/p&gt;
&lt;p&gt;These meetings are usually confused by someone misunderstanding the breakout of one particular feature into one sentence descriptions, causing the group to backtrack and re-estimate several of the stories.&lt;/p&gt;</description></item><item><title>Continuous Delivery of Bugs</title><link>https://blog.sledgeworx.dev/continuous-delivery-of-bugs/</link><pubDate>Sun, 05 May 2019 08:35:09 +0000</pubDate><guid>https://blog.sledgeworx.dev/continuous-delivery-of-bugs/</guid><description>&lt;p&gt;Agile Rapid Delivery means you deliver bugs to your customers everyday. &lt;/p&gt;
&lt;p&gt;Every once in a while I read an article about how software has become horrible over the last decade. Software has gotten slower, it uses too much memory, it has too many confusing features, why are developers producing worse software? &lt;/p&gt;
&lt;p&gt;Part of this is coincidence. We remember software being fast, but that was during a time when CPU speeds doubled every year. By the time you had used a program for a year, there was a processor out that could do it in half the time. Now Moore’s law ambles around at low double digit performance improvements. &lt;/p&gt;</description></item><item><title>Please don’t build yet another internal ‘tool’</title><link>https://blog.sledgeworx.dev/please-dont-build-yet-another-internal-tool/</link><pubDate>Sun, 28 Apr 2019 08:34:56 +0000</pubDate><guid>https://blog.sledgeworx.dev/please-dont-build-yet-another-internal-tool/</guid><description>&lt;p&gt;We all know the feeling. You have just started a new contract and its time to find out the truth about their software stack. Do they still use Ant despite the fact that Maven and Gradle have been options for over 10 years? Are you about to find out that their website is ‘really’ built on a 20 year old Pearl web framework that hasn’t been used for anything anywhere else? &lt;/p&gt;</description></item><item><title>It’s amazing how much time not having standup adds to my day.</title><link>https://blog.sledgeworx.dev/its-amazing-how-much-time-not-having-standup-adds-to-my-day/</link><pubDate>Thu, 25 Apr 2019 20:40:23 +0000</pubDate><guid>https://blog.sledgeworx.dev/its-amazing-how-much-time-not-having-standup-adds-to-my-day/</guid><description>&lt;p&gt;Now that I am working as an Individual Contributor again I actually get to do focused work. My team has standup at 10:45, I start thinking about standup at about 10:00 or so. What did I do yesterday? I put together some notes and then go back to working for a bit. After standup I have a few minutes of work and then go to lunch around 11:30 to avoid the rush. &lt;/p&gt;</description></item><item><title>Back to being a full time dev 6 month review.</title><link>https://blog.sledgeworx.dev/back-to-being-a-full-time-dev-6-month-review/</link><pubDate>Sun, 21 Apr 2019 16:46:22 +0000</pubDate><guid>https://blog.sledgeworx.dev/back-to-being-a-full-time-dev-6-month-review/</guid><description>&lt;p&gt;Time has gone by faster than I expected. At this point I have been back as a full time developer individual contributor for about six months. It had been about 2 years since I did any Java development and the getting back into it was harder than I expected. It doesn’t help that the Java projects here are large and the system is massive. We have dozens of Java services with 100,000s of lines of code and we integrate into a lot of core business systems outside of our organization. This is the most complicated project I have worked on personally, with problems spanning from prices, voice UI, internationalization of voice UI, international law and massive java projects.&lt;/p&gt;</description></item><item><title>Software Engineer Resume Handbook</title><link>https://blog.sledgeworx.dev/guides/software-engineer-resume-handbook/</link><pubDate>Sun, 14 Apr 2019 08:15:13 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/software-engineer-resume-handbook/</guid><description>&lt;p&gt;&lt;a href="https://blog.sledgeworx.dev/images/2019/03/resume_handbook.pdf"&gt;resume_handbook&lt;/a&gt; &lt;strong&gt;Software Engineer Resume Handbook&lt;/strong&gt; &lt;strong&gt;Introduction&lt;/strong&gt; Many Software Engineers would rather ignore their resume. It reminds you of how few companies get back to you when you apply. But when you are looking for a new job, you end up scrambling to update your resume. Hopefully, this writing will help you create a resume that gets the results you want. &lt;strong&gt;Important Sections&lt;/strong&gt; Your resume has five important sections contact information, your education, work experience and skills. If space allows a personal projects section and goal statement can be added. &lt;strong&gt;Contact information&lt;/strong&gt; For contact information you want to include your name, email address, phone number and the city you live near. Recruiters will contact you by phone or email. Including your actual address is unnecessary, simply state the city you are in ex. “Miami, FL”. Recruiters are never going to physically mail you anything. They just want to know whether you will need to relocate or not. &lt;strong&gt;Education&lt;/strong&gt; In the education section you want to list which college you went to, the year you graduated and your GPA. If you have a relevant masters degree list that too. I took my GPA off after a few years of industry experience because it was under 3.0. After five years in industry it is probably best to remove your GPA even if it is a 4.0. By that point in your career your GPA is irrelevant compared to your experience in the workforce. &lt;img src="https://blog.sledgeworx.dev/images/2019/04/education_section-1024x135.png" alt=""&gt; My education line looks like what you see above. It includes the university I went to, what I majored in and the year I graduated. Since, I have a Minor in Computer Science it would be worthwhile to list it above. Do not list the classes you took unless you have nothing else to fill space. In general companies do not care what classes you took as long as your major was computer science, software engineering or something closely related. If you went to community college and then transferred to a university, you do not have to mention community college. Your education section should be very short. Five lines at the longest. It should be easy to skim past without thinking about. When the recruiter is skims your resume she should think “ah, the candidate has an appropriate college degree”. &lt;strong&gt;Experience&lt;/strong&gt; The experience section is the most important part of your resume. It should be the largest and clearly visible in the top half of your resume. This section is where you convince the hiring manager to interview you. Many companies will post a general job posting for a ‘Software Engineer’, then depending on your experience and interview performance they will decide to make an offer for a particular level like Junior or Senior software engineer. I like to split the experience section up by job. Then have a small paragraph for each project at that job that I want to highlight. You want to fill the section with the highlights of your career. When did you demonstrate the most leadership, technical acumen and success? That is what you put in your experience section. Some of your experiences will have been bad. Projects fail, people get laid off, etc. A simple rule of thumb is “never volunteer negative information”. This goes double for your resume. Never include negative information in your resume. If your GPA is bad and you barely graduated college with a 1.5 GPA, do not put it in your resume. If you failed Calculus 2 three times do not put that in your resume. If you are a felon and do not have a legal obligation to disclose your criminal history, do not put it on your resume. If the company wants to know they will ask you. Were you fired from your last job? If so, do not put that on your resume. &lt;strong&gt;Employment Dates&lt;/strong&gt; All you need to include is a range of months during which you worked at the job. Do not put January 13, 2017 through March 5, 2018 on your resume. The recruiter does not care how many days you were employed at a job. Put January 2017 - March 2018 as your employment date range. If the recruiter cares they will ask you about how many days you were employed during a phone screen. Do not say anything negative in your resume about any of your jobs. You might think a job was a horrible failure that you were glad to escape after a year. But your resume should describe that job as a successful stepping stone where you shipped desperately needed features to hungry customers. &lt;img src="https://blog.sledgeworx.dev/images/2019/04/experience_section-1024x218.png" alt=""&gt; This blurb implies a number of things. I say that I led a team, mentored developers guided the architecture of a project and that I did so with Go, React.js and AWS. I do not say that I have soft or hard skills. I say that I used soft and hard skills to do useful things. My friend had an internship which he hated, where his job consisted of writing scripts for his gaming mouse which scraped insurance company websites to check customer eligibility. He wanted to gloss over that internship because he hated it. I had to challenge him on it because even though he felt the internship was a failure it could be phrased as a massive success. How many people help hospitals verify patients’ insurance during an internship? In my internships we built internal tooling that maybe 3 people ever used. My friend built a system that verified insurance coverage for hundreds of people. But he didn’t want to list that on his resume because he remembered it as a horrible experience. &lt;img src="https://blog.sledgeworx.dev/images/2019/04/experience_javadeveloper_banzaico-1024x309.png" alt=""&gt; In this example I included two projects that I worked on while I had the title “Java Developer” at a company. &lt;strong&gt;You should include non-technical jobs&lt;/strong&gt; Include as many jobs as you can fit into the Experience section. If you have one programming internship and three jobs where you worked as a dishwasher, list all of them. Add a short paragraph describing what you did and learned at your non-technical position. Wait until you have had four technical jobs before you remove non-technical roles from your resume. &lt;strong&gt;Skills&lt;/strong&gt; The skills section is often highly positioned in engineers resumes. We value the technologies, languages and frameworks we have mastered and want to put them on top. Resist that urge. The tools you have developed skills with probably only overlap a little with the stack used at your next job. Put the skills section near the bottom of your resume. Do everything you can to make it as small as possible to free up space for the experience section. Hiring managers do not get a lot of value out a simple list of technologies you are familiar with. Unless you are a perfect match they will have to spend months training you on their technology stack. Unless you are a serious expert on a technology do not list a skill level. You are not ‘Advanced’ at Java or Object Oriented Design or anything else in your ‘Skills’ section. Companies are looking to fill positions for generalist software engineers and hire experts to solve particular problems. If you are an expert on a subject your resume should be focused only around your expertise in that one thing. A Cassandra database expert should not be looking for general purpose software engineering jobs, he should be focusing on jobs that want a Cassandra expert. As a Generalist you are expected to be able to muddle through any problem that is thrown at you. Companies will throw you at whatever they want no matter the ‘level’ of expertise you put on your resume. The hiring manager has better visibility into what the average skill level is than you do. You could list yourself as a ‘Kubernetes - Beginner’ and be the most knowledgable person that company ever interviewed. Only people who do dozens of interviews a year have the visibility necessary to compare you to the rest of the job market. Some people worry about being ‘grilled’ about anything they list in the skills section. So they try to protect themselves by putting ‘beginner’ or ‘intermediate’ next to the skill under the belief they will be grilled less. If you are a junior engineer, people know you are not an expert at anything. Becoming an expert requires a lot more effort and time than most junior engineers have invested into software engineering. Even if you put ‘Expert at distributed systems’, recruiters will see your two internships and they will not believe you. If you get asked about something admit what you do and do not know. If you are backed into a corner, just say “I know a little about that technology, and I am looking for jobs where I use it in my work.” If you are an expert in something you do not want to put it in your ‘Skills’ section, put it in the ‘Experience’ section! If you gave a talk on Kubernetes at Kubecon, that gives you enough expertise to interest people. Do not relegate an interesting experience like that to the skills section. If you were the Java performance expert at your last job then relate an experience where you saved the company hundreds of thousands of dollars in hardware costs. Don’t list actual expertise, tell a story about it. Aim to list twenty skills at most. You want to be able to talk about them all intelligently. More skills is not necessarily better, the recruiters is looking for a few keywords that match the job posting. Your goal for the skills section is to give the recruiter the keywords they are looking for and to hint at the breadth of your skills. &lt;strong&gt;Goal Statement (Optional)&lt;/strong&gt; The goal statement is a short paragraph that you can use to help the hiring manager understand what you are looking for. It can be helpful when applying to companies that make general job posts for ‘Software Engineers’ and then rank candidates based on experience. Use the goal statement to let them know what role and grade you are looking for. &lt;em&gt;“Senior Software Engineer building today’s software products and platforms, training developers to maximize their abilities, and supporting business success.“&lt;/em&gt; The line above is one I have used. It gives an idea of what role I am looking for and how I view my role in a company. The goal statement is optional, you do not need one. If you are short on space cut it and devote more to the experience section. &lt;strong&gt;What about Personal Projects?&lt;/strong&gt; Personal projects are not one of the major sections on your resume. I include links to my github and blog where people can find my personal projects. I would prioritize describing personal projects before hobbies, but describing job experience is just better. If you have a bunch of personal projects and only one job or internship, make sure to use more space describing that job than you do on your personal projects. &lt;strong&gt;Style&lt;/strong&gt; Styling a resume is a worthwhile, but risky process. Unless you are looking or jobs as a designer or creative artist, showcasing your artistic talent is not going to contribute to getting a job. Hiring managers and recruiters are skimming through dozens of resumes at a time. Your first priority is to make sure that the important sections are easy to find on your resume. Use bold headings that make it obvious that this section is about your education and that section is about your work experience. You can add flair to your resume to help standout. Try to avoid anything fancy, a resume is not art. Any flair should be evaluated on whether it makes your resume more difficult to read. Unless you are 100% sure your flair does not make your resume harder to read cut it. &lt;strong&gt;Sentences with Trailing words&lt;/strong&gt; Watch out for sentences with trailing words. Those trailing words are taking up an entire line that could be describing your experience. Try to modify that sentence to use less space or to completely fill two lines in your resume. &lt;strong&gt;Trim Extra Space&lt;/strong&gt; Trim as much extra space as you can. Careful formatting can save you dozens of lines in a one page resume. &lt;strong&gt;Cover Letters&lt;/strong&gt; Cover letters often come up when people discuss job applications. A cover letter is a one page letter you write to persuade a company to interview you. You want to write about why you are a good fit for the position and how you are motivated especially to work at that company. Two major strategies you can use are to write a custom cover letter for each job you apply for or to maintain a template cover letter which you modify a little each time you apply to a job. I use a cover letter template for the majority of the jobs that I apply for. I maintain a ‘Application Developer’ cover letter and a ‘Devops Engineer’ cover letter then do a little customization for each position I apply for. The jobs I am qualified for are generalist Software Engineer and Devops so my cover letter do not need to change a lot. Custom cover letters are good for highly competitive companies and positions that you really want. The problem is that you will end up spending several extra hours for each application and still might not get a response.&lt;/p&gt;</description></item><item><title>Why I am having a good time at Amazon</title><link>https://blog.sledgeworx.dev/why-i-am-having-a-blast-at-amazon/</link><pubDate>Sun, 07 Apr 2019 07:18:14 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-i-am-having-a-blast-at-amazon/</guid><description>&lt;p&gt;This post is about some of the good parts of working at Amazon as a Developer. Believe it or not, I have been working at Amazon for almost 6 months. I work with massive Java micro-services and XML configuration everyday. There are so many systems that it takes years to figure out what is going on. &lt;strong&gt;Mentorship&lt;/strong&gt; The top thing I am enjoying is mentorship. My coworkers, managers and lead engineers are experienced and very competent. They have worked on massive systems at Amazon for 5-10 years and have a host of experience. I like being one of the dummer people in the room even if its inevitably temporary. &lt;strong&gt;Best Practices&lt;/strong&gt; At my last job we studied and taught best practices, but we had a hard time actually, you know, practicing them. At Amazon we actually do CI/CD. We have integration and E2E tests. Our team practices supports our own services in production. This is the experience I wanted to have before I got pulled into teaching courses and best practices. &lt;strong&gt;Bigger impact&lt;/strong&gt; My team builds the core platform for all sales on Alexa. We have customers all over the world in a number of languages. It is not like the 9 months I spent working on a product that was canceled after a merger. &lt;strong&gt;More interesting problems&lt;/strong&gt; Just today I was looking into some latency issues after a Product Owner did some introductory research. We pulled up the metrics and started analyzing p50 vs p99 vs p99.9, etc. Do the latency spikes correspond with deployments? Do they correspond with GC? What does the profiler say is happening during this API call? **What is the same? ** The great things that I have enjoyed previously in the tech industry are pretty much the same. My hours have not changed. My flexibility is the same. The general culture is pretty much the same. &lt;strong&gt;What is worse?&lt;/strong&gt; Amazon is immense and it is impossible to know everything that is going on. There are often 4 or more slightly different solutions to a problem. How do you know which one is useful? Well, you have to rely on context. The wiki is comparable to a certain cable company I used to work for. Each team makes their own docs and their own documentation standards.&lt;/p&gt;</description></item><item><title>Links Post</title><link>https://blog.sledgeworx.dev/links-post/</link><pubDate>Sun, 31 Mar 2019 08:53:55 +0000</pubDate><guid>https://blog.sledgeworx.dev/links-post/</guid><description>&lt;p&gt;&lt;a href="https://presumably.de/monorepos-and-the-fallacy-of-scale.html"&gt;https://presumably.de/monorepos-and-the-fallacy-of-scale.html&lt;/a&gt; Monorepositories are an interesting topic. The more I use similar systems the more I think monorepos are the way to go. The Product Model vs Project Model &lt;a href="https://nickmchardy.com/2018/12/doing-products-instead-of-projects.html"&gt;https://nickmchardy.com/2018/12/doing-products-instead-of-projects.html&lt;/a&gt; Nick McHardy writes about how his organization moved from doing ‘projects’ to organizing around ‘products’. Especially interesting for me since I just moved from a project organization to a product organization. Sensible Software Engineering &lt;a href="https://www.scriptcrafty.com/2019/02/sensible-software-engineering/"&gt;https://www.scriptcrafty.com/2019/02/sensible-software-engineering/&lt;/a&gt; How do we get out of the local optimum of software development theory we are in now? We can be somewhat confident that there is a better programming paradigm out there than the modern Java ecosystem. Technically, there is an ideal development paradigm, even if finding it is near impossible. It takes us around 20 years as an industry to explore one paradigm. We don’t know what we can do to find a better paradigm within the constraint of how much it costs to really explore even one. This reminds me of the multi-armed bandit problem. You want to find the optimal slot machine to play. But you still have to create things as an industry every year.&lt;/p&gt;</description></item><item><title>Pipelines should automatically reject change-sets that fail the integration tests.</title><link>https://blog.sledgeworx.dev/pipelines-should-automatically-reject-change-sets-that-fail-the-integration-tests/</link><pubDate>Sun, 24 Mar 2019 08:17:49 +0000</pubDate><guid>https://blog.sledgeworx.dev/pipelines-should-automatically-reject-change-sets-that-fail-the-integration-tests/</guid><description>&lt;p&gt;CI/CD is magical when it works. Write your code, open a pull request, get approvals and merge. Then the pipeline takes care of everything from then on. Integration tests are run end to end and UI tests pass. Finally, your change is deployed via a canary release into production. My team runs a full CI/CD pipeline, after a Pull Request is approved and merged it is deployed through several stages of integration tests and deployed to production. This pipeline gets a lot of use with around 10 engineers working on it at any given time. Unfortunately, because of how our infrastructure works, integration test failures often break the pipeline. Changes do not proceed through the pipeline independently, instead commits build up in front of slower parts of the pipeline, particularly our integration and end-to-end tests. During busy times several pull requests will be working their way through the pipeline together. Our integration tests can fail for many reasons other than code changes. A partner team could have a failed deployment that is upstream of us, a configuration file could have been changed, a test account could have expired, and more. When the pipeline does fail, we have to track down what caused the failure. If it was a code change we will revert the commit, otherwise we typically have to work with another team to get their systems working. When a pull request breaks the integration or end-to-end test the pipeline will block at that stage. Then we will revert the changes and redeploy the master branch. In the worst cases several commits will have to be reverted and redeployed into the pipeline before it will start working again. Fixing the pipeline will often take an entire day as the fix has to move through each stage in the pipeline until it reaches the one that failed. Then there will be a flood of changes as all the commits that built up at the failing stage move onward. I would like to fix this, but doing so will likely make the pipeline slower on average or require changes to how our Pull Request workflow functions.&lt;/p&gt;</description></item><item><title>Prepare notes for Standups</title><link>https://blog.sledgeworx.dev/prepare-notes-for-standups/</link><pubDate>Sun, 17 Mar 2019 08:00:08 +0000</pubDate><guid>https://blog.sledgeworx.dev/prepare-notes-for-standups/</guid><description>&lt;p&gt;Daily standups are a standard part of the software engineering life. Over the last four years I have had a standup of some kind nearly every workday. Standup is a ritual, you circle up with your coworkers and take turns trying to remember what exactly you did to justify your salary yesterday. Every third update devolves into a 5+ minute derailment of the meeting that would really prefer not to follow. Then when it is finally your turn you spill out your update as quickly as possible. Only to slowly realize 3 minutes later that you forgot to mention half of the things you did the previous day. The solution to standup is pretty simple. &lt;strong&gt;Just take notes.&lt;/strong&gt; I keep a checklist of tasks in the Mac notes app. I check off the item when its done. Then in standup all I do is read through my list. &lt;img src="https://blog.sledgeworx.dev/images/2019/02/Screen-Shot-2019-02-16-at-6.07.25-PM-300x107.png" alt=""&gt; Just keeping a little list of tasks makes it easy to remember what you did for standup. It is easy and will save you the embarrassment of not having anything to say to justify your salary during the meeting.&lt;/p&gt;</description></item><item><title>A Certification is not the same as having a skill</title><link>https://blog.sledgeworx.dev/a-certification-is-not-the-same-as-having-a-skill/</link><pubDate>Sun, 10 Mar 2019 07:11:48 +0000</pubDate><guid>https://blog.sledgeworx.dev/a-certification-is-not-the-same-as-having-a-skill/</guid><description>&lt;p&gt;People often ask on r/cscareerquestions, “Can I just get this Java Certification instead of doing a Bootcamp or getting a CS degree”. And the answer is that the Certification is not going to help you as much as you think it will. Computer Programming is still a young field, gate keepers are just not that important yet. Becoming a Real Estate Agent requires you to get a License or Certification from the State certifying you to buy and sell houses for people. There is nothing like that for Computer Programming. Anyone with any amount of skill or experience can declare themselves a ‘Software Engineer’. There is no governing body which can ‘certify’ your skills. The current standard is Whiteboarding problems and timed hackerrank.com questions. Your return on investment from investing time into hackerrank.com will be much higher than getting a Certification. How Software Engineers demonstrate their skill to the market is through whiteboarding questions. Get good at that first then worry about Certifications. Does this make Certifications worthless in Software? I don’t think so, but it is not going to be worth it for junior developers trying to break into the market. One of my employers paid for me to get the ‘Certified Kubernetes Administrator’ certification from the CNCFF. Why did they do that? So that they could qualify as a CNCF partner organization and get free marketing and a better aura of expertise. I put that certificate on my resume, but it has not gotten me any Kubernetes jobs. If your company is going to pay for a certification go for it. Otherwise, I do not think it is worthwhile for you to pay for it personally.&lt;/p&gt;</description></item><item><title>Getting into Software Handbook Released!</title><link>https://blog.sledgeworx.dev/getting-into-software-handbook-released/</link><pubDate>Sun, 10 Mar 2019 03:43:10 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-handbook-released/</guid><description>&lt;p&gt;The &lt;strong&gt;&lt;em&gt;Getting into Software Handbook&lt;/em&gt;&lt;/strong&gt; has been released on Amazon. This handbook is a guide to becoming a Software Engineer with a non-traditional Computer Science background. I learned to program when I was 21 and had a lot of catching up to do to enter the industry. This handbook covers my experience and thoughts on getting into the Software Industry. &lt;a href="https://www.amazon.com/dp/B07PJCL4SH/"&gt;https://www.amazon.com/dp/B07PJCL4SH/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Buy the Getting into Software Handbook</title><link>https://blog.sledgeworx.dev/handbooks/</link><pubDate>Sun, 10 Mar 2019 03:37:59 +0000</pubDate><guid>https://blog.sledgeworx.dev/handbooks/</guid><description>&lt;p&gt;The Sledgeworx Getting into Software Handbook is a brief guide on how to start a programming career without a Computer Science Degree.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 3 core skills a programmer needs&lt;/li&gt;
&lt;li&gt;How to evaluate your programming talent&lt;/li&gt;
&lt;li&gt;The types of employers hiring software engineers&lt;/li&gt;
&lt;li&gt;Build your resume&lt;/li&gt;
&lt;li&gt;How the interview process works&lt;/li&gt;
&lt;li&gt;Succeeding as a software engineer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/dp/B07PJCL4SH"&gt;https://www.amazon.com/dp/B07PJCL4SH&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Contents 

Introduction
	About this Handbook
	Who am I
Why Software Development Could be a good career for you

How I got into Software Development

Is Software Development a Good fit for you?
	The 3 core skills
	Evaluating your talent 
	
What do you need to learn to provide value to a company
	
Software Industry Sectors overview 

The Software Development Interview Process
	How to prepare for your first job or internship
	Resume
	Applying to Jobs
	Interview Preparation 

	How I got my internships 
	Components of software development interviews

	How long it takes to find a job

Staying in Software 
	How to succeed in your first job
	Career Progression as a Software Engineer
	Getting Promoted 
	Switching jobs
	Unexpected Pain points
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="https://www.amazon.com/dp/B07PJCL4SH"&gt;https://www.amazon.com/dp/B07PJCL4SH&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Book Review: Josh Doody’s Fearless Salary Negotiation</title><link>https://blog.sledgeworx.dev/book-review-josh-doodys-fearless-salary-negotiation/</link><pubDate>Sun, 03 Mar 2019 07:37:08 +0000</pubDate><guid>https://blog.sledgeworx.dev/book-review-josh-doodys-fearless-salary-negotiation/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Fearless Salary Negotiation (&lt;/em&gt;&lt;/strong&gt;&lt;a href="https://fearlesssalarynegotiation.com"&gt;&lt;strong&gt;&lt;em&gt;https://fearlesssalarynegotiation.com&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;** &lt;em&gt;)&lt;/em&gt;** is a book about negotiating salaries after you get an offer. Josh Doody’s book covers communicating with hiring managers, dealing with the dreaded salary question, how to write a counteroffer and more. &lt;strong&gt;The first section of the book covers how to determine your market value.&lt;/strong&gt; One thing to be aware of is that companies have pay grades which can affect the size of any raises you get. If you are hired into a company at the top of a pay grade, you may have to get promoted before you can get any raises. Whereas if you start at the bottom of a pay grade, you can get large raises until you reach the top of that grade. This can also be a factor when negotiating salary, because you may need a salary that they cannot offer to you without bumping you up to the next grade. &lt;strong&gt;The next section covers negotiating higher pay when you switch jobs&lt;/strong&gt; Getting better at negotiating offers is why I bought this book. Most employees will negotiate less than 20 offers in their career. But a recruiter or hiring manager could negotiate 20 offers in a single year. This disparity is a bigger deal than most people realize because each offer you don’t negotiate could represent a loss of $10,000 a year for the rest of your career. The book includes a few sample emails which I have used to get over $5000 increases on several offers. **The last part of the book is about how to get a raise in your current job. ** I have never bothered negotiating raises at my current job. You should avoid any situation where you cannot switch to a new job for more money. Your employer has the structural advantage in this market. You only have leverage when you have multiple offers. Interviewing is a huge time commitment. If you are not going to take the biggest raise you can get its not worth it. My last job search took almost 24 hours of my time for each offer I got. If you stay you will almost always be leaving money on the table and that is after blowing days worth of time. I recommend Fearless Salary Negotiation to anyone who is looking for another job and wants to get paid more.&lt;/p&gt;</description></item><item><title>Why ‘go get another job’ is the answer to all r/cscareerquestions.</title><link>https://blog.sledgeworx.dev/why-go-get-another-job-is-the-answer-to-all-r-cscareerquestions/</link><pubDate>Sun, 24 Feb 2019 07:07:32 +0000</pubDate><guid>https://blog.sledgeworx.dev/why-go-get-another-job-is-the-answer-to-all-r-cscareerquestions/</guid><description>&lt;p&gt;The r/cscareerquestions sub-reddit gets all sorts of questions from software engineers about their careers. And if you spend any amount of time reading through the posts you will find the answer ‘get another job’ given as a response to most questions. Why is getting another job recommended as the solution to so many workplace problems? Chance matters a lot more in your career than you want to admit. At the beginning of your career you are not going to have enough perspective to screen companies well. Your first job might be at a company with horrible practices that make your life more difficult. But you will not know the right questions to ask yet. If you do not read blogs or reddit you might not even realize that those practices are unusual. Each company has different processes carried out by different people. Different people will get along with you better or worse. You should find a job where you get along with the people who are up high in the ranks. Switch jobs every year until you find a company that fits you well. You might be a night owl or a day person. In software engineering you can find jobs that start at 8am or at 11am. Do not stay in a job that doesn’t match your internal clock. You will be suffering for no reason. Lots of the questions on the subreddit share the root cause of you ended up in a job that was a bad fit for you. Or you ended up with a job where your bosses and coworkers don’t like you. The job being a bad fit is caused by bad luck and can only be fixed by switching to a new job that is a better fit. You are not going to change the business to fit you better as a Junior Developer. Your best option is to move at the one year mark for mild difficulties and to move immediately when faced with big problems. There are enough bosses that you can find one that likes you individually as a person. Don’t spend years at a job you don’t like with a boss you hate and a team that thinks you are a loser.&lt;/p&gt;</description></item><item><title>Vendoring and Dependency security</title><link>https://blog.sledgeworx.dev/vendoring-and-dependency-security/</link><pubDate>Sun, 17 Feb 2019 07:04:36 +0000</pubDate><guid>https://blog.sledgeworx.dev/vendoring-and-dependency-security/</guid><description>&lt;p&gt;In 2019 it has become standard practice to download dependencies straight off of the internet without verifying the code is secure and free of bugs. Software Engineers typically look up a dependency on github and follow the instructions to add it immediately to their project’s dependencies. More thorough engineers might take a few minutes to read through the code before adding it to their package.json file. This era of downloading dependencies off the internet without worrying about the security or integrity of the code has coincided with several notable hacks. The event-stream hack [1] which injected malicious bitcoin stealing code into a library used by thousands of NPM packages is only the latest in a series of hacks which take advantage of our loose standards for adding packages to our projects. Vendoring is the practice of embedding dependencies, binary or source code, into our codebases. The practice was popularized by the Go language, but had been used internally by Google and several other companies before that. Vendoring your dependencies adds an additional step, of committing new code to your repository, before new code can enter your software. And if you have all the source code for your dependencies vendor in your repository, you are at least able to verify all of the code in your system. Google stores all dependencies inside its custom version control system and has a process to vet new dependencies before they can be consumed by engineers. But most companies I have worked for had no restrictions on what dependencies could be added to a project whatsoever. The current status code of trusting without verifying code will continue to result in major hacks. The open-source ecosystem is too big to audit. And most companies do not even attempt to vet their dependencies. The many libraries created by independent developers which make open-source great are the least likely to be audited and most susceptible to custody hacks like what happened in the case of event-stream.   [1] &lt;a href="https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident"&gt;https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How long does interviewing take?</title><link>https://blog.sledgeworx.dev/how-long-does-interviewing-take/</link><pubDate>Sun, 10 Feb 2019 09:11:29 +0000</pubDate><guid>https://blog.sledgeworx.dev/how-long-does-interviewing-take/</guid><description>&lt;p&gt;As a new Software Engineer it is hard to know how much time the job search should take. Most people start by applying to 2-3 jobs and wait for recruiters to get back to them. Then 4 weeks later they assume that because no one got back to them they must not be very appealing on the job market. The reality is that if you are cold applying to job openings you will have a pretty low response rate. The most desirable engineers in the market get around a 50% response rate. Entry level engineers have to deal with a response rate closer to 10%. That means that for every ten jobs that you apply for, a recruiter will follow up with you once. With such a low success rate you have to adjust your approach to spend less time on each job application. I spend about 15 minutes customizing my cover letter for each job. Then upload the resume and cover letter. Once that is done move on to the next job application. Too much customization is counter productive because you could spend two hours customizing your resume and a recruiter might not even look at it. It is more effective to apply to large numbers of jobs with the same resume and cover letter than to apply only to a few. Once a recruiter gets back to you the recruiting process really starts. Typically a recruiter will email you and schedule a quick phone conversation where they make sure you know about the position and confirm a few things about your experience and goals. This conversation is usually low stress and unless the recruiter gets the impression you don’t really want the job you will move onto a technical phone screen. Some companies will ask you to solve a coding challenge which is essentially a timed leetcode style problem. The problems are similar to what you would be asked in a white boarding interview so your studying will carry over. Hackerrank and leetcode have an almost identical experience to most interview coding challenges to use them to prepare. Other companies will ask you to attempt a coding project. This is usually a relatively simple programming project that is intended to be unique enough that there are not any examples online. I have done projects ranging from creating a basic backend REST service to creating a full fledged cryptocurrency exchange. The key to these projects is to be ruthless about keeping the scope down, otherwise the projects will take up too much of your free time. The final obstacle before you go to the on-site interview is the Technical phone screen. This phone screen is typically done over video call with a shared notepad that you can write code on. There are some systems like &lt;a href="http://coderpad.io"&gt;coderpad.io&lt;/a&gt; that allow you to edit and compile code with your interviewers. You will be interviewed by 1-2 engineers at the company. Most of the questions will be about software engineering and this will include more leetcode style questions. If you made it past all those interviews you will finally end up with the on-site interview. The onsite interview will involve a mix of behavioral and white boarding questions. Every company does it a little bit differently, but it typically takes between 2-6 hours and is pretty exhausting. Make sure to sleep well and prepare thoroughly. How much time do all these interview take? I put together a list of companies that I had onsite interviews with and how long it took in total to decide whether I would get an offer. These 5 interviews resulted in 2 offers (22.5 hours per offer). Getting a new job takes a lot of work, that is why people stay in jobs that they do not like for so long. &lt;strong&gt;Gusto&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Make your bosses look smart</title><link>https://blog.sledgeworx.dev/make-your-bosses-look-smart/</link><pubDate>Sun, 03 Feb 2019 10:48:03 +0000</pubDate><guid>https://blog.sledgeworx.dev/make-your-bosses-look-smart/</guid><description>&lt;p&gt;What does it mean to make your boss look smart? At a basic level do a good job. Beyond that you want to make things on your boss’s wishlist happen. Fix a bug that is low priority but your boss wishes he could get it done now. Refactor a class that your boss or the lead engineer has mentioned being frustrated with. Don’t make the mistake of fixing something that you think is broken. Focus on things that you know your boss is frustrated with not things that you are frustrated with. This is not to say that you shouldn’t fix the things that you are frustrated with, but do not expect to be rewarded for fixing your frustrations instead of other people’s frustrations. The reward for fixing your own frustrations is that you are not frustrated anymore. At the Vice President and director level bosses want to see proposals that align with their strategy. If machine learning is a market area of interest to the VP, make a proposal that uses machine learning to fulfill a business goal that either makes or saves money. Learn when to shut up. If you disagree with the strategy find a new job. You are an employee you don’t get to have public opinions on strategy. If people want your opinions you will be promoted to VP or get a fat consulting contract. Make proposals that align with the strategy or wishlist. Don’t worry about stuff that doesn’t fall in those categories because it’s probably not important to the business. And if you see an iceberg you should be looking for a new job not wasting time sounding the alarm. Tell your direct boss about the problem and wipe your hands of it. Unless you have a substantial equity position in the company it’s not your problem. If you don’t know what is on your boss’s wishlist, you don’t know your boss well enough. Start getting to know your boss better this week.&lt;/p&gt;</description></item><item><title>Conventions and capabilities</title><link>https://blog.sledgeworx.dev/conventions-and-capabilities/</link><pubDate>Sun, 27 Jan 2019 07:52:29 +0000</pubDate><guid>https://blog.sledgeworx.dev/conventions-and-capabilities/</guid><description>&lt;p&gt;Computer programmers have been arguing about programming languages for decades. Is functional programming better than object oriented programming. Should we all be using logical programming instead? In the midst of the language wars, mainstream object oriented languages have been quietly adopting functional language features. Java in particular has been adding functional paradigms like mapping and filtering over streams to the language in java 8. Now why would Java add streams now, when the concepts have been around for decades? Well part of the reason is that these language filters had become so mainstream it was hard to ignore the demand for them. Why not just use functional languages? They have numerous advantages over object oriented languages like Java, sum types, higher order polymorphism, etc. What is the hold up? Well, while functional languages have many language features that are better, their weaknesses are typically in the tooling and the programming conventions that have developed. When you create a new language you do not know what is the most effective way to build things in that language. In Java it has taken 10+ years to develop post Java EE conventions that are effective. And Java has been one of the most used languages in the world for that entire time. Many languages have features that are simply ignored in professional use. In Haskell the default String type is horrible and no one uses it for professional projects. Others like Scala require you to avoid higher order types if you want compile times to be reasonable. Tooling is the other side of the equation. Java’s tooling has evolved in support of the conventions. Java has tooling to block certain dependencies, to auto-format code and to determine the cyclomatic complexity of methods. Today most Java professionals use either Intellij or Eclipse as their editor. These editors have had millions of dollars invested in them to support professional software development in Java. All this tooling makes Java work well once you have it setup, but getting setup is difficult. The final stage is when you merge conventions back into the language. Golang is the best example I have worked with. Go has merged auto-formatting into the compiler. The ‘go’ tool supports formatting the same way it supports compiling and testing. There are no arguments on the subject. Your code is either formatted to spec with the tool or incorrect. The best part is that there is no setup. It can take days to get a new Java environment working even if installing Java takes minutes.&lt;/p&gt;</description></item><item><title>Scaling in a Consulting firm</title><link>https://blog.sledgeworx.dev/scaling-in-a-consulting-firm/</link><pubDate>Sun, 20 Jan 2019 07:42:02 +0000</pubDate><guid>https://blog.sledgeworx.dev/scaling-in-a-consulting-firm/</guid><description>&lt;p&gt;The consulting firm or agency model in application development is based on programmer hours. We the agency have X developers we want to sell at Y margin. You the client either need development done urgently or are unable to competently run projects internally. The agency makes money by leasing development ability to the client on an hourly basis. Our developers work on the application, our project managers keep track of progress so that you the client have visibility and we bill you for each hour we spend working on the application. Our margin is a flat rate depending on seniority and skill set. Well, how do we scale this agency to maximize profits? We can either increase our margin or increase our revenue by selling more development hours. The rates agencies can charge are based on demand and how much value the client expects to get per engineer. In general application development can bill around $100-200 an hour, specialized talent might bill out up to $300 an hour. Billing beyond $300/hour requires very specialized skill sets that are hard to find people for. Most agencies will be billing in the $100-300 an hour range and have a mix of experienced and inexperienced engineers on staff. Once you have capped out your rates for the talent you can get, what does an agency do? Well, investors want their returns so you either need to expand or sell. If you are privately owned you might be able to grow to a sustainable level, but that is easier said then done. Instead of focusing on rates an agency can change its billing model to fixed price per project. Bidding a fixed price for a project lets you increase your margin by competing on efficiency with other agency bidders. Typically, fixed bid contracts are common in government and large corporations. The risk is that if the agencies estimates are bad you can lose substantial amounts of money on the contract. If your estimates are good you can potentially have bank busting margins. The final means of increasing profits in an agency setting is to increase billable hours. This typically means growing headcount and hiring a sales team to keep everyone busy. What is the best way to scale billable hours? You get a team of cheap junior developers or offshore developers and have them supervised by senior developers. Maybe you give the babysitters a fancy title like ‘Software Engineering Manager’.&lt;/p&gt;</description></item><item><title>Future Tech I want to see - personal ultrasound</title><link>https://blog.sledgeworx.dev/future-tech-i-want-to-see-personal-ultrasound/</link><pubDate>Sun, 13 Jan 2019 07:31:35 +0000</pubDate><guid>https://blog.sledgeworx.dev/future-tech-i-want-to-see-personal-ultrasound/</guid><description>&lt;p&gt;&lt;a href="https://www.butterflynetwork.com"&gt;https://www.butterflynetwork.com&lt;/a&gt; I saw this personal ultrasound device last week. It is a $2k device that attaches to your smartphone and allows you to ultrasound anything you want. Its targeted at the medical field, with that price tag, but the form factor is spot on. These kinds of speciality sensors make sense, everyone has a smartphone. And if you can integrate at the smartphone level it makes your product cheaper and easier to use. I would like to get one of these just to see what is inside peoples’ bodies. I saw a video of a CT, or similar, scan while a person was speaking, and the tongue is shaped very strangely. In a sense the smartphone as a common platform makes cheaper medical equipment easier. I wouldn’t be surprised if Bill Gates starts outfitting African hospitals with equipment like this in a few years. After that search and rescue squads might carry smartphone based medical equipment. My hope is that in the long term everyone will be able to get medical imaging when they want it, not just after taking time off to go to the hospital and waiting for hours.     Note: This is not affiliated, but if I ever get actual traffic I will be adding affiliate links.&lt;/p&gt;</description></item><item><title>Building a Single Page Static Site with Hugo: Not as easy as it seems</title><link>https://blog.sledgeworx.dev/building-a-single-page-static-site-with-hugo-not-as-easy-as-it-seems/</link><pubDate>Mon, 07 Jan 2019 16:39:18 +0000</pubDate><guid>https://blog.sledgeworx.dev/building-a-single-page-static-site-with-hugo-not-as-easy-as-it-seems/</guid><description>&lt;p&gt;I recently launched &lt;a href="http://www.seattledatingpics.com"&gt;www.seattledatingpics.com&lt;/a&gt; for my photography work. It is a simple static landing page that pitches my online dating focused photography in Seattle. It seemed like overkill to launch a new wordpress site just for a single page so I decided to use Hugo (&lt;a href="https://gohugo.io"&gt;https://gohugo.io&lt;/a&gt;) as a static site generator. Hugo is written in Go and offers a way to create static sites with markdown and themes. Unfortunately, Hugo’s documentation for single page static sites is difficult to find.   The solution is that you need to find a theme which supports a single page static site, and then you create a _index.md file which acts as your home page.   Here is my config.toml for a single page static hugo site.&lt;/p&gt;</description></item><item><title>Switching jobs sucks</title><link>https://blog.sledgeworx.dev/switching-jobs-sucks/</link><pubDate>Sun, 06 Jan 2019 07:30:47 +0000</pubDate><guid>https://blog.sledgeworx.dev/switching-jobs-sucks/</guid><description>&lt;p&gt;You don’t realize how much switching jobs sucks until you do it. I moved on from my first post-college jobs after almost 4 year, and its been more of a shock than I expected. Once you have been working at a company for a few years you start to know everything that is going on. You know how to be productive. You know who is important, what projects are important and have a good idea of where things are going. You know if your job is secure and how to do well. But once you switch jobs, all that goes out the window and you have to start building up your organizational knowledge again. The best way to increase your compensation is to switch jobs every 2-3 years. But while that saying is correct it underplays the cost to you of switching jobs. Yes, you are getting paid more. But you gave up your political position in your last company. You lost years of domain expertise and a large number of valuable relationships. If you left on good terms, which everyone should, you will still have those people in your network. But they will not be in your corner for the next political battle. Early in your career switching regularly is probably the best option. But as you move up in the hierarchy you may need to stay at companies for longer terms. At the beginning you can get promoted every years, Developer 1, Developer 2, etc. But you reach a point eventually where it takes longer to move up. Going from engineering manager to vice president is much harder to do than moving from senior engineer to engineering manager. You will need to know more people and have a better political position to reach vice president than engineering manger.&lt;/p&gt;</description></item><item><title>Always squash before opening Pull requests</title><link>https://blog.sledgeworx.dev/guides/always-squash-before-opening-pull-requests/</link><pubDate>Sun, 23 Dec 2018 06:37:37 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/always-squash-before-opening-pull-requests/</guid><description>&lt;p&gt;When you are working on a feature it makes sense to make incremental commits as you proceed with the work. Then when you are done you want to just open a Pull Request and wait for approvals. But it is important to squash your commits into a single commit before merging into the master branch. The reason is if you need to revert your code change, you can revert a single commit and move on. You don’t want to be in a position where you have a serious bug in production, and you are trying to figure out if you reverted all of the commits. Save yourself the panic and trouble by squashing before you commit to your master branch. Some services like github will automatically squash for you, use that feature if you have it.&lt;/p&gt;</description></item><item><title>Design Documents for Distributed Companies</title><link>https://blog.sledgeworx.dev/design-documents-for-distributed-companies/</link><pubDate>Wed, 12 Dec 2018 17:00:40 +0000</pubDate><guid>https://blog.sledgeworx.dev/design-documents-for-distributed-companies/</guid><description>&lt;p&gt;How do you hash out architecture and design at a remote only company? Slack chats and phone calls are a slow way to communicate with an entire team. And miscommunication with people 1000s of miles away can cost you the time and money you were hoping to save by working remotely. The Design Document workflow Some companies have a design document centric workflow. At the beginning of a project instead of writing Jira tickets or tasking out stories, an engineer will spend some time writing a 3-10 page document which describe the plan of attack for the project. This doc will include assumptions, design decisions and constraints, as well as a summary of the changes to be made. The document is not an exhaustive specification, but can include proposed interface or library changes. Then the team will have a review session to read and ask questions about the design. Next after some revisions, and possibly a follow up session, development will begin. Google Docs or any other shared document tool is sufficient to support the document review process. If you want to make the process truly asynchronous you could rely only on document comments and skip the meeting all together. Typically, a design document should be required both embarking on any significant project or feature addition. Adding a new button to a web form would not need a document, but building a new web service or adding a major feature would. When I worked in a distributed consulting company we used this workflow for proposals and Level of Effort estimates. But software design was usually handled by discussion and whiteboarding followed by implementation with half-hearted documentation occurring at the end of the project. A design document process would have helped share design between the east and west coasts keeping more of our projects on the same page.&lt;/p&gt;</description></item><item><title>Big Tech vs Little Tech: The problems are the same, but the process is better.</title><link>https://blog.sledgeworx.dev/big-tech-vs-little-tech-the-problems-are-the-same-but-the-process-is-better/</link><pubDate>Sat, 24 Nov 2018 00:46:15 +0000</pubDate><guid>https://blog.sledgeworx.dev/big-tech-vs-little-tech-the-problems-are-the-same-but-the-process-is-better/</guid><description>&lt;p&gt;I spent the first three years of my career at a small agency/consulting firm. We did a combination of standard application development and technical management consulting work. We had problems with code quality decline in older projects, issues with pushing out solutions quickly, and we had very poor feedback loops into our software. We tried to write quality software and did plenty of testing. The biggest gap was that we sold cloud native architectures to our clients, but we never actually ran cloud native software ourselves. One the companies strengths was that our Project Managers would interface with your Product Owners and business analysts to make sure we were building the right software for clients. And because our clients were bureaucratic cable companies we needed a lot of Project Managers to work with the clients’ bureaucracies. So we ran all the latest Scaled Agile frameworks and helped train our clients to use them. I moved to one of the biggest tech companies recently and here we also have problems with code quality in older projects, but this company has much better feedback loops and takes a little more time on developing and vetting solutions. Its funny that we spent a lot of time at my last job building continuous delivery pipelines for our clients, but I still never got to work with one. Here at BigTech we have full CD to production despite running one of the biggest websites in the world. On the process side, Project Managers don’t exist at all. And there is a lot less ‘Agile’ process on my team. Engineering design is handled with more formal design documents and design review meetings. Designs are written in documents instead of being hashed out on whiteboards during a meeting and only partially documented after that.&lt;/p&gt;</description></item><item><title>Always be Interviewing</title><link>https://blog.sledgeworx.dev/always-be-interviewing/</link><pubDate>Sat, 03 Nov 2018 02:34:36 +0000</pubDate><guid>https://blog.sledgeworx.dev/always-be-interviewing/</guid><description>&lt;p&gt;A lot of people feel that they are underpaid or that their job sucks. But when I tell friends to update their resumes and start applying to jobs they dig in their heels. If you are not applying you don’t have options and don’t have any leverage to get a bigger cut of the money your employer spends on salaries. As Software Engineers we are constantly bombarded by job opportunities on Linkedin and other job boards. If you want to be lazy you could just respond to one of the recruiters that contacts you each week. I have gotten most of my interviews by cold applying on jobs boards. All you need is a good resume and a slightly customized cover letter. It takes me 15-30 minutes to apply to each job, including the time I spend customizing the cover letter. My resume is usually the same for each position because I apply to similar jobs. How to pick which jobs to apply for. When I am looking for jobs, I don’t just apply to anything that my credentials line up with. I am looking for particular companies in particular business sectors, that are using technology that can help me move my career forward. For instance in my last job search, I applied to local Denver startups that used technology that I am interested in. I did not apply to any companies that use Nodejs or C#/.NET as their primary stack because I don’t want to do more work with Nodejs and C#. I mainly applied to companies that had existing Ruby on Rails monoliths that needed to break them up and move them into the cloud. I also targeted companies based on their size and product type. My targets were companies with 50-200 software engineers and with software based products. Where to find jobs. I find jobs through the Linkedin, Glassdoor, stackoverflow and buildincolorado jobs boards. I search for ‘software engineer’ and the city I live in as my query. Then I go through around a hundred listings noting the jobs that look interesting and align with my tech stack. I make a list of jobs to apply to and once it hits around 10 in length I will spend an afternoon applying to jobs.&lt;/p&gt;</description></item><item><title>The answers are much simpler than you expect</title><link>https://blog.sledgeworx.dev/the-answers-are-much-simpler-than-you-expect/</link><pubDate>Sun, 28 Oct 2018 06:07:39 +0000</pubDate><guid>https://blog.sledgeworx.dev/the-answers-are-much-simpler-than-you-expect/</guid><description>&lt;p&gt;I have been a programmer for about 5 years at this point and as part of that I have read 10,000s of lines of documentation, lots of books and solved plenty of problems. I have also read tons of content trying to find solutions to the problems in my life. Add in a lot of time reflecting on what I could do to resolve those same problems and you end up with a massive amount of time spent trying to figure things out and a much smaller amount of time spent doing things to solve problems. As I have gone through more and more information, I have found that the solutions to my problems have gotten simpler and simpler. Lots of problems overlap and once you figure out one, the others get easier. Much like if you can solve one NP complete problem you can solve all of them. Because the solution to ‘solve a problem in your life’ is pretty basic. I see a lot of ‘older’ guys who give advice, aka gurus, who get frustrated, because younger guys keep asking complicated questions on the same topics, over and over. On the subreddit /r/cscareerquestions, every semester we see the same questions about applying for programming jobs. If you are having trouble finding a job after graduation the answer is the same for just about everyone. “I have applied to x number of jobs and no one gets back to me, am I cut out for programming?” — common question Rote Answer:&lt;/p&gt;</description></item><item><title>KIS (Keep it Stupid) as a Design Philosophy</title><link>https://blog.sledgeworx.dev/kis-keep-it-stupid-as-a-design-philosophy/</link><pubDate>Sun, 21 Oct 2018 22:40:38 +0000</pubDate><guid>https://blog.sledgeworx.dev/kis-keep-it-stupid-as-a-design-philosophy/</guid><description>&lt;p&gt;On my last project as an architect, I found myself drifting into an architecture strategy of keeping everything as simple as possible. In choosing a database I would look at our projected usage, multiply the number by ten and evaluate which database would be the simplest given our requirements. Given the size of an external library is it better to import it as a black box or to write the functionality as a single file module? The project being in Go made a few of the choices easier because Go does not offer many higher level features. Instead of worrying about class hierarchies you just write the functionality you need. Keeping it stupid means choosing an architecture that anyone would understand at first look. Other people should always assume that they could have come up with the architecture when they read it. There shouldn’t be any surprises or ‘cool’ technology choices. There is a blog post out there about how a startup or software team can afford to pick one risky technology before going bust. In KIS architecture you never pick a risky technology. In the 2018 Software Engineer’s toolbox are dozens of technologies that are both proven and incredibly powerful. We have access to many of the common tools as managed services in the cloud making things even easier. Save yourself the trouble, keep your architecture stupid until its proven that it needs to be more complicated.&lt;/p&gt;</description></item><item><title>Standing Invitation To Contact Me</title><link>https://blog.sledgeworx.dev/contact/</link><pubDate>Sat, 22 Sep 2018 20:11:40 +0000</pubDate><guid>https://blog.sledgeworx.dev/contact/</guid><description>&lt;p&gt;I have a standing invitation, if you want to talk about software I want to talk to you. My email is &lt;strong&gt;&lt;em&gt;nick@sledgeworx.io&lt;/em&gt;&lt;/strong&gt;. I like corresponding over email. You can contact me with questions on any of my posts. &lt;strong&gt;You can contact me if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you are looking for a job,&lt;/li&gt;
&lt;li&gt;you are looking to fill a role&lt;/li&gt;
&lt;li&gt;you have thoughts on better fonts I could be using.&lt;/li&gt;
&lt;li&gt;you have questions about code reviews&lt;/li&gt;
&lt;li&gt;you have questions about how to get into the software industry without a computer science degree&lt;/li&gt;
&lt;li&gt;you have comments on any of my blog posts&lt;/li&gt;
&lt;li&gt;you have questions about any software related topic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am not currently looking for a job, but I do know a few engineers who are in the market in Denver and Seattle.&lt;/p&gt;</description></item><item><title>It took me over a year to find my next job</title><link>https://blog.sledgeworx.dev/it-took-me-over-a-year-to-find-my-next-job/</link><pubDate>Tue, 18 Sep 2018 19:41:58 +0000</pubDate><guid>https://blog.sledgeworx.dev/it-took-me-over-a-year-to-find-my-next-job/</guid><description>&lt;p&gt;I am moving to a new job in a different state. While my job search ended up being much longer than I expected, I learned a lot about interviewing and the salary ranges in Denver. I ended up with 2 competing offers at the same time and managed to get a look at the maximum amount each company was willing to pay me. I started looking for a new job after the company I work for was acquired in 2017. I did this mainly in waves of 5~ applications with around a 50% response rate. Some companies got back to me right away, others took 3 months before starting the interview process. I did around 3 serious waves of applications and in total applied to 20 different companies. Considering that I applied to over 50 jobs before getting each of my internships this was a pretty good rate. Still it took over a year and thousands of dollars worth of vacation time. On the positive side my income will increase into the 6 figure range. Part of why it was easier this time is that I have 3+ years of professional experience so I am not competing with new grads or junior engineers for jobs anymore. Additionally, my last promotion put me into a line management position where I was overseeing the work of others and led the project, which made behavioral questions much easier. The biggest difference here was the response rate. As a college student my response rate was 10% or less, now it is over 50%. Because my response rate was so much higher during this job search, I ended up doing a lot more actual interviews than when I was looking for internships. While time consuming, interviewing is probably the best way to practice interviewing. I have done enough interviews now that they start to flow together. The questions are all pretty similar. Whiteboarding has always been pretty natural for me because of my college background, but the questions repeat too. The last in person interview I did was 2 rounds of white boarding and a couple non-technical ones. But the questions were easy and I was almost bored. Luckily the people I was interviewing with were fun and it was a blast. It was also interesting to get a feel for the company tiers and what the technical level of my local area is. Most of the companies here in Denver ask technical questions of around the same difficulty. The hardest of which are Leetcode easy questions. I have only run into Leetcode medium questions from companies like Google or Uber. I have done around 20 Leetcode questions in total, which could be accomplished in a couple weeks. Interviewers want to see how you solve problems not how you already knew the solution to the problem. If the company is known for giving hard level problems you want to be totally solid on medium level problems and have done a bunch of hard problems. But grinding hard problems for months is not necessarily a good use of your time. Unless you must get into Jane Street. But I think focusing on just one company is probably bad for your career and mental health. While my job search took a long time and cost me some money, the increase to my income is more than enough to make up for it. I also got a chance to take advantage of Josh Doody’s Fearless Salary negotiation. Paying $50 to get an extra $5000 each time you switch jobs is worth it. The rule of switching jobs every 3 years early on in your career seems to have held true in my case. Even if I had decided not to relocate, my income would have received a solid boost.&lt;/p&gt;</description></item><item><title>Specialized tools can be 10x as good for the job.</title><link>https://blog.sledgeworx.dev/specialized-tools-can-be-10x-as-good-for-the-job/</link><pubDate>Sat, 18 Aug 2018 15:46:17 +0000</pubDate><guid>https://blog.sledgeworx.dev/specialized-tools-can-be-10x-as-good-for-the-job/</guid><description>&lt;p&gt;Often to save money or for convenience people will buy a multitool or generalized tool instead of a specialized tool. Depending on the use case there might be a specialized tool that is only useful for that one thing. One example is the fingertip bandage, it is shaped like a butterfly which makes the bandage less useful for most scrapes. But if you have an injury on your fingertip its hard to beat a fingertip bandage. They stay on very nicely and fit well. This concept extends to specialist engineers if your project can support it you want to hire specialists that focus precisely on subsets of your project. You want to hire a frontend engineer, a backend engineer and a data base expert. The issue is that you often cannot find specialists for every component, or there are many small areas that are too small to hire a single specialist for. This is when most companies turn to generalists. Specialists are expensive and only want to work on one sort of problem. Generalists are cheaper and will work on anything you want them to. As a result many companies slowly become staffed by generalists except for a few areas where the company itself is specialized. After a while, your company may consist almost entirely of generalists who are used to working on things that they do not know a lot about. The issue is that this effects your company culture and the ideas your company has on how software engineering works. A specialist will be working at 100% on day one of a project in their specialty. A generalist replacing a specialist you didn’t want to hire will take months to get to 80% of the productivity that specialist would have had on day one. If your company consists of mainly generalists, most companies do, you may not realize how much efficiency you are giving up by not having specialists.&lt;/p&gt;</description></item><item><title>SledgeCast: Merging K sorted Lists</title><link>https://blog.sledgeworx.dev/sledgecast-merging-k-sorted-lists/</link><pubDate>Sat, 11 Aug 2018 16:42:01 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgecast-merging-k-sorted-lists/</guid><description>&lt;p&gt;In our latest set of Sledgecasts I work through the problem of merging k sorted lists. I eventually converged on the optimal solution except I did not perform it in place. Merging linked lists can be done in place without any allocation which can make a big difference if you are allocating an entirely new list each time you merge.   &lt;a href="https://www.youtube.com/watch?v=9m6EV7R_Ox0"&gt;https://www.youtube.com/watch?v=9m6EV7R_Ox0&lt;/a&gt;   &lt;a href="https://www.youtube.com/watch?v=qssDbxPK5Gw&amp;amp;t=5s"&gt;https://www.youtube.com/watch?v=qssDbxPK5Gw&amp;amp;t=5s&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Jenkins is showing its age</title><link>https://blog.sledgeworx.dev/jenkins-is-showing-its-age/</link><pubDate>Thu, 02 Aug 2018 14:17:32 +0000</pubDate><guid>https://blog.sledgeworx.dev/jenkins-is-showing-its-age/</guid><description>&lt;p&gt;Jenkins has been a stalwart aid in all of the CI/CD projects I have worked on. Jenkins&amp;rsquo; ease of use and plethora of plugins make it useful for almost any project and situation. From a build tool to a job scheduler Jenkins can solve your problem. But as with any good tool Jenkins has its drawbacks. For Jenkins the issue that gets me is that configuration is not stored in a git compatible format. If I change a job configuration there is no way to rollback the change or even determine what the previous state was. If multiple teams have access to Jenkins your build server could go down with no means of rolling back a change on the whim of another team’s wannabe system administrator. Jenkins Pipelines are the Jenkins solution to storing job configuration in source control, but that is only for job configuration. Plugin configuration is still updated manually and easy to lose. It does make me wonder if we could make the /var/jenkins folder a git repository and just ignore the job history directories. While Jenkins pipelines are nice, I don’t want to code my entire build. I just want my changes stored in a git compatible format so I can easily roll them back. I also want to be able to mix and match pipeline stages with a standard stage interface for artifacts. Jenkins Pipelines allow me to mix and match ‘functions’ from a shared library, but not stages. Spinnaker purports to handle pipelines well, but it require me to run 10 different micro-services just to get started. That is not a replacement for Jenkins, maybe if Spinnaker was hosted by a 3rd party, it would be convenient enough, but Jenkins is free to setup. I will be using Jenkins today, but tomorrow I will have to start looking at alternatives.&lt;/p&gt;</description></item><item><title>Getting into Software Interview with Craig Freeman!</title><link>https://blog.sledgeworx.dev/getting-into-software-interview-with-craig-freeman/</link><pubDate>Sat, 21 Jul 2018 16:33:49 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-interview-with-craig-freeman/</guid><description>&lt;p&gt;Sledgeworx has completed our first Getting into Software interview with Craig Freeman. We discuss how Craig got into software, his career and the pros and cons of being a software engineer.   &lt;a href="https://www.youtube.com/watch?v=xjQ6Hmz8xWA"&gt;https://www.youtube.com/watch?v=xjQ6Hmz8xWA&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Software Estimation</title><link>https://blog.sledgeworx.dev/software-estimation/</link><pubDate>Thu, 12 Jul 2018 03:53:02 +0000</pubDate><guid>https://blog.sledgeworx.dev/software-estimation/</guid><description>&lt;p&gt;I have been reading ‘Software Estimation’ by Steve McConnell which is about estimating software projects. I got interested in the subject a few months ago, because my interns were asking questions about how to estimate stories in Agile ceremonies. The company I work at does not have any estimating theory. Its a shoot from the hip, ‘wild ass guess’ environment. I didn’t really have a good answer for the interns. A couple surprises are that research has shown software engineers typically underestimate tasks to the tune of about 30% of the actual time and that the range of estimation accuracy is around 1.2-16x. [caption id=&amp;ldquo;attachment_92&amp;rdquo; align=&amp;ldquo;alignnone&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;img src="https://blog.sledgeworx.dev/images/2018/07/ConeUncertainty-300x225.png" alt=""&gt; The Cone of Uncertainty[/caption]&lt;/p&gt;</description></item><item><title>Sledgeworx: Code Review Handbook</title><link>https://blog.sledgeworx.dev/sledgeworx-code-review-handbook/</link><pubDate>Tue, 10 Jul 2018 02:05:40 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgeworx-code-review-handbook/</guid><description>&lt;p&gt;Sledgeworx is happy to announce the release of the Code Review Handbook. The Code Review Handbook contains everything I know about Pull request reviews and reviewing code. &lt;a href="https://blog.sledgeworx.dev/images/2018/07/codereviewhandbook.pdf"&gt;CodeReviewHandBook&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Prettier: Automatic code formatting for the Javascript ecosystem</title><link>https://blog.sledgeworx.dev/guides/prettier-automatic-code-formatting-for-the-javascript-ecosystem/</link><pubDate>Sun, 24 Jun 2018 16:01:10 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/prettier-automatic-code-formatting-for-the-javascript-ecosystem/</guid><description>&lt;p&gt;I do most of my work in the Go ecosystem and rely heavily on the &lt;code&gt;go fmt&lt;/code&gt; tool to maintain style consistency across the team. But the javascript language does not have a formatter built in so we have been relying on jslint to enforce consistent styles. I found a auto-formatter for javascript &lt;strong&gt;prettier&lt;/strong&gt; , which could make frontend formatting much easier you can find it at &lt;a href="https://prettier.io"&gt;https://prettier.io&lt;/a&gt;. Prettier supports JSX which is key for us since we work on a single page application with a react.js frontend. I have added prettier to my crypto-exchange application &lt;a href="https://github.com/Sevii/pepper-exchange"&gt;https://github.com/Sevii/pepper-exchange &lt;/a&gt;to evaluate how well it works. I dislike using linters to address code formatting and style questions because they basically nag developers into formatting things correctly. Code formatting is low value work, I would much rather have a machine do it in 250ms than have a developer spend 60 seconds addressing linter issues. Prettier should let us eliminate formatting nagware, and limit our use of jslint to semantic and correctness issues. You can use prettier as follows.&lt;/p&gt;</description></item><item><title>About Sledgeworx</title><link>https://blog.sledgeworx.dev/about-nick/</link><pubDate>Wed, 20 Jun 2018 05:12:42 +0000</pubDate><guid>https://blog.sledgeworx.dev/about-nick/</guid><description>&lt;p&gt;Sledgeworx is my platform to share ideas with the world. Expect blog posts both long and short as well as my video rants and interviews. The opinions and thoughts expressed here are my own and do not reflect the views of my employer.&lt;/p&gt;
&lt;h2 id="my-websites"&gt;My websites:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.estimating.dev"&gt;Estimating.dev &lt;/a&gt; is focused on the practice of software estimation. How can we create and use software estimates better?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sledgeconf.dev"&gt;Sledgeconf.dev&lt;/a&gt; is the home page for my remote conference SledgeConf!&lt;/p&gt;</description></item><item><title>SledgeCast</title><link>https://blog.sledgeworx.dev/sledgecast/</link><pubDate>Tue, 19 Jun 2018 13:36:39 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgecast/</guid><description>&lt;p&gt;SledgeCast is a collection of screen casts focused around programming topics including code reviews, open source projects, interview preparation, and anything software! The Sledgeworx Channel &lt;a href="https://www.youtube.com/channel/UCB0csY7Nkn-fcpu_QFfszqw"&gt;https://www.youtube.com/channel/UCB0csY7Nkn-fcpu_QFfszqw&lt;/a&gt;   Here are some of my videos to get you started. &lt;a href="https://www.youtube.com/watch?v=QunHun9dqGQ"&gt;SledgeCast 1: Prometheus Code Review&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=EOY1ZvqXR4I"&gt;SledgeCast 2: Prometheus Code Review - Storage&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=xjQ6Hmz8xWA&amp;amp;frags=pl%2Cwn"&gt;https://www.youtube.com/watch?v=xjQ6Hmz8xWA&amp;amp;frags=pl%2Cwn&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Git hooks for Go fmt</title><link>https://blog.sledgeworx.dev/guides/git-hooks-for-go-fmt/</link><pubDate>Sun, 17 Jun 2018 16:39:19 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/git-hooks-for-go-fmt/</guid><description>&lt;p&gt;A common problem when reviewing pull requests is large diffs of formatting changes. You end up with pages of formatting changes that people waste time looking at when in reality it was just a 3 line PR. Go has a tool called &lt;strong&gt;fmt&lt;/strong&gt; which can format any Go code into the standard Go format. What happens in my project is that some of the team has their IDE configured to automatically run &lt;code&gt;go fmt&lt;/code&gt; when they save a file, while the rest do not. So our codebase is in an inconsistently formatted state. What I am attempting to do is to setup a git-hook that will run go fmt before any commits. The .git/hooks directory contains samples of git hooks that can be triggered on various git actions like pre-commit, post-commit, post-receive, etc. The files need to be executable, with no extension and named after the appropriate hook. This digital ocean link has a table of the available hooks if you scroll down a bit &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks#basic-idea-with-git-hooks"&gt;https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks#basic-idea-with-git-hooks&lt;/a&gt;. The hooks are just executable files and it may be possible to run compiled binaries as well as shell scripts. Here is my working go fmt pre-commit hook. I edited the example script in &lt;code&gt;.git/hooks/pre-commit.sample&lt;/code&gt; to run &lt;code&gt;go fmt&lt;/code&gt; and renamed it to &lt;code&gt;pre-commit&lt;/code&gt;.  &lt;/p&gt;</description></item><item><title>SledgeCast 2: Prometheus Storage Code Review</title><link>https://blog.sledgeworx.dev/sledgecast-2-prometheus-storage-code-review/</link><pubDate>Mon, 11 Jun 2018 14:44:49 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgecast-2-prometheus-storage-code-review/</guid><description>&lt;p&gt;Here is the 2nd SledgeCast, this time we take a look at the storage package in prometheus and make a discovery! &lt;a href="https://youtu.be/EOY1ZvqXR4I"&gt;https://youtu.be/EOY1ZvqXR4I&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Cryptocurrency mining could be the next wave in internet monetization.</title><link>https://blog.sledgeworx.dev/cryptocurrency-mining-could-be-the-next-wave-in-internet-monetization/</link><pubDate>Sun, 10 Jun 2018 18:21:31 +0000</pubDate><guid>https://blog.sledgeworx.dev/cryptocurrency-mining-could-be-the-next-wave-in-internet-monetization/</guid><description>&lt;p&gt;While the 2017 crypto bubble has turned into a drawn out 2018 slide, a new specter has entered the web monetization scene, in-browser cryptocurrency mining. Hackers have started using unprotected websites to hijack users computing power. They do this by adding in-browser cryptocurrency mining code to the websites javascript files. The hacked websites visitors’ are then used to mine cryptocurrency for the hackers. While today these in-browser miners are dangerous malware, I think this could be the start of a shift in internet monetization. Internet advertising and affiliate marketing have been the major players in the monetization of web content, creating behemoths like Facebook and Google. Most websites’ first step is to sign up for AdSense and run banner ads. In their quest to maximize ad revenue Google and Facebook have launched immense tracking operations, in which they record every page view people make. Using this data, profiles are created about web users and their attention is auctioned off in the form of targeted ad views. In-browser Cryptocurrency mining provides an alternative to the targeted ad economy. Web admins simply integrate their site with a javascript file that automatically mines cryptocurrency inside the browser. This mining process creates ‘hashes’ which can be added to a mining pool and redeemed for tokens. Essentially, the visitor lends their cpu power to the website owner and contributes hashes worth a few pennies in the process of reading a blog post. Depending on how the software is integrated you could be required to contribute a certain number of hashes before being allowed to view a webpage or download a video. Websites can monitor how many hashes a user has contributed and block their requests if they fail to contribute. Previously, Brandon Eich’s company Brave has created an ‘attention token’ which is a centrally controlled coin integrated into their browser that pays websites on a per-pageview basis. The downside of this payment method is that it relies on subscriptions and ads as its money source. You can earn attention tokens by watching ads after all! In-browser mining of cpu-optimized cryptocurrencies is a truly decentralized way for users to pay to view content. Its been hard to get internet users to care enough to pay 1-10 cents per page view even if they would be willing to pay there isn’t a payment system that could benefit off of such small transactions. That is why ads have done so well, its much easier to put up with ads than to buy a subscription and no one really cares enough about a penny to pull our their credit card. In-browser mining solves the ‘too small to care’ problem by providing a way for users to pay web owners tiny amounts of money without needing to pull out their credit cards. Processing tiny credit card transactions would be prohibitively expensive, but lending website owners the cpu power that users already own is much easier. Monero is the cryptocurrency of choice for in-browser mining today because it is optimized for cpu mining. Its governing structure includes regular hard forks and it has been announced that Monero will hard fork its mining algorithm whenever ASICS that can mine it are released. Monroe and other new more flexible cryptocurrencies can ensure that in-browser mining remains worthwhile compared to datacenter mining with ASIC or GPU hardware. The reason I am excited about in-browser mining is because it counter-acts miner centralization, one of the major risks for cryptocurrencies. Bitcoin mining is dominated by massive data centers in China which use subsidized electricity. In-browser mining is a way to involve every website in cryptocurrencies while providing a tracking free web experience and making it easy for internet users to contribute value back to content providers.&lt;/p&gt;</description></item><item><title>Sprintly 1 on 1s</title><link>https://blog.sledgeworx.dev/sprintly-1-on-1s/</link><pubDate>Sun, 10 Jun 2018 18:20:22 +0000</pubDate><guid>https://blog.sledgeworx.dev/sprintly-1-on-1s/</guid><description>&lt;p&gt;I have been doing on one one meetings with my team for the last couple months. Or more realistically 2 on 1 meetings since the Project Managers at my employer tend to be involved in everything. Despite being only 15 minutes long, it takes 2 hours to do all eight of them. Typically, we will ask, “How are you doing? Is there anything you thought was good or bad in the sprint? Is there anything you need to do your job?” The meeting ends up being a light chat where we can talk about issues in the project. Things that haven’t been fixed yet. Or ideas that the team member had, but didn’t want to bring up in standups. Often all people can think of is an outstanding issue that we haven’t been able to get management to solve, and we just promise to follow up on it. I find that the 1 on 1 meeting works best for the more subdued and introverted team members who don’t like to speak up as much. They have good ideas on the project, they just will not bring them up publicly. Some people recommend doing weekly 1 on 1s, we ended up doing biweekly meeting since we are doing two week sprints anyway. I think that I am accessible enough to the team, but since some of our people are in another office it might be worthwhile to meet with them weekly. Try doing regular 1 on 1 meetings with your team. I find its really helpful with less outspoken people!&lt;/p&gt;</description></item><item><title>Getting into Software Part 5: How to get your first job</title><link>https://blog.sledgeworx.dev/getting-into-software-part-5-how-to-get-your-first-job/</link><pubDate>Sun, 10 Jun 2018 18:19:59 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-part-5-how-to-get-your-first-job/</guid><description>&lt;p&gt;I started focusing on Programming for my career after my sophomore year of college. My attempts to get a physics internship had failed and I was at loose ends for the summer. That summer I spent a good amount of time working through a Ruby on Rails (RoR) tutorial that walked me through building a twitter clone web app. This was early in my time as a programmer so I was just following the tutorial and experimenting with changing the html/css, writing views and models etc. My application didn’t branch very far from the tutorial I was following, but it did look clean and allow people to post ‘tweets’. While it wasn’t particularly impressive it proved useful in the fall when I interviewed for a contract web developer position. I was a bit unqualified for this job, which was to write a companion web application to a mobile app being developed by another student at my college. I managed to write a basic prototype using PHP, MySQL and some javascript charting. But I wasn’t able to write the application with my skills at the time. I ended up quitting that job because I was struggling in my Physics studies. Still I had more experience coding and was several thousand dollars richer. You might think that it was easy swimming from there, but it wasn’t. My real challenge was getting a formal internship after my Junior year in college. I applied to dozens of companies and ended up doing over ten interviews, went to the career fair at my school and had a difficult time finding any summer internships that wanted me. I interviewed at a bank and a small financial firm focused around trading electricity. I have to assume I looked pretty dorky in my suit, and the software engineers that interviewed me were of course wearing shorts and t-shirts. The finance firm I interviewed didn’t even have me interview with a programmer, their programmer was on vacation that day. I ended up interviewing with their manager and then the CEO, who was 45min late for the interview. That was one of the few interviews where I was asked for references and then didn’t get an offer. ### Interviewing strategies / Tactics Programming interviews are hyped up as being very difficult and involving complex algorithms. I have found that the hype is not accurate. Maybe in Silicon Valley itself they really do ask complex graph solving questions, but in my experience depth-first and breadth-first search were as deep as the graph questions have gotten. One of the harder questions I have encountered was in a phone screen for Google were I was asked a question along the lines of “find the set of three numbers in this list that sum to less than x”. It stumped me at the time but nowadays I know that the solution involves building up a map that caches the sum of two of the three numbers in the set. Now lets say you have done 20 practice problems on leetcode and still feel like you can’t possible by reading to solve all the problems they throw at you in an interview, well lucky for you its not really about solving the problems. What you want to do is demonstrate that you have a good amount of knowledge on algorithmic problems and that you are good at talking your way through problems. In your day to day you won’t be solving these types of problems by yourself, you will be working with a team and discussing possible solutions. Many of the problems won’t even be algorithmic in nature they might be around business logic or maintainability. The team wants to know if you will be able to contribute to the discussion around problems that arise and that are good enough at talking about problems that you can ask for help when you need it. Go into your interview and do your best. Afterwards take notes of all the questions they asked that you did not know the answer to. Do some research and find the answers to the problems that stumped you. Interviewers tend to use the same questions so after a few interviews you will recognize almost all the questions you get. Understand that its a numbers game. Unless you are a top candidate you will need to do more than 10 in-person interviews to get a job. If you interview with 5 people and one of them didn’t eat breakfast, you might not get the job. I have been in interviews where I really liked the candidate and thought he would be a huge win for the project, but the other guys on the team hated him. You will do interviews where you just have a great time, everyone likes you and you have an offer by the end of the week. ### Conclusion This post dragged out a lot and its still not quite where I want it to be. I will come back to this series later when I am better able to articulate the ideas I wanted to express here. I hope it can help someone get into software programming.&lt;/p&gt;</description></item><item><title>Getting into Software Part 4: How to prepare for your first job or internship?</title><link>https://blog.sledgeworx.dev/getting-into-software-part-4-how-to-prepare-for-your-first-job-or-internship/</link><pubDate>Sun, 10 Jun 2018 18:19:39 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-part-4-how-to-prepare-for-your-first-job-or-internship/</guid><description>&lt;p&gt;The best way to prepare for interviews is to build websites in a similar way to what you would do in the working world. ### Programming skills Basics ### 1. Create a website by following a Node.js, Ruby on Rails, or Django tutorial depending on which Language you are learning JavaScript, Ruby or Python. There are a ton of tutorials any twitter clone tutorial works great. 2. Study Data structures and algorithms 3. Study Object oriented design at a basic level. 1. inheritance 2. polymorphism 3. interfaces 4. Play around with Git or Mercurial — we use version control tools every day at work. 5. Create a real time chat website where users can see each others messages without refreshing the webpage. ### Resume ### Keep it short 1-2 pages Place your education, skills and work experience in an easy to find place on the first page. Not all of your experience is relevant, minimize the less interesting experiences and bring to the front the important experience on your resume. If you have room for clubs and side activities on the first page you probably are not going into enough depth on your experience. ### Interview Preparation and Advice ### The employer&amp;rsquo;s goal in programming interviews is focused around estimating how well you can talk about software concepts, see if you have anything obviously wrong about you that you can’t hide in an interview, and see how you can solve problems under pressure. Your goal in these interviews is to demonstrate that you are a smart, driven and prosocial person who has the technical ability to contribute to the team. Secondarily, you want to gauge how much you like the team, what kind of person your potential manager is, and get a feel for what hours the team considers normal. At this point most of the programming problems used in interviews are common knowledge. You can expect questions about data structures, sorting algorithms, graph algorithms and object oriented programming. Fizz buzz and Fibonacci and palindrome questions are also pretty common, I have even gotten a question about designing a file system. There are 10s of websites devoted to ‘interview problems’, including &lt;a href="https://leetcode.com"&gt;https://leetcode.com&lt;/a&gt;, and &lt;a href="https://www.hackerrank.com"&gt;https://www.hackerrank.com&lt;/a&gt;. You will want to do some of these problems before you start doing technical phone screens. I recommend doing 10-20 problems. Doing more than 20 is unnecessary because the problems are not that different from each other, just make sure you try a combination of easy, hard and intermediate problems. You want to appear clean, shave if you grow facial hairs, get your hair in relatively tidy and dress appropriately. For programming jobs its hard to go wrong with a blue button down shirt and dark colored trousers. Wearing a suit is pointless most of your interviewers will be wearing t-shirts, shorts and sandals. Do what it takes to arrive 5-10min early. Find the office and use any convenient bathrooms you come across. Be polite to everyone in the building you never know who works for the company or if the receptionist is also the HR manager. We will go over in interview strategies in the next section of this series.&lt;/p&gt;</description></item><item><title>Getting into Software Part 3: How can you tell if you have the right talents for a Software Programming Career?</title><link>https://blog.sledgeworx.dev/getting-into-software-part-3-how-can-you-tell-if-you-have-the-right-talents-for-a-software-programming-career/</link><pubDate>Sun, 10 Jun 2018 18:19:17 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-part-3-how-can-you-tell-if-you-have-the-right-talents-for-a-software-programming-career/</guid><description>&lt;p&gt;If you have never programmed before, how can you tell if you have the talent needed at the professional level? Even if you did badly in school there is a chance that as an adult you could be successful as a software engineer. The demand for software engineers is high enough that people without degrees in Software Engineering or Computer Science can get into the field. The real question is whether you can solve programming problems and demonstrate it to prospective employers. The way I got started in programming was an online C class, and C is not a bad place to start. Although, today I recommend “learning Python the hard way” which is available at &lt;a href="https://learnpythonthehardway.org/book/intro.html"&gt;https://learnpythonthehardway.org/book/intro.html&lt;/a&gt;. The book can be accessed for free online but is also available in other formats that you can pay for. Once you have gotten introduced to the language and can write simple programs with the book guiding you, take a look at Project Euler. Go to &lt;a href="https://projecteuler.net/archives"&gt;https://projecteuler.net/archives&lt;/a&gt; and do 10 of the problems in python. If you can knock out a few problems in a day or two without any programming experience other than the course you are probably capable of professional software engineering. If it takes you a week to get your first problem and only a day per problem after that it might still be worthwhile for you to push forward with Software Engineering. The Project Euler problems vary in difficulty from easy to rather complicated. Don’t think that you need to be able to do the hardest ones to get a job working as a Software Engineer. But you will find yourself dealing with similar problems on a daily basis so you need to consider if you can handle that being a significant of your daily life and the skill that you get paid for.&lt;/p&gt;</description></item><item><title>Getting into Software Part 2: What Skills are Important in Software Programming?</title><link>https://blog.sledgeworx.dev/getting-into-software-part-2-what-skills-are-important-in-software-programming/</link><pubDate>Sun, 10 Jun 2018 18:17:47 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-part-2-what-skills-are-important-in-software-programming/</guid><description>&lt;p&gt;The way I see it there are 3 core skills that are important in corporate software engineering environments, understanding logical trees, finding solutions to obscure problems on the internet, and making sure you write the right solution to the problem.&lt;/p&gt;
&lt;p&gt;These can be split into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Logic&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reading Comprehension + Persistence&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Communication&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Understanding and Writing logical trees&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Understanding and writing logical trees is the primary filter in programing jobs. If you cannot comprehend and create complicated logical trees you will not be able to do the job. It is less difficult than logical proofs in an introductory discrete math class in university. The difficulty is that logical constructs are what we work with and there are very many of them.&lt;/p&gt;</description></item><item><title>Getting into Software Part 1: Why would you want to get into Software Programming?</title><link>https://blog.sledgeworx.dev/getting-into-software-part-1-why-would-you-want-to-get-into-software-programming/</link><pubDate>Sun, 10 Jun 2018 18:16:40 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-into-software-part-1-why-would-you-want-to-get-into-software-programming/</guid><description>&lt;p&gt;In an age where Software is gradually taking over everything starting from your computer and spreading to your fridge or your car it might seem late to get into software, but it is not. Companies are going to need more and more software developers and engineers to write the code needed to run everything. What are some good reasons to work in software?&lt;/p&gt;
&lt;h4 id="hours"&gt;Hours&lt;/h4&gt;
&lt;p&gt;An excellent reason to get into software is because of the hours. The expected hours vary greatly between software companies. You could work for a small boutique firm that is constantly pushing 80 hour weeks or for a megacorp where you work for 10 of the 40 hours you are in the office each week. It really depends on what you want and how good you are at interviewing. You might find that mid-sized companies are a good fit for you or that you prefer aggressively growing startups. The important things to consider are how many hours are you working and what are you trading in return for those hours. For example you might be working double the hours for double the salary, thats great if you are prioritizing money, but your hourly pay might be same as someone making half your salary.&lt;/p&gt;</description></item><item><title>Remote Work Revisited</title><link>https://blog.sledgeworx.dev/remote-work-revisited/</link><pubDate>Sun, 10 Jun 2018 16:21:09 +0000</pubDate><guid>https://blog.sledgeworx.dev/remote-work-revisited/</guid><description>&lt;p&gt;About a week ago on a particularly cold morning with fresh snow and ice on the streets, I decided to try working from home again. While I don&amp;rsquo;t hesitate to bike or walk to work in 20 or 30 degree weather, 3 degrees is too cold. After making the decision I opened slack and typed &amp;ldquo;WFH&amp;rdquo; into our office channel. Then about 30min later, after getting coffee, I hopped back online to address my first intern request for clarity. I played some music and connected my external monitor to my laptop while debugging some docker networking issues. For some reason, nearly all of my issues with docker involve the network. For lunch I walked over to Safeway and picked up some sandwich materials. Then I took a quick nap. At work despite having an hour for lunch, I don&amp;rsquo;t have any where to nap even if I have time. Then it was back to debugging docker and answering questions from the team. Overall, this working from home experience was much better than last time when I stayed at home due to the cold. This time was more peaceful and I did not miss the office.&lt;/p&gt;</description></item><item><title>Certified Kubernetes Administrator!</title><link>https://blog.sledgeworx.dev/certified-kubernetes-administrator/</link><pubDate>Sun, 10 Jun 2018 16:20:33 +0000</pubDate><guid>https://blog.sledgeworx.dev/certified-kubernetes-administrator/</guid><description>&lt;p&gt;I had the opportunity to take the &lt;a href="https://www.cncf.io/announcement/2016/11/08/cloud-native-computing-foundation-launches-certification-training-managed-service-provider-program-kubernetes"&gt;CKA&lt;/a&gt;, &amp;lsquo;Certified Kubernetes Administrator&amp;rsquo; exam because my employer is trying to get &amp;lsquo;Certified Kubernetes Service Provider&amp;rsquo; status, which requires 3 certified administrators. Now, why would Certified Kubernetes Administrators or service providers be valuable for your company? The CKA is good because it certifies a base level of knowledge and ability in kubernetes administrators. Things you would expect from CKAs are the ability to debug clusters, perform upgrades, bootstrap clusters and application deployment tasks. What and how does the exam test administrators? The exam tests your ability to perform operations against the kubernetes api. The entire exam period is spent in the command line with kubectl on a standard linux shell. The test validates your ability to &amp;lsquo;get things done&amp;rsquo; in the kubernetes environment. Overall, I have a very positive outlook on the exam. I spent about a week preparing. I read a lot of the kubernetes.io documentation, ran through &amp;lsquo;kubernetes the hard way&amp;rsquo; three times and had worked with kubernetes on the application side previously. I passed on the first try, but I did need all of the exam time and had to skip a few of the hard problems. I don&amp;rsquo;t think that the CKA is essential for devops or kubernetes admins, but it is a good exam and great for filling some of the gaps you might have in your knowledge.&lt;/p&gt;</description></item><item><title>Getting a website up in 2017</title><link>https://blog.sledgeworx.dev/getting-a-website-up-in-2017/</link><pubDate>Sun, 10 Jun 2018 16:19:58 +0000</pubDate><guid>https://blog.sledgeworx.dev/getting-a-website-up-in-2017/</guid><description>&lt;p&gt;I launched two websites in 2017, yourfoods.info and sledgianowski.com. This post goes over how I did it, what went well and where the weak points were. ### Hosting: Google Cloud Platform&amp;rsquo;s GCE is the hosting provider I chose. I think GCP has the best user interface of the public clouds and its no effort persistent use discounts make things simple for me. The cloud shell google offers is excellent and lets you ignore the SSH keys you would have to keep track of for AWS. I will probably keep using GCP for my projects next year. Although, I am interested in testing packet.net&amp;rsquo;s bare metal hosting. ### Setup My websites are a ghost blog &lt;a href="https://ghost.org"&gt;https://ghost.org&lt;/a&gt; and a Django+Postgres web application. My blog uses nginx for the frontend and SSL encryption with ghost&amp;rsquo;s nodejs implementation as the backend. Yourfoods.info uses a nginx frontend for ssl and gunicorn for serving the django webservice. Let&amp;rsquo;s Encrypt is a big win for my websites. The integration between nginx and certbot, &lt;a href="https://certbot.eff.org"&gt;https://certbot.eff.org&lt;/a&gt;, is excellent making it easy to setup SSL in minutes. The main issue I have had with it is when my DNS was not pointing at my public IP in google cloud. ### Domain names I use Namecheap for my domains and DNS provider. The pricing is decent and their DNS configuration support handles my use case well. Namecheap has two factor authentication, but its SMS based and somewhat wonky to use. ### Analytics I am still using Google Analytics for user tracking. Its free, provides a first class UI and is very easy to setup. I gave a few free and private options a cursory glance, but they did not look like things I could setup in an hour. ### Conclusion Its pretty easy to setup a website these days. Let&amp;rsquo;s Encrypt and Nginx integration make SSL quick and easy to get going. And the public cloud is great for small websites that do not use a lot of resources.&lt;/p&gt;</description></item><item><title>What I learned from a year of Devops</title><link>https://blog.sledgeworx.dev/what-i-learned-from-a-year-of-devops/</link><pubDate>Sun, 10 Jun 2018 16:19:33 +0000</pubDate><guid>https://blog.sledgeworx.dev/what-i-learned-from-a-year-of-devops/</guid><description>&lt;p&gt;In 2017 I had the opportunity to spend a year working as a devops or platform engineer. I have mainly worked as a software engineer before so moving in to an automate and operate role was a bit of a leap. This was a fully remote engagement where I was embedded with and helped bootstrap the client&amp;rsquo;s first platform team. The project was building out continuous integration and delivery for a client of ours that had no AWS experience. Before they brought us in they ran all their systems in their own datacenters in a windows and .Net environment. We came in to assist with the move into the cloud and to help transition the company from .NET to Java, javascript and microservice development. The first few months we focused on building out the CI/CD with Jenkins pipelines and a great deal of AWS cli scripting. Once we got the basics working teams started to come out of microservices training and began developing against it. This was the start of operational support for us and started a bit of a scramble while we tried to balance new features and the stability of the platform with hiring and onboarding. We used jenkins pipelines, docker and cloudformation to provide our users with a solid customizable pipeline solution. Using our default templates development teams could easily bootstrap their pipeline with CI/CD from dev to canary deploys in production. If they needed more than a stateless microservice we enabled them to provide cloudformation templates in their github repository that would be run with each deploy to ensure the AWS environment was bootstrapped for their needs. We started out with the intention of using Jenkins pipelines with ansible to automate things, but the client&amp;rsquo;s team was more experienced with CloudFormation and as a result I ended up writing most of our initial CI/CD code in a combination of groovy and AWS cli calls. This proved unwieldy and eventually led us to using Groovy + Cloudformation for nearly everything. Cloudformation works but it is locked into AWS and its programming model is a somewhat awkward. Cloudformation&amp;rsquo;s saving grace is the first class integration and editor. Next time I would recommend starting with a commitment to Terraform or Ansible. In the 3rd quarter we started work on implementing Canary deployments. Our solution ended up being a combination of a customized client side load balancing http client and jenkins pipelines. I started us off with a proof of concept that proved easier to write than we expected which put us on good footing for the rest of the project. One of the client&amp;rsquo;s employees took advantage of the space we had to rewrite the shared jenkins pipeline library in more idiomatic language which turned out to be a great improvement. We went live in Q4 and I moved on to another project. I am moving back into application development, I ended up doing 100% automation scripting instead of the 50-50 split I was expecting. So it will be good to get back to writing applications.&lt;/p&gt;</description></item><item><title>Team Skill Shaping</title><link>https://blog.sledgeworx.dev/team-skill-shaping/</link><pubDate>Sun, 10 Jun 2018 16:19:08 +0000</pubDate><guid>https://blog.sledgeworx.dev/team-skill-shaping/</guid><description>&lt;p&gt;When running a team you need to balance bus factor and performance. On an average software team of perhaps 10 people, you will naturally have people develop expertise in a particular part of the codebase. One developer will be an expert in the frontend, another in the SQL queries, the next in the controllers, etc. What you want to avoid is a bus factor of 1. Some teams try to keep every developer knowledgeable in every area of the system, this is a waste. If you have to work on every part of the system you will not be able to master any single part. To get a bus factor of n by rotating developers through different parts of the system you give up the efficiency from letting a developer master a subsystem. My solution is that you should focus on getting a bus factor of 2 for each major subsystem. Have people focus on the two subsystems that they are interested in or are available and leave things there. Just try to avoid having two developers working on the same two subsystems. You are unlikely to have two developers get hit by the ‘bus’ at the same time. Aim for a bus factor of 2 while trying to avoid a lot of overlap on subsystems, then leave things there.&lt;/p&gt;</description></item><item><title>Changing KPIs — A tale of moving from individual contributor to team lead.</title><link>https://blog.sledgeworx.dev/changing-kpis-a-tale-of-moving-from-individual-contributor-to-team-lead/</link><pubDate>Sun, 10 Jun 2018 16:18:31 +0000</pubDate><guid>https://blog.sledgeworx.dev/changing-kpis-a-tale-of-moving-from-individual-contributor-to-team-lead/</guid><description>&lt;p&gt;Changing KPIs — Moving from individual contributor to team lead. The biggest change after my move to team lead is that my KPIs (key performance indicators) have changed significantly. I still troubleshoot bugs, create architecture, discuss and persuade teammates of architectures. I get to write some code here and there. But the work that I am evaluated on has changed significantly. Instead of being evaluated on my ability to get coding done, to resolve bugs and be a good team member, I am evaluated based on the team’s performance. Was I able to keep everyone on the team from being blocked this sprint? Was I able to keep people on the team coordinated such that they didn’t duplicate code or write incompatible interfaces? Do we have the architecture and stories hashed out far ahead enough to keep working towards the release? Its been kind of a shock to me because I will be giving my update in standup, trying to remember what I did yesterday and its something along the lines of “I sat in on a couple meetings, reviewed PRs and helped classify several bugs.” I worked all day and am exhausted now, but I didn’t commit any code or make any progress on the story I assigned to myself. It feels like I’m not getting anything done, what happened, I used to be good at my job. But despite feeling like nothing is getting done, I am still hitting my KPIs as a team lead. My bosses are happy, the team seems happy enough with my work, the scrum master has what he needs, etc. Its not that I am not getting any work done, its that my ‘work’ has changed to something different. I am focused more on coordinating the team’s effort and planning what we need to do next, keeping abreast of the features coming down the roadmap, keeping track of technical debt and the maintenance work we need to do.&lt;/p&gt;</description></item><item><title>Starting a new Go project is delightful.</title><link>https://blog.sledgeworx.dev/starting-a-new-go-project-is-delightful/</link><pubDate>Sat, 09 Jun 2018 14:37:25 +0000</pubDate><guid>https://blog.sledgeworx.dev/starting-a-new-go-project-is-delightful/</guid><description>&lt;p&gt;I started a couple projects recently, a mock crypto exchange and my latest project a unicode manipulation library. But what struck me is that its really simple to get started. You need the go runtime and a GOPATH setup. Then you specify the package and the main method and that is a valid program.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;package main

func main(){}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.sledgeworx.dev/images/2018/06/unicode_project-943x1024.png" alt=""&gt; Above is my program so far. It is a short program with a bit of exploratory code that converts strings into their unicode rune ids. Back when I mainly used Java, I would have had to setup an IDE, integrated maven and think about package structure. In Go I just have a main.go file, if I need dependencies I create a &lt;code&gt;/vendor&lt;/code&gt; directory and use&lt;code&gt;go get github.com/gin-gonic/gin&lt;/code&gt; to pull the dependency. Overall the lightweightness of the Go tooling makes it very easy to build small programs.&lt;/p&gt;</description></item><item><title>SledgeCast 1: Prometheus now out on Youtube</title><link>https://blog.sledgeworx.dev/sledgecast-1-prometheus-now-out-on-youtube/</link><pubDate>Mon, 04 Jun 2018 01:20:37 +0000</pubDate><guid>https://blog.sledgeworx.dev/sledgecast-1-prometheus-now-out-on-youtube/</guid><description>&lt;p&gt;The first video in the SledgeCast code review series explores the Prometheus codebase! &lt;a href="https://youtu.be/QunHun9dqGQ"&gt;https://youtu.be/QunHun9dqGQ&lt;/a&gt;   PS: More coffee next time!&lt;/p&gt;</description></item><item><title>Code Challenge Usability Testing</title><link>https://blog.sledgeworx.dev/code-challenge-usability-testing/</link><pubDate>Sat, 02 Jun 2018 17:42:56 +0000</pubDate><guid>https://blog.sledgeworx.dev/code-challenge-usability-testing/</guid><description>&lt;p&gt;Coding Challenges have become a common step in the Software engineering interview process. I have had to review a couple challenges and the biggest mistake is a lack of usability testing. People are usually in a rush when they do coding challenges, either to limit the amount of time they are spending, or because they decided to attempt something challenging and time is running out. When we do side projects we often think that because its just us less complications will come up and our estimates will be more accurate. But the reality is that the project is still going to take longer than you expected. Since most coding challenges end up being rushed, its surprisingly easy to stand out through usability testing. Ask a friend to clone your repository and try to get the code running without any support on your end. A surprising number of code samples and challenges don’t even start once they get into the interviewers hands. Or even worse, your code works perfectly, but the interviewers don’t realize it because you didn’t document what the ‘working’ state looked like well enough. It might seem like a simple thing to do, but just having two people try to start your app and give you feedback can result in a smooth stress free review of your code sample and give you a strong foot in the door.&lt;/p&gt;</description></item><item><title>Using pprof to examine the heap and memory usage in Golang Programs</title><link>https://blog.sledgeworx.dev/guides/using-pprof-to-examine-the-heap-and-memory-usage-in-golang-programs/</link><pubDate>Thu, 31 May 2018 04:11:08 +0000</pubDate><guid>https://blog.sledgeworx.dev/guides/using-pprof-to-examine-the-heap-and-memory-usage-in-golang-programs/</guid><description>&lt;p&gt;I had some trouble getting the info I needed to setup pprof in my program. And figuring out the steps to get actionable data out of pprof. So here is my attempt to provide the minimum steps needed to use pprof.&lt;/p&gt;
&lt;h2 id="instrument-your-code"&gt;Instrument your code&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;import ( 
 _ &amp;#34;net/http/pprof&amp;#34; 
 ) 
func main() { 
 go func() { log.Println(http.ListenAndServe(&amp;#34;localhost:6060&amp;#34;, nil)) }() 
//Your program 
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure you have the above in your main.go file. This sets up a webserver that provides pprof data at the below link.&lt;/p&gt;</description></item></channel></rss>