<?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: Roger Jin</title>
    <description>The latest articles on DEV Community by Roger Jin (@rogerjin12).</description>
    <link>https://dev.to/rogerjin12</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%2F13394%2F83b6589c-ad85-4e44-9e63-0d2b4a4cf93a.jpeg</url>
      <title>DEV Community: Roger Jin</title>
      <link>https://dev.to/rogerjin12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rogerjin12"/>
    <language>en</language>
    <item>
      <title>How to Gracefully Handle Failures in a NodeJS API Client</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Fri, 13 Oct 2017 15:44:59 +0000</pubDate>
      <link>https://dev.to/rogerjin12/how-to-gracefully-handle-failures-in-a-nodejs-api-client-ai4</link>
      <guid>https://dev.to/rogerjin12/how-to-gracefully-handle-failures-in-a-nodejs-api-client-ai4</guid>
      <description>

&lt;p&gt;There are two facts of life: you breathe air, and errors will occur in your programs. Web clients over the HTTP protocol are prone to a wide range of mishaps. For programmers, anything that waits for a response over a network is risky. The problem is worse with mobile devices where network connectivity is a luxury at times. As clients request resources from high latency sources you end up with only two facts of life.&lt;/p&gt;

&lt;p&gt;ButterCMS is a content management system as a service. The database, logic, and administrative dashboard is a service through a web API. The question is what can you do with the inevitable errors in your NodeJS client? Errors over a client API are bound to happen–it is what you do about it that matters most.&lt;/p&gt;

&lt;p&gt;I’ll use the &lt;a href="https://github.com/ButterCMS/buttercms-js"&gt;buttercms client API&lt;/a&gt; to get blog post data through an endpoint. By the end, you will have the equipment necessary to handle all the exceptions this client API can throw at you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Exception Handling
&lt;/h2&gt;

&lt;p&gt;To begin, let’s get blog post data using the NodeJS API client:&lt;/p&gt;

&lt;pre&gt;butter.post.retrieve('example-post')  
 .then(function onSuccess(resp) {  
 console.log(resp.data);  
 });&lt;/pre&gt;

&lt;p&gt;This will work except it leaves you blind to any exceptions the client can throw at you. Note the client API uses &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises"&gt;promises&lt;/a&gt; to get blog data. Keep this in mind as JavaScript takes on a new dimension through promises.&lt;/p&gt;

&lt;p&gt;To handle exceptions using a promise, slap a &lt;code&gt;catch()&lt;/code&gt; at the end. For example:&lt;/p&gt;

&lt;pre&gt;butter.post.retrieve('example-post')  
 .catch(function onError(error) {  
 console.log(error);  
 });&lt;/pre&gt;

&lt;p&gt;Done! A JavaScript promise handles all errors for you and executes the &lt;code&gt;onError()&lt;/code&gt; callback. The &lt;code&gt;error&lt;/code&gt; object contains very useful information about what went wrong.&lt;/p&gt;

&lt;p&gt;If you look under the hood of the ButterCMS client API you’ll see it uses axios. Axios is a promise based HTTP client that works in the browser and Node.js.&lt;/p&gt;

&lt;p&gt;Examining the Axios error object you get back through a promise reveals the following error object:&lt;/p&gt;

&lt;pre&gt;{data:Object, status:401, statusText:'Unauthorized', headers:Object, config:Object}&lt;/pre&gt;

&lt;p&gt;The HTTP status code tells me what the error was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Exception Handling
&lt;/h2&gt;

&lt;p&gt;The type of errors you get will depend on the client API endpoint. For example, for ButterCMS you have a &lt;a href="../docs/api/?javascript#errors"&gt;list of possible responses&lt;/a&gt;. You can get a 400, 401, or a 404 depending on the request.&lt;/p&gt;

&lt;p&gt;One way to deal with these exceptions is to handle each status in a different way. For example, you could handle errors:&lt;/p&gt;

&lt;pre&gt;butter.post.retrieve('example-post')  
 .catch(function onError(error) {  
 if (error.status === 400) {  
  console.log('Bad request, often due to missing a required parameter.');  
 } else if (error.status === 401) {  
  console.log('No valid API key provided.');  
 } else if (error.status === 404) {  
  console.log('The requested resource doesn\'t exist.');  
 }  
});&lt;/pre&gt;

&lt;p&gt;By using the HTTP status as the source of truth, you can interpret the reason for the error however you want.&lt;/p&gt;

&lt;p&gt;Other companies, like the &lt;a href="https://github.com/stripe/stripe-node"&gt;Stripe API client&lt;/a&gt;, solve the problem with an error type on the response. The error &lt;code&gt;typestatus&lt;/code&gt; code tells you what type of error is coming back in the response.&lt;/p&gt;

&lt;p&gt;With all this, one final question remains. “What happens when the network request times out?”&lt;/p&gt;

&lt;p&gt;For a client API, any request over a network is very risky. Network connectivity can be a luxury one can’t afford at times.&lt;/p&gt;

&lt;p&gt;Let’s examine what error exception you get when it times out. The ButterCMS client API has a default value of 3000 ms or 3 seconds.&lt;/p&gt;

&lt;p&gt;Take a look at this error object when it times out from the exception handler:&lt;/p&gt;

&lt;pre&gt;{code:'ECONNABORTED', message:String, stack:String, timeout:3000}&lt;/pre&gt;

&lt;p&gt;Like any good error object, it has plenty of good details about the exception. Note this error object is different from the one we saw earlier. One distinct difference is the &lt;code&gt;timeout&lt;/code&gt; property. This can be useful in dealing with this kind of exception in a unique way.&lt;/p&gt;

&lt;p&gt;The question is, “Is there a graceful way to handle these kinds of exceptions?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling NetworkÂ Errors
&lt;/h2&gt;

&lt;p&gt;One idea is to auto-retry the request after it fails. Anything that waits for a network response can fail. The failure occurs because of circumstances outside your direct control. As developers, it is nice to be in control but life comes with many exceptions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mauricedb/polly-js"&gt;Polly-js&lt;/a&gt; can attempt to retry the action once it detects an error. The polly-js library can handle exceptions through a JavaScript promise. This promise catches the exception in case all the retries fail and executes the &lt;code&gt;catch()&lt;/code&gt;. But, we decided not to use polly-js because it is an extra dependency that adds bloat to the client API.&lt;/p&gt;

&lt;p&gt;One design principle at play here is: “A little copy-paste is better than an extra dependency. The bulk of the retry logic is minimal and has exactly what we need to solve the problem.&lt;/p&gt;

&lt;p&gt;The crux of auto retries returns a JavaScript promise:&lt;/p&gt;

&lt;pre&gt;function executeForPromiseWithDelay(config, cb) {  
 return new Promise(function(resolve, reject) {  
  function execute() {  
   var original = cb();  
   original.then(function(e) {  
   resolve(e);  
  }, function(e) {  
   var delay = config.delays.shift();  
   if (delay &amp;amp;&amp;amp; config.handleFn(e)) {  
    setTimeout(execute, delay);  
   } else {  
    reject(e);  
   }  
  });  
 }  
 execute();  
 });  
}&lt;/pre&gt;

&lt;p&gt;The promise has the &lt;code&gt;resolve&lt;/code&gt; and &lt;code&gt;reject&lt;/code&gt; callbacks encapsulated for automatic retries. The &lt;code&gt;config.handleFn()&lt;/code&gt; callback figures out what condition will cause it to retry. The &lt;code&gt;config.delays.shift()&lt;/code&gt; will remove the first item from the list and delay the next attempt.&lt;/p&gt;

&lt;p&gt;The good news is it can meet a specific condition before there are any retries. The library has a &lt;code&gt;handle()&lt;/code&gt; function to set the callback that evaluates the condition. You tell it how many retries, give the condition, and final exception handling.&lt;/p&gt;

&lt;p&gt;The buttercms client API has retry capabilities out of the box. To enable auto retries you need this:&lt;/p&gt;

&lt;pre&gt;butter.post.retrieve('example-post')  
 .handle(function onError(error) {  
  // Only retry on time out  
  return error.timeout;  
 })  
 .executeWithAutoRetry(3)  
 .then(function onSuccess(resp) {  
  console.log(resp.data);  
 })  
 .catch(function onTimeoutError(error) {  
  if (error.timeout) {  
   console.log('The network request has timed out.');  
  }  
 });&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;executeWithAutoRetry()&lt;/code&gt; staggers subsequent requests and retries if there is a failure. For example, the first attempt will fail then wait 100ms before the second attempt. The second attempt, if it fails, will wait 200ms before the third. The third attempt will wait 400ms before the fourth and final attempt.&lt;/p&gt;

&lt;p&gt;With the ButterCMS API client, you now have a nice way of handling promise based exceptions. All you need to do is configure it to your liking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;When it comes to errors, you can either bury your head in the sand or handle the unexpected with grace and elegance. Any client API that waits for a response through a connection is prone to exceptions. The choice is yours on what to do when erratic behavior happens.&lt;/p&gt;

&lt;p&gt;Consider an exception as unpredictable behavior. Except, because it is unpredictable does not mean you can’t prepare in advance. When handling exceptions, focus on anticipating what went wrong, not application logic.&lt;/p&gt;

&lt;p&gt;Network connectivity is one of the worst culprits of failures. Be sure to prepare in advance, to give requests a second change in case of a failed connection.&lt;/p&gt;


</description>
      <category>buttercms</category>
      <category>node</category>
      <category>apiclient</category>
    </item>
    <item>
      <title>Top 43 Events for CTOs to Attend in 2017/2018</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Fri, 18 Aug 2017 16:14:33 +0000</pubDate>
      <link>https://dev.to/rogerjin12/top-43-events-for-ctos-to-attend-in-20172018</link>
      <guid>https://dev.to/rogerjin12/top-43-events-for-ctos-to-attend-in-20172018</guid>
      <description>

&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a CTO it’s important to continuously be increasing your knowledge and network. One great way to do that is to attend technology conferences in your space.&lt;/p&gt;

&lt;p&gt;Below we highlight some of the top events that CTOs should consider attending for the remainder of 2017 and the start of 2018.&lt;/p&gt;

&lt;p&gt;The events below are listed in proximity to the actual date of the event. If you’re last minute, then start at the top.&lt;/p&gt;

&lt;p&gt;1. &lt;a href="https://www.thatconference.com/"&gt;That Conference Wisconsin&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is a developer-oriented conference that explores the IoT and all of its associated technologies, like mobile, web, and the cloud. It’s also held at a waterpark and has plenty of family-oriented activities, so feel free to bring the family.&lt;/p&gt;

&lt;p&gt;Dates: August 7th-9th&lt;/p&gt;

&lt;p&gt;2. &lt;a href="https://www.sqetraining.com/training-topics/software-testing-training-courses"&gt;Software Testing Training Week&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This is a team-oriented event, so you may want to bring a few of your developers along. You’ll learn the skills you need to boost productivity, improve testing, and help you build better software. There are both classes and topics covered, so you can build your own customized week of training.&lt;/p&gt;

&lt;p&gt;Dates: August 21-25&lt;/p&gt;

&lt;p&gt;3. &lt;a href="http://bigdataclouds.org/index.html"&gt;International Conference of ICT&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Do you need to up your knowledge of big data, the cloud, and security? This conference explores the latest trends in the above topics, and combines equal parts theory with practical application. If big data plays in role in the future of your company, then this event could be hugely beneficial.&lt;/p&gt;

&lt;p&gt;Dates: August 21-25&lt;/p&gt;

&lt;p&gt;4. &lt;a href="https://conferences.oreilly.com/jupyter/jup-ny"&gt;JupyterCon New York City 2017&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jupyter Notebooks are a popular and powerful tool for sharing and communicating data analysis. Open source tools like this can help you solve “last mile issues, and help to transform your existing workflows. If you’ve been thinking about implementing Jupyter into your development cycle, this conference is worth attending.&lt;/p&gt;

&lt;p&gt;Dates: August 23-25&lt;/p&gt;

&lt;p&gt;5. &lt;a href="http://www.gartner.com/events/es/la/cio"&gt;Gartner CIO &amp;amp; IT Executive Summit Cancun 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;As a CTO, you may have an overlapping role as a CIO. But, even if you don’t, having a greater understanding of the latest developments in the IT space can be beneficial. This conference explores the future of the IT and CIO space.&lt;/p&gt;

