<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>software engineering on Brave New Geek</title><link>https://bravenewgeek.com/tag/software-engineering-2/</link><description>Recent content in software engineering on Brave New Geek</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 14 Nov 2024 13:47:29 -0700</lastBuildDate><atom:link href="https://bravenewgeek.com/tag/software-engineering-2/index.xml" rel="self" type="application/rss+xml"/><item><title>Platform Engineering as a Service</title><link>https://bravenewgeek.com/platform-engineering-as-a-service/</link><pubDate>Thu, 14 Nov 2024 13:47:29 -0700</pubDate><guid>https://bravenewgeek.com/platform-engineering-as-a-service/</guid><description>&lt;p&gt;Like most industry jargon, “DevOps” means a lot of things to a lot of different people. While many folks view it as specific to certain tooling or practices, such as CI/CD or Infrastructure as Code (IaC), I’ve always viewed it as an organizational model for how software is built and delivered. In particular, my interpretation is that DevOps is about shifting more responsibilities “left” onto developers, moving away from the more traditional “throw it over the wall” approach to IT operations. No doubt this encompasses tooling or practices like CI/CD and IaC, which are responsibilities that developers now shoulder, perhaps with the support of dev tools, productivity, or enablement teams—some companies just call this the “DevOps” team.&lt;/p&gt;</description></item><item><title>Security, Maintainability, Velocity: Choose One</title><link>https://bravenewgeek.com/security-maintainability-velocity-choose-one/</link><pubDate>Wed, 17 Apr 2024 11:41:24 -0600</pubDate><guid>https://bravenewgeek.com/security-maintainability-velocity-choose-one/</guid><description>&lt;p&gt;There are three competing priorities that companies have as it relates to software development: security, maintainability, and velocity. I’ll elaborate on what I mean by each of these in just a bit. When I originally started thinking about this, I thought of it in the context of the “good, fast, cheap: choose two” &lt;a href="https://en.wikipedia.org/wiki/Project_management_triangle"&gt;project management triangle&lt;/a&gt;. But after thinking about it for more than a couple minutes, and as I related it to my own experience and observations at other companies, I realized that in practice it’s much worse. For most organizations building software, it’s more like security, maintainability, velocity: choose &lt;em&gt;one&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Choosing Good SLIs</title><link>https://bravenewgeek.com/choosing-good-slis/</link><pubDate>Mon, 19 Feb 2024 14:11:17 -0700</pubDate><guid>https://bravenewgeek.com/choosing-good-slis/</guid><description>&lt;p&gt;&lt;img loading="lazy" src="https://bravenewgeek.com/wp-content/uploads/2024/02/dashboard-1024x671.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Transitioning from an on-prem environment to a cloud environment involves a lot of major shifts for organizations. One of those shifts is often around how we monitor the overall health of systems. The typical way to measure things like the availability, reliability, and performance of systems is with SLIs or &lt;a href="https://sre.google/sre-book/service-level-objectives/"&gt;Service Level Indicators&lt;/a&gt;. SLIs are a valuable tool both on-prem and in the cloud, but when it comes to the latter, I often see organizations carrying over some operational anti-patterns from their data center environment.&lt;/p&gt;</description></item><item><title>Digitally Transformed: Becoming a Technology Product Company</title><link>https://bravenewgeek.com/digitally-transformed-becoming-a-technology-product-company/</link><pubDate>Wed, 05 Feb 2020 09:46:47 -0600</pubDate><guid>https://bravenewgeek.com/digitally-transformed-becoming-a-technology-product-company/</guid><description>&lt;p&gt;More and more established businesses are attempting to reinvent themselves as technology companies. At the heart of this is the &lt;a href="https://trends.google.com/trends/explore?date=all&amp;amp;geo=US&amp;amp;q=digital%20transformation"&gt;digital transformation&lt;/a&gt;, a journey many organizations are undertaking in order to better compete and serve their customers. As a result, companies are pouring tons of cash into digital transformation strategies. For some, this means broader adoption of agile or DevOps practices. For others, it’s modernizing product offerings or moving to the cloud. Regardless of the changes, many are struggling to find success transforming themselves due to low throughput, quality issues, or failing to deliver the right thing at the right time. In a few cases, digital transformation has ended in &lt;a href="https://www.theregister.co.uk/2019/04/23/hertz_accenture_lawsuit/"&gt;&lt;em&gt;outright disaster&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Planting Perennials Next to Potholes</title><link>https://bravenewgeek.com/planting-perennials-next-to-potholes/</link><pubDate>Fri, 26 Apr 2019 14:35:24 -0500</pubDate><guid>https://bravenewgeek.com/planting-perennials-next-to-potholes/</guid><description>&lt;h4 id="silos-bikesheds-and-focusing-on-what-matters"&gt;&lt;strong&gt;Silos, bikesheds, and focusing on what matters&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;If you’ve ever flown into Des Moines then you’ve had the privilege of driving on what might be the most decrepit major road in the metro area. An important artery, Fleur Drive is the &lt;em&gt;only&lt;/em&gt; way to get to and from the airport, and the pavement is marginally better than that of a dirt road. Cars weave back and forth to dodge potholes and massive cracks in the asphalt as people race to catch their flights. There always appears to be some kind of construction going on somewhere along the six mile stretch of road, and yet, it never seems to actually &lt;em&gt;improve&lt;/em&gt;. The road is also located in a major floodplain, so sometimes the city just closes it when the nearby river rises too much. It’s basically what you’d get if you agiled your way through urban planning.&lt;/p&gt;</description></item><item><title>How to Level up Dev Teams</title><link>https://bravenewgeek.com/how-to-level-up-dev-teams/</link><pubDate>Thu, 03 Jan 2019 11:21:05 -0600</pubDate><guid>https://bravenewgeek.com/how-to-level-up-dev-teams/</guid><description>&lt;p&gt;One question that clients frequently ask: how do you effectively level up development teams? How do you take a group of engineers who have never written Python and make them effective Python developers? How do you take a group who has never built distributed systems and have them build reliable, fault-tolerant microservices? What about a team who has never built anything in the cloud that is now tasked with building cloud software?&lt;/p&gt;</description></item><item><title>Multi-Cloud Is a Trap</title><link>https://bravenewgeek.com/multi-cloud-is-a-trap/</link><pubDate>Fri, 14 Sep 2018 11:16:09 -0500</pubDate><guid>https://bravenewgeek.com/multi-cloud-is-a-trap/</guid><description>&lt;p&gt;It comes up in &lt;em&gt;a lot&lt;/em&gt; of conversations with clients. We want to be cloud-agnostic. We need to avoid vendor lock-in. We want to be able to shift workloads seamlessly between cloud providers. Let me say it again: &lt;em&gt;multi-cloud is a trap&lt;/em&gt;. Outside of appeasing a few major retailers who might not be too keen on stuff running in Amazon data centers, I can think of few reasons why multi-cloud should be a priority for organizations of &lt;em&gt;any&lt;/em&gt; scale.&lt;/p&gt;</description></item><item><title>Software Is About Storytelling</title><link>https://bravenewgeek.com/software-is-about-storytelling/</link><pubDate>Wed, 04 Oct 2017 17:20:59 -0500</pubDate><guid>https://bravenewgeek.com/software-is-about-storytelling/</guid><description>&lt;p&gt;Software engineering is more a practice in archeology than it is in building. As an industry, we undervalue storytelling and focus too much on artifacts and tools and deliverables. How many times have you been left scratching your head while looking at a piece of code, system, or process? It’s the &lt;em&gt;story&lt;/em&gt;, the legacy left behind by that artifact, that is just as important—if not &lt;em&gt;more—than&lt;/em&gt; the artifact itself.&lt;/p&gt;
&lt;p&gt;And I don’t mean what’s in the version control history—that’s often useless. I mean the real, &lt;em&gt;human&lt;/em&gt; story behind something. Artifacts, whether that’s code or tools or something else entirely, are not just snapshots in time. They’re the result of a series of decisions, discussions, mistakes, corrections, problems, constraints, and so on.  They’re the product of the engineering process, but the problem is they usually don’t capture that process in its entirety. They rarely capture it &lt;em&gt;at all&lt;/em&gt;. They commonly end up being nothing &lt;em&gt;but&lt;/em&gt; a snapshot in time.&lt;/p&gt;</description></item><item><title>The Future of Ops</title><link>https://bravenewgeek.com/the-future-of-ops/</link><pubDate>Wed, 03 May 2017 20:12:57 -0500</pubDate><guid>https://bravenewgeek.com/the-future-of-ops/</guid><description>&lt;p&gt;Traditional Operations isn’t going away, it’s just retooling. The move from on-premise to cloud means Ops, in the classical sense, is largely being outsourced to cloud providers. This is the buzzword-compliant &lt;em&gt;NoOps movement&lt;/em&gt;, of which many call the “successor” to DevOps, though that word has become &lt;a href="https://medium.com/@cindysridharan/what-is-devops-5b0181fdb953"&gt;pretty diluted&lt;/a&gt; these days. What this leaves is a thin but crucial slice between Amazon and the products built by development teams, encompassing infrastructure automation, deployment automation, configuration management, log management, and monitoring and instrumentation.&lt;/p&gt;</description></item><item><title>Pain-Driven Development: Why Greedy Algorithms Are Bad for Engineering Orgs</title><link>https://bravenewgeek.com/pain-driven-development-why-greedy-algorithms-are-bad-for-engineering-orgs/</link><pubDate>Fri, 07 Apr 2017 15:33:00 -0500</pubDate><guid>https://bravenewgeek.com/pain-driven-development-why-greedy-algorithms-are-bad-for-engineering-orgs/</guid><description>&lt;p&gt;I recently wrote about the importance of understanding &lt;a href="https://bravenewgeek.com/decision-impact/"&gt;decision impact&lt;/a&gt; and why it’s important for building an empathetic engineering culture. I presented the distinction between &lt;em&gt;pain displacement&lt;/em&gt; and &lt;em&gt;pain deferral&lt;/em&gt;, and this was something I wanted to expand on a bit.&lt;/p&gt;
&lt;p&gt;When you distill it down, I think what’s at the heart of a lot of engineering orgs is this idea of “pain-driven development.” When a company grows to a certain size, it develops limbs, and each of these limbs has its own pain receptors. This is when empathy becomes important because it becomes harder and less natural. These limbs of course are teams or, more generally speaking, silos. Teams have a natural tendency to operate in a way that minimizes the amount of pain they feel.&lt;/p&gt;</description></item><item><title>Decision Impact</title><link>https://bravenewgeek.com/decision-impact/</link><pubDate>Wed, 05 Apr 2017 19:53:34 -0500</pubDate><guid>https://bravenewgeek.com/decision-impact/</guid><description>&lt;p&gt;I think a critical part of building an empathetic engineering culture is understanding &lt;em&gt;decision impact&lt;/em&gt;. This is a blindspot that I see happening a lot: a deliberate effort to understand the effects caused by a decision. How does adopting X affect operations? Does our dev tooling support this? Is this architecture supported by our current infrastructure? What are the compliance or security implications of this? Will this scale in production? A particular decision might save you time, but does it create work or slow others down? Are we just &lt;em&gt;displacing&lt;/em&gt; pain somewhere else?&lt;/p&gt;</description></item><item><title>Take It to the Limit: Considerations for Building Reliable Systems</title><link>https://bravenewgeek.com/take-it-to-the-limit-considerations-for-building-reliable-systems/</link><pubDate>Tue, 20 Dec 2016 19:55:52 -0600</pubDate><guid>https://bravenewgeek.com/take-it-to-the-limit-considerations-for-building-reliable-systems/</guid><description>&lt;p&gt;Complex systems usually operate in failure mode. This is because a complex system typically consists of many discrete pieces, each of which can fail in isolation (or in concert). In a microservice architecture where a given function potentially comprises several independent service calls, &lt;em&gt;high&lt;/em&gt; availability hinges on the ability to be &lt;em&gt;partially&lt;/em&gt; available. This is a core tenet behind resilience engineering. If a function depends on three services, each with a reliability of 90%, 95%, and 99%, respectively, partial availability could be the difference between 99.995% reliability and 84% reliability (assuming failures are independent). Resilience engineering means designing with failure as the normal.&lt;/p&gt;</description></item><item><title>You Are Not Paid to Write Code</title><link>https://bravenewgeek.com/you-are-not-paid-to-write-code/</link><pubDate>Wed, 16 Nov 2016 22:20:11 -0600</pubDate><guid>https://bravenewgeek.com/you-are-not-paid-to-write-code/</guid><description>&lt;p&gt;&lt;a href="http://widgetsandshit.com/teddziuba/2010/10/taco-bell-programming.html"&gt;“Taco Bell Programming”&lt;/a&gt; is the idea that we can solve many of the problems we face as software engineers with clever reconfigurations of the same basic Unix tools. The name comes from the fact that every item on the menu at Taco Bell, a company which generates almost &lt;em&gt;$2 billion&lt;/em&gt; in revenue annually, is simply a different configuration of roughly eight ingredients.&lt;/p&gt;
&lt;p&gt;Many people grumble or reject the notion of using proven tools or techniques. It’s boring. It requires investing time to learn at the expense of shipping code.  It doesn’t do this one thing that we need it to do. It won’t work for us. For some reason—and I continue to be &lt;em&gt;completely baffled&lt;/em&gt; by this—everyone sees their situation as a unique snowflake despite the fact that a million other people have probably done the same thing. It’s a weird form of tunnel vision, and I see it at every level in the organization. I catch myself doing it on occasion too. I think it’s just human nature.&lt;/p&gt;</description></item><item><title>Shit Rolls Downhill</title><link>https://bravenewgeek.com/shit-rolls-downhill/</link><pubDate>Thu, 14 Apr 2016 10:43:09 -0500</pubDate><guid>https://bravenewgeek.com/shit-rolls-downhill/</guid><description>&lt;p&gt;Building software of significant complexity is tough because a lot of pieces have to come together and a lot of teams have to work in concert to be successful. It can be extraordinarily difficult to get everyone on the same page and moving in tandem toward a common goal. Product development is largely an &lt;a href="https://bravenewgeek.com/product-development-is-a-trust-fall/"&gt;exercise in trust&lt;/a&gt; (or perhaps more accurately, &lt;em&gt;hiring&lt;/em&gt;), but even if you have the “right” people—people you can trust and depend on to get things done—you’re only halfway there.&lt;/p&gt;</description></item><item><title>Abstraction Considered Harmful</title><link>https://bravenewgeek.com/abstraction-considered-harmful/</link><pubDate>Sat, 27 Feb 2016 14:48:22 -0600</pubDate><guid>https://bravenewgeek.com/abstraction-considered-harmful/</guid><description>&lt;p&gt;&lt;em&gt;“Abstraction is sometimes harmful,”&lt;/em&gt; he proclaims to the sound of anxious whooping and subdued applause from the audience. Peter Alvaro’s 2015 Strange Loop keynote, &lt;em&gt;&lt;a href="https://youtu.be/R2Aa4PivG0g"&gt;I See What You Mean&lt;/a&gt;&lt;/em&gt;, remains one of my favorite talks—not just because of its keen insight on distributed computing and language design, but because of a more fundamental, almost &lt;em&gt;primordial&lt;/em&gt;, understanding of systems thinking.&lt;/p&gt;
&lt;p&gt;Abstraction is what we use to manage complexity. We build something of significant complexity, we mask its inner workings, and we expose what we think is necessary for interacting with it.&lt;/p&gt;</description></item><item><title>Infrastructure Engineering in the 21st Century</title><link>https://bravenewgeek.com/infrastructure-engineering-in-the-21st-century/</link><pubDate>Tue, 15 Dec 2015 18:57:41 -0600</pubDate><guid>https://bravenewgeek.com/infrastructure-engineering-in-the-21st-century/</guid><description>&lt;p&gt;Infrastructure engineering is an inherently treacherous problem space because it’s core to so many things. Systems today are increasingly distributed and increasingly complex but are built on unreliable components and will continue to be. This includes unreliable networks and faulty hardware. The 21st century engineer understands &lt;strong&gt;failure is routine&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Naturally, application developers would rather not have to think about low-level failure modes so they can focus on solving the problem at hand. Infrastructure engineers are then tasked with competing goals: provide enough abstraction to make application development tractable and provide enough reliability to make subsystems useful. The second goal often comes with an additional proviso in that there must be sufficient reliability without sacrificing performance to the point of no longer being useful. Anyone who has worked on enterprise messaging systems can tell you that these goals are often contradictory. The result is a wall of sand intended to keep the developer’s feet dry from the incoming tide. The 21st century engineer understands that &lt;strong&gt;in order to play in the sand, we all need to be comfortable getting our feet a little wet from time to time.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Designed to Fail</title><link>https://bravenewgeek.com/designed-to-fail/</link><pubDate>Tue, 21 Jul 2015 20:17:17 -0500</pubDate><guid>https://bravenewgeek.com/designed-to-fail/</guid><description>&lt;p&gt;When it comes to reliability engineering, people often talk about things like fault injection, monitoring, and operations runbooks. These are all critical pieces for building systems which can withstand failure, but what’s less talked about is the need to design systems which &lt;em&gt;deliberately&lt;/em&gt; fail.&lt;/p&gt;
&lt;p&gt;Reliability design has a natural progression which closely follows that of architectural design. With monolithic systems, we care more about preventing failure from occurring. With service-oriented architectures, controlling failure becomes less manageable, so instead we learn to anticipate it. With highly distributed microservice architectures where failure is all but guaranteed, we &lt;em&gt;embrace&lt;/em&gt; it.&lt;/p&gt;</description></item><item><title>Service-Disoriented Architecture</title><link>https://bravenewgeek.com/service-disoriented-architecture/</link><pubDate>Sun, 07 Jun 2015 16:03:22 -0500</pubDate><guid>https://bravenewgeek.com/service-disoriented-architecture/</guid><description>&lt;p&gt;&lt;em&gt;“You can have a second computer once you’ve shown you know how to use the first one.” -Paul Barham&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first rule of distributed systems is don’t distribute your system until you have an observable reason to. Teams break this rule on the regular. People have been talking about service-oriented architecture for a long time, but only recently have microservices been receiving the hype.&lt;/p&gt;
&lt;p&gt;The problem, as &lt;a href="http://martinfowler.com/bliki/MicroservicePremium.html"&gt;Martin Fowler observes&lt;/a&gt;, is that teams are becoming too eager to adopt a microservice architecture without first understanding the &lt;a href="http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html"&gt;inherent overheads&lt;/a&gt;. A contributing factor, I think, is you only hear the success stories from companies who did it right, like Netflix. However, what folks often fail to realize is that these companies—in almost all cases—didn’t start out that way. There was a long and winding path which led them to where they are today. The inverse of this, which some refer to as &lt;a href="http://www.thoughtworks.com/radar/techniques/microservice-envy"&gt;microservice envy&lt;/a&gt;, is causing teams to rush into microservice hell. I call this service-&lt;em&gt;disoriented&lt;/em&gt; architecture (or sometimes disservice-oriented architecture when the architecture is DOA).&lt;/p&gt;</description></item><item><title>Distributed Systems Are a UX Problem</title><link>https://bravenewgeek.com/distributed-systems-are-a-ux-problem/</link><pubDate>Wed, 03 Jun 2015 19:33:29 -0500</pubDate><guid>https://bravenewgeek.com/distributed-systems-are-a-ux-problem/</guid><description>&lt;p&gt;Distributed systems are not strictly an engineering problem. It’s far too easy to assume a “backend” development concern, but the reality is there are implications at every point in the stack. Often the trade-offs we make lower in the stack in order to buy responsiveness bubble up to the top—so much, in fact, that it rarely &lt;em&gt;doesn’t&lt;/em&gt; impact the application in some way. Distributed systems affect the user. We need to shift the focus from system properties and guarantees to business rules and application behavior. We need to understand the limitations and trade-offs at each level in the stack and why they exist. We need to assume failure and plan for recovery. &lt;strong&gt;We need to start thinking of distributed systems as a UX problem.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go Is Unapologetically Flawed, Here’s Why We Use It</title><link>https://bravenewgeek.com/go-is-unapologetically-flawed-heres-why-we-use-it/</link><pubDate>Wed, 20 May 2015 11:46:16 -0500</pubDate><guid>https://bravenewgeek.com/go-is-unapologetically-flawed-heres-why-we-use-it/</guid><description>&lt;p&gt;Go is decidedly polarizing. While many are &lt;a href="https://sendgrid.com/blog/convince-company-go-golang/"&gt;touting&lt;/a&gt; their &lt;a href="https://www.youtube.com/watch?v=bAQ9ShmXYLY"&gt;transition&lt;/a&gt; to Go, it has become equally fashionable to &lt;a href="http://nomad.so/2015/03/why-gos-design-is-a-disservice-to-intelligent-programmers/"&gt;criticize&lt;/a&gt; and &lt;a href="http://tmikov.blogspot.com/2015/02/you-dont-like-googles-go-because-you.html"&gt;mock&lt;/a&gt; the language. As Bjarne Stroustrup so eloquently put it, “There are only two kinds of programming languages: those people always bitch about and those nobody uses.” This adage couldn’t be more true. I apologize in advance for what appears to be just another in a long line of diatribes. I’m not really sorry, though.&lt;/p&gt;</description></item></channel></rss>