<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Julian Friedman</title>
    <description>The latest articles on DEV Community by Julian Friedman (@doctor_julz).</description>
    <link>https://dev.to/doctor_julz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F174028%2F45810a80-bff7-4e6d-8578-e67f03ab9017.jpg</url>
      <title>DEV Community: Julian Friedman</title>
      <link>https://dev.to/doctor_julz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/doctor_julz"/>
    <language>en</language>
    <item>
      <title>A Cloud Native Programming Manifesto</title>
      <dc:creator>Julian Friedman</dc:creator>
      <pubDate>Mon, 05 Aug 2019 10:34:55 +0000</pubDate>
      <link>https://dev.to/doctor_julz/a-cloud-native-programming-manifesto-41o</link>
      <guid>https://dev.to/doctor_julz/a-cloud-native-programming-manifesto-41o</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Created &lt;a href="https://github.com/julz/cloud-native-programming"&gt;a Github Repo&lt;/a&gt; where we can gather resources and links etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; Quite a lot of feedback about the second bullet. I think it may treat a symptom rather than the problem. Discussion here: &lt;br&gt;
&lt;a href="https://github.com/julz/cloud-native-programming/issues/3"&gt;https://github.com/julz/cloud-native-programming/issues/3&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The way we write Cloud Native Software is wrong. Or at least, over-complicated. Or at least, we can do better.&lt;/p&gt;

&lt;p&gt;Many of us are spending far too much time talking about infrastructure details. About CRDs and yml and template languages and ReplicaSets and service meshes. These things are great, but they're tools. And, let's be honest: they're over-complicated tools an awful lot of the time.&lt;/p&gt;

&lt;p&gt;Wasn't Cloud supposed to make things better? Easier, faster, simpler? Does anyone else miss Heroku and 12-factor apps?&lt;/p&gt;

&lt;p&gt;How have we gone forward five years and made it &lt;em&gt;harder&lt;/em&gt; to ship software?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Agile Manifesto succeeded
&lt;/h2&gt;

&lt;p&gt;The Agile manifesto was originally quite controversial. It argued against the received wisdom that because &lt;em&gt;some&lt;/em&gt; projects need a large amounts of up-front planning, design, contract negotiation and rigorous processes &lt;em&gt;all&lt;/em&gt; projects should use those techniques. And actually, many didn't need to.&lt;/p&gt;

&lt;p&gt;The Agile Manifesto has a great way of framing this: it's not that Big Up Front Design (for example) is "wrong", it's that Responding to Change is more important. This way of thinking clarifies the trade-offs.&lt;/p&gt;

&lt;p&gt;If you need contracts, or a lot of planning, or comprehensive documentation, or lots of process - the agile manifesto says - that's fine: but prefer individuals and interactions, responding to change, and shipping working software, where you can. &lt;/p&gt;

&lt;p&gt;If you need YML and ReplicaSets and Pods and Nodes that's fine (especially when it supports the goals of shipping and iterating faster and easier!): but prefer consuming higher level abstractions and favouring simplicity where possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Cloud Native Programming Manifesto
&lt;/h2&gt;

&lt;p&gt;The function of the Cloud is to make it substantially faster to ship and iterate on distributed software. Many of the hottest ideas in Cloud are absolutely necessary for extremely large scale systems, but have trade-offs when applied to systems that don't need them.&lt;/p&gt;

&lt;p&gt;I propose building a Cloud Native Programming manifesto to clarify best practices and thoughts around these trade-offs. It might look something like this:&lt;/p&gt;

&lt;h3&gt;
  
  
  Four Values
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Consistency&lt;/em&gt; over configuration - that is, where possible we prefer to focus on code, not CRDs or yml or ReplicaSets or helm charts or Dockerfiles. 12-factor apps and serverless functions can help with this.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Monoliths&lt;/em&gt; over micro-services - that is, where possible we resist breaking down a system in to more micro-services than required (generally, a service per team is a good rule-of-thumb)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Routing&lt;/em&gt; over deployment - rather than managing multiple environments, where possible we prefer progressive deployment, observability and feature flags&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Services&lt;/em&gt; over managing state - that is, we prefer to use existing services at the highest level of abstraction possible rather than managing databases and complex systems&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>agile</category>
      <category>architecture</category>
      <category>cloud</category>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