&lt;p&gt;Dates: August 29-31&lt;/p&gt;

&lt;p&gt;6. &lt;a href="https://chiefdataanalyticsofficermelbourne.com/"&gt;Chief Data and Analytics Officer Melbourne 2017&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Having a deep understanding of data and analytics can help to transform your organization. This conference will help you gain a better understanding of data in your organization, highlight how to build a data-driven culture, and much more.&lt;/p&gt;

&lt;p&gt;Dates: September 4-6&lt;/p&gt;

&lt;p&gt;7. &lt;a href="https://theinnovationenterprise.com/summits/data-visualization-summit-boston-2017"&gt;Data Visualization Summit Boston 2017&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This two day event is focused solely around data design and analysis. If you’re looking to better understand your data and improve your data literacy, then you’ll want to check out this conference.&lt;/p&gt;

&lt;p&gt;Dates: September 6-7&lt;/p&gt;

&lt;p&gt;8. &lt;a href="https://www.nginx.com/nginxconf"&gt;nginx.conf 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference will teach you best practices and techniques in application development and delivery, including things like microservices, DevOps, cloud and containers.&lt;/p&gt;

&lt;p&gt;Dates: September 6-8&lt;/p&gt;

&lt;p&gt;Â 9. &lt;a href="http://indsum.com/"&gt;Industry Cleveland 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference is all about analyzing the latest trends in product management. It can be easy to get caught up in doing without thinking about the bigger picture. This conference forces you to step back, get inspired, and really think about your own product.&lt;/p&gt;

&lt;p&gt;Dates: September 13-15&lt;/p&gt;

&lt;p&gt;10. &lt;a href="https://events.forrester.com/ehome/index.php?eventid=210783&amp;amp;"&gt;Forrester Privacy and Security 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference explores the rapid escalation of security, privacy, and risk from an enterprise level perspective. Learn how you can implement better security practices to ensure long-term customer trust.&lt;/p&gt;

&lt;p&gt;Dates: September 14-15&lt;/p&gt;

&lt;p&gt;11. &lt;a href="https://conferences.oreilly.com/artificial-intelligence/ai-ca"&gt;O’Reilly Artificial Intelligence Conference San Francisco 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;AI is going to shake up a lot of industries. This conference focuses on implementing AI in real-world projects, as well as its potential in industries yet to be disrupted by AI technology. It brings the top minds together to cut through the hype and deliver the most practical concepts, right now.&lt;/p&gt;

&lt;p&gt;Dates: September 18-20&lt;/p&gt;

&lt;p&gt;12. &lt;a href="http://enterprise-business-collaboration.com/en/"&gt;Enterprise Business Collaboration Berlin 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference focuses on the place where business and technology meet, and the collaboration tools and platforms that enable the process. If you’re looking to improve your collaboration across all existing channels, then this is the conference for you.&lt;/p&gt;

&lt;p&gt;Dates: September 18-20&lt;/p&gt;

&lt;p&gt;13. &lt;a href="https://uk.enterprisemobilityexchange.com/"&gt;Transformation Exchange London 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference brings together senior executives who are responsible for implementing and optimizing their mobility strategies and solutions. Expect to gain new insights from top executives in the field.&lt;/p&gt;

&lt;p&gt;Dates: September 19-20&lt;/p&gt;

&lt;p&gt;14. &lt;a href="http://www.digitalcustomerexp.com/"&gt;4th Annual Digital Customer Experience Strategies Summit&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is a useful event if you’re looking to shake up your customer experience strategy. Speakers have been chosen to help you gain insights into the evolving digital landscape. You’ll learn about the latest innovations in mobile, social, AI, VoC, big data, and personalization.&lt;/p&gt;

&lt;p&gt;Dates: September 19-20&lt;/p&gt;

&lt;p&gt;15. &lt;a href="http://www.unwired.eu.com/WORKTECH17/singapore/index.php"&gt;WORKTECH17 Singapore&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference is dedicated to the future of work. Part of being a CTO is team management and this will help you think about how to take your team into the future.&lt;/p&gt;

&lt;p&gt;Dates: September 19&lt;/p&gt;

&lt;p&gt;16. &lt;a href="https://theinnovationenterprise.com/summits/product-innovation-summit-boston-2017"&gt;Product Innovation Summit Boston 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference covers the latest trends surrounding product development and overall product lifecycle. It covers things like design thinking, the role of big data, rapid prototyping and deployment, identification and execution of new opportunities and more.&lt;/p&gt;

&lt;p&gt;Dates: September 25-26&lt;/p&gt;

&lt;p&gt;17. &lt;a href="https://drivingchangeconference.com/"&gt;Driving Change Conference London 2017&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Driving Change Conference dives into new and innovative approaches to cultural, behavioral, and organizational change, which is a must-have for any CTO. It will cover topics like building long-term change goals, inspiring long-term staff engagement, behavior shifts and mindsets to help embrace change and much more.&lt;/p&gt;

&lt;p&gt;Dates: September 27&lt;/p&gt;

&lt;p&gt;18. &lt;a href="https://starwest.techwell.com/"&gt;STARWEST Software Testing Conference Anaheim 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;STARWEST is one of the longest running conferences on software testing and quality assurance. Topics to be covered at this event include testing techniques, DevOps, leadership, project management, agile testing, and more.&lt;/p&gt;

&lt;p&gt;Dates: October 1-6&lt;/p&gt;

&lt;p&gt;19. &lt;a href="http://iot-cloud.alliedacademies.com/"&gt;Business Meet on Cloud and Internet of Things 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference will highlight the most innovative advancements and technologies that are affecting IoT. It’s part exhibition and part conference, for those looking to be informed on the latest advancements in this space.&lt;/p&gt;

&lt;p&gt;Dates: October 2-3&lt;/p&gt;

&lt;p&gt;Â 20. &lt;a href="https://dx.magnolia-cms.com/2017/london.html"&gt;DX Day London 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;DX Day will be all about how leading UK brands across eCommerce, retail and finance are managing their digital experiences. It highlights both the business and technical issues surrounding enterprise-scale projects.&lt;/p&gt;

&lt;p&gt;Dates: October 3&lt;/p&gt;

&lt;p&gt;21. &lt;a href="https://www.box.com/boxworks/home"&gt;BoxWorks San Francisco 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference brings together leads across every part of the technology sector to show you how to thrive in today’s digital world. Join industry leaders like Google and IBM, in discussing topics like, collaboration, information management, and more.&lt;/p&gt;

&lt;p&gt;Dates: October 10-13&lt;/p&gt;

&lt;p&gt;22. &lt;a href="https://internetofbusiness.com/events/iotbuild-usa/"&gt;IoTBuild San Francisco 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Whether you’re a Fortune 500 company, or a startup, IoTBuild will be useful. It’s an event where business and technical experts will talk freely about how they’ve built IoT business models, applications, products, and services. The future of IoT is being built right now, will you be a part of it?&lt;/p&gt;

&lt;p&gt;Dates: October 11-12&lt;/p&gt;

&lt;p&gt;23. &lt;a href="http://www.mergeshow.com/"&gt;CMS Summit Orlando 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Crazy about content management? This is a content management system conference and expo that’s a great chance for you to learn about emerging product and network with like minded techies. If you’re a CTO in the CMS space, then this event is a must-attend.&lt;/p&gt;

&lt;p&gt;Dates: October 14-18&lt;/p&gt;

&lt;p&gt;24. &lt;a href="http://techweek.com/new-york/"&gt;TechWeek New York 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;TechWeek holds several conferences throughout the year that focuses on innovations in technology. At each conference, they partner with entrepreneurs and investors to bring you the latest advancements and news in technology.&lt;/p&gt;

&lt;p&gt;Dates: October 16-20&lt;/p&gt;

&lt;p&gt;25. &lt;a href="http://www.cybersecurity-chicago.com/"&gt;Cyber Security Chicago 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference offers insights for security decision makers about current best practices and the future of cyber security. If you want to learn from experts about how you can build stronger defense and quickly recover from attacks, then this is the conference for you.&lt;/p&gt;

&lt;p&gt;Date: October 18-19&lt;/p&gt;

&lt;p&gt;26. &lt;a href="https://events.bizzabo.com/203850"&gt;Constellation’s Connected Enterprise 2017&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This innovation summit is hosted by the research firm, Constellation Research. You’ll learn from technology visionaries, market leads, and see new product demos. Learn from the best and brightest in the technology space and where it’s headed into the future.&lt;/p&gt;

&lt;p&gt;Dates: October 25-27&lt;/p&gt;

&lt;p&gt;27. &lt;a href="https://theinnovationenterprise.com/summits/data-visualisation-summit-london-2017"&gt;Data Visualization Summit London 2017&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This summit brings together some of the world’s leaders in this industry. From programmers to experience front-end developers, this summit will help you learn how to both visualize and integrate data into your company.&lt;/p&gt;

&lt;p&gt;Dates: November 2-3&lt;/p&gt;

&lt;p&gt;28. &lt;a href="http://daremightythings.co/"&gt;Dare Mighty Things Chicago 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Dare Mighty Things will change the way you see the world, and was voted one of the “8 Top Tech Conferences You Can’t Miss”, by Inc.. Learn from tech leaders, entrepreneurs, and venture capitalists who share their stories on creating breakthrough innovations.&lt;/p&gt;

&lt;p&gt;Dates: November 3&lt;/p&gt;

&lt;p&gt;29. &lt;a href="https://websummit.com/"&gt;Web Summit Lisbon 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference began back in 2010 with the idea to connect the technology community with all industries. If you’re looking to open your mind and see how other industries are utilizing and contributing to the advancement of technology, then this is worth attending.&lt;/p&gt;

&lt;p&gt;Dates: November 7-9&lt;/p&gt;

&lt;p&gt;30. &lt;a href="https://datainsightsconference.com/"&gt;The Implementing Actionable Data Insights Conference - Drive Performance London 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;At this conference you’ll learn fresh and innovative approaches for capturing data insights and using them to make better business decisions, and drive performance. Collecting data isn’t enough, you need a thoughtful methodology for making that data actionable.&lt;/p&gt;

&lt;p&gt;Dates: November 14&lt;/p&gt;

&lt;p&gt;31. &lt;a href="http://www.greatbritishbusinessshow.co.uk/"&gt;The Business Show London 2017&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Business Show is a free exhibition that provides a wealth of business motivation and knowledge. This event features business owners from a variety of industries that centers around expanding your business.&lt;/p&gt;

&lt;p&gt;Dates: November 16-17&lt;/p&gt;

&lt;p&gt;32. &lt;a href="https://reinvent.awsevents.com/"&gt;AWS re:INVENT Las Vegas 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is the leading conference hosting by Amazon Web Services for the global cloud community. If you’re looking for ways you can utilize AWS effectively, then this learning-based conference is for you.&lt;/p&gt;

&lt;p&gt;Dates: November 27 - December 1&lt;/p&gt;

&lt;p&gt;33. &lt;a href="https://theinnovationenterprise.com/summits/mobile-innovation-summit-san-francisco-2017"&gt;Mobile Innovation Summit San Francisco 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This summit will focus on the developing mobile landscape and how to most effectively utilize it in your business. It offers strategies from the leaders of mobile and how they are using mobile within their existing companies.&lt;/p&gt;

&lt;p&gt;Dates: December 4-5&lt;/p&gt;

&lt;p&gt;34. &lt;a href="https://www.blackhat.com/eu-17/"&gt;Black Hat Europe 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference will provide you with the latest research, development and trends in information security. At this conference you’ll find a combination of research presentations and hands-on trainings.&lt;/p&gt;

&lt;p&gt;Dates: December 4-7&lt;/p&gt;

&lt;p&gt;35. &lt;a href="http://www.advocamp.com/"&gt;Advocamp San Francisco 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Your customer can be your biggest detractor or your biggest supporter. This conference focuses on the idea that the future belongs to companies who develop customer advocates. It seeks to teach you how to both develop and mobilize advocates.&lt;/p&gt;

&lt;p&gt;Dates: December 6-8&lt;/p&gt;

&lt;p&gt;36. &lt;a href="https://aiworld.com/"&gt;AI World 2017&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;AI World is the industry leading event on the current state of enterprise AI and machine learning. It’s goal is to help technology executives cut through the hype and learn to deploy these advanced technologies to build competitive advantage, create new business opportunities and more.&lt;/p&gt;

&lt;p&gt;Dates: December 11-13&lt;/p&gt;

&lt;p&gt;37. &lt;a href="https://theinnovationenterprise.com/summits/big-data-innovation-summit-las-vegas"&gt;Big Data Innovation Summer Las Vegas 2018&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As organizations change and continue to embrace technological advances, data becomes the key factor in how companies can gain a competitive advantage. This conference explores how companies can better embrace data and use it to push forward.&lt;/p&gt;

&lt;p&gt;Dates: January 24-25&lt;/p&gt;

&lt;p&gt;38. &lt;a href="http://namescon.com/"&gt;NamesCon Las Vegas 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Most companies today are built on the back of their domain names. This conference focuses on the explosive growth of new TLDs and the expansion of internet connectivity worldwide.&lt;/p&gt;

&lt;p&gt;Dates: January 29-31&lt;/p&gt;

&lt;p&gt;39. &lt;a href="http://www.developerweek.com/"&gt;Developer’s Week San Francisco 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference is San Francisco’s largest development conference. It includes mixers, workshops, drink-ups, and events across the city. It covers new technologies including HTML5, Node.js, Data Science, Full-Stack Javascript Development, and more.&lt;/p&gt;

&lt;p&gt;Dates: February 3-8&lt;/p&gt;

&lt;p&gt;40. &lt;a href="https://theinnovationenterprise.com/summits/big-data-analytics-innovation-summit-melbourne-2018"&gt;Big Data &amp;amp; Analytics Innovation Summer Melbourne 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This two-day event includes two days of educational presentations, panel sessions, interactive discussions, and networking. It covers topics including data analytics, data science, predictive analytics, machine learning and algorithms, and cloud computing.&lt;/p&gt;

&lt;p&gt;Dates: February 7-8&lt;/p&gt;

&lt;p&gt;41. &lt;a href="https://theinnovationenterprise.com/summits/predictive-analytics-innovation-summit-san-diego-2018"&gt;Innovation Summit San Diego 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This summit provides a platform for industry leaders to deliver case studies, expertise and unique insights into the power of being able to forecast the future with today’s data. Learn how practitioners deploy predictive modeling, and its impact on business.&lt;/p&gt;

&lt;p&gt;Dates: February 14-15&lt;/p&gt;

&lt;p&gt;42. &lt;a href="http://www.cmswire.com/events/conference/mobile-beat-las-vegas-2018/"&gt;Mobile Beat Las Vegas 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If your company is involved in the mobile landscape, then you’ll find this conference valuable. This conference dives deep into new and emerging mobile technologies and how they’re going to disrupt the mobile landscape.&lt;/p&gt;

&lt;p&gt;Dates: March 12-15&lt;/p&gt;

&lt;p&gt;43. &lt;a href="https://www-01.ibm.com/software/events/wow/"&gt;Think Las Vegas 2018&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This conference brings together the World of Watson and Interconnect to discuss the future of AI, cloud, data, IoT and security. AI is already causing stirs in all sorts of industries, so by the time 2018 rolls around, you’ll want to see what it’s up to, and this event is the way to do that.&lt;/p&gt;

&lt;p&gt;Dates: March 19-22&lt;/p&gt;

&lt;h3&gt;
  
  
  Check That Calendar
&lt;/h3&gt;

&lt;p&gt;If you want to keep growing as a CTO, check that calendar, clear a few dates with the boss, and purchase those tickets – because you’ve got some conferencing to do!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally posted &lt;a href="https://buttercms.com/blog/top-43-events-for-ctos-to-attend-in-20172018"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;


</description>
      <category>ctoevents</category>
      <category>conferences</category>
    </item>
    <item>
      <title>Top 10 Books Every CTO Should Read</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Wed, 16 Aug 2017 16:11:21 +0000</pubDate>
      <link>https://dev.to/rogerjin12/top-10-books-every-cto-should-read</link>
      <guid>https://dev.to/rogerjin12/top-10-books-every-cto-should-read</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a CTO in a rapidly evolving industry, the knowledge you had when you first entered the industry is no longer sufficient. In fact, the knowledge you had this time last year is already outdated.&lt;/p&gt;

&lt;p&gt;But when you have a long list of responsibilities, a team to lead, and deadlines to hit, keeping up with the latest technological trends and ideas can be difficult – although it is your job to do exactly at.&lt;/p&gt;

&lt;p&gt;Reading the right blogs and subscribing to the right newsletters will help, but those bite-sized nuggets of knowledge won’t keep you at the cutting edge of tech.&lt;/p&gt;

&lt;p&gt;Regularly attending conferences and networking events is one way to go, but that strategy isn’t friendly to your schedule. A book on the other hand, can be moulded around even the most crammed calendar. To help you get the most out of your reading time, we’ve hand picked ten books we think every CTO should read. Â &lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://www.amazon.com/dp/B002MUAJ2A/"&gt;Rework&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This book was written by Jason Fried and David Hansson of the legendary development company, 37 Signals. It’s very straightforward and down to earth, but it still offers hard-hitting advice on how to run a digital agency efficiently.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Rework&lt;/em&gt; exposes a lot of myths that are currently holding back your business and offers alternative approaches. And it’s not all theory and ideas, either. It’s based upon the practical advice they used to create and grow their own company.&lt;/p&gt;

&lt;p&gt;You won’t find any boring business plans, or team management exercises in this book. But instead innovative and practical approaches to getting work done and creating awesome products.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592"&gt;The Phoenix Project&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The Phoenix Project&lt;/em&gt; is a unique title in a few ways. It aims to educate you about DevOps processes in the form of a novel. This approach makes it a very engaging and interesting read, which can’t be said for a lot of other technical-oriented books.&lt;/p&gt;

&lt;p&gt;In this book, you’ll learn about the similarities between IT and manufacturing, and how taking a systems-thinking approach can greatly accelerate team productivity. If you’re looking for a light and valuable read that teaches you while entertaining you, then this is worth the read.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://www.amazon.com/dp/B00LMGLXTS/"&gt;Hooked&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Today’s digital marketplace can be summed up in one word; Noise. To catch some consumers, you’ll need to get them hooked on your brand. That’s what this book is all about.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hooked&lt;/em&gt; tackles the human psychology behind what makes some products stick and become part of our daily routine – while others simply fade away.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hooked&lt;/em&gt; isn’t filled with abstract theory, it’s a practical guide for startup founders to help you build better products.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"&gt;The Mythical Man Month&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This book has been tremendously influential across the software development space and has remained helpful to CTOs despite being first published over 30 years ago.&lt;/p&gt;

&lt;p&gt;Part of the reason it’s remained so timeless is due to the principle that guides the book; software changes, but people don’t. This book gives an extensive breakdown of the human element present in software engineering.&lt;/p&gt;

&lt;p&gt;Put simply, if you want to grow as both a CTO and a team leader, then you need to read this book.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://www.amazon.com/dp/B004J4XGN6/ref=dp-kindle-redirect?_encoding=UTF8&amp;amp;btkr=1"&gt;The Lean Startup&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;In this book, Eric Reis encourages companies to embrace the startup mentality, which seeks to use capital more efficiently, while maximizing human creativity. No matter the size of the company, or the scale of projects you manage, Reis says the startup mentality is the strongest one you can adopt.&lt;/p&gt;

&lt;p&gt;The book advocates leaving off outdated business principles to manage your team and encourages the reader to constantly test their vision, and become more flexible in line with the ever-evolving digital marketplace. This lean and flexible methodology extends into programming, too.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912"&gt;Continuous Delivery&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The art of releasing software is typically a painful and time-consuming process, but it doesn’t have to be. This book sets a new road in software delivery called continuous delivery.&lt;/p&gt;

&lt;p&gt;They offer a set of principles and tangible practices that’ll enable you to rapidly release, high quality, new functionalities to users, without the usual headache. You’ll learn how to get changes released in a matter of hours, or minutes, instead of the weeks or months it’ll take without this book.&lt;/p&gt;

&lt;p&gt;It’s not magic, but a way to automate building, testing, and deployment while enhancing collaboration between different team members. If you want to get software out the door faster, and bug-free, then you need this book by your side.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://www.amazon.com/Peopleware-Productive-Projects-Teams-3rd/dp/0321934113/"&gt;Peopleware: Productive Projects and Teams&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This book is dubbed a classic for good reason. It cuts to the crux of most issues that arise in software development, which is that most issues aren’t technical, they’re human.&lt;/p&gt;

&lt;p&gt;As software becomes an even more integral part of our daily lives, the focus on the human element of software development becomes even more important. Creating better software starts with building better teams.&lt;/p&gt;

&lt;p&gt;If you want to become a better leader and understand how to inspire, motivate, manage, while getting things done, then this book needs to be your bible.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. &lt;a href="https://www.amazon.com/dp/B00DY3KQRW/"&gt;Creating a Software Engineering Culture&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Yet another book on the power of creating and understanding your software development teams. This book offers a clear approach to improving the quality of your software development process and creating a culture around software engineering.&lt;/p&gt;

&lt;p&gt;Think of this book as a series of guidelines to help you become a more effective leader and help to produce better code at the same time. It doesn’t dive incredibly deep into each topic but instead provides enough to get you started. Pick an area of focus that your organization is lacking and dive in.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. &lt;a href="https://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/1430243147"&gt;Managing Humans: Biting and Humorous Tales of a Software Engineering Manager&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Managing Humans&lt;/em&gt; is an entertaining and thought-provoking book. It draws upon the author’s management experience at companies like Apple, Symantec, Netscape, and many others. There’s no other book on managing tech teams that are written in this style.&lt;/p&gt;

&lt;p&gt;You’ll learn from his stories and depth of experience about how to handle team conflict, manage different personalities, build in innovation, create a lasting engineering culture, and a lot more.&lt;/p&gt;

&lt;p&gt;This book belongs on your bookshelf and will have you referring back time and time again, even if it’s just for the wit and wisdom packed within the pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. &lt;a href="https://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758"&gt;Don’t Make Me Think! A Common Sense Approach to Web Usability&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The title of the book alone should pique the interest of CTOs everywhere.&lt;/p&gt;

&lt;p&gt;This book encourages the reader to get inside the mind of consumers to better understand web design. It’s basically a psychology book on how today’s users navigate and use the web.&lt;/p&gt;

&lt;p&gt;Â It’s not the most technical book on the list, but it will help you and your team deliver products that the end user will actually enjoy using.&lt;/p&gt;

&lt;h2&gt;
  
  
  Broadened Horizons
&lt;/h2&gt;

&lt;p&gt;Any of the ten books above will help you become a better CTO. However, be sure to mix these uber-relevant titles in with books that focus on things like workplace psychology and team leadership – you know, the kind of books that don’t necessarily help improve as a CTO, but will help you improve as a person and colleague.&lt;/p&gt;

&lt;p&gt;Can you recommend any books for CTOs? Share them with us in the comments section below!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally posted &lt;a href="https://buttercms.com/blog/top-10-books-every-cto-should-read"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cto</category>
      <category>books</category>
    </item>
    <item>
      <title>7 Traits of a Great CTO</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Mon, 14 Aug 2017 17:49:50 +0000</pubDate>
      <link>https://dev.to/rogerjin12/7-traits-of-a-great-cto</link>
      <guid>https://dev.to/rogerjin12/7-traits-of-a-great-cto</guid>
      <description>

&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A great CTO can be a critical driver behind a technology company’s success – whereas a bad CTO can lead to stalled projects, high turnover, and poor quality software.&lt;/p&gt;

&lt;p&gt;But what traits actually make up a great CTO? Generic characteristics like a strong work ethic have their place of course, but the role of a CTO is intricate, encompassing far more than just &lt;a href="https://buttercms.com/blog/three-ctos-answer-what-is-good-code"&gt;coding&lt;/a&gt; and &lt;a href="https://buttercms.com/blog/three-ctos-reveal-how-they-deal-with-deadlines"&gt;project management&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we’re taking a look at what what traits help make a CTOgreat at their job.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Technological Insight
&lt;/h2&gt;

&lt;p&gt;Ensuring quality across all software being writtenis a critical responsibility of a CTO. For that to happen, a good CTO should be able to work alongside his or her development team – because they know how to.&lt;/p&gt;

&lt;p&gt;Beyond knowing how to code though, a CTO should also have enough technological insight to recognize when a new solution, coding language, tool, or hardware device is worth exploring – and when they are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Decision Making
&lt;/h2&gt;

&lt;p&gt;Whether you’re deciding to migrate your tech stack, reorganize your development team, or prepare a presentation for potential investors, as a CTO, you’re going to be marking a lot of decisions, both on a long and short-term basis.&lt;/p&gt;

&lt;p&gt;When it comes to technological and business decisions, a great CTO should make moves based on evidence and experience. As for decisions pertaining to in-house affairs and office politics – well, those usually prove to be the most technical of all.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Team Management &amp;amp; Deadlines
&lt;/h2&gt;

&lt;p&gt;A CTO might make the big decisions, but they don’t (usually) work alone. Instead, they’ll have a passionate team behind them that cares just as much about the product as they do. That's the idea, anyway.&lt;/p&gt;

&lt;p&gt;With that in mind, part of being a great CTO is excellent team management. A strong CTO isn’t afraid to hire team members that bring new and sometimes unpopular ideas to the table.&lt;/p&gt;

&lt;p&gt;Beyond being able to cultivate and manage high performers, a stellar CTO will consistently be able to lead a team towards new and innovate software releases, &lt;a href="https://buttercms.com/blog/three-ctos-reveal-how-they-deal-with-deadlines"&gt;and on schedule, too&lt;/a&gt;. This requires stellar team management and communication skills that few possess.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Eloquence
&lt;/h2&gt;

&lt;p&gt;A CTO has the relatively unique job of keeping their finger on the pulse of technology – as well as keeping an eye on the reaction of the market to that technology.&lt;/p&gt;

&lt;p&gt;To do that job efficiently, and to make their work useful for the company, a CTO has to be eloquent enough to convey their findings to the rest of their team, their stakeholders and their peers – even the non-tech savvy ones.&lt;/p&gt;

&lt;p&gt;A great CTO will be able to quickly understand and explain complex technical topics to that wider audience, and will also have the communication skills to inspire and educate their team and their company’s clients or customers about the importance of the new technology in question.&lt;/p&gt;

&lt;p&gt;This is helped along by both a wide breadth and depth understanding of the technologies available, as well as the right communication skills to get the right messages across.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. An Eye for Design
&lt;/h2&gt;

&lt;p&gt;Sorry to break it to you, but a CTO needs to see beyond the code.&lt;/p&gt;

&lt;p&gt;It doesn’t matter how agile your development team gets, how fast your sites and apps load, or how well you’re making use of the latest technologies – there is no substitute for awesome design.&lt;/p&gt;

&lt;p&gt;The best CTOs understand that design of a computing infrastructure or of a product is a fundamental part of a brand’s success. They also have to do their best to work with the design demands of their peers and superiors – because if they want something to look and work innovatively, it’s the CTO’s job to try and make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Knowing When to Code (And When Not to Code)
&lt;/h2&gt;

&lt;p&gt;Although they should know how to, it’s true that not all CTO's code.&lt;/p&gt;

&lt;p&gt;But even if a CTO is a prolific developer within their own right, a good CTO knows when to get their hands dirty on a given project, and when to let their team members handle the nitty gritty Â stuff.&lt;/p&gt;

&lt;p&gt;The size of the development team will help decide the balance, but as previously mentioned, a CTO should have an eye on the bigger picture, ensuring quality and supporting his team from the sidelines, if you will.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Business Insight
&lt;/h2&gt;

&lt;p&gt;Remember when we mentioned the importance of technological insight to a CTO? Well, that trait won’t bear much fruit without business insight, too.&lt;/p&gt;

&lt;p&gt;Not every new technology is going to be the best fit for the company, and indeed, many fads come and go within the digital realm. A great CTO will be able to discern between meaningful changes in the market, and momentary blips. Â &lt;/p&gt;

&lt;p&gt;Once a good CTO can tell the difference, his business insight should come into play, helping him put together a plan of action that will not only impress stakeholders, but will also be ROI positive.&lt;/p&gt;

&lt;p&gt;Sure, it’s sometimes difficult to know when technologies are going to be a hit or a miss. But, the CTO needs to have a broad enough understanding to know what technologies are ready to help the company, and its customers. If there’s a disconnect between the CTO’s technological and business mind, problems will inevitably arise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Foundations of a Great CTO
&lt;/h2&gt;

&lt;p&gt;A good Chief Technology Officer does need the above traits in order to shine a light on their company’s technological future. They need to lead their team, know when to get their hands dirty, when to delegate, when to pivot into a new technological trend – and when not to.  &lt;/p&gt;

&lt;p&gt;No CTO is perfect of course, but if you’re trying to be the best CTO you can be, the list of traits below are a solid foundation to build upon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/7-traits-of-a-great-cto"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;


</description>
      <category>cto</category>
      <category>jobdescription</category>
    </item>
    <item>
      <title>Chief Technology Officer Job Description: What Does a CTO Do?</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Tue, 08 Aug 2017 14:07:53 +0000</pubDate>
      <link>https://dev.to/rogerjin12/chief-technology-officer-job-description-what-does-a-cto-do</link>
      <guid>https://dev.to/rogerjin12/chief-technology-officer-job-description-what-does-a-cto-do</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Many developers aspire to be in a CTO-role someday, but what does it actually take to be a CTO? It of course depends on the size and stage of a company and other factors like how the technology team is structured. In this article we dive into some common characteristics of the role and hear directly from CTO’s about what their jobs consist of.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTO Job Description
&lt;/h2&gt;

&lt;p&gt;While it’s true that a Chief Technology Officer may have to wear many different hats in their time (particularly at a startup), the role does have an official definition with which we can work from&lt;/p&gt;

&lt;p&gt;Academic Publishers &lt;a href="http://www.tandfonline.com/doi/abs/10.1080/08956308.2003.11671574"&gt;Taylor and Francis define a Chief Technology Officer’s role&lt;/a&gt; as follows:&lt;/p&gt;

&lt;p&gt;“An executive-level position in a company or other entity whose occupation is focused on scientific and technological issues within an organization.”&lt;/p&gt;

&lt;p&gt;Now, while that’s a digestible definition, let’s delve deeper into the true job description of a CTO.&lt;/p&gt;

&lt;h3&gt;
  
  
  The â€˜Chief’ Part
&lt;/h3&gt;

&lt;p&gt;First things first, the title of â€˜Chief’ holds great power – and you don’t need me to tell you that with great power, comes great responsibility.&lt;/p&gt;

&lt;p&gt;Here’s what what a CTO needs to do to put the Chief in Chief Technology Officer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Managing Roadmaps, Tasks &amp;amp; Deadlines:&lt;/strong&gt; The strategy and design that a CTO develops with his team often becomes little more than a huge to-do list. A good CTO will have the product and project management skills to attack that list.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Getting Your Hands Dirty:&lt;/strong&gt; A competent CTO rises to challenges and gets his or her hands dirty, proving that they can contribute as well as dish out orders. Speaking of which...&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Delegation:&lt;/strong&gt; As mentioned in the previous point, a CTO should be working on the frontlines – however, it still holds true that the only way all of that listed work will get done is if the people beneath the CTO pull their weight. To make sure that happens, a CTO needs to know when to hand something off to a colleague.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the topic of delegation in particular, we spoke to &lt;a href="http://convertful.com/"&gt;Convertful&lt;/a&gt; CTO Ruslan Sukhar, who gave us his insights:&lt;/p&gt;

&lt;p&gt;“Delegation [is definitely part of the job], and it’s a personal challenge for me. For example, I can spend a whole weekend just making sure some specific UX is seamless, although that’s not the most valuable thing I could spend my time on.”&lt;/p&gt;

&lt;h3&gt;
  
  
  The â€˜Technology’ Part
&lt;/h3&gt;

&lt;p&gt;As you might have guessed, a CTO’s role revolves heavily around technology. Here’s how.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Technology Strategy:&lt;/strong&gt; Contemporary companies work in a digitally volatile space, and it’s the CTO’s job to ensure that the company has the best technology for the job(s) at hand. That includes recommending the right CMS to handle content distribution across existing and emerging channels.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Business Strategy:&lt;/strong&gt; A CTO needs to have a voice in the company strategy – especially since most (if not all) business strategies today rely heavily upon technology to exist, reach consumers and scale. More specifically, it’s upon the CTO to think up ways for his CEO and stakeholders to fulfil their goals. If they can do that well, the CTO ends up at the forefront of innovative projects.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Evangelism:&lt;/strong&gt; Finally, the CTO is also a public face of technology for the company. They need to tend to the internal wellbeing of the company’s tech and be the driving force behind the brand’s technical prowess and insight. The CTO needs to represent that prowess in public appearances, in front of the press, and at conferences.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once again we spoke to Convertful’s CTO Ruslan Sukhar about this side of the story:&lt;/p&gt;

&lt;p&gt;“I believe that CTO should be involved in business development in a technical way. It means CTO should always think not only about how to develop a certain product but also about how certain technologies can gain additional profits, and/or reduce costs.”&lt;/p&gt;

&lt;h2&gt;
  
  
  A Day in the Life of a CTO
&lt;/h2&gt;

&lt;p&gt;To get better acquainted with the business life of a Chief Technology Officer, we have looked to &lt;a href="http://www.startuplessonslearned.com/2008/09/what-does-startup-cto-actually-do.html"&gt;the words of Eric Ries&lt;/a&gt;, the author of The Lean Startup and an ex-CTO of over four years: Â &lt;/p&gt;

&lt;p&gt;“The CTO's primary job is to make sure the company's technology strategy serves its business strategy,” He said.&lt;/p&gt;

&lt;p&gt;Reis went on to highlight that a good CTO should also give their company options when their business strategy demands it:&lt;/p&gt;

&lt;p&gt;“A mark of a good CTO is that they never say "that's impossible" or "we'd never do that." Instead, they find options and can communicate them to everyone in the company. If the CEO wants to completely change the product in order to serve a new customer segment, you need someone in the room who can digest the needs of the new (proposed) business, and lay out the costs of each possible approach.”&lt;/p&gt;

&lt;p&gt;Another CTO, Karl Schulmeisters of ClearRoadmap, also &lt;a href="https://cofounderslab.com/discuss/what-does-a-startup-cto-do"&gt;shone light on the many different hats&lt;/a&gt; a startup Chief Technology Officer has to wear:&lt;/p&gt;

&lt;p&gt;“As a startup CTO I wore the following hats; Enterprise architect, SCRUM master, developer, lead quality assurer, social media manager, blogger, [and so forth].”&lt;/p&gt;

&lt;p&gt;And Schulmeisters doesn’t seem to be alone in having to swap hats on a daily basis. John Petrone, CTO at LaunchPad Central, concurred:&lt;/p&gt;

&lt;p&gt;“I'd say that a startup CTO needs to be something of a jack of all trades when it comes to technology issues. In the last week at my current early stage startup I've; phone screened and interviewed engineering candidates, researched a variety of technology directions, set up a new laptop for someone, checked some code, [and more].”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complex Role of a CTO
&lt;/h2&gt;

&lt;p&gt;The role of a Chief Technology Officer is complex, and every CTO will have his or her own unique traits to bring to the table. But one thing is for sure, a CTO needs to have his or her finger on the technological pulse – always aware of new trends and the technologies behind them.&lt;/p&gt;

&lt;p&gt;A great CTO should be ready to delegate, while also being comfortable enough to work on the frontline, coding alongside their fellow developers. Furthermore, they will be required to be even more flexible if they’re working in a startup.&lt;/p&gt;

&lt;p&gt;If you’re still looking for more insights into the life of a Chief Technology Officer, check out our discussions with selected CTOs revolving around the topics of &lt;a href="https://buttercms.com/blog/three-ctos-answer-what-is-good-code"&gt;writing good code&lt;/a&gt; and &lt;a href="https://buttercms.com/blog/three-ctos-reveal-how-they-deal-with-deadlines"&gt;managing deadlines at a CTO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How would you describe yourself as a CTO? Are you a great architect, evangelist, interface designer, debugger, or a helpful Jack of all trades? Let us know in the comments section below!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/chief-technology-officer-job-description-what-does-a-cto-do"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cto</category>
      <category>career</category>
      <category>growth</category>
    </item>
    <item>
      <title>Options for adding a blog to a PHP app</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Fri, 04 Aug 2017 14:25:29 +0000</pubDate>
      <link>https://dev.to/rogerjin12/options-for-adding-a-blog-to-a-php-app</link>
      <guid>https://dev.to/rogerjin12/options-for-adding-a-blog-to-a-php-app</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a situation you as a developer may face numerous times in your career. A client, friend, boss or who ever comes to you asking for add a blog to their existing website. They have a few requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The blog must allow categories, tags, image uploads and other common blogging functionality&lt;/li&gt;
&lt;li&gt;  It must be easy enough for anyone in their organization to know how to use it and post new content&lt;/li&gt;
&lt;li&gt;  The blog must live at &lt;a href="http://www.oursite.com/blog"&gt;www.oursite.com/blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  The blog must match the look and feel of their current site&lt;/li&gt;
&lt;li&gt;  Their current site is built using PHP and they’d like to use the same technology&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given this scenario, there are a number of routes you could take. However, it’s important that you balance ease of use with the time required to get this up and operating. After all, this project has come with a deadline and budget as most do.&lt;/p&gt;

&lt;p&gt;This particular client also happens to be fairly non-technical, so the system must be robust and require very little maintenance. Once it is set up, they want to be as self sufficient as possible. Let’s explore some options!&lt;/p&gt;

&lt;p&gt;WordPress&lt;/p&gt;

&lt;p&gt;This is often times the first system you might think of when it comes to adding a blog to a site. It has a plethora of features and plugins, it’s used and understood widely, and it’s free. It’s even PHP which would be another plus for the client! However, there are still quite a few concerns here.&lt;/p&gt;

&lt;p&gt;The first concern is that deploying a WordPress install requires ongoing maintenance and security patches. Given the non-technical nature of the client, this isn’t ideal. Not only must the client then keep up to date with various updates, they must also handle any issues that arise from updating their install. The first time anything goes wrong with this, they’re going to come back to you asking you to fix it.&lt;/p&gt;

&lt;p&gt;Choosing this route would also necessitate building and styling a theme that matches the current look and feel of the client’s site. This means that whenever the client updates their existing site you also need to spend time updating this separate site. This is an extra annoyance for both you and the client. Furthermore you now not only need to worry about the backend aspect of the code, you now also need to handle the frontend design and development as well.&lt;/p&gt;

&lt;p&gt;In summary, WordPress certainly offers any and all functionality necessary for a blog. However, it also comes with some baggage of it’s own to be wary of making this option not so cut and dry. The extra features and abilities in this case not only add extra complexity overall, they aren’t needed by our client and will most likely only lead to additional issues to solve.&lt;/p&gt;

&lt;p&gt;Roll Your Own&lt;/p&gt;

&lt;p&gt;The first obvious downside to this approach is time. While this would certainly allow for a lot of flexibility in how the blog operates, it would also require designing and maintaining an interface easy enough for everyone in the client’s organization to use. Now not only do you have to worry about building a blog engine, you also need to worry about building an interface for a CMS to manage it.&lt;/p&gt;

&lt;p&gt;Furthermore, you’re going to have to determine how and where to store media. If the client doesn’t already have a CDN to handle this, you now need to set up and explain to them how to manage it. If they do have a CDN, you need to spend time getting access to and understanding where within their CDN is best to store your content.&lt;/p&gt;

&lt;p&gt;Why re-invent the wheel when there are already a plethora of open source options for a blogging engine?&lt;/p&gt;

&lt;h3&gt;
  
  
  Use An Open Source Project
&lt;/h3&gt;

&lt;p&gt;Making use of an existing project is usually a great idea that saves a lot of time on projects like this. However, while this solution seems obvious on the surface given that, there are also other concerns.&lt;/p&gt;

&lt;p&gt;Often times configuring and installing these systems is also relatively straight forward for a developer to handle. However, even using open source projects requires maintenance. As time goes on, dependencies of these projects may become out of date or insecure. They could also be incompatible with current versions of software you or your client are already using.&lt;/p&gt;

&lt;p&gt;If the client asks for an update to their blog that your chosen library doesn’t support, you may then also need to spend time figuring out how the code works to add to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  ButterCMS
&lt;/h3&gt;

&lt;p&gt;With a solution like ButterCMS, many of the complications described earlier are taken care of for you. No configuration of servers is necessary, no upgrades are necessary, and an interface already exists. All the complexity of setting up any infrastructure for your blog is removed.&lt;/p&gt;

&lt;p&gt;Instead, you can spend your time much more productively. ButterCMS can be added to your existing project via a simple Composer package. Then, simply start perusing through the expansive documentation to get your blog integrated with the site.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require buttercms/buttercms-php:2.2.0 (or current version)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The design of the blog can make use of already existing styles and assets that the client’s site is currently using. When their main site is updated, their blog also gets updated with the same codebase.&lt;/p&gt;

&lt;p&gt;Pulling in the content for the blog can be done with only a couple of lines of code. Below is an example of how this would be done with Silex, a PHP micro-framework based on Symfony components.&lt;/p&gt;

&lt;p&gt;First, when setting up your app you’d configure any routes the blog will be using as well as an instance of the ButterCMS client.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use ButterCMS\ButterCMS;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then in the controller action tied to your routes, getting the blog posts can be done with a very small amount of code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace MyBlog;

use Symfony\Component\HttpFoundation\Request;
use Silex\Application;

class BlogController {  
 public function listAction(Request $request, Application $app, $category) {  
 $client = $app['butter_cms']);  
 $posts = $client-&amp;gt;fetchPosts([  
 'category_slug' =&amp;gt; $category,  
 'page' =&amp;gt; $request-&amp;gt;query-&amp;gt;get('page'),  
 'page_size' =&amp;gt; 10,  
 ]));  

 return $app['twig']-&amp;gt;render('list.html', ['posts' =&amp;gt; $posts]);  
 }  
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, in your view you’d simply loop through the posts to render them on the page using Twig.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% for post in posts %}
 &amp;lt;h2&amp;gt;{{ post.title }}&amp;lt;/h2&amp;gt;
 {{ post.body }}
{% endfor %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In essentially five or less lines of code you now have your entire blog up and running. All of the features required by your client are already built in for you. Pagination, category support, fast responses, everything your client asked for already exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Developers often face the situation of build it versus buy it when it comes to software. Either you can purchase access to a library of code for you or you can use something off of the shelf for free. Each has pros and cons. With a solution like ButterCMS and the benefits it provides are often times well worth the expense in time and complexity savings, especially in the long term.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/options-for-adding-a-blog-to-php-app"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>blog</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Three CTOs Share How They Manage Deadlines</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Tue, 01 Aug 2017 20:41:26 +0000</pubDate>
      <link>https://dev.to/rogerjin12/three-ctos-share-how-they-manage-deadlines</link>
      <guid>https://dev.to/rogerjin12/three-ctos-share-how-they-manage-deadlines</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS" rel="noopener noreferrer"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How many meetings have you had about deadlines where at least one engineerÂ scoffed atÂ the concept?Â &lt;/p&gt;

&lt;p&gt;DeadlinesÂ for software are difficult. But as a CTO, you'll likelyÂ face a situation where you must answer the terrifyingÂ question "when will this be done?" or even worse, be given a hard deadline your team must hit no matter how unknown the scope or external factors of your project are.&lt;/p&gt;

&lt;p&gt;In this blog post, we ask three CTOsÂ for their tipsÂ on managing deadlines. Here's what they said:&lt;/p&gt;

&lt;h2&gt;
  
  
  Jerry Hill, CTO at AuthenticÂ (&lt;a href="http://AuthenticDgtl" rel="noopener noreferrer"&gt;@AuthenticDgtl&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FRJ4fVEMQSXSRUjAXfR3G" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FRJ4fVEMQSXSRUjAXfR3G" alt="Jerry Hill, Authentic CTO"&gt;&lt;/a&gt;&lt;/p&gt;
Jerry Hill, Authentic CTO



&lt;p&gt;&lt;em&gt;Jerry Hill has been working with software since 1996, after graduating from the University of Southern Missisippi. Today, he oversees the technical operations at &lt;a href="https://beauthentic.digital/" rel="noopener noreferrer"&gt;Authentic&lt;/a&gt;, a full-service digital marketing agency that works with an array of Fortune 500 companies.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“The most important part to meeting deadlines is having great communication with the client so that they’re able to grasp and understand processes.&lt;/p&gt;

&lt;p&gt;One of the ways I like to facilitate great communication is by understanding estimates and using them appropriately. When a project is initially scoped out, estimates are used to create an understanding of how the project will be executed. Estimates are fundamentally imprecise and even in the most rigorous of processes will prove to be inaccurate.&lt;/p&gt;

&lt;p&gt;By having great communication with the client throughout the project it can help you outline where reality isn't lining up with expectations and make corrections to ensure goals are met. Estimates are helpful to mapping out the structure and help our team have a clear view into each project while looking ahead to see when one piece may derail or impact the schedule. With great communication, we’re able to correct course and create a solution as it happens.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Alex Malureanu, Co-Founder and CTO at Ascendia (&lt;a href="https://twitter.com/alexmalureanu?lang=en-gb" rel="noopener noreferrer"&gt;@AlexMalureanu&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F0aXAkoXQFq0WiCAAqS8m" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F0aXAkoXQFq0WiCAAqS8m" alt="Alex Malureanu, CTO at Ascendia."&gt;&lt;/a&gt;&lt;/p&gt;
Alex Malureanu,  
CTO at Ascendia



&lt;p&gt;&lt;em&gt;Since Co-Founding &lt;a href="http://www.ascendia.ro" rel="noopener noreferrer"&gt;Acendia&lt;/a&gt; over a decade ago, an eLearning platform, Alex Malureanu’s main role has to develop new eLearning and mLearning products for broad audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“When me and my team are working on elearning projects, I have to be the one responsible for making sure that everyone is aware that a deadline is approaching.&lt;/p&gt;

&lt;p&gt;If there are problems along the way, one strategy is to call an emergency meeting and discuss the major failings. That meeting might go something like:&lt;/p&gt;

&lt;p&gt;â€˜What we are doing now is not working. How can we do it faster to complete the project on time?’&lt;/p&gt;

&lt;p&gt;I also feel that a team should think long and hard about committing to a deadline from the very beginning, if it seems unreasonable. Drafting in help from other departments may help, but you also need to convey the deadline (and the strictness of it) to each member of your team so they understand that the team cannot deliver without his active participation and hard work. Communication between team leader and team members is key in those situations.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Lauri Tunnela, CTO and Co-Founder at Paranotek (&lt;a href="https://twitter.com/WorldFlix" rel="noopener noreferrer"&gt;@WorldFlix&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F6yRV1wEQcqIagfkLXeIw" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F6yRV1wEQcqIagfkLXeIw"&gt;&lt;/a&gt;&lt;/p&gt;
Lauri Tunnela, CTO at Paranotek



&lt;p&gt;&lt;em&gt;Lauri Tunnela has over 10 years of IT experience, and now works on developing &lt;a href="https://www.paranotek.com/" rel="noopener noreferrer"&gt;Paranotek&lt;/a&gt;, the cyber security and privacy software.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“This is truly one of the biggest challenges in the IT industry. Especially when something completely new is being developed, like a new device hitting the consumer market, for example.&lt;/p&gt;

&lt;p&gt;Something that none of the developers have done before or have good knowledge of.&lt;/p&gt;

&lt;p&gt;In this kind of case planning and designing should be done very carefully. Also by following agile software development framework like Scrum, progress of a project stays stable and problems can be tackled in good time. That’s the idea, anyway!”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art of Communication
&lt;/h2&gt;

&lt;p&gt;Communication sounds easy – but it’s where CTOs (and perhaps people in general) so often fall short.&lt;/p&gt;

&lt;p&gt;Sometimes we assume that others know what’s running through our minds, and we assume that they understand the deadline and its implications, all without us saying a word. The reality is, communication at the start of a project, as well as regular meetings with the client and your team throughout, is integral to meeting those deadlines.&lt;/p&gt;

&lt;p&gt;To complement the expert advice from the CTOs above, here are our three top tips for hitting deadlines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Communication:&lt;/strong&gt; As mentioned, stay in close contact with your team from start to finish, on both an individual and team level.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Planning:&lt;/strong&gt; Set out a clear plan with micro-deadlines throughout your project to stay on track and measure progress.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Accountability:&lt;/strong&gt; Increase accountability by making deadlines public or by raising the stakes in some shape or form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, I feel I’d be remiss to if I didn’t mention this highly relevant Bill Gates quote:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In other words, be careful about blindly throwing technology – like those smart home assistants and to-do list apps – at your productivity issues. If the fundamentals like communication aren’t in place, those technologies will just slow you and your team down even more.&lt;/p&gt;

&lt;p&gt;If you benefited from the expert insights from above, check out what they had to say about &lt;a href="https://buttercms.com/blog/three-ctos-answer-what-is-good-code" rel="noopener noreferrer"&gt;writing good code&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;How do you handle your deadlines as a CTO or developer? Let us know in the comments section below!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/three-ctos-reveal-how-they-deal-with-deadlines" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cto</category>
      <category>deadlines</category>
    </item>
    <item>
      <title>Three CTOs Answer: What Is Good Code?</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Mon, 24 Jul 2017 22:08:13 +0000</pubDate>
      <link>https://dev.to/rogerjin12/three-ctos-answer-what-is-good-code</link>
      <guid>https://dev.to/rogerjin12/three-ctos-answer-what-is-good-code</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS" rel="noopener noreferrer"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every day, millions of developers write code andÂ labor throughÂ code reviewsÂ in hopes of contributing good code to the software they're working on.&lt;/p&gt;

&lt;p&gt;But whatÂ is "good code"?&lt;/p&gt;

&lt;p&gt;With new frameworks and programming languages being releasedÂ every month, it's easy to forgetÂ about the fundamentalÂ qualities that make for "good code". Sometimes itÂ can just boil down to personal preference or documentedÂ conventions, but what else?&lt;/p&gt;

&lt;p&gt;We thought it'd be interesting to ask some CTO's how they define good code:&lt;/p&gt;

&lt;p&gt;Jerry Hill, CTO at Authentic (&lt;a href="https://twitter.com/authenticdgtl?lang=en" rel="noopener noreferrer"&gt;@AuthenticDgtl&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FRJ4fVEMQSXSRUjAXfR3G" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FRJ4fVEMQSXSRUjAXfR3G" alt="Jerry Hill, Authentic CTO"&gt;&lt;/a&gt;&lt;/p&gt;
Jerry Hill, Authentic CTO



&lt;p&gt;&lt;em&gt;Jerry Hill has been working with software since 1996, after graduating from the University of Southern Missisippi. Today, he oversees the technical operations at &lt;a href="https://beauthentic.digital/" rel="noopener noreferrer"&gt;&lt;em&gt;Authentic&lt;/em&gt;&lt;/a&gt;, a full-service digital marketing agency that works with an array of Fortune 500 companies.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“There’s not one thing that I can pinpoint that defines â€˜Good Code’. In fact, I like to think there are five factors that should always be considered when building code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Whether you’re building a product or setting up an implementation of a product, it’s critical to understand what the code will be used for and what type of development is necessary. Application development and implementation development are very different, so it’s important to understand the desired result.&lt;/li&gt;
&lt;li&gt; You always want to make sure you avoid doing things that can create future upgrade problems or that will impact future cycle changes.&lt;/li&gt;
&lt;li&gt; Be pragmatic in everything that you do. Of the five factors, this is probably the most important. I always try to grasp a full understanding of the requirements and priorities outlined by the client to make sure that the code we build reflects the highest valued pieces.&lt;/li&gt;
&lt;li&gt; The code should read like real language. Development should always be writing code with the people in mind that will be reading it after them. So, it’s important to use strategies where you can reference variables as nouns and methods as verbs. This helps cut down on needing tons of comments and complexity in management.&lt;/li&gt;
&lt;li&gt; Follow through. The code must be well tested to ensure that it can stand the test of time.”&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Alex Malureanu, Co-Founder and CTO at AscendiaÂ (&lt;a href="https://twitter.com/alexmalureanu?lang=en-gb" rel="noopener noreferrer"&gt;@AlexMalureanu&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F0aXAkoXQFq0WiCAAqS8m" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F0aXAkoXQFq0WiCAAqS8m" alt="Alex Malureanu, Ascendia CTO"&gt;&lt;/a&gt;&lt;/p&gt;
CaAlex Malureanu,  
Ascendia CTOption



&lt;p&gt;&lt;em&gt;Since Co-Founding &lt;a href="http://www.ascendia.ro" rel="noopener noreferrer"&gt;&lt;em&gt;Acendia&lt;/em&gt;&lt;/a&gt; over a decade ago, an eLearning platform, Alex Malureanu’s main role has to develop new eLearning and mLearning products for broad audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“Good code is not only about getting the task done. It’s about writing something that permits easy modification later on. After all, in today's world, we need to modify code as much as we need to write it.&lt;/p&gt;

&lt;p&gt;That's why, for our team, one of the most important traits of "good code" is readability. Even if it's not using the most elegant approach or it's buggy, the fact that you can easily read it and understand the approach of the developer makes it easier to modify, build open and delete where necessary. Â &lt;/p&gt;

&lt;p&gt;With readable code, you can find faster a better approach or bugs, improve it more easily and make it more elegant. Writing readable code will also improve other important aspects of it: speed for the end user, reviewability, low error rates and so forth.&lt;/p&gt;

&lt;p&gt;It is not a time consuming task and it will payback when you will read it only once to understand it, rather than reading multiple times bad code.&lt;/p&gt;

&lt;p&gt;Good code should also explain itself to anybody trying to read it, and this can usually be done by sufficient naming, structure, directionality,Â and so forth.&lt;/p&gt;

&lt;p&gt;Bad code, on the other hand, always has signs of duplication or is superfluous in nature, making it difficult (and annoying) to read.&lt;/p&gt;

&lt;p&gt;Alas, good code is not always void of redundancy or confusion, but it should at least keep such chaos to a minimum.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Lauri Tunnela, CTO and Co-Founder at Paranotek (&lt;a href="https://twitter.com/WorldFlix" rel="noopener noreferrer"&gt;@WorldFlix&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F6yRV1wEQcqIagfkLXeIw" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2F6yRV1wEQcqIagfkLXeIw" alt="Lauri Tunnela, PAranotek CTO"&gt;&lt;/a&gt;&lt;/p&gt;
Lauri Tunnela, Paranotek CTO



&lt;p&gt;&lt;em&gt;Lauri Tunnela has over 10 years of IT experience, and now works on developing &lt;a href="https://www.paranotek.com/" rel="noopener noreferrer"&gt;&lt;em&gt;Paranotek&lt;/em&gt;&lt;/a&gt;, the cyber security and privacy software.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“First of all, I always recommend following the coding standards and conventions of whatever programming language is being used. This may sound like obvious advice, but many developers go wrong here.&lt;/p&gt;

&lt;p&gt;By following the the pre-set standards, code will stay clean and readable, making it easy for anyone to read it or produce completely new code on top of it. If you start to deviate from those coding standards, you make life difficult for anybody collaborating with you.&lt;/p&gt;

&lt;p&gt;Most of the IDEs support code linters which will actually tell a programmer if they are not following the standards specific to a language being used. Also, some IDEs even automatically reformat code in case it is badly formatted. I’ve found those tools to be very helpful, but I always recommend that developers should try their best to learn from those corrections, instead of just relying on them totally.&lt;/p&gt;

&lt;p&gt;Secondly, when coding standards and conventions are being followed, it is very important that everyone in a project or company follows suit. The last thing you want is everybody coding in a slightly different way.&lt;/p&gt;

&lt;p&gt;Thirdly, even if everyone is following the same standards and conventions, this does not guarantee the quality of the code. Before any coding takes place on a major project, the developers should come together to actually determine what is it that is being coded. After that has been determined, the next thing is to plan the fastest (and most creative) way to produce the actual piece of code. After a plan is made, programming work can begin with everybody on the same page, so to speak.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What we've learned
&lt;/h2&gt;

&lt;p&gt;Code should be written for humans, not just for computers.&lt;/p&gt;

&lt;p&gt;What’s your definition of good code? Let us know in the comments section below.&lt;/p&gt;

&lt;p&gt;Â And if you liked these expert insights, check outÂ our article about &lt;a href="https://buttercms.com/blog/three-ctos-reveal-how-they-deal-with-deadlines" rel="noopener noreferrer"&gt;managing deadlines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/three-ctos-answer-what-is-good-code" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cto</category>
      <category>coding</category>
      <category>goodcode</category>
    </item>
    <item>
      <title>5 Benefits of Immutable Objects Worth Considering for Your Next Project</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Mon, 17 Jul 2017 21:35:35 +0000</pubDate>
      <link>https://dev.to/rogerjin12/5-benefits-of-immutable-objects-worth-considering-for-your-next-project</link>
      <guid>https://dev.to/rogerjin12/5-benefits-of-immutable-objects-worth-considering-for-your-next-project</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When first learning object oriented programming (OOP), you typically create a very basic object and implement getters and setters. From that point forward, objects are this magical world of malleable data. However, you’d be surprised to find that sometimes removing the ability to alter the data in an object can lead to more straightforward and easier to understand code. This is the case with immutable objects.&lt;/p&gt;

&lt;p&gt;In programming, an immutable object is an object whose state cannot be modified after it is created. While at first this may not seem very useful as often times the getters and setters are the first functions created for an object, there are many clear benefits to immutable objects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thread safety
&lt;/h3&gt;

&lt;p&gt;Given that by definition an immutable object cannot be changed, you will not have any synchronization issues when using them. No matter which thread is accessing the version of an object, it is guaranteed to have the same state it originally had. If one thread needs a new version or altered version of that object, it must create a new one therefore any other threads will still have the original object. This leads to simpler, more thread safe code.&lt;/p&gt;

&lt;p&gt;PHP specifically does not support threads out of the box, so this benefit isn’t as immediately obvious when using that language.&lt;/p&gt;

&lt;h3&gt;
  
  
  No invalid state
&lt;/h3&gt;

&lt;p&gt;Once you are given an immutable object and verify its state, you know it will always remain safe. No other thread or background process in your program will be able to change that object without your direct knowledge. Furthermore, all of the data needed to have a complete object should be provided. One situation in which this may be extremely useful it programs that need to have high security. For instance, if given an object with a filename to write to you know nothing can change that location on you.&lt;/p&gt;

&lt;p&gt;For example, the code below outlines how constructing an immutable object may look. Since the &lt;code&gt;SimplePerson&lt;/code&gt; class requires all of it’s data in the constructor, we can be sure all the necessary data to have a valid object will always be present. If instead we had used setters for this data, there is no guarantee that a function like &lt;code&gt;setAge($age)&lt;/code&gt; would have been called by the time we received the object.&lt;/p&gt;

&lt;pre&gt;create(new SimplePerson(â€˜Joe’, 42));&lt;/pre&gt;

&lt;h3&gt;
  
  
  Better encapsulation
&lt;/h3&gt;

&lt;p&gt;When passing immutable objects around your code base, you can better encapsulate your methods. Since you know the object won’t change, anytime you pass this object to another method you can be positive that doing so will not alter the original state of that object in the calling code.&lt;/p&gt;

&lt;p&gt;This also means these objects can always be passed by reference, and there is no need to have to worry about solutions like &lt;a href="http://en.wikipedia.org/wiki/Defensive_copy"&gt;defensive copying&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Furthermore, debugging will be easier when any issues arise. You can be certain that the state the object is given to you in doesn’t change and therefore more easily track down where bugs started from.&lt;/p&gt;

&lt;p&gt;The code below helps outline this benefit. In this code, both auto body shops we have created will have a Mercedes car associated with it since our object was not immutable. This was not the intended result, it was simple a bad side effect of using mutable objects.&lt;/p&gt;

&lt;pre&gt;setMake(â€˜BMW’);  
$autoShopOne = new AutoBodyShop($car);  
$car-&amp;gt;setMake(â€˜Mercedes’);  
$autoShopTwo = new AutoBodyShop($car);&lt;/pre&gt;

&lt;h3&gt;
  
  
  Simpler to test
&lt;/h3&gt;

&lt;p&gt;Going hand in hand with better encapsulation is code that is simpler to test. The benefits of testable code are obvious and lead to a more robust and error free code base. When your code is designed in a way that lead to less side effects, there are less confusing code paths to track down.&lt;/p&gt;

&lt;h3&gt;
  
  
  More readable and maintainable code
&lt;/h3&gt;

&lt;p&gt;Any piece of code working against an immutable object does not need to be concerned with affecting other areas of your code using that object. This means there are less intermingled and moving parts in your code. Therefore, your code will be cleaner and easier to understand.&lt;/p&gt;

&lt;p&gt;In conclusion, making use of immutability has clear benefits. If done correctly it can lead to more understandable and testable code which are large wins in any codebase. Depending on the language you are using these benefits may be larger than others. In multi-threaded programs for instance immutability will leave much less room for confusion and side effects in your code. However, regardless of the language you’re sure to get some advantages from this functionality.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/5-things-you-should-know-about-immutable-objects"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>immutability</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Wedding Together added a blog to their Django app in 5 minutes</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Thu, 13 Jul 2017 13:30:08 +0000</pubDate>
      <link>https://dev.to/rogerjin12/how-wedding-together-added-a-blog-to-their-django-app-in-5-minutes</link>
      <guid>https://dev.to/rogerjin12/how-wedding-together-added-a-blog-to-their-django-app-in-5-minutes</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS" rel="noopener noreferrer"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Problem
&lt;/h2&gt;

&lt;p&gt;We’re python developers and we want to add a blog to &lt;a href="https://weddingtogether.co" rel="noopener noreferrer"&gt;Wedding Together&lt;/a&gt;. Wedding Together is a mobile app that allows wedding guests to share photos they take at weddings. Adding a blog to a website is a problem as old as the internet. If we find ourselves reinventing the wheel, we’re probably doing it wrong. I could discuss building our own blogging system from scratch, but there are already plenty of articles on how to do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  We don’t want to worry about SEO. It shouldÂ come built-in.&lt;/li&gt;
&lt;li&gt;  We want to put whatever code we pull from GitHub to live at weddingtogether.co/blog without any NGINX/Apache witchcraft.&lt;/li&gt;
&lt;li&gt;  We don’t want to be editing HTML files or writing code every time a content change is made.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One requirement makes a clear separation between all the paths we can take. &lt;strong&gt;We want to protect and improve our development processes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If we don’t want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  a separate set of SASS stylesheets just for this blog.&lt;/li&gt;
&lt;li&gt;  to spend time managing security updates.&lt;/li&gt;
&lt;li&gt;  to mess with our current configuration.&lt;/li&gt;
&lt;li&gt;  to role our own solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our option is to pick a managed solution. We’ll go over those second. If we’re ok with someÂ of those things, then we have two self-managed options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Options
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Self Managed
&lt;/h3&gt;

&lt;p&gt;The two most popular python web frameworks are &lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;Django&lt;/a&gt; and &lt;a href="http://flask.pocoo.org/" rel="noopener noreferrer"&gt;Flask&lt;/a&gt;. Wedding Together’s backend is built with Django, so we’ll start there. A few Google searches later we find &lt;a href="http://mezzanine.jupo.org/" rel="noopener noreferrer"&gt;Mezzanine&lt;/a&gt; to be the most active Django blog project. If the best option involves the downside of creating an additional application to take care of, we might as well look up options in Flask. The two most used options are &lt;a href="https://github.com/dmaslov/flask-blog" rel="noopener noreferrer"&gt;flask-blog&lt;/a&gt; and &lt;a href="https://github.com/gouthambs/Flask-Blogging" rel="noopener noreferrer"&gt;Flask-Blogging&lt;/a&gt;. flask-blog hasn’t been updated in 3 years. Flask-Blogging is our “Mezzanine level” blog option but in Flask. Both Mezzanine and Flask-Blogging have the following pros and cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pros:

&lt;ul&gt;
&lt;li&gt;  Has all the bells and whistles out of the box. We don’t want to deal with things like SEO and meta what-not.&lt;/li&gt;
&lt;li&gt;  Hackable if we want to make modifications&lt;/li&gt;
&lt;li&gt;  Simple non-developer interface for making blog posts&lt;/li&gt;
&lt;li&gt;  “Free” (explained below)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Cons

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Requires us to manage and maintain another application&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Depending on how your infrastructure is setup, adding another application could be as simple as pip installing on a server or as difficult as adding another machine to your already growing architecture.&lt;/p&gt;

&lt;p&gt;Most web/software companies have one resource that they’ll never get enough of, developer time. Mezzanine and Flask-Blogging are “free” if you don’t consider developer time. If you account for developer time in implementing these options, they are among the most expensive options you could pick.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managed For Us
&lt;/h3&gt;

&lt;p&gt;Let’s look at a managed option that is almost free in a sense of developer time. &lt;a href="//../"&gt;ButterCMS&lt;/a&gt; is a managed blog option with the most developer friendly API possible. I've tried out half a dozen blog API options and ButterCMS is truly the easiest and most simple.&lt;/p&gt;

&lt;p&gt;We log into the interface on their site to write a blog post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FS7L9ewu7TR6Cpx31uJmQ" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FS7L9ewu7TR6Cpx31uJmQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We install the python module.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install buttercms-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We pull our blog post:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    from butter_cms import ButterCMS

    def blog(request):
        client = ButterCMS('your-token-goes-here')
        posts = client.posts.all()
        return render(request, 'blog.html', {'posts': posts})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put it in our template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    {% for post in posts %}
        &amp;lt;h1&amp;gt;{{ post.title }}&amp;lt;/h1&amp;gt;

        &amp;lt;p&amp;gt;{{ post.body|safe }}&amp;lt;/p&amp;gt;
    {% endfor %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FU7oBxCIR1uW8sv1htFrV" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buttercms.com%2FU7oBxCIR1uW8sv1htFrV"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My example is missing couple tiny tweaks to make Django play perfectly their API, all of which are covered &lt;a href="//../docs/api-client/django#Blogging"&gt;here&lt;/a&gt; in their docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Choice
&lt;/h2&gt;

&lt;p&gt;Spinning up an instance of Mezzanine or Flask-Blogging is a definite possibility, but took me more hours than I'd like to admit to get going. I'm also not exactly looking forward to dealing with another database and django application as time goes on.&lt;/p&gt;

&lt;p&gt;Adding a managed option like ButterCMS took me about 5 minutes and I know I'll never have to mess with it again.&lt;/p&gt;

&lt;p&gt;Most of the other blogging APIs are filled with cryptic terms like "blog modelling" or having to navigate a "content delivery API" vs a "content management API". ButterCMS touts a simple and straight forward system that lets you focus on building your company and products.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/options-for-adding-a-blog-to-python-application" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>blogplatform</category>
    </item>
    <item>
      <title>Webhook vs API: What’s the Difference?</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Mon, 10 Jul 2017 15:08:23 +0000</pubDate>
      <link>https://dev.to/rogerjin12/webhook-vs-api-whats-the-difference</link>
      <guid>https://dev.to/rogerjin12/webhook-vs-api-whats-the-difference</guid>
      <description>&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Communication is a key driver in the digital era. As humans, we want technology to help us communicate faster, easier and with more people. But in order for that to happen, we had to first find a way to make technologies talk to each other.&lt;/p&gt;

&lt;p&gt;That’s where APIs and webhooks come into play.&lt;/p&gt;

&lt;p&gt;Both webhooks and APIs facilitate syncing and relaying data between two applications. However, both have different means of doing so, and thus serve slightly different purposes.&lt;/p&gt;

&lt;p&gt;To clear up any confusion between the two, let’s take a look at the differences a webhook and an API, and what kind of scenario each one is most appropriate for.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Webhook vs API: The Differences In Simple Terms&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To put it simply, an API does stuff when you ask it to, while a Webhook does stuff on it's own when certain criteria is met or scenarios takes place. Let’s dig a little deeper.&lt;/p&gt;

&lt;p&gt;An API can used from a server to communicate with example.com. Through that communication, the API can List, Create, Edit or Delete items. The API needs to be given instructions, though.&lt;/p&gt;

&lt;p&gt;Webhooks on the other hand are automated calls from example.com to a server. Those calls are triggered when a specific event happens on example.com. For example, if a new user signs up on example.com, the automated call may be configured to ask the server to send out a welcome email.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is a Webhook?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Sometimes webhooks are referred to as a reverse API, but this isn’t entirely true. They don’t run backwards, but instead there doesn’t need to be a request initiated on your end, data is sent whenever there’s new data available.&lt;/p&gt;

&lt;p&gt;To setup a webhook all you have to do is register a URL with the company proving the service you’re requesting data from. That URL will accept data and can activate a workflow to turn the data into something useful. In most cases you can even specify the situations in which your provider will deliver you the data.&lt;/p&gt;

&lt;p&gt;Webhooks and APIs differ in how they make requests. For instance, APIs will place calls for data whether there’s been a data update response, or not. While webhooks receive calls through HTTP POSTs only when the external system you’re hooked to has a data update.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When to Use a WebHook&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Webhooks are commonly used to perform smaller requests and tasks, however there are situations where a webhook is more appropriate than an entire API.&lt;/p&gt;

&lt;p&gt;One common scenario is when your app or platform demands real-time updates, but you don’t want to waste your resources. In this instance a webhook would be beneficial.&lt;/p&gt;

&lt;p&gt;Another circumstance to use a webhook over an API would be when the API is very poor, or there isn’t an API to begin with. You could create a workaround solution to give you the data your app requires to function.&lt;/p&gt;

&lt;p&gt;However, there is a word of caution about webhooks. Since they aren’t used to regularly request data, and only do so when new data is available, there is a chance you could never learn about new updates if the system goes offline for some reason. You’ll also have less control over the total flow of data, as you have to accept the total data amount that’s available with the given update.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-Life Webhook Examples&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Many apps and tools do rely on webhooks, but primarily for smaller data requests rather than using them to form the backbone of their service. Still, there are plenty of examples of webhooks being used effectively.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The ButterCMS webhook fires anytime anyone publishes a new blog post or updates content in their CMS.&lt;/li&gt;
&lt;li&gt; &lt;a href="https://zapier.com/zapbook/webhook/"&gt;Zapier is essentially one giant webhook&lt;/a&gt;. You link up certain apps together and whenever an event occurs in one it triggers an action in the other.&lt;/li&gt;
&lt;li&gt; &lt;a href="https://stripe.com/docs/webhooks"&gt;Stripe has a webhook&lt;/a&gt; that will automatically send an email to a customer whenever a subscription payment fails to go through.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is an API?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;API stands for Application Programming Interface. An API is a way for applications and platforms to connect with other applications and platforms via a common communication method. For an API to work there’s a request for data, followed by a response to that request. The data is usually delivered in a format like JSON.&lt;/p&gt;

&lt;p&gt;APIs tend to be the framework that a lot of existing software and tools rely upon. For example, an application that creates Twitter trend reports could rely upon an API to continually get the freshest data right from Twitter. Most large apps have multiple APIs they integrate with the expand their service offerings, as you’ll see below.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When to Use an API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;APIs work incredibly well when you know you’re going to have a constant change in data. There’s no point in using an API if the data you’re requiring is going to be relatively stagnate. For example, if you’re an eCommerce store that regularly has to update its shipping and tracking data, then you’re going to be making constant requests.&lt;/p&gt;

&lt;p&gt;Every time you poll the API you’re going to have new data. If your data isn’t constantly updated, then there’s no guarantee there’s going to be data ready for you at the other end. When this happens you’re simply wasting resources. However, if you’re set on using an API you can impose a call limit, which will limit the number of calls you make in a set time period. Some apps even limit the number of calls you make from the get go in order to reduce resource use on their end.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-Life API Examples&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Like we mentioned above, APIs are everywhere. According to &lt;a href="https://www.programmableweb.com/about"&gt;the latest results from ProgrammableWeb&lt;/a&gt; there are currently over 17,000 existing APIs. Below you’ll find a few tools that employ the use of APIs for their tools to function:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; As an &lt;a href="https://www.programmableweb.com/api/buttercms"&gt;API-first CMS&lt;/a&gt;, ButterCMS has its own REST API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors — the capabilities of which are demonstrated by this &lt;a href="https://www.programmableweb.com/news/build-react-universal-blog-nextjs-and-buttercms/how-to/2017/05/02"&gt;React Universal Blog build&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Uber also relies on the Google Maps API, Twilio API, Braintree API, and the SendGrid API to help power their app.&lt;/li&gt;
&lt;li&gt; &lt;a href="https://api.slack.com/"&gt;Slack has an API&lt;/a&gt; that enables you to integrate their messaging features into your third party apps.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Webhooks and APIs Run In Different Circles&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It’s not a case of which is better, because there isn’t a blanket circumstance where one method trumps the other. It’s more of a question regarding the purposes of your application and the kind of data you’re requesting.&lt;/p&gt;

&lt;p&gt;To use an example, you can think of an API as a text message you send to a friend to get more information about an event they’re hosting. You ask a question, they send a response.&lt;/p&gt;

&lt;p&gt;With a webhook, You tell your friend once to text you whenever they’re organizing another event, just to let you know. You put in the initial request, and they continually send you updates when new information arises.&lt;/p&gt;

&lt;p&gt;In the end, most applications end up using both APIs and webhooks together to create a system that can communicate the right types of data at the right times.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/webhook-vs-api-whats-the-difference"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webhook</category>
      <category>api</category>
    </item>
    <item>
      <title>Headless CMS Buyers Guide: The 6 Things you Should Consider</title>
      <dc:creator>Roger Jin</dc:creator>
      <pubDate>Wed, 28 Jun 2017 19:12:13 +0000</pubDate>
      <link>https://dev.to/rogerjin12/headless-cms-buyers-guide-the-6-things-you-should-consider</link>
      <guid>https://dev.to/rogerjin12/headless-cms-buyers-guide-the-6-things-you-should-consider</guid>
      <description>

&lt;p&gt;&lt;em&gt;For more content like this, follow &lt;a href="https://twitter.com/ButterCMS"&gt;ButterCMS on Twitter&lt;/a&gt; and subscribe to our &lt;a href="https://buttercms.com/blog/"&gt;blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is a headless CMS?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;If you know what a headless CMS is, skip this section.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The typical way of building a CMS-powered website is to choose a fully-integrated solution like &lt;a href="https://wordpress.org"&gt;WordPress&lt;/a&gt; and build your website as a collection of tightly embedded templates. Or if you want more control, you build your own integrated CMS using your preferred tech stack.&lt;/p&gt;

&lt;p&gt;Headless CMS solutions like &lt;a href="https://buttercms.com"&gt;ButterCMS&lt;/a&gt; are a relatively new approach to content management with many advantages over the "old" way. Headless CMS's allow you to build websites and apps that are decoupled from their content management tools and integrated via API. This gives you the flexibility to build your front-end using your preferred tools (eg. Rails, Node.js, Angular) while being able to integrate a customized, robust CMS with ease. A headless approach can save your team significant time and money in the initial implementation as well as ongoing maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Navigating the choices&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So you've decided that a headless CMS is right for you, so you pull up Google and start exploring the options. You find dozens of different CMS's selling the API-based approach and offering all kinds of features and add-ons. You come across SaaS options charging upwards of a $1000/mo, abandoned open-source Github projects, and confusing terms like "content objects". You also find articles about WordPress's API, and using Drupal with separate front-ends.Â &lt;/p&gt;

&lt;p&gt;How do you begin to make sense out of all this? I've created this guide to help.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Breaking down the categories&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;HeadlessÂ CMS's are a confusing beast. Some new products call themselves "API-first", whereas many others have evolved to offer an API-based approach.&lt;/p&gt;

&lt;p&gt;For example, WordPress recently rolled out a REST API and maintains some client libraries, such as &lt;a href="http://wp-api.org/node-wpapi/"&gt;node-wpapi&lt;/a&gt;. Drupal 8 includes a RESTful &lt;a href="https://www.drupal.org/docs/8/api/restful-web-services-api/restful-web-services-api-overview"&gt;web services API&lt;/a&gt;.. Using these API's, you can integrate any front-end with a WordPress or Drupal instance. Let's call these "traditional providers"&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the other hand, there are "API-frst" SaaS offerings like &lt;a href="../"&gt;ButterCMS&lt;/a&gt;Â that are built solely around API integration.&lt;/p&gt;

&lt;p&gt;So, considering traditional vs. headless, what’s the better approach?&lt;/p&gt;

&lt;p&gt;It depends. Both options work. If you're familiar with a traditional open-source solution like WordPress or Drupal, leveraging their API's for front-end freedom may seem attractive. But ButterCMS and CloudCMS are designed for the headless approach and offer a better developer experience.&lt;/p&gt;

&lt;p&gt;For example, WordPress offers official &lt;a href="https://developer.wordpress.org/rest-api/using-the-rest-api/client-libraries/"&gt;API clients&lt;/a&gt; for only two languages and no official guides. ButterCMS offers &lt;a href="../docs/"&gt;API clients for seven languages&lt;/a&gt; and over a dozen guides for various frameworks.&lt;/p&gt;

&lt;p&gt;Traditional providers like WordPress can also be severely limited in their flexibility and customization when integrated via API. This sounds surprising, since WordPress powers 27% of the web and is known for its rich, mature ecosystem of plugins that allow you to build anything from a massive publishing website to an eCommerce store.&lt;/p&gt;

&lt;p&gt;The problem is that most of the WordPress ecosystem does not address API usage. For example, to enable custom-fields in WordPress requires a &lt;a href="https://codex.wordpress.org/Custom_Fields"&gt;plugin&lt;/a&gt; and a self-managed WordPress instance. But once the plugin is setup and custom fields are created, there’s no documentation on how the custom fields would be fetched over an API. Underscoring this problem is the existence of yet another plugin called &lt;a href="https://wordpress.org/plugins/wp-rest-api-custom-fields/"&gt;WP REST API Custom Fields&lt;/a&gt; that aims to solve this. However as of the time of this writing, that plugin hasn’t been updated in over two years.&lt;/p&gt;

&lt;p&gt;In cases like this, the plugin-based extensibility of traditional providers like WordPress become useless and potentially impossible to work around. Headless solutions, on the other hand, are built from the ground-up to support flexibility and customization. For example, ButterCMS not only allows you to create custom content models and fields, it even allows you to customize the admin UI into user-friendly &lt;em&gt;workspaces&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;What headlessÂ CMS solutions lack in available plugins, they make up for by integrating into a codebase and tech stack you fully own and understand. This means you can drop in other useful open source plugins or &lt;a href="http://nordicapis.com/why-you-should-build-apps-with-an-api-backend-baas/"&gt;Backend-as-a-Service&lt;/a&gt; providers as you need. For example, you can combine a headlessÂ CMS with an API-based eCommerce backend like &lt;a href="https://www.moltin.com/"&gt;Moltin&lt;/a&gt; to build a complete eCommerce website without a database (or even a server!).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Hosting vs Self-hosted&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Another consideration is whether to manage **hostingÂ **yourself or not.&lt;/p&gt;

&lt;p&gt;As mentioned earlier, with traditional providers like WordPress, self-managed hosting may be your only option if you want to customize your CMS beyond default settings. When considering self-hosting management, remember you’re not just dealing with hosting fees, but moreover, full responsibility over making sure your website stays online and is secure. This includes database maintenance and backups, installing security upgrades, and having server monitoring systems in place.&lt;/p&gt;

&lt;p&gt;Chances are, your development team doesn’t enjoy spending their time backing up databases, setting up hosting, installing upgrades, and being responsible for monitoring content management system uptime. Going with a hosted solution means you are almost 100% freed from any type of maintenance.&lt;/p&gt;

&lt;p&gt;With headless CMSs, self-hosting is an option (eg. CloudCMS offers this), but hosted offerings are more standard. The benefit of this approach is that you never have to worry about maintenance or uptime for your CMS. You get to build your website and move onto more important things.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding Pricing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When looking at SaaS providers there are four key areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Amount of content you can manage&lt;/li&gt;
&lt;li&gt; Number of API calls allowed&lt;/li&gt;
&lt;li&gt; Number of user accounts&lt;/li&gt;
&lt;li&gt; Uptime&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Different products use different terms in their pricing plans, but generally it comes down to these four criteria. For example, ButterCMS offers unlimited API calls but caps on the amount of content, whereas CloudCMS offers caps on API calls but an unlimited amount of content. Simple, right? Also consider add-ons that you might care about such as publishing workflows, localization, and webhooks.&lt;/p&gt;

&lt;p&gt;One important factor to look at is support. When your team runs into a time-sensitive problem, quick assistance from a knowledgeable support engineer is hugely beneficial. Headless CMS providers are popping up all over the world, so in addition to responsiveness, consider timezone and language barriers that could affect communication.&lt;/p&gt;

&lt;p&gt;Another thing to pay close attention to is uptime – with aÂ headless approach, your website is highly dependent on your CMS API. In most cases, if your CMS’s API goes down, so will your website as it will be unable to fetch content. For this reason, ensure a near &lt;a href="http://nordicapis.com/6-techniques-99-999-uptime/"&gt;99.99% uptime level&lt;/a&gt; guarantee from the vendor, and do proactively prevent data loss scenarios. For example, the ButterCMS Ruby client offers the ability to setup a &lt;a href="https://github.com/buttercms/buttercms-ruby#fallback-data-store"&gt;local fallback datastore&lt;/a&gt; such as Redis so that your website functions even if it cannot successfully connect to the ButterCMS API.&lt;/p&gt;

&lt;p&gt;For larger projects, you may be interested in enterprise-level service level agreements and white-glove support such as working directly with a solution engineer from the vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation Checklist
&lt;/h2&gt;

&lt;p&gt;We’ve covered a lot of information thus far. Even armed with this knowledge, making a decision is difficult given the sheer number of options. To help with this, follow this step-by-step checklist when guiding your evaluation and decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Usability&lt;/strong&gt;: How simple and intuitive is the documentation, SDKs, and API?&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility&lt;/strong&gt;: Is the CMS flexible enough to meet the needs of your project?&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Uptime&lt;/strong&gt;: Is the API/SDK resilient and does it meet your uptime requirements?&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Content editor&lt;/strong&gt;: How intuitive is the interface for your content editors?&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Support&lt;/strong&gt;: In what country and timezone is the vendor based, and what level of support and responsiveness do they demonstrate?&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pricing&lt;/strong&gt;: Is the pricing scalable and predictable for your project (will API-usage based pricing can spike up unpredictably if your website traffic increases)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Wrap Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Remember that the key benefit of a headless CMS is they save your development team time and money. You can’t beat working with your favorite tech stack while having nearly zero maintenance.&lt;/p&gt;

&lt;p&gt;If you’re an agency, you’re able to launch your project faster and move on to the next project. If you’re a technology startup, you can knockout your CMS requirements in a day and get back to focusing on your core product.&lt;/p&gt;

&lt;p&gt;To maximize this, above all other factors, we recommend choosing your solution based on developer experience. Which CMS is the easiest to integrate? Which CMS has the best documentation? Which CMS has the simplest SDKs? Don’t sweat a few extra bucks here and there on subscription costs – chances are a couple days worth of your development team’s time is much more expensive than the subscription costs you are fretting over.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted &lt;a href="https://buttercms.com/blog/headless-cms-buyers-guide"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;


</description>
      <category>headlesscms</category>
    </item>
  </channel>
</rss>
