CINXE.COM

<!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 9]><!--><html class='no-js' lang='en'><!--<![endif]--><head> <meta content='IE=edge' http-equiv='X-UA-Compatible'> <meta charset='utf-8'> <meta content='width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1, user-scalable=no' name='viewport'> <meta content='en' name='Content-Language'> <link rel="stylesheet" media="screen" href="https://leanpub.com/assets/stylesheets/app-bundle-069014128689a97456a1.css" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-57x57-3dc48b9be1873ac9bf6d580e7836e3e5.png" sizes="57x57" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-60x60-06b95deca3f378372b051ca8ea42cfbd.png" sizes="60x60" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-72x72-935ba702f9d3da9b4404aa2b797920e5.png" sizes="72x72" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-76x76-937dbc8b688db389b5b872c5ffdffe2d.png" sizes="76x76" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-114x114-9db66ed49dfe9c3ed799923955da36e2.png" sizes="114x114" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-120x120-3fd2359930103db35eb499036b81ba90.png" sizes="120x120" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-144x144-5bee791d2b53cc426eb14e7f6e40a024.png" sizes="144x144" /> <link rel="apple-touch-icon-precomposed" type="image/png" href="https://leanpub.com/assets/favicons/apple-touch-icon-152x152-af69d0ec0fe11cf82324b06ff9a56e3b.png" sizes="152x152" /> <link rel="icon" type="image/png" href="https://leanpub.com/assets/favicons/favicon-16x16-19545df363d1089bccdc59d17ee5b781.png" sizes="16x16" /> <link rel="icon" type="image/png" href="https://leanpub.com/assets/favicons/favicon-32x32-9a0898109481d6450269c966cdf6a2d7.png" sizes="32x32" /> <link rel="icon" type="image/png" href="https://leanpub.com/assets/favicons/favicon-96x96-98f4372a68f5617fc907b7bde8d94e05.png" sizes="96x96" /> <link rel="icon" type="image/png" href="https://leanpub.com/assets/favicons/favicon-128x128-bf73acc329429fbf555afe3b067aa2d6.png" sizes="128x128" /> <link rel="icon" type="image/png" href="https://leanpub.com/assets/favicons/favicon-196x196-24a71f1b4fb02600f635b59a116daf05.png" sizes="196x196" /> <meta content='Leanpub' name='application-name'> <meta content='#ffffff' name='msapplication-TileColor'> <meta content='favicons/mstile-144x144.png' name='msapplication-TileImage'> <meta content='favicons/mstile-150x150.png' name='msapplication-square150x150logo'> <meta content='favicons/mstile-310x150.png' name='msapplication-wide310x150logo'> <meta content='favicons/mstile-310x310.png' name='msapplication-square310x310logo'> <meta content='favicons/mstile-70x70.png' name='msapplication-square70x70logo'> <link href='//fonts.googleapis.com/' rel='dns-prefetch'> <script src='https://ajax.googleapis.com/ajax/libs/webfont/1.6.16/webfont.js'></script> <script> if (typeof WebFont !== 'undefined') { WebFont.load({ google: { families: [ 'Noto+Sans:ital,wght@0,400;0,700;1,400;1,700', 'Noto+Serif:ital,wght@0,400;0,700;1,400;1,700', 'Inter:wght@400;700', ] } }); } </script> <link rel="stylesheet" media="screen" href="https://leanpub.com/assets/font_awesome-bbab983f4954a5c7dd952efdd403ebe8.css" /> <script> window.__BASE_URL__ = "https://leanpub.com/" window.__RAILS_ENV__ = "production" window.__IGNORE_ANALYTICS__ = false </script> <script> var _rollbarConfig = { accessToken: "3d279f41d3804636adbbba833c2c0d2d", captureUncaught: true, captureUnhandledRejections: true, code_version: "f4b064a9", payload: { environment: "production" } }; // Rollbar Snippet !function(r){function o(n){if(e[n])return e[n].exports;var t=e[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}var e={};return o.m=r,o.c=e,o.p="",o(0)}([function(r,o,e){"use strict";var n=e(1),t=e(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.5.2/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,o,e){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,o){this.options=r,this._rollbarOldOnError=null;var e=s++;this.shimId=function(){return e},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[e]={handler:o,messages:[]})}function a(r,o){if(r){var e=o.globalAlias||"Rollbar";if("object"==typeof r[e])return r[e];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(o);return n(function(){o.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),o.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=o.autoInstrument;return o.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[e]=t,t})()}}function l(r){return n(function(){var o=this,e=Array.prototype.slice.call(arguments,0),n={shim:o,method:r,args:e,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=e(2),s=0,d=e(3),c=function(r,o){return new t(r,o)},p=function(r){return new d(c,r)};t.prototype.loadFull=function(r,o,e,t,a){var l=function(){var o;if(void 0===r._rollbarDidLoad){o=new Error("rollbar.js did not load");for(var e,n,t,l,i=0;e=r._rollbarShims[i++];)for(e=e.messages||[];n=e.shift();)for(t=n.args||[],i=0;i<t.length;++i)if(l=t[i],"function"==typeof l){l(o);break}}"function"==typeof a&&a(o)},i=!1,s=o.createElement("script"),d=o.getElementsByTagName("script")[0],c=d.parentNode;s.crossOrigin="",s.src=t.rollbarJsUrl,e||(s.async=!0),s.onload=s.onreadystatechange=n(function(){if(!(i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){s.onload=s.onreadystatechange=null;try{c.removeChild(s)}catch(r){}i=!0,l()}}),c.insertBefore(s,d)},t.prototype.wrap=function(r,o,e){try{var n;if(n="function"==typeof o?o:function(){return o||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){e&&"function"==typeof e&&e.apply(this,arguments);try{return r.apply(this,arguments)}catch(e){var o=e;throw o&&("string"==typeof o&&(o=new String(o)),o._rollbarContext=n()||{},o._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=o),o}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(o){return r}};for(var u="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<u.length;++f)t.prototype[u[f]]=l(u[f]);r.exports={setupShim:a,Rollbar:p}},function(r,o){"use strict";function e(r,o,e){if(r){var t;if("function"==typeof o._rollbarOldOnError)t=o._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;o._rollbarOldOnError=t}var a=function(){var e=Array.prototype.slice.call(arguments,0);n(r,o,t,e)};e&&(a._rollbarOldOnError=t),r.onerror=a}}function n(r,o,e,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null),o.handleUncaughtException.apply(o,n),e&&e.apply(r,n)}function t(r,o,e){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var e,n,t;try{e=r.reason}catch(r){e=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!e&&t&&(e=t.reason,n=t.promise)}catch(r){}e||(e="[unhandledrejection] error getting `reason` from event"),o&&o.handleUnhandledRejection&&o.handleUnhandledRejection(e,n)};n.belongsToShim=e,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}function a(r,o,e){if(r){var n,t,a="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n<a.length;++n)t=a[n],r[t]&&r[t].prototype&&l(o,r[t].prototype,e)}}function l(r,o,e){if(o.hasOwnProperty&&o.hasOwnProperty("addEventListener")){for(var n=o.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(o,e,t){n.call(this,o,r.wrap(e),t)};t._rollbarOldAdd=n,t.belongsToShim=e,o.addEventListener=t;for(var a=o.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,o,e){a.call(this,r,o&&o._rollbar_wrapped||o,e)};l._rollbarOldRemove=a,l.belongsToShim=e,o.removeEventListener=l}}r.exports={captureUncaughtExceptions:e,captureUnhandledRejections:t,wrapGlobals:a}},function(r,o){"use strict";function e(r,o){this.impl=r(o,this),this.options=o,n(e.prototype)}function n(r){for(var o=function(r){return function(){var o=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,o)}},e="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<e.length;n++)r[e[n]]=o(e[n])}e.prototype._swapAndProcessMessages=function(r,o){this.impl=r(this.options);for(var e,n,t;e=o.shift();)n=e.method,t=e.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],e.ts]):this[n].apply(this,t));return this},r.exports=e},function(r,o){"use strict";r.exports=function(r){return function(o){if(!o&&!window._rollbarInitialized){r=r||{};for(var e,n,t=r.globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;e=window._rollbarShims[i++];)n||(n=e.handler),e.handler._swapAndProcessMessages(l,e.messages);window[t]=n,window._rollbarInitialized=!0}}}}]); // End Rollbar Snippet </script> <script src="https://www.google.com/recaptcha/api.js?render=6LdDCakUAAAAAEFI0Kyx_gg9t-G4r1mOWrIwFLd0"></script> <script src="https://leanpub.com/assets/modernizr-a38b94cc0625ba4488942166ee4d23a4.js"></script> <title data-react-helmet="true">Leanpub: Publish Early, Publish Often</title><meta data-react-helmet="true" name="og:site_name" content="Leanpub"/><meta data-react-helmet="true" name="leanpub:page_name" content="home"/> </head> <body> <div id='react-root'><div class="app"><section class="Header"><nav class="Header__Nav"><a class="Header__Nav__Logo" href="/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABDCAYAAABjoACgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABSRJREFUeNrsXP11mzAQx375P+oEYQOzQdig3iDOBHUnKBs4mYB0grgTQCYwmcBkAuMJXCk9xYqK0DfgoHvvHnl20En3ofsd5hRFgQIFChQoUKBBaOZz8NPphPAlwZxivsEcY6aftVGDuYLrK/xdzWaz2lB+DLIILxjZSHALlU3kvWEuQX5zMQbAi17iyy0oPXE0bAXKeJQZA5T+w5P8Fyx/O7owwotOMeeYDyf/VBB5gjkUPcg/wFrToZWOMK8w70/DEFF2AlwMNIc96AD1tgWBsDWEOYoC0dz1iPlBN1+YGCDHl5WDSdfAlJDDPVtlT2cVFQPb0hM2wL3ODVcGQnQnWsKCCaqp8QRLDeREk7kNvSdPVUQDe3sMqCnRlB97dx08wZ3CvrgBNOQq16w1c80e7kGO5rCENcnmsOsjB5wEXxF49rsNpjFenUA9kLRsO+yW9AJ/lyzsJAkPXzYduYd49098zxMHS1PGo6mn3suisQNm32FudTA85syn9yMRIhHAwo1CxMhoxyINmEPe8n859z9riezUUhci5IV8GiCVGQCUfvCEvzM2GuCzA0QGVXymKN+XAVKfBlgKhGbwfdID9iZenTDyEsY5dPKErQEywbhauW+uKVcGE/uoC8gc3rclvN0SVFOBAxSaKCT1OD9vMPS6A+ppC7ekHPDAraO6xATe/tLQkRMDjCECPhlhhFWxlhPOXUhk4NxiKs8eTCCsCwOkI4sAG7r1NG7adwSUpuH3BajsLQIUYVt4OqquK2cRUFFMPkFdV33mAJFVjxfq/S7qgKPt2HOHXhAiwHMEiFBDM+H9v7FFWC4jYBEiwG8EJIKC5GIjwPaBXMeva4kPAyCJB0wxB4iiADk1QAfEbEIN0J4HVGH53ML7CdUTrgE+6cA0ClQNIFLw24V7v4ta4M0mDziJgAnv/71FwEIiHAUDKOvMSwQsggEGyAHMOzuXGgHWvwl0vC7vPQewguNo2lR7iwB4sywKBtDfhjp0pxUBcVcBoiJkqsWYimPaGOD1C3h/6mic1yEM0ITtp58IuBF8XgUD/KcLVd05jYCboP8BcgB5J/MrRICLt5kZXfRmgCZAUKUosDNAR7NBFQyglgdkDRuyl3MThzVADUwmeozOxxLw8siEr6NzSxNy4JkVI7fmCqfKYwTQNZWmBkAWNQARqtydyNzDexDtVLyL1B97b0H21vScCcNaYKn7SMI0AkTbD1n4H1h406JI1FL8LMAjj5zHkpbWGhIc4QeIuFXU3iROxvgdtTRLw30xF1E0yl5anKDpSKy6lIBejBDCpqu9B9p0aEtozO57TGvnzvIogJw/DoDrBfvoEeO+X8G9e8t2qA2sBcnQlGCMjQ1EKyQG4JW+9nxuw6dDMkAm4pSQez6forX/WKWB0cQArd7L/Q/xjucBDupIucX3fWDHM9+QZ9K8PZMYQNSU/S36d2DH3cAw9AGu6wHn8JF7MB8EhdrMpQGaKPQBdEFRpGOAK4MS3VT5ZXQ+CozH4uzY9HixxGF00fqDHoMmqlrj6Hy0mskjCiTSpain7MqjN5QASUtNSLfloCs9lyE2UDo9v8IIUjI1yPfIX1+xUHhmmBytTpDqmI/q6Vx7HpY6kk+hrUmyz3wbIO/rp0nJvLKe5hBrwl0jAxQKnpZ5PR2kY2vgomE/xPupTEEoi8zChQH2gH3XY3gZFxa/A0YjmE8CunluMUihDUOZZzcun4s4NwLAvGak8xu9DgMFChQo0HD0V4ABAKiCSwHftnDCAAAAAElFTkSuQmCC" alt="Leanpub"/></a><div class="Header__Middle"></div><button class="btn--plain DropdownContainer__Trigger "><div class="Header__Nav__Logo relative__nav__logo"><i class="HeaderIcon fa fa-bars"></i><i class="AccountItem__Trigger fa fa-caret-down"></i></div></button></nav></section><div id="scroll-wrapper" class="scroll-wrapper undefined false"><div class="main"><div class="home"><section class="Bookstore__Container container--large"><div class="categories-sidebar__container"><h3>Categories</h3><span class="CategorySidebar__ButtonContainer"><div class="CategorySidebar__Button Active"><button>Top</button></div><div class="CategorySidebar__Button"><button>All</button></div></span><ul class="BookstoreTopCategories__Links"><div class="CategoriesTop__Container"><ul><li>#1 - <a href="/bookstore?type=all&amp;category=computer_programming">Computers and Programming</a></li><li>#2 - <a href="/bookstore?type=all&amp;category=software">Software</a></li><li>#3 - <a href="/bookstore?type=all&amp;category=ai">Artificial Intelligence</a></li><li>#4 - <a href="/bookstore?type=all&amp;category=software_engineering">Software Engineering</a></li><li>#5 - <a href="/bookstore?type=all&amp;category=software_architecture">Software Architecture</a></li><li>#6 - <a href="/bookstore?type=all&amp;category=agile">Agile</a></li><li>#7 - <a href="/bookstore?type=all&amp;category=machine_learning">Machine Learning</a></li><li>#8 - <a href="/bookstore?type=all&amp;category=data_science">Data Science</a></li><li>#9 - <a href="/bookstore?type=all&amp;category=computer_science">Computer Science</a></li><li>#10 - <a href="/bookstore?type=all&amp;category=deep_learning">Deep Learning</a></li><li>#11 - <a href="/bookstore?type=all&amp;category=cloud_computing">Cloud Computing</a></li><li>#12 - <a href="/bookstore?type=all&amp;category=javascript">JavaScript</a></li><li>#13 - <a href="/bookstore?type=all&amp;category=c_and_cpp">C and C++</a></li><li>#14 - <a href="/bookstore?type=all&amp;category=neural_networks">Neural Networks</a></li><li>#15 - <a href="/bookstore?type=all&amp;category=business_and_management">Management</a></li><li>#16 - <a href="/bookstore?type=all&amp;category=web_development">Web Development</a></li><li>#17 - <a href="/bookstore?type=all&amp;category=textbooks">Textbooks</a></li><li>#18 - <a href="/bookstore?type=all&amp;category=devops">DevOps</a></li><li>#19 - <a href="/bookstore?type=all&amp;category=python">Python</a></li><li>#20 - <a href="/bookstore?type=all&amp;category=selfhelp">Self-Help</a></li><li>#21 - <a href="/bookstore?type=all&amp;category=computer_security">Computer Security</a></li><li>#22 - <a href="/bookstore?type=all&amp;category=gpt">GPT</a></li><li>#23 - <a href="/bookstore?type=all&amp;category=testing">Testing</a></li><li>#24 - <a href="/bookstore?type=all&amp;category=java">Java</a></li><li>#25 - <a href="/bookstore?type=all&amp;category=leadership">Leadership</a></li><li>#26 - <a href="/bookstore?type=all&amp;category=startups">Startups</a></li><li>#27 - <a href="/bookstore?type=all&amp;category=databases">Databases</a></li><li>#28 - <a href="/bookstore?type=all&amp;category=linguistics">Linguistics</a></li><li>#29 - <a href="/bookstore?type=all&amp;category=functional_programming">Functional Programming</a></li><li>#30 - <a href="/bookstore?type=all&amp;category=teamwork">Teamwork</a></li><li>#31 - <a href="/bookstore?type=all&amp;category=diy">DIY</a></li><li>#32 - <a href="/bookstore?type=all&amp;category=dotnet">.NET</a></li><li>#33 - <a href="/bookstore?type=all&amp;category=php">PHP</a></li><li>#34 - <a href="/bookstore?type=all&amp;category=education">Education</a></li><li>#35 - <a href="/bookstore?type=all&amp;category=project_management">Project Management</a></li><li>#36 - <a href="/bookstore?type=all&amp;category=microsoft_azure">Microsoft Azure</a></li><li>#37 - <a href="/bookstore?type=all&amp;category=c_sharp">C#</a></li><li>#38 - <a href="/bookstore?type=all&amp;category=lean">Lean</a></li><li>#39 - <a href="/bookstore?type=all&amp;category=digital_transformation">Digital Transformation</a></li><li>#40 - <a href="/bookstore?type=all&amp;category=html">HTML</a></li><li>#41 - <a href="/bookstore?type=all&amp;category=product_management">Product Management</a></li><li>#42 - <a href="/bookstore?type=all&amp;category=systems_engineering">Systems Engineering</a></li><li>#43 - <a href="/bookstore?type=all&amp;category=distributed_systems">Distributed Systems</a></li><li>#44 - <a href="/bookstore?type=all&amp;category=networking">Networking</a></li><li>#45 - <a href="/bookstore?type=all&amp;category=enterprise_architecture">Enterprise Architecture</a></li><li>#46 - <a href="/bookstore?type=all&amp;category=engineering">Engineering</a></li><li>#47 - <a href="/bookstore?type=all&amp;category=apis">APIs</a></li><li>#48 - <a href="/bookstore?type=all&amp;category=cryptography">Cryptography</a></li><li>#49 - <a href="/bookstore?type=all&amp;category=PowerShell">PowerShell</a></li><li>#50 - <a href="/bookstore?type=all&amp;category=programming_cookbooks">Programming Cookbooks</a></li><li>#51 - <a href="/bookstore?type=all&amp;category=infrastructure_as_code">Infrastructure as Code</a></li><li>#52 - <a href="/bookstore?type=all&amp;category=embedded_systems">Embedded Systems</a></li><li>#53 - <a href="/bookstore?type=all&amp;category=operating_system_development">Operating System Development</a></li><li>#54 - <a href="/bookstore?type=all&amp;category=internet_of_things">Internet of Things</a></li><li>#55 - <a href="/bookstore?type=all&amp;category=perl">Perl</a></li><li>#56 - <a href="/bookstore?type=all&amp;category=business_it_alignment">Business and IT Alignment</a></li><li>#57 - <a href="/bookstore?type=all&amp;category=data_structures">Data Structures</a></li><li>#58 - <a href="/bookstore?type=all&amp;category=automated_software_testing">Automated Software Testing</a></li><li>#59 - <a href="/bookstore?type=all&amp;category=personal_transformation">Personal Transformation</a></li><li>#60 - <a href="/bookstore?type=all&amp;category=react">React</a></li><li>#61 - <a href="/bookstore?type=all&amp;category=mathematics">Mathematics</a></li><li>#62 - <a href="/bookstore?type=all&amp;category=aspnet">ASP.NET</a></li><li>#63 - <a href="/bookstore?type=all&amp;category=innovation_management">Innovation Management</a></li><li>#64 - <a href="/bookstore?type=all&amp;category=kotlin">Kotlin</a></li><li>#65 - <a href="/bookstore?type=all&amp;category=scala">Scala</a></li><li>#66 - <a href="/bookstore?type=all&amp;category=organizational_psychology">Organizational Psychology</a></li><li>#67 - <a href="/bookstore?type=all&amp;category=ruby_on_rails">Ruby on Rails</a></li><li>#68 - <a href="/bookstore?type=all&amp;category=non_fiction">Non-Fiction</a></li><li>#69 - <a href="/bookstore?type=all&amp;category=amazon_web_services">Amazon Web Services</a></li><li>#70 - <a href="/bookstore?type=all&amp;category=android">Android</a></li><li>#71 - <a href="/bookstore?type=all&amp;category=node_js">Node.js</a></li><li>#72 - <a href="/bookstore?type=all&amp;category=resiliency">Resiliency</a></li><li>#73 - <a href="/bookstore?type=all&amp;category=consulting">Consulting</a></li><li>#74 - <a href="/bookstore?type=all&amp;category=docker">Docker</a></li><li>#75 - <a href="/bookstore?type=all&amp;category=ansible">Ansible</a></li><li>#76 - <a href="/bookstore?type=all&amp;category=leadership_agile">Leadership</a></li><li>#77 - <a href="/bookstore?type=all&amp;category=symfony">Symfony</a></li><li>#78 - <a href="/bookstore?type=all&amp;category=sql_server">SQL Server</a></li><li>#79 - <a href="/bookstore?type=all&amp;category=r">R</a></li><li>#80 - <a href="/bookstore?type=all&amp;category=oracle">Oracle</a></li><li>#81 - <a href="/bookstore?type=all&amp;category=git">Git</a></li><li>#82 - <a href="/bookstore?type=all&amp;category=aws">AWS</a></li><li>#83 - <a href="/bookstore?type=all&amp;category=api_design">API Design</a></li><li>#84 - <a href="/bookstore?type=all&amp;category=mysql">MySQL</a></li><li>#85 - <a href="/bookstore?type=all&amp;category=algorithm">Algorithm</a></li><li>#86 - <a href="/bookstore?type=all&amp;category=quality_management">Quality Management</a></li><li>#87 - <a href="/bookstore?type=all&amp;category=event_driven_architecture">Event-Driven Architecture</a></li><li>#88 - <a href="/bookstore?type=all&amp;category=typescript">TypeScript</a></li><li>#89 - <a href="/bookstore?type=all&amp;category=rust">Rust</a></li><li>#90 - <a href="/bookstore?type=all&amp;category=ios">iOS</a></li><li>#91 - <a href="/bookstore?type=all&amp;category=system_integration">System Integration</a></li><li>#92 - <a href="/bookstore?type=all&amp;category=terraform">Terraform</a></li><li>#93 - <a href="/bookstore?type=all&amp;category=agile_business_leadership">Agile</a></li><li>#94 - <a href="/bookstore?type=all&amp;category=medicine">Medicine</a></li><li>#95 - <a href="/bookstore?type=all&amp;category=haskell">Haskell</a></li><li>#96 - <a href="/bookstore?type=all&amp;category=culture">Culture</a></li><li>#97 - <a href="/bookstore?type=all&amp;category=business_architecture">Business Architecture</a></li><li>#98 - <a href="/bookstore?type=all&amp;category=go">Go</a></li><li>#99 - <a href="/bookstore?type=all&amp;category=enterprise_management">Enterprise Management</a></li><li>#100 - <a href="/bookstore?type=all&amp;category=career">Career</a></li><li>#101 - <a href="/bookstore?type=all&amp;category=robotics">Robotics</a></li><li>#102 - <a href="/bookstore?type=all&amp;category=game_development">Game Development</a></li><li>#103 - <a href="/bookstore?type=all&amp;category=css">CSS</a></li><li>#104 - <a href="/bookstore?type=all&amp;category=postgresql">PostgreSQL</a></li><li>#105 - <a href="/bookstore?type=all&amp;category=business_analysis">Business Analysis</a></li><li>#106 - <a href="/bookstore?type=all&amp;category=laravel">Laravel</a></li><li>#107 - <a href="/bookstore?type=all&amp;category=computer_hardware">Computer Hardware</a></li><li>#108 - <a href="/bookstore?type=all&amp;category=engineering_management">Engineering Management</a></li><li>#109 - <a href="/bookstore?type=all&amp;category=science">Sciences</a></li><li>#110 - <a href="/bookstore?type=all&amp;category=technical_communication">Technical Communication</a></li><li>#111 - <a href="/bookstore?type=all&amp;category=vuejs">Vue.js</a></li><li>#112 - <a href="/bookstore?type=all&amp;category=agile_enterprise">Agile Enterprise</a></li><li>#113 - <a href="/bookstore?type=all&amp;category=scrum">Scrum</a></li><li>#114 - <a href="/bookstore?type=all&amp;category=swift">Swift</a></li><li>#115 - <a href="/bookstore?type=all&amp;category=refactoring">Refactoring</a></li><li>#116 - <a href="/bookstore?type=all&amp;category=philosophy">Philosophy</a></li><li>#117 - <a href="/bookstore?type=all&amp;category=es6">ES6</a></li><li>#118 - <a href="/bookstore?type=all&amp;category=diet_and_nutrition">Diet and Nutrition</a></li><li>#119 - <a href="/bookstore?type=all&amp;category=reference">Reference</a></li><li>#120 - <a href="/bookstore?type=all&amp;category=django">Django</a></li><li>#121 - <a href="/bookstore?type=all&amp;category=physics">Physics</a></li><li>#122 - <a href="/bookstore?type=all&amp;category=music">Music</a></li><li>#123 - <a href="/bookstore?type=all&amp;category=elixir">Elixir</a></li><li>#124 - <a href="/bookstore?type=all&amp;category=messaging">Messaging</a></li><li>#125 - <a href="/bookstore?type=all&amp;category=version_control">Version Control</a></li><li>#126 - <a href="/bookstore?type=all&amp;category=digital_forensics">Digital Forensics</a></li><li>#127 - <a href="/bookstore?type=all&amp;category=finance">Finance</a></li><li>#128 - <a href="/bookstore?type=all&amp;category=design">Design</a></li><li>#129 - <a href="/bookstore?type=all&amp;category=sports_and_fitness">Sports and Fitness</a></li><li>#130 - <a href="/bookstore?type=all&amp;category=systems_administration">Systems Administration</a></li><li>#131 - <a href="/bookstore?type=all&amp;category=chemistry">Chemistry</a></li><li>#132 - <a href="/bookstore?type=all&amp;category=food_and_drink">Food &amp; Drink</a></li><li>#133 - <a href="/bookstore?type=all&amp;category=graphics">Graphics</a></li><li>#134 - <a href="/bookstore?type=all&amp;category=google_cloud_platform">Google Cloud Platform</a></li><li>#135 - <a href="/bookstore?type=all&amp;category=strategy">Strategy</a></li><li>#136 - <a href="/bookstore?type=all&amp;category=psychology">Psychology</a></li><li>#137 - <a href="/bookstore?type=all&amp;category=delphi">Delphi</a></li><li>#138 - <a href="/bookstore?type=all&amp;category=humanities_history">History</a></li><li>#139 - <a href="/bookstore?type=all&amp;category=ruby">Ruby</a></li><li>#140 - <a href="/bookstore?type=all&amp;category=fiction">Fiction</a></li><li>#141 - <a href="/bookstore?type=all&amp;category=storage">Storage</a></li><li>#142 - <a href="/bookstore?type=all&amp;category=poetry">Poetry</a></li><li>#143 - <a href="/bookstore?type=all&amp;category=ides">IDEs</a></li><li>#144 - <a href="/bookstore?type=all&amp;category=executive_coaching">Executive Coaching</a></li><li>#145 - <a href="/bookstore?type=all&amp;category=games">Games</a></li><li>#146 - <a href="/bookstore?type=all&amp;category=creative_non_fiction">Creative Non-Fiction</a></li><li>#147 - <a href="/bookstore?type=all&amp;category=angular">Angular</a></li><li>#148 - <a href="/bookstore?type=all&amp;category=science_fiction">Science Fiction</a></li><li>#149 - <a href="/bookstore?type=all&amp;category=raspberry_pi">Raspberry Pi</a></li><li>#150 - <a href="/bookstore?type=all&amp;category=angularjs">AngularJS</a></li><li>#151 - <a href="/bookstore?type=all&amp;category=investment">Investment</a></li><li>#152 - <a href="/bookstore?type=all&amp;category=childrens_books">Children&#x27;s Books</a></li><li>#153 - <a href="/bookstore?type=all&amp;category=fine_arts">Fine Arts</a></li><li>#154 - <a href="/bookstore?type=all&amp;category=religion_and_spirituality">Religion and Spirituality</a></li><li>#155 - <a href="/bookstore?type=all&amp;category=life_coaching">Life Coaching</a></li><li>#156 - <a href="/bookstore?type=all&amp;category=writing_and_publishing">Writing and Publishing</a></li><li>#157 - <a href="/bookstore?type=all&amp;category=social_science">Social Sciences</a></li><li>#158 - <a href="/bookstore?type=all&amp;category=scrum_project_management">Scrum</a></li><li>#159 - <a href="/bookstore?type=all&amp;category=purescript">PureScript</a></li><li>#160 - <a href="/bookstore?type=all&amp;category=humor_and_satire">Humor and Satire</a></li><li>#161 - <a href="/bookstore?type=all&amp;category=presentations">Presentations</a></li><li>#162 - <a href="/bookstore?type=all&amp;category=entertainment">Entertainment</a></li><li>#163 - <a href="/bookstore?type=all&amp;category=travel">Travel</a></li><li>#164 - <a href="/bookstore?type=all&amp;category=d3_js">D3.js</a></li><li>#165 - <a href="/bookstore?type=all&amp;category=foreign_language_practice_learning">Foreign Language Practice &amp; Learning</a></li><li>#166 - <a href="/bookstore?type=all&amp;category=express">Express</a></li><li>#167 - <a href="/bookstore?type=all&amp;category=sales">Sales</a></li><li>#168 - <a href="/bookstore?type=all&amp;category=cookbooks">Cookbooks</a></li><li>#169 - <a href="/bookstore?type=all&amp;category=family_and_parenting">Family and Parenting</a></li><li>#170 - <a href="/bookstore?type=all&amp;category=crafts_and_hobbies">Crafts and Hobbies</a></li><li>#171 - <a href="/bookstore?type=all&amp;category=gaming">Gaming</a></li><li>#172 - <a href="/bookstore?type=all&amp;category=graph_theory">Graph Theory</a></li><li>#173 - <a href="/bookstore?type=all&amp;category=politics">Politics</a></li><li>#174 - <a href="/bookstore?type=all&amp;category=fantasy">Fantasy</a></li><li>#175 - <a href="/bookstore?type=all&amp;category=cryptocurrency">Cryptocurrency</a></li><li>#176 - <a href="/bookstore?type=all&amp;category=humanities">Humanities</a></li><li>#177 - <a href="/bookstore?type=all&amp;category=memoir">Memoir</a></li><li>#178 - <a href="/bookstore?type=all&amp;category=nonfiction_history">History</a></li><li>#179 - <a href="/bookstore?type=all&amp;category=green_business_and_sustainability">Green Business and Sustainability</a></li><li>#180 - <a href="/bookstore?type=all&amp;category=social_justice">Social Justice</a></li><li>#181 - <a href="/bookstore?type=all&amp;category=home_automation">Home Automation</a></li><li>#182 - <a href="/bookstore?type=all&amp;category=filmmaking">Filmmaking</a></li><li>#183 - <a href="/bookstore?type=all&amp;category=blockchain_technology">Blockchain Technology</a></li><li>#184 - <a href="/bookstore?type=all&amp;category=biographies">Biographies</a></li><li>#185 - <a href="/bookstore?type=all&amp;category=home_and_garden">Home &amp; Garden</a></li><li>#186 - <a href="/bookstore?type=all&amp;category=mongodb">MongoDB</a></li><li>#187 - <a href="/bookstore?type=all&amp;category=jenkins">Jenkins</a></li><li>#188 - <a href="/bookstore?type=all&amp;category=biology">Biology</a></li><li>#189 - <a href="/bookstore?type=all&amp;category=economics">Economics</a></li><li>#190 - <a href="/bookstore?type=all&amp;category=self_publishing">Self-Publishing</a></li><li>#191 - <a href="/bookstore?type=all&amp;category=photography">Photography</a></li><li>#192 - <a href="/bookstore?type=all&amp;category=marketing">Marketing</a></li><li>#193 - <a href="/bookstore?type=all&amp;category=aurelia">Aurelia</a></li><li>#194 - <a href="/bookstore?type=all&amp;category=literary_fiction">Literary Fiction</a></li><li>#195 - <a href="/bookstore?type=all&amp;category=ecommerce">Ecommerce</a></li><li>#196 - <a href="/bookstore?type=all&amp;category=clojure">Clojure</a></li><li>#197 - <a href="/bookstore?type=all&amp;category=Reactive">Reactive</a></li><li>#198 - <a href="/bookstore?type=all&amp;category=SolidStart">SolidStart</a></li><li>#199 - <a href="/bookstore?type=all&amp;category=SolidJS">SolidJS</a></li><li>#200 - <a href="/bookstore?type=all&amp;category=message_driven">Message-Driven Design</a></li><li>#201 - <a href="/bookstore?type=all&amp;category=personal_finance">Personal Finance</a></li><li>#202 - <a href="/bookstore?type=all&amp;category=arduino">Arduino</a></li><li>#203 - <a href="/bookstore?type=all&amp;category=inclusion">Inclusion</a></li><li>#204 - <a href="/bookstore?type=all&amp;category=hiringdevelopers">Hiring Developers</a></li><li>#205 - <a href="/bookstore?type=all&amp;category=hiring">Hiring</a></li><li>#206 - <a href="/bookstore?type=all&amp;category=mystery">Mystery</a></li><li>#207 - <a href="/bookstore?type=all&amp;category=biblical_theology">Biblical Theology</a></li><li>#208 - <a href="/bookstore?type=all&amp;category=psychotherapy">Psychotherapy</a></li><li>#209 - <a href="/bookstore?type=all&amp;category=neuroscience">Neuroscience</a></li><li>#210 - <a href="/bookstore?type=all&amp;category=romance">Romance</a></li><li>#211 - <a href="/bookstore?type=all&amp;category=thriller">Thriller</a></li><li>#212 - <a href="/bookstore?type=all&amp;category=roleplaying_games">Roleplaying Games</a></li><li>#213 - <a href="/bookstore?type=all&amp;category=biomedical_engineering">Biomedical Engineering</a></li><li>#214 - <a href="/bookstore?type=all&amp;category=lean_six_sigma">Lean Six Sigma</a></li><li>#215 - <a href="/bookstore?type=all&amp;category=law">Law</a></li><li>#216 - <a href="/bookstore?type=all&amp;category=outdoors">Outdoors</a></li><li>#217 - <a href="/bookstore?type=all&amp;category=ember">Ember</a></li><li>#218 - <a href="/bookstore?type=all&amp;category=historical_fiction">Historical Fiction</a></li><li>#219 - <a href="/bookstore?type=all&amp;category=teen_and_young_adult">Teen and Young Adult</a></li><li>#220 - <a href="/bookstore?type=all&amp;category=smart_home">Smart Home</a></li><li>#221 - <a href="/bookstore?type=all&amp;category=zend">Zend</a></li><li>#222 - <a href="/bookstore?type=all&amp;category=wordpress">WordPress</a></li><li>#223 - <a href="/bookstore?type=all&amp;category=graph_design">Graph Design</a></li><li>#224 - <a href="/bookstore?type=all&amp;category=vagrant">Vagrant</a></li><li>#225 - <a href="/bookstore?type=all&amp;category=rabbitmq">RabbitMQ</a></li><li>#226 - <a href="/bookstore?type=all&amp;category=MATLAB">MATLAB</a></li><li>#227 - <a href="/bookstore?type=all&amp;category=ethics_technology">Ethics &amp; Technology</a></li><li>#228 - <a href="/bookstore?type=all&amp;category=personal_science">Personal Science</a></li><li>#229 - <a href="/bookstore?type=all&amp;category=gadgets">Gadgets</a></li><li>#230 - <a href="/bookstore?type=all&amp;category=fiction_business">Business</a></li><li>#231 - <a href="/bookstore?type=all&amp;category=horror">Horror</a></li><li>#232 - <a href="/bookstore?type=all&amp;category=deno">Deno</a></li><li>#233 - <a href="/bookstore?type=all&amp;category=devices">Devices</a></li><li>#234 - <a href="/bookstore?type=all&amp;category=short_stories">Short Stories</a></li><li>#235 - <a href="/bookstore?type=all&amp;category=social_equity">Social Equity</a></li><li>#236 - <a href="/bookstore?type=all&amp;category=serial_fiction">Serial Fiction</a></li><li>#237 - <a href="/bookstore?type=all&amp;category=astronomy_and_space">Astronomy and Space</a></li><li>#238 - <a href="/bookstore?type=all&amp;category=extraterrestrials">Extraterrestrials</a></li><li>#239 - <a href="/bookstore?type=all&amp;category=liberation">Liberation</a></li><li>#240 - <a href="/bookstore?type=all&amp;category=geospatial_data_science">Geospatial Data Science</a></li><li>#241 - <a href="/bookstore?type=all&amp;category=anthropology">Anthropology</a></li><li>#242 - <a href="/bookstore?type=all&amp;category=groovy">Groovy</a></li><li>#243 - <a href="/bookstore?type=all&amp;category=ms_access">MS_Access</a></li><li>#244 - <a href="/bookstore?type=all&amp;category=christianity">Christianity</a></li><li>#245 - <a href="/bookstore?type=all&amp;category=ecology">Ecology</a></li><li>#246 - <a href="/bookstore?type=all&amp;category=earth_and_ocean_sciences">Earth and Ocean Sciences</a></li><li>#247 - <a href="/bookstore?type=all&amp;category=biomaterials">Biomaterials</a></li><li>#248 - <a href="/bookstore?type=all&amp;category=implants">Implants</a></li><li>#249 - <a href="/bookstore?type=all&amp;category=non_fiction_ecoonomics">Economics</a></li><li>#250 - <a href="/bookstore?type=all&amp;category=computing_history">Computing History</a></li><li>#251 - <a href="/bookstore?type=all&amp;category=regional">Regional</a></li><li>#252 - <a href="/bookstore?type=all&amp;category=antiracism">Antiracism</a></li><li>#253 - <a href="/bookstore?type=all&amp;category=atheism">Atheism</a></li><li>#254 - <a href="/bookstore?type=all&amp;category=meteor">Meteor</a></li><li>#255 - <a href="/bookstore?type=all&amp;category=paranormal">Paranormal</a></li><li>#256 - <a href="/bookstore?type=all&amp;category=azure_documentdb">Azure DocumentDB</a></li><li>#257 - <a href="/bookstore?type=all&amp;category=backbone">Backbone</a></li><li>#258 - <a href="/bookstore?type=all&amp;category=actor_model">Actor Model</a></li><li>#259 - <a href="/bookstore?type=all&amp;category=dance">Dance</a></li><li>#260 - <a href="/bookstore?type=all&amp;category=nanowrimo">NaNoWriMo</a></li><li>#261 - <a href="/bookstore?type=all&amp;category=modular_business_models">Modular Business Models</a></li><li>#262 - <a href="/bookstore?type=all&amp;category=style_and_esthetics">Style and Esthetics</a></li><li>#263 - <a href="/bookstore?type=all&amp;category=environment_behavior_change">Behavior Change</a></li><li>#264 - <a href="/bookstore?type=all&amp;category=celebrity">Celebrity</a></li><li>#265 - <a href="/bookstore?type=all&amp;category=christian_anthropology">Christian Anthropology</a></li><li>#266 - <a href="/bookstore?type=all&amp;category=wine">Wine</a></li><li>#267 - <a href="/bookstore?type=all&amp;category=equality">Equality</a></li><li>#268 - <a href="/bookstore?type=all&amp;category=juvenile">Juvenile</a></li><li>#269 - <a href="/bookstore?type=all&amp;category=animation">Animation</a></li><li>#270 - <a href="/bookstore?type=all&amp;category=bible_study">Bible Study</a></li><li>#271 - <a href="/bookstore?type=all&amp;category=devotions">Devotions</a></li><li>#272 - <a href="/bookstore?type=all&amp;category=worship">Worship</a></li><li>#273 - <a href="/bookstore?type=all&amp;category=psalms">Psalms</a></li><li>#274 - <a href="/bookstore?type=all&amp;category=environment_energy">Energy</a></li><li>#275 - <a href="/bookstore?type=all&amp;category=pet_care">Pet Care</a></li><li>#276 - <a href="/bookstore?type=all&amp;category=judaism">Judaism</a></li><li>#277 - <a href="/bookstore?type=all&amp;category=law_enforcement">Law Enforcement</a></li><li>#278 - <a href="/bookstore?type=all&amp;category=black_history">Black History</a></li><li>#279 - <a href="/bookstore?type=all&amp;category=moderailroading">Model Railroading</a></li><li>#280 - <a href="/bookstore?type=all&amp;category=gender_research">Gender Research</a></li><li>#281 - <a href="/bookstore?type=all&amp;category=normalized_enterprise">Normalized Enterprise </a></li><li>#282 - <a href="/bookstore?type=all&amp;category=ext_js">Ext JS</a></li><li>#283 - <a href="/bookstore?type=all&amp;category=juvenile_history">Juvenile History</a></li><li>#284 - <a href="/bookstore?type=all&amp;category=cmake">CMake</a></li><li>#285 - <a href="/bookstore?type=all&amp;category=erlang">Erlang</a></li><li>#286 - <a href="/bookstore?type=all&amp;category=equity">Equity</a></li><li>#287 - <a href="/bookstore?type=all&amp;category=esports">Esports</a></li><li>#288 - <a href="/bookstore?type=all&amp;category=environment">Environment</a></li><li>#289 - <a href="/bookstore?type=all&amp;category=environment_policy">Policy</a></li><li>#290 - <a href="/bookstore?type=all&amp;category=screenplays">Screenplays</a></li></ul></div></ul></div><section class="BookstoreContent__Container"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Featured Leanpub Book</h3><div class="container--small"><div class="Featured__Content"><div class="Featured__CoverWrapper"><div class="book-cover s_featured "><a tabindex="0" href="/aamfp-10th"><img src="https://d2sofvawe08yqg.cloudfront.net/aamfp-10th/s_featured?1743556078" style="width:auto;height:auto"/></a></div></div><div class="Featured__Summary"><a href="/aamfp-10th"><h5 class="Featured__Title ltr">Actionable Agile Metrics For Predictability: Tenth Anniversary Edition</h5></a><div class="Featured__Authors"><a class="avatar-with-name--horizontal link" href="/u/daniel_vacanti"><div class="avatar--tiny"><img class="avatar__image" src="https://d39qdlcrvnra4b.cloudfront.net/avatars/405678/small/Daniel_Vacanti.jpg?1425586242" alt="Daniel Vacanti"/></div><span class="avatar-with-name__name">Daniel S. Vacanti</span></a></div><div class="Featured__WideContent"><div class="Featured__Blurb">Actionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics and analytics to get the predictability your customers crave.</div><a class="Featured__LearnButton btn--solid" href="/aamfp-10th">Learn More</a></div></div></div><div class="Featured__NarrowContent"><div class="Featured__Blurb">Actionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics and analytics to get the predictability your customers crave.</div><a class="Featured__LearnButton btn--solid" href="/aamfp-10th">Learn More</a></div></div></div></section><span></span><section class="layer"><div class="container--large"><h3 class="layer__title section-title">The Shelf</h3><div class="container--small"><div class="shelf__spotlight"><div class="shelf-carousel"><div class="shelf-carousel__content largeScreenShelf"><div class="covers-list"><div class="book-cover s_shelf "><a tabindex="0" href="/thedscv3handbook"><img src="https://d2sofvawe08yqg.cloudfront.net/thedscv3handbook/s_shelf?1722314672" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/wholehearted-mike-burrows"><img src="https://d2sofvawe08yqg.cloudfront.net/wholehearted-mike-burrows/s_shelf?1742108781" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/be-a-learning-machine"><img src="https://d2sofvawe08yqg.cloudfront.net/be-a-learning-machine/s_shelf?1738244214" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/TheArtOfLeadership"><img src="https://d2sofvawe08yqg.cloudfront.net/TheArtOfLeadership/s_shelf?1649026963" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/cleancodeprinciplesandpatterns2ndedition"><img src="https://d2sofvawe08yqg.cloudfront.net/cleancodeprinciplesandpatterns2ndedition/s_shelf?1712998004" style="width:auto;height:auto"/></a></div></div><div class="shelf-graphic"><div class="shelf-carousel__bottom-face"></div><div class="shelf-carousel__top-face"></div><div class="shelf-carousel__front-face"></div></div><div class="text-list"><div class="text"><a class="title">The DSC V3 Handbook</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/gijsr">Gijs Reijn</a></div></div></div><div class="text"><a class="title">Wholehearted</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/mikeburrows">Mike Burrows</a></div></div></div><div class="text"><a class="title">Be a Learning Machine</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/alberto-souza">Alberto Souza</a></div></div></div><div class="text"><a class="title">THE ART OF LEADERSHIP</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/erik_schon">Erik Schön</a></div></div></div><div class="text"><a class="title">Clean Code Principles and Patterns, 2nd Edition</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/petrisilen">Petri Silen</a></div></div></div></div></div><div class="shelf-carousel__content mobileShelf"><div class="covers-list"><div class="book-cover s_shelf "><a tabindex="0" href="/thedscv3handbook"><img src="https://d2sofvawe08yqg.cloudfront.net/thedscv3handbook/s_shelf?1722314672" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/wholehearted-mike-burrows"><img src="https://d2sofvawe08yqg.cloudfront.net/wholehearted-mike-burrows/s_shelf?1742108781" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/be-a-learning-machine"><img src="https://d2sofvawe08yqg.cloudfront.net/be-a-learning-machine/s_shelf?1738244214" style="width:auto;height:auto"/></a></div></div><div class="shelf-graphic"><div class="shelf-carousel__bottom-face"></div><div class="shelf-carousel__top-face"></div><div class="shelf-carousel__front-face"></div></div><div class="text-list"><div class="text"><a class="title">The DSC V3 Handbook</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/gijsr">Gijs Reijn</a></div></div></div><div class="text"><a class="title">Wholehearted</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/mikeburrows">Mike Burrows</a></div></div></div><div class="text"><a class="title">Be a Learning Machine</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/alberto-souza">Alberto Souza</a></div></div></div></div><div class="covers-list"><div class="book-cover s_shelf "><a tabindex="0" href="/TheArtOfLeadership"><img src="https://d2sofvawe08yqg.cloudfront.net/TheArtOfLeadership/s_shelf?1649026963" style="width:auto;height:auto"/></a></div><div class="book-cover s_shelf "><a tabindex="0" href="/cleancodeprinciplesandpatterns2ndedition"><img src="https://d2sofvawe08yqg.cloudfront.net/cleancodeprinciplesandpatterns2ndedition/s_shelf?1712998004" style="width:auto;height:auto"/></a></div></div><div class="shelf-graphic"><div class="shelf-carousel__bottom-face"></div><div class="shelf-carousel__top-face"></div><div class="shelf-carousel__front-face"></div></div><div class="text-list"><div class="text"><a class="title">THE ART OF LEADERSHIP</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/erik_schon">Erik Schön</a></div></div></div><div class="text"><a class="title">Clean Code Principles and Patterns, 2nd Edition</a><div class="author-name"><div class="names"><a class="link" href="https://leanpub.com/u/petrisilen">Petri Silen</a></div></div></div></div></div></div><div style="max-height:0;min-height:0" class="shelf-preview"></div></div></div></div></section><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Featured Leanpub Course</h3><div class="Featured FeaturedCourse container--small"><div class="Featured__Content Featured__Course"><div class="Featured__CoverWrapper"><a href="/courses/leanpub/ainutshell"><img class="course-title-page" src="https://dclrlzd4gl55u.cloudfront.net/3467/s_featured?1738779790" alt="Generative AI in a Nutshell (The Course)"/></a></div><div class="Featured__Summary"><a href="/courses/leanpub/ainutshell"><h5 class="Featured__Title">Generative AI in a Nutshell (The Course)</h5></a><div class="Featured__Authors"><a class="avatar-with-name--horizontal link" href="/u/hkniberg"><div class="avatar--tiny"><img class="avatar__image" src="https://d39qdlcrvnra4b.cloudfront.net/avatars/4496/small/Henrik-AI-face-2.jpeg?1737670994" alt="Henrik Kniberg"/></div><span class="avatar-with-name__name">Henrik Kniberg</span></a></div><div class="Featured__WideContent"><div class="Featured__Blurb"><p>This is a fast-paced, practical, and visual guide to the strange new world of Generative AI. It is like an extended version of Henrik's viral video with the same name.</p></div><a class="Featured__LearnButton btn--solid" href="/courses/leanpub/ainutshell">Learn More</a></div></div></div><div class="Featured__NarrowContent"><div class="Featured__Blurb"><p>This is a fast-paced, practical, and visual guide to the strange new world of Generative AI. It is like an extended version of Henrik's viral video with the same name.</p></div><a class="Featured__LearnButton btn--solid" href="/courses/leanpub/ainutshell">Learn More</a></div></div></div></section><div class="FeaturedPodcastHero"><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Featured Leanpub Podcast Interview</h3><div class="FeaturedPodcastHero__main container--small"><div class="FeaturedPodcastHero__PrimaryContent"><a class="FeaturedPodcastHero__author" href="/u/anonymous_dBA3BE56M57UqRgAxg5gFA"><div class="avatar--medium"><img class="avatar__image" src="https://d39qdlcrvnra4b.cloudfront.net/avatars/1021109/medium/IMG_8902.JPG?1742565302"/></div><div class="name">Nicolas Brown</div></a><div class="FeaturedPodcastHero__content"><h3 class="title">Nicolas Brown, Author of Real World Agility</h3><div class="FeaturedPodcastHero__WideContent"><div class="description"><p><strong>Nicolas Brown</strong> - Agility expert Nicolas Brown, author of <a href="https://leanpub.com/realworldagility">Real World Agility</a>, joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.</p> </div><div class="create-book-actions"><a class="btn--hollow" href="/podcasts/frontmatter/nicolas-brown-03-04-25">Listen or Read Now</a><a class="btn--solid" href="https://www.youtube.com/watch?v=SV0T6ro-jUg" target="_blank" rel="noopener noreferrer">Watch on YouTube</a></div></div></div></div><div class="FeaturedPodcastHero__NarrowContent"><div class="description"><p><strong>Nicolas Brown</strong> - Agility expert Nicolas Brown, author of <a href="https://leanpub.com/realworldagility">Real World Agility</a>, joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.</p> </div><div class="create-book-actions"><a class="btn--hollow" href="/podcasts/frontmatter/nicolas-brown-03-04-25">Listen Now</a><a class="btn--solid" href="https://www.youtube.com/watch?v=SV0T6ro-jUg" target="_blank" rel="noopener noreferrer">Watch on YouTube</a></div></div></div></div></section></div><section class="bookstore-content-wrapper alwaysShowTypeLinks"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Top Books</h3><section class="bookstore-content container--small"><div class="BookstoreContent__List__Container"><ol class="BookstoreContent__List"><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->1</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/theLMbook"><img src="https://d2sofvawe08yqg.cloudfront.net/theLMbook/s_list?1736924192" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/theLMbook"><article><h3 class="ListItem__Title">The Hundred-Page Language Models Book</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Andriy Burkov</span></div></div><div class="hint"><p>Master language models through mathematics, illustrations, and code―and build your own from scratch!</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->2</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/transformer-daikibo-gengo-moderu"><img src="https://d2sofvawe08yqg.cloudfront.net/transformer-daikibo-gengo-moderu/s_list?1739067305" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/transformer-daikibo-gengo-moderu"><article><h3 class="ListItem__Title">Super Study Guide: Transformer と大規模言語モデル</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Afshine Amidi</span><span>, </span><span>Shervine Amidi</span><span>, and </span><span>Yoshiyuki Nakai</span></div></div><div class="hint"><p>大規模言語モデル (LLM) の主要な概念から実践的な応用例まで、簡潔に図解されている学習ガイドです。プロジェクトでの利用、面接対策、個人的な学習にも最適です。</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->3</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/transformers-large-language-models"><img src="https://d2sofvawe08yqg.cloudfront.net/transformers-large-language-models/s_list?1725733082" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/transformers-large-language-models"><article><h3 class="ListItem__Title">Super Study Guide: Transformers &amp; Large Language Models</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Afshine Amidi</span><span> and </span><span>Shervine Amidi</span></div></div><div class="hint"><p>A clear, illustrated guide to large language models, covering key concepts and practical applications. Ideal for projects, interviews, or personal learning.</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->4</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/os"><img src="https://d2sofvawe08yqg.cloudfront.net/os/s_list?1620484636" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/os"><article><h3 class="ListItem__Title">OpenIntro Statistics</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>David Diez</span><span>, </span><span>Christopher Barr</span><span>, </span><span>Mine Cetinkaya-Rundel</span><span>, and </span><span>OpenIntro</span></div></div><div class="hint"><p>A complete foundation for Statistics, also serving as a foundation for Data Science.</p><p> </p><p>Leanpub revenue supports OpenIntro (US-based nonprofit) so we can provide free desk copies to teachers interested in using OpenIntro Statistics in the classroom and expand the project to support free textbooks in other subjects.</p><p> </p><p>More resources: <a href="http://www.openintro.org" target="_blank">openintro.org</a>.</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->5</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/cissplastmile"><img src="https://d2sofvawe08yqg.cloudfront.net/cissplastmile/s_list?1728527714" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/cissplastmile"><article><h3 class="ListItem__Title">CISSP: The Last Mile</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Pete Zerger</span></div></div><div class="hint"><p>The book covers every topic in the latest CISSP exam syllabus, organized in a format that makes it easy to drill down on specific exam domains and concepts at-a-glance, making it an essential exam resource for anyone who aims to prepare for the exam without wasting time or money.</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->6</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/visualising-software-architecture"><img src="https://d2sofvawe08yqg.cloudfront.net/visualising-software-architecture/s_list?1653735204" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/visualising-software-architecture"><article><h3 class="ListItem__Title">The C4 model for visualising software architecture</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Simon Brown</span></div></div><div class="hint"><p>A guide to visualising your software architecture with the C4 model.</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->7</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/datamungingwithperl"><img src="https://d2sofvawe08yqg.cloudfront.net/datamungingwithperl/s_list?1743100272" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/datamungingwithperl"><article><h3 class="ListItem__Title">Data Munging With Perl [2ed]</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Dave Cross</span></div></div><div class="hint"><p>"Work in Progress" - Updated with the latest syntax, new CPAN modules and new file formats</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->8</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/windows11fieldguide"><img src="https://d2sofvawe08yqg.cloudfront.net/windows11fieldguide/s_list?1730851675" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/windows11fieldguide"><article><h3 class="ListItem__Title">Windows 11 Field Guide</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Rafael Rivera</span><span> and </span><span>Paul Thurrott</span></div></div><div class="hint"><p>The <em>Windows 11 Field Guide</em> is a full-length e-book about the latest version of Microsoft Windows, aimed at those users who will upgrade from Windows 10 or acquire Windows 11 with a new PC.</p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->9</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/theMLbook"><img src="https://d2sofvawe08yqg.cloudfront.net/theMLbook/s_list?1620586520" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/theMLbook"><article><h3 class="ListItem__Title">The Hundred-Page Machine Learning Book</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Andriy Burkov</span></div></div><div class="hint"><p><strong>Everything you really need to know in Machine Learning in a hundred pages.</strong></p></div></article></a></li><li class="BookListItem ListItem"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->10</span><div class="ListItem__Cover"><div class="book-cover s_list "><a tabindex="0" href="/architectsparadox"><img src="https://d2sofvawe08yqg.cloudfront.net/architectsparadox/s_list?1736315804" style="width:auto;height:auto"/></a></div></div></div><a class="ListItem__Text" href="/architectsparadox"><article><h3 class="ListItem__Title">The Architect’s Paradox</h3><p class="ListItem__Subtitle hint"></p><div class="ListItem__Author"><div class="names"><span>Barry O’Reilly</span></div></div><div class="hint"><p>An introduction to philosophy for software engineers and architects that will help them understand their design process. This book helps to answer the question “Why are we like this?”. </p></div></article></a></li></ol><section class="pagination-wrapper"><button class="btn--plain">See More</button></section></div></section></div></section></section><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Featured Bundle</h3><section class="Featured FeaturedBundle container--small"><div class="Featured__Content Featured__Bundle"><div class="Featured__CoverWrapper"><div class="bundle-cover s_featured "><a tabindex="0" href="/b/kotlin_mm"><img src="https://s3.amazonaws.com/bundles.leanpub.com/kotlin_mm/s_featured/bundle-cover.png?1734355071" style="width:auto;height:auto"/></a></div></div><div class="Featured__Summary"><a href="/b/kotlin_mm"><h5 class="Featured__Title">Big Kotlin pack</h5></a><span></span><div class="Featured__WideContent"><div class="Featured__Blurb"></div><a class="Featured__LearnButton btn--solid" href="/b/kotlin_mm">Learn More</a></div></div></div><div class="Featured__NarrowContent"><div class="Featured__Blurb"></div><a class="Featured__LearnButton btn--solid" href="/b/kotlin_mm">Learn More</a></div></section></div></section><section class="bookstore-content-wrapper alwaysShowTypeLinks"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Top Bundles</h3><section class="bookstore-content container--small"><div class="BookstoreContent__List__Container"><ol class="BookstoreContent__List"><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/residues"><span class="ItemRank">#<!-- -->1</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/residues/s_list/bundle-cover.png?1738242654" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/residues"><article><h3 class="ListItem__Title">Residues and The Philosophy of Software Architecture</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">This bundle includes the books “Residues: Time, Change and Uncertainty in Software Architecture” and “The Architect’s Paradox: Uncertainty and the Philosophy of Software Architecture” by Barry M O’Reilly. The books complement each other, with Residues giving a practical description of how to apply residuality theory and The Architect’s Paradox...</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->1</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/residues"><img src="https://s3.amazonaws.com/bundles.leanpub.com/residues/s_list/bundle-cover.png?1738242654" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/residues"><article><h3 class="ListItem__Title">Residues and The Philosophy of Software Architecture</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">This bundle includes the books “Residues: Time, Change and Uncertainty in Software Architecture” and “The Architect’s Paradox: Uncertainty and the Philosophy of Software Architecture” by Barry M O’Reilly. The books complement each other, with Residues giving a practical description of how to apply residuality theory and The Architect’s Paradox...</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/cciespultimate"><span class="ItemRank">#<!-- -->2</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cciespultimate/s_list/bundle-cover.png?1622996293" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/cciespultimate"><article><h3 class="ListItem__Title">CCIE Service Provider Ultimate Study Bundle</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification...</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->2</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/cciespultimate"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cciespultimate/s_list/bundle-cover.png?1622996293" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/cciespultimate"><article><h3 class="ListItem__Title">CCIE Service Provider Ultimate Study Bundle</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification...</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/tmf-books"><span class="ItemRank">#<!-- -->3</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/tmf-books/s_list/bundle-cover.png?1740372251" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/tmf-books"><article><h3 class="ListItem__Title">All Books from The Medical Futurist</h3><p class="hint">12<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->3</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/tmf-books"><img src="https://s3.amazonaws.com/bundles.leanpub.com/tmf-books/s_list/bundle-cover.png?1740372251" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/tmf-books"><article><h3 class="ListItem__Title">All Books from The Medical Futurist</h3><p class="hint">12<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/ts-everything"><span class="ItemRank">#<!-- -->4</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/ts-everything/s_list/bundle-cover.jpg?1682564687" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/ts-everything"><article><h3 class="ListItem__Title">The &#x27;Everything EA&#x27; bundle</h3><p class="hint">39<!-- --> Books</p></article><div class="ListItem__About hint">The ‘Everything EA’ bundle: A comprehensive library of articles about enterprise architecture to help you navigate your way through change. Want to know more about enterprise architecture, and how to use it to create real value in business and beyond? This huge curated collection of articles will help you to explore key concepts, methods, tools...</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->4</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/ts-everything"><img src="https://s3.amazonaws.com/bundles.leanpub.com/ts-everything/s_list/bundle-cover.jpg?1682564687" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/ts-everything"><article><h3 class="ListItem__Title">The &#x27;Everything EA&#x27; bundle</h3><p class="hint">39<!-- --> Books</p></article><div class="ListItem__About hint">The ‘Everything EA’ bundle: A comprehensive library of articles about enterprise architecture to help you navigate your way through change. Want to know more about enterprise architecture, and how to use it to create real value in business and beyond? This huge curated collection of articles will help you to explore key concepts, methods, tools...</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/masterpython"><span class="ItemRank">#<!-- -->5</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/masterpython/s_list/bundle-cover.png?1625782438" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/masterpython"><article><h3 class="ListItem__Title">Master Python</h3><p class="hint">4<!-- --> Books</p></article><div class="ListItem__About hint">Learn to master Python with this bundle. Be part of the #onemillion2021 project where one million people get trained on Cloud Computing, Data and Python globally by 2021.</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->5</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/masterpython"><img src="https://s3.amazonaws.com/bundles.leanpub.com/masterpython/s_list/bundle-cover.png?1625782438" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/masterpython"><article><h3 class="ListItem__Title">Master Python</h3><p class="hint">4<!-- --> Books</p></article><div class="ListItem__About hint">Learn to master Python with this bundle. Be part of the #onemillion2021 project where one million people get trained on Cloud Computing, Data and Python globally by 2021.</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/software-architecture"><span class="ItemRank">#<!-- -->6</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/software-architecture/s_list/bundle-cover.png?1736243111" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/software-architecture"><article><h3 class="ListItem__Title">Software Architecture</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">"Software Architecture for Developers" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before...</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->6</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/software-architecture"><img src="https://s3.amazonaws.com/bundles.leanpub.com/software-architecture/s_list/bundle-cover.png?1736243111" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/software-architecture"><article><h3 class="ListItem__Title">Software Architecture</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint">"Software Architecture for Developers" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before...</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/modern-thymeleaf-bundle"><span class="ItemRank">#<!-- -->7</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/modern-thymeleaf-bundle/s_list/bundle-cover.png?1701595582" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/modern-thymeleaf-bundle"><article><h3 class="ListItem__Title">Modern Thymeleaf Bundle</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint"> Exclusive Offer: Master Spring Boot &amp; Thymeleaf Like a Pro! Dive into the world of modern web development with our special bundle, featuring two essential guides: Taming Thymeleaf and Modern frontends with htmx. Why This Bundle?Comprehensive Learning: Start with Taming Thymeleaf to build a solid foundation in Spring Boot and Thymeleaf,...</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->7</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/modern-thymeleaf-bundle"><img src="https://s3.amazonaws.com/bundles.leanpub.com/modern-thymeleaf-bundle/s_list/bundle-cover.png?1701595582" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/modern-thymeleaf-bundle"><article><h3 class="ListItem__Title">Modern Thymeleaf Bundle</h3><p class="hint">2<!-- --> Books</p></article><div class="ListItem__About hint"> Exclusive Offer: Master Spring Boot &amp; Thymeleaf Like a Pro! Dive into the world of modern web development with our special bundle, featuring two essential guides: Taming Thymeleaf and Modern frontends with htmx. Why This Bundle?Comprehensive Learning: Start with Taming Thymeleaf to build a solid foundation in Spring Boot and Thymeleaf,...</div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/cppbestpractices_7_puzzler_books"><span class="ItemRank">#<!-- -->8</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cppbestpractices_7_puzzler_books/s_list/bundle-cover.png?1680726485" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/cppbestpractices_7_puzzler_books"><article><h3 class="ListItem__Title">C++ Best Practices + 7 Puzzler Books</h3><p class="hint">8<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->8</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/cppbestpractices_7_puzzler_books"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cppbestpractices_7_puzzler_books/s_list/bundle-cover.png?1680726485" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/cppbestpractices_7_puzzler_books"><article><h3 class="ListItem__Title">C++ Best Practices + 7 Puzzler Books</h3><p class="hint">8<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/kotlin_mm"><span class="ItemRank">#<!-- -->9</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/kotlin_mm/s_list/bundle-cover.png?1734355071" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/kotlin_mm"><article><h3 class="ListItem__Title">Big Kotlin pack</h3><p class="hint">5<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->9</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/kotlin_mm"><img src="https://s3.amazonaws.com/bundles.leanpub.com/kotlin_mm/s_list/bundle-cover.png?1734355071" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/kotlin_mm"><article><h3 class="ListItem__Title">Big Kotlin pack</h3><p class="hint">5<!-- --> Books</p></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="BundleListItem ListItem"><div class="BundleListItem__Wide-Content"><a class="Item_PositionAndCover" href="/b/cocoacasts-bundle-plus"><span class="ItemRank">#<!-- -->10</span><div class="bundle-cover s_list ListItem__Cover"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cocoacasts-bundle-plus/s_list/bundle-cover.png?1621298495" style="width:auto;height:auto"/></div></a><a class="ListItem__Text" href="/b/cocoacasts-bundle-plus"><article><h3 class="ListItem__Title">Cocoacasts Bundle Plus</h3><p class="hint">3<!-- --> Books</p></article><div class="ListItem__About hint">This bundle includes:Mastering MVVM With SwiftMastering Core Data With SwiftThe Missing Manual for Swift Development</div></a></div><div class="BundleListItem__Narrow-Content"><div class="BundleListItem__Content"><span class="ItemRank">#<!-- -->10</span><div class="BundleContent"><div class="bundle-cover s_list ListItem__Cover"><a tabindex="0" href="/b/cocoacasts-bundle-plus"><img src="https://s3.amazonaws.com/bundles.leanpub.com/cocoacasts-bundle-plus/s_list/bundle-cover.png?1621298495" style="width:auto;height:auto"/></a></div><a class="ListItem__Text" href="/b/cocoacasts-bundle-plus"><article><h3 class="ListItem__Title">Cocoacasts Bundle Plus</h3><p class="hint">3<!-- --> Books</p></article><div class="ListItem__About hint">This bundle includes:Mastering MVVM With SwiftMastering Core Data With SwiftThe Missing Manual for Swift Development</div></a></div></div></div></li></ol><section class="pagination-wrapper"><button class="btn--plain">See More</button></section></div></section></div></section></section><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Leanpub: Publish Early, Publish Often</h3><section class="Motto leanpub-motto container--small"><div><p align="left"><em>Imagine a world where authors can earn money writing books...</em></p><p align="left"><strong>You</strong> can use Leanpub to <strong>write, publish and sell</strong> an <strong>ebook</strong> or <strong>online course</strong>.</p><p align="left">We pay <strong>80% royalties</strong> on purchases of <strong>$7.99 or more</strong>, and <strong>80% royalties minus a 50 cent flat fee</strong> on purchases between <strong>$0.99 and $7.98</strong>. <strong>You earn $8 on a $10 sale, and $16 on a $20 sale</strong>. So, if we sell <strong>5000 non-refunded copies of your book for $20</strong>, you&#x27;ll earn <strong>$80,000</strong>.</p><p align="left">Authors have earned<span class="royalties-counter__price"><a href="/authors" class="link">$14,399,909</a></span>writing, publishing and selling on Leanpub.</p><p align="left">You can either write your book in <strong>Markdown</strong> or you can <strong>upload PDF or EPUB files</strong> to sell in our store.</p><p align="left">If you are writing in <strong>Markdown</strong>, you can use our simple <strong>in-browser text editor</strong>, or you can <strong>write on your computer</strong> and sync with <strong>GitHub or Dropbox</strong>. Either way, you can publish your Leanpub ebook with <strong>one click</strong>. You can publish your book while you&#x27;re writing it, or wait until it is done: it&#x27;s up to you.</p><p align="left">You can <strong>create a Leanpub course in Markdown</strong> as well. Leanpub courses are like Leanpub books, but with quizzes and exercises that learners complete on the Leanpub website to earn a certificate of completion. To learn more about how to create a Leanpub course, you can watch <a href="https://youtu.be/unLz6zYaryE">this video</a> on YouTube which shows <strong>the entire process</strong> from signup to publish!</p></div><div class="create-book-actions"><a class="btn--solid" href="/create/book">Create a Book or Course</a><a class="btn--hollow" href="/authors">Learn More</a></div></section></div></section><section class="bookstore-content-wrapper alwaysShowTypeLinks"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Top Courses</h3><section class="bookstore-content container--small"><div class="BookstoreContent__List__Container"><ol class="BookstoreContent__List"><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->1</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/patterns-of-application-development-using-ai"><img src="https://dclrlzd4gl55u.cloudfront.net/3468/s_list?1738288077" alt="Patterns of Application Development Using AI (The Course)" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/patterns-of-application-development-using-ai"><article><h3 class="ListItem__Title">Patterns of Application Development Using AI (The Course)</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Obie Fernandez</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->1</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/patterns-of-application-development-using-ai"><img src="https://dclrlzd4gl55u.cloudfront.net/3468/s_list?1738288077" alt="Patterns of Application Development Using AI (The Course)" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/patterns-of-application-development-using-ai"><article><h3 class="ListItem__Title">Patterns of Application Development Using AI (The Course)</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Obie Fernandez</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->2</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/reverseengineeringmalwarepracticalexamples2"><img src="/assets/4ff3902f36fe329f0f529c88beacd0e0.png" alt="Reverse Engineering Malware, Practical Examples 2" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/reverseengineeringmalwarepracticalexamples2"><article><h3 class="ListItem__Title">Reverse Engineering Malware, Practical Examples 2</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Jason Reaves</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->2</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/reverseengineeringmalwarepracticalexamples2"><img src="/assets/4ff3902f36fe329f0f529c88beacd0e0.png" alt="Reverse Engineering Malware, Practical Examples 2" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/reverseengineeringmalwarepracticalexamples2"><article><h3 class="ListItem__Title">Reverse Engineering Malware, Practical Examples 2</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Jason Reaves</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->3</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/macos-apps-with-swiftui"><img src="https://dclrlzd4gl55u.cloudfront.net/3221/s_list?1706479634" alt="Getting Started: macOS Apps with SwiftUI" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/macos-apps-with-swiftui"><article><h3 class="ListItem__Title">Getting Started: macOS Apps with SwiftUI</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Grace Huang</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->3</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/macos-apps-with-swiftui"><img src="https://dclrlzd4gl55u.cloudfront.net/3221/s_list?1706479634" alt="Getting Started: macOS Apps with SwiftUI" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/macos-apps-with-swiftui"><article><h3 class="ListItem__Title">Getting Started: macOS Apps with SwiftUI</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Grace Huang</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->4</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/thecompleteguidetopycharm"><img src="https://dclrlzd4gl55u.cloudfront.net/2118/s_list?1621305767" alt="The Complete Guide to PyCharm" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/thecompleteguidetopycharm"><article><h3 class="ListItem__Title">The Complete Guide to PyCharm</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Lukas Rieger</span><span>, </span><span>Christian Mayer</span><span>, and </span><span>Shubham Sayon</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->4</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/thecompleteguidetopycharm"><img src="https://dclrlzd4gl55u.cloudfront.net/2118/s_list?1621305767" alt="The Complete Guide to PyCharm" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/thecompleteguidetopycharm"><article><h3 class="ListItem__Title">The Complete Guide to PyCharm</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Lukas Rieger</span><span>, </span><span>Christian Mayer</span><span>, and </span><span>Shubham Sayon</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->5</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/kotlin_coroutines"><img src="https://dclrlzd4gl55u.cloudfront.net/3225/s_list?1708515804" alt="Kotlin Coroutines" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/kotlin_coroutines"><article><h3 class="ListItem__Title">Kotlin Coroutines</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Marcin Moskała</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->5</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/kotlin_coroutines"><img src="https://dclrlzd4gl55u.cloudfront.net/3225/s_list?1708515804" alt="Kotlin Coroutines" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/kotlin_coroutines"><article><h3 class="ListItem__Title">Kotlin Coroutines</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Marcin Moskała</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->6</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/selectedpythonexercises"><img src="https://dclrlzd4gl55u.cloudfront.net/988/s_list?1621305142" alt="Python Exercises Collection" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/selectedpythonexercises"><article><h3 class="ListItem__Title">Python Exercises Collection</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Lukas Rieger</span><span> and </span><span>Christian Mayer</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->6</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/selectedpythonexercises"><img src="https://dclrlzd4gl55u.cloudfront.net/988/s_list?1621305142" alt="Python Exercises Collection" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/selectedpythonexercises"><article><h3 class="ListItem__Title">Python Exercises Collection</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Lukas Rieger</span><span> and </span><span>Christian Mayer</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->7</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/terraform-associate"><img src="https://dclrlzd4gl55u.cloudfront.net/3401/s_list?1738161803" alt="HashiCorp Certified: Terraform Associate (003)" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/terraform-associate"><article><h3 class="ListItem__Title">HashiCorp Certified: Terraform Associate (003)</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Mattias Fjellström</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->7</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/terraform-associate"><img src="https://dclrlzd4gl55u.cloudfront.net/3401/s_list?1738161803" alt="HashiCorp Certified: Terraform Associate (003)" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/terraform-associate"><article><h3 class="ListItem__Title">HashiCorp Certified: Terraform Associate (003)</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Mattias Fjellström</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->8</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/chatgpt-to-speech"><img src="https://dclrlzd4gl55u.cloudfront.net/3039/s_list?1682349223" alt="ChatGPT-to-Speech: Build an AI-Powered Podcast With Python" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/chatgpt-to-speech"><article><h3 class="ListItem__Title">ChatGPT-to-Speech: Build an AI-Powered Podcast With Python</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Daniel Davis</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->8</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/chatgpt-to-speech"><img src="https://dclrlzd4gl55u.cloudfront.net/3039/s_list?1682349223" alt="ChatGPT-to-Speech: Build an AI-Powered Podcast With Python" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/chatgpt-to-speech"><article><h3 class="ListItem__Title">ChatGPT-to-Speech: Build an AI-Powered Podcast With Python</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Daniel Davis</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->9</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/communication-basics"><img src="https://dclrlzd4gl55u.cloudfront.net/1289/s_list?1738935127" alt="Communication Super power - The Foundations of Effective Communication" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/communication-basics"><article><h3 class="ListItem__Title">Communication Super power - The Foundations of Effective Communication</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Rob Lambert</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->9</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/communication-basics"><img src="https://dclrlzd4gl55u.cloudfront.net/1289/s_list?1738935127" alt="Communication Super power - The Foundations of Effective Communication" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/communication-basics"><article><h3 class="ListItem__Title">Communication Super power - The Foundations of Effective Communication</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Rob Lambert</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->10</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/java-course"><img src="https://dclrlzd4gl55u.cloudfront.net/1410/s_list?1668664904" alt="Getting Proficient in Java" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/courses/leanpub/java-course"><article><h3 class="ListItem__Title">Getting Proficient in Java</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Tarun Telang</span></div></div></article><div class="ListItem__About hint"></div></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->10</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/courses/leanpub/java-course"><img src="https://dclrlzd4gl55u.cloudfront.net/1410/s_list?1668664904" alt="Getting Proficient in Java" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/courses/leanpub/java-course"><article><h3 class="ListItem__Title">Getting Proficient in Java</h3><p class="hint"></p><div class="ListItem__Author"><div class="names"><span>Tarun Telang</span></div></div></article><div class="ListItem__About hint"></div></a></div></div></div></li></ol><section class="pagination-wrapper"><button class="btn--plain">See More</button></section></div></section></div></section></section><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Featured Track</h3><div class="Featured FeaturedCourseSet container--small"><div class="Featured__Content Featured__Course_Set"><div class="Featured__CoverWrapper"><a href="/set/leanpub/csharp-architect"><div class="course-cover s_featured"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/34/s_featured/Control-Statements-Loops.jpg?1621306529" alt="Design and Architecture Fundamentals in C#" style="width:auto"/></div></a></div><aside class="Featured__Summary"><a href="/set/leanpub/csharp-architect"><h5 class="Featured__Title">Design and Architecture Fundamentals in C#</h5></a><div class="Featured__WideContent"><div class="Featured__Blurb"><p>The following <!-- -->4<!-- --> courses are included in this track...</p><p><a href="/courses/leanpub/solid">Software Architecture: Meta and SOLID Principles in C#</a>, <a href="/courses/leanpub/dotnet-injection">Software Architecture: Dependency Injection in .NET</a>, <a href="/courses/leanpub/funcsharp">Software Design: Functional Programming in C#</a>, <a href="/courses/leanpub/art-of-clean-coding">Master the Art of Writing Clean Code in C#</a></p></div><a class="Featured__LearnButton btn--solid" href="/set/leanpub/csharp-architect">Learn More</a></div></aside></div><div class="Featured__NarrowContent"><div class="Featured__Blurb"><p>The following <!-- -->4<!-- --> courses are included in this track...</p><p><a href="/courses/leanpub/solid">Software Architecture: Meta and SOLID Principles in C#</a>, <a href="/courses/leanpub/dotnet-injection">Software Architecture: Dependency Injection in .NET</a>, <a href="/courses/leanpub/funcsharp">Software Design: Functional Programming in C#</a>, <a href="/courses/leanpub/art-of-clean-coding">Master the Art of Writing Clean Code in C#</a></p></div><a class="Featured__LearnButton btn--solid" href="/set/leanpub/csharp-architect">Learn More</a></div></div></div></section><section class="bookstore-content-wrapper alwaysShowTypeLinks"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Top Tracks</h3><section class="bookstore-content container--small"><div class="BookstoreContent__List__Container"><ol class="BookstoreContent__List"><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->1</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/ugsskitc"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/11/s_list/6-gameGSSK-3.jpg?1621306406" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/ugsskitc"><article><h3 class="ListItem__Title">Game Studio Starter Kit (6 Game Collection)</h3><p class="hint">This is the perfect Game Studio starter kit for launching your online dream business. This kit contains 6 tutorials books to help you create 9 different online game mechanics. You could have all 9 games ready in a day for each game. Start your Game Studio today.</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->1</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/ugsskitc"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/11/s_list/6-gameGSSK-3.jpg?1621306406" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/ugsskitc"><article><h3 class="ListItem__Title">Game Studio Starter Kit (6 Game Collection)</h3><p class="hint">This is the perfect Game Studio starter kit for launching your online dream business. This kit contains 6 tutorials books to help you create 9 different online game mechanics. You could have all 9 games ready in a day for each game. Start your Game Studio today.</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->2</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/acethetechnicalinterview"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/83/s_list/code-unsplash.jpg?1718034547" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/acethetechnicalinterview"><article><h3 class="ListItem__Title">Ace the technical interview</h3><p class="hint">A topic by topic breakdown of the hardest technical interview questions</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->2</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/acethetechnicalinterview"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/83/s_list/code-unsplash.jpg?1718034547" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/acethetechnicalinterview"><article><h3 class="ListItem__Title">Ace the technical interview</h3><p class="hint">A topic by topic breakdown of the hardest technical interview questions</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->3</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/wpfmvvm"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/15/s_list/300316_4409_6.jpg?1621306422" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/wpfmvvm"><article><h3 class="ListItem__Title">WPF + MVVM</h3><p class="hint">Learn both WPF and MVVM to build fully functional UI-applications with the modern UI-building framework, Windows Presentation Foundation (WPF).MVVM will help you to build WPF apps in a correct way from the software design perspective.</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->3</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/wpfmvvm"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/15/s_list/300316_4409_6.jpg?1621306422" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/wpfmvvm"><article><h3 class="ListItem__Title">WPF + MVVM</h3><p class="hint">Learn both WPF and MVVM to build fully functional UI-applications with the modern UI-building framework, Windows Presentation Foundation (WPF).MVVM will help you to build WPF apps in a correct way from the software design perspective.</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->4</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/realworldpython"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/21/s_list/covercoruse.001.png?1621306430" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/realworldpython"><article><h3 class="ListItem__Title">Real World Python</h3><p class="hint">Learn Python the Practical Way - In this course you learn all the basics of the Python programming language. It contains exercises, explanatory videos, an example solution and a quiz. This will enable you to apply your skills to a wide range of real world problems.A collection of more Python exercises - Exercises with solutions to continue...</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->4</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/realworldpython"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/21/s_list/covercoruse.001.png?1621306430" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/realworldpython"><article><h3 class="ListItem__Title">Real World Python</h3><p class="hint">Learn Python the Practical Way - In this course you learn all the basics of the Python programming language. It contains exercises, explanatory videos, an example solution and a quiz. This will enable you to apply your skills to a wide range of real world problems.A collection of more Python exercises - Exercises with solutions to continue...</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->5</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/programmingskills"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/23/s_list/photo-of-woman-wearing-turtleneck-top-2777898.jpg?1621306449" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/programmingskills"><article><h3 class="ListItem__Title">How to Thrive in 2030 | Master These 3 Programming Skills</h3><p class="hint">Don't want to miss out on emerging technologies and new markets in the programming space? Consider these three mega trends:Python is the fastest-growing major programming language on the planet.Machine Learning Engineers earn more money than ever before.Text Processing is a highly sought-after skill considering the exponentially growing supply...</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->5</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/programmingskills"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/23/s_list/photo-of-woman-wearing-turtleneck-top-2777898.jpg?1621306449" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/programmingskills"><article><h3 class="ListItem__Title">How to Thrive in 2030 | Master These 3 Programming Skills</h3><p class="hint">Don't want to miss out on emerging technologies and new markets in the programming space? Consider these three mega trends:Python is the fastest-growing major programming language on the planet.Machine Learning Engineers earn more money than ever before.Text Processing is a highly sought-after skill considering the exponentially growing supply...</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->6</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/asimplepathtopythonsuccess"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/28/s_list/python-logo-generic-reddit.jpg?1621306498" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/asimplepathtopythonsuccess"><article><h3 class="ListItem__Title">A Simple Path to Python Success</h3><p class="hint">Python is the fastest-growing major programming language on the planet. This practical course set will teach you Python in a hands-on, highly practical way that guarantees your success. All you need to go from zero to completing your own Python projects in a relaxed, student-centric, and fun environment. Create yourself a new skill that'll bring...</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->6</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/asimplepathtopythonsuccess"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/28/s_list/python-logo-generic-reddit.jpg?1621306498" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/asimplepathtopythonsuccess"><article><h3 class="ListItem__Title">A Simple Path to Python Success</h3><p class="hint">Python is the fastest-growing major programming language on the planet. This practical course set will teach you Python in a hands-on, highly practical way that guarantees your success. All you need to go from zero to completing your own Python projects in a relaxed, student-centric, and fun environment. Create yourself a new skill that'll bring...</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->7</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/7courses"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/30/s_list/shutupandcode.jpg?1621306505" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/7courses"><article><h3 class="ListItem__Title">7 Course-Bundle: Shut Up and Code Python + PyCharm + Coding Interview + Machine Learning + One-Liners + Regex + Lambdas</h3><p class="hint">"Shut up and code." Laughter in the audience. The hacker had just plugged in his notebook and started sharing his screen to present his super-smart Python script. "Shut up and code" The letters written in a white literal coding font on black background was the hackers' home screen background mantra. At the time, I was a first-year computer...</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->7</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/7courses"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/30/s_list/shutupandcode.jpg?1621306505" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/7courses"><article><h3 class="ListItem__Title">7 Course-Bundle: Shut Up and Code Python + PyCharm + Coding Interview + Machine Learning + One-Liners + Regex + Lambdas</h3><p class="hint">"Shut up and code." Laughter in the audience. The hacker had just plugged in his notebook and started sharing his screen to present his super-smart Python script. "Shut up and code" The letters written in a white literal coding font on black background was the hackers' home screen background mantra. At the time, I was a first-year computer...</p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->8</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/tradingcomounprofesional"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/95/s_list/TCUP.PNG?1723925484" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/tradingcomounprofesional"><article><h3 class="ListItem__Title">Trading como un Profesional a tu ritmo</h3><p class="hint"></p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->8</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/tradingcomounprofesional"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/95/s_list/TCUP.PNG?1723925484" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/tradingcomounprofesional"><article><h3 class="ListItem__Title">Trading como un Profesional a tu ritmo</h3><p class="hint"></p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->9</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/kotlin_for_developers"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/73/s_list/16.jpg?1695196701" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/kotlin_for_developers"><article><h3 class="ListItem__Title">Kotlin for developers</h3><p class="hint">This is the complete track to learn about essential Kotlin features and get ready for working in Kotlin in daily basis. It starts from essentials, and on the way reaches advanced topics like efficient collection processing or DSL creation. </p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->9</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/kotlin_for_developers"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/73/s_list/16.jpg?1695196701" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/kotlin_for_developers"><article><h3 class="ListItem__Title">Kotlin for developers</h3><p class="hint">This is the complete track to learn about essential Kotlin features and get ready for working in Kotlin in daily basis. It starts from essentials, and on the way reaches advanced topics like efficient collection processing or DSL creation. </p></article></a></div></div></div></li><li class="CourseListItem ListItem"><div class="CourseListItem__Wide-Content"><div class="Item_PositionAndCover"><span class="ItemRank">#<!-- -->10</span><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/csharp-architect"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/34/s_list/Control-Statements-Loops.jpg?1621306529" style="width:auto"/></a></div></div></div><a class="ListItem__Text" href="/set/leanpub/csharp-architect"><article><h3 class="ListItem__Title">Design and Architecture Fundamentals in C#</h3><p class="hint">Taking this course bundle, you'll learn:SOLID principles (SRP, OCP, ISP, LSP, DIP) in-depthMeta principles: DRY, KISS, YAGNI, SoC, CQS, Law of Demeter, PoLADependency Injection in Depth: IoC or DI containers, best practices, and anti-patternsFunctional Programming in C#: purity and side effects, functional C# features, immutability,...</p></article></a></div><div class="CourseListItem__Narrow-Content"><div class="CourseListItem__Content"><span class="ItemRank">#<!-- -->10</span><div><div class="ListItem__Cover"><div class="course-cover s_list"><a tabindex="0" href="/set/leanpub/csharp-architect"><img class="course-title-page" src="https://d2o9wnd5wywfpj.cloudfront.net/covers/34/s_list/Control-Statements-Loops.jpg?1621306529" style="width:auto"/></a></div></div><a class="ListItem__Text" href="/set/leanpub/csharp-architect"><article><h3 class="ListItem__Title">Design and Architecture Fundamentals in C#</h3><p class="hint">Taking this course bundle, you'll learn:SOLID principles (SRP, OCP, ISP, LSP, DIP) in-depthMeta principles: DRY, KISS, YAGNI, SoC, CQS, Law of Demeter, PoLADependency Injection in Depth: IoC or DI containers, best practices, and anti-patternsFunctional Programming in C#: purity and side effects, functional C# features, immutability,...</p></article></a></div></div></div></li></ol><section class="pagination-wrapper"><button class="btn--plain">See More</button></section></div></section></div></section></section><div class="MiniBanner"><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Leanpub: Publish Early, Publish Often</h3><div class="container--small"><p align="left"><strong>On Leanpub, you can publish your book while you write it, and earn 80% royalties.</strong></p><p align="left">We call this <strong>Lean Publishing</strong>, and it&#x27;s why Leanpub exists. Lean Publishing is the act of publishing an <strong>in-progress</strong> book using <strong>lightweight tools</strong> and <strong>many iterations</strong> to get <strong>reader feedback</strong>, <strong>pivot</strong> until you have the right book and <strong>build traction</strong> once you do. You can learn more about Lean Publishing in <a href="/manifesto">The Lean Publishing Manifesto</a>, or watch the Tools of Change <a href="https://www.youtube.com/watch?v=ozO0kOnqmyA">conference talk</a> about it. There&#x27;s even a <a href="/lean/read">book</a> about these ideas, which still guide us today.</p><p align="left">Leanpub is a <strong>magical typewriter</strong> for authors: just write in <strong>plain text</strong>, and to preview or publish your ebook, just <strong>click a button</strong>. On Leanpub, you can write in <strong>Markdown</strong> and generate your ebook with one click. (<strong>Markdown is really easy</strong>: everything you need to know is in the <strong>template</strong> we set up for you when you create a new book.)</p><p align="left">Now, if you have completed a book already or if you have a writing workflow you prefer, you can also just <strong>upload your own PDF or EPUB files</strong> and <strong>click a button</strong> to publish them.</p><p align="left">Whether you&#x27;re writing in Markdown or uploading PDF and EPUB files, Leanpub is the best place to <strong>write, publish and sell in-progress and completed ebooks</strong>, with coupons, variable pricing, bundles and more. Besides how easy we make everything and the excellent support we provide, the other reason authors love Leanpub is our <strong>80% royalty rate</strong>.</p><p align="left">We pay <strong>80% royalties</strong> on purchases of <strong>$7.99 or more</strong>, and <strong>80% royalties minus a 50 cent flat fee</strong> on purchases between <strong>$0.99 and $7.98</strong>.</p><p align="left"><strong>You earn $8 on a $10 sale, and $16 on a $20 sale</strong>.</p><p align="left">So, if we sell <strong>5000</strong> copies of your book for <strong>$20</strong>, you&#x27;ll earn <strong>$80,000</strong>. Yes, some authors have already earned much more than that on Leanpub. In fact, authors have earned <strong>over $14 million USD</strong> writing, publishing and selling on Leanpub.</p><p align="left">Finally, Leanpub also supports publishing <strong>online courses</strong>, using the same Lean Publishing approach and Markdown-based workflow that we use for ebooks, and paying the same 80% royalties! To learn more, just create a course: the new course will contain a <strong>template</strong> which shows you how to get started.</p><div class="create-book-actions"><a class="btn--hollow" href="/authors">Learn About Leanpub</a><a class="btn--solid" href="/create/book">Create a Book or Course</a></div></div></div></section></div><div class="MiniBanner"><section class="layer grey"><div class="container--large"><h3 class="layer__title section-title">Leanpub Promotes Authors</h3><div class="container--small"><p>Leanpub <strong>does a lot to promote authors and their books</strong>. We constantly promote books on social media, especially new releases and bestsellers. We create short videos to help promote selected new books, and you can <a href="/launch">apply</a> to have us record and produce a book launch video with you - for free. Leanpub co-founder Len Epp also records in-depth long-form interviews with select authors for our Frontmatter podcast, and we provide you with a range of marketing tools, from custom coupons to affordably-priced sponsored spots in our Weekly and Monthly newsletter sales.</p><div class="create-book-actions"><a class="btn--solid" href="/launch">Apply For a Book Launch Video</a></div></div></div></section></div><div class="MiniBanner"><section class="layer"><div class="container--large"><h3 class="layer__title section-title">Reader Memberships</h3><div class="container--small"><p>Leanpub reader memberships support Leanpub authors and Leanpub!</p><p><strong>Leanpub is a platform where authors self-publish ebooks and online courses.</strong> We&#x27;re a bootstrapped startup, and we launched in 2010.</p><p><strong>Leanpub Reader Memberships are a great deal.</strong> They give you you free access to about <strong>2000 books</strong> on Leanpub that are <strong><a class="link" href="/bookstore?sort=free_with_membership&amp;type=book">only free with membership</a>.</strong> This includes <strong>hundreds of books</strong> about <strong><a class="link" href="/bookstore?sort=free_with_membership&amp;type=book&amp;category=computer_programming">computer programming</a></strong>, <strong><a class="link" href="/bookstore?sort=free_with_membership&amp;type=book&amp;category=data_science">data science</a></strong>, <strong><a class="link" href="/bookstore?sort=free_with_membership&amp;type=book&amp;category=software_architecture">software architecture</a></strong> and more!</p><p>Besides being a great deal, <strong>Reader Memberships support Leanpub authors!</strong> Specifically, <strong>50% of the money</strong> from Reader Memberships is paid as royalties to Leanpub authors.</p><div class="create-book-actions"><a class="btn--solid" href="/reader_memberships">Learn More about Reader Memberships</a></div></div></div></section></div></section></section><div class="happiness-guarantee" id="happiness-guarantee"><div class="container--large"><h3 class="hg-title"><span>The Leanpub 60 Day 100% Happiness Guarantee</span></h3><p><span>Within <strong>60 days of purchase</strong> you can get a <strong>100% refund</strong> on any Leanpub purchase, in <strong>two clicks</strong>.<br/><br/>Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.<br/><br/><em>You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!</em><br/><br/>So, there's no reason not to click the Add to Cart button, is there?<br/><br/><a href="/refunds">See full terms...</a></span></p></div></div><div class="royalties-counter--dark section--earth-green" id="royalties-counter"><div class="container--small"><h3 class="royalties-counter-title"><span>Earn $8 on a $10 Purchase, and $16 on a $20 Purchase</span></h3><h4 class="royalties-counter__string"><span>We pay <strong>80% royalties</strong> on purchases of <strong>$7.99 or more</strong>, and <strong>80% royalties minus a 50 cent flat fee</strong> on purchases between <strong>$0.99 and $7.98</strong>. <strong>You earn $8 on a $10 sale, and $16 on a $20 sale</strong>. So, if we sell <strong>5000 non-refunded copies of your book for $20</strong>, you'll earn <strong>$80,000</strong>.<br/><br/><em>(Yes, some authors have already earned much more than that on Leanpub.)</em><br/><br/>In fact, authors have earned<span class='royalties-counter__price'><a href='/authors'>over $14 million</a></span>writing, publishing and selling on Leanpub.<br/><br/><strong><a href='/authors' class='link'>Learn more about writing on Leanpub</a></strong></span></h4></div></div><div class="free-updates"><div class="container--small"><h3 class="free-updates-title"><span>Free Updates. DRM Free.</span></h3><p><span>If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).<br/><br/>Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.<br/><br/>Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.</span></p><p><a href="https://help.leanpub.com/reader-help/what-formats-do-leanpub-books-come-in"><span>Learn more about Leanpub&#x27;s ebook formats and where to read them</span></a></p></div></div><div class="become-an-author"><div class="container--small"><h3 class="baa-title"><span>Write and Publish on Leanpub</span></h3><p><span>You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!<br/><br/>Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.<br/><br/>Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.</span></p><p><a href="/authors"><span>Learn more about writing on Leanpub</span></a></p></div></div><div class="newsletter-signup-banner" id="newsletter-signup-banner"><div class="container--small"><h3 class="nsb-title"><span>If You&#x27;re Still Reading This, You&#x27;ll Love Our Newsletters</span></h3><p><span>This page has a lot of words on it. Our newsletters have a lot of words in them. Clearly, you're a person who likes words!<br/><br/>Our <strong>weekly and monthly sale newsletters</strong> also have <strong>amazing deals on books, bundles and courses</strong>.<br/><br/><a href="/newsletters">Learn more about our weekly and monthly newsletters here</a></span></p></div></div></div><div class="footer"><div class="container--small"><div><h1 class="footer-logo"><a href="/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAACGCAYAAACL3YV2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACt5JREFUeNrsXe1x2zgQpTL+L3VgXgVmKhCvgigVWKkgugosV+CkAtkVyKlAdAViKhBdgZQKdMDdMoNoKIkA8Y33ZjiyE1kCFvv27QIgkWUAAAAAAAAAAAAAAAAAAAAAAAAAAABAXBjF2Knj8Viwlwm7SvqnW3blwlvyk99bNHSJv7+z68Cumv8+Go0az/ve9q21wdC+c1TcBqzvNQjg12C3Ts4H+45ecwtfXZGDvHFiuHIMcnbe/yn1u7TwtQ0Fg5/0WrH+H0AA+wNeWnL2vk5RESFeTTkEEX7mef8r31UyKAJQOnMvRPoQ8MquF+YIr5psMCMbzALpf02EePE9bRp56vSlMOCTgLM0rgTf2fUsGxVJ7ebs+hqBDdqAUIEA1wf83iNp14lndj1eIwLZ4YFsERt4319UAkK0BCB5/2qpgPMB34gIh478njv+IhE7cDX4ritNDIoAQjH3EGm075MWcBJ8I3ssyBaTBG3BleDR5OSBNwQgx19EkNfqjIJZQurXp176ZpMIIzg+kDIRbBFgl2iqAwxIjRgB/gqeADSPv/XAoDVFF463K+8Vtw+Enp5UQq79fuW9U3rlKu3DmstH0+sINxY6YTPlabI/l+kPOuaeKYUriAx39OpbKncgZ/9Jr7WOFILWZNr+29xuYsV3bCjAnL2sDEa3N50DLqls3DnuHUZLTnI+r17ZXHE9CQhTgyr5hfXrOWj9ZcZaHvVhx64niko+9TGnfu6O5rGj78o9s0FJY6PTBsvgKxnWiZWGAV/4NuCXFI9dGwOOvyE1DcEGOY3ZUDKsTLfVRgq0UZDIdv/Idx3SLkj2aVE7PpO+vJ0Wz7K1BKnUSkO+3FAqUCn097SY5enKP5bTJf79fPpbZV8XT+3+Dl0BdpLRfk4DqOToJMVLUp6NgfRjTdGt6Nkm/t69wnftaYW4l5NRn9c9vqt05AcTGlspf4ghBTKW8wlG5c6+PdpHW5MUPdq5lvjc9bUgwPdQUb9lyVU69gepmjB0588lB2chEe1cOPwg9aL/31+J+vMexfZ+QDtnjn1iIdnePGQClDqik+VZlqHYU1snFwjcRd7tOSWh/q80tW8Zg0+EQoC5ZGeLriL6GCbO5vAdKVFnykPve9LcLtcEKCTba3Tm64Ph/krJ1+nshHAPcIjgDv3UFdn5gh27Pmf/3yTDbw753HF/AE9VeBEY1f0BCjNQecgEGEtOfVrtvCX8txeqK/IyZ+DTm1+61IH9uM7i3Tl7MORD3hFAZotAHSkBWjxQOje5Mme+zcze/D71wBa1IR/yjgBDI1hMBMgondueqXV4rrvJsG1ctw8FowBdW5RvIxxQ7uAbkQTChsFUbhZ6M+RD0jC2HVp1NTdyBRCjGifB3zTAqwy46EumdvqaVABZ5lYJEeA3CRw4f+lB3yvDvuQFAaAAjvNb2CkgBTjd7Rj0EjggNdaxKgCiP+A9TBJAZr65AgGsFpWh1QHTEAkABQCSVgCZKJPKGgBwecx1+BIUAACcEkAhx6xBAKvwoQaoDftUUApwAAGSgxfnipkiwCAFwBpAEqgN+1Q4CtCxzwMEiBy+nCxpigB3AyMBtgiYxdSTdtSGfMo5AWQcuCsSFPBR1AE2gqIpAgy9E2wM30AdYCMo+qAAv6AAyeJXdArQ95GBAhrUANZRetKOxrBvOVGAiQYjQAHSQGPYt5wQYJACaLqVEoiTAPEpQMeJ4Yj+iUDhtPggFOB2YASAAliAR8/cbAz5ljMC5Mj/AUMEyFMgANYAQIBkCPAOBUge79EQQGEX5wE1gDP4UgMcDPuYVQWQbVwNBUgeTh+X7poAp8/ER/RPD4dkCdBxWAKif2JwfWCGbgLcDmQ+FMAeph615WDIx7xWAOT/gEod4LUCDL0RBmsAqAN0+ph1AshE8J9QAOCCL+jwMXsEUJjBQQ3gFmWgCqB1tlCnAsgyEzUAoFIDaPUTnQQYxEqsAQAu6gBnCtBxSAKif6JweWCGTgKMfWE10Ft1y0CbPvaRADKsrJD/Az18IigFAIDgoJMAMnLadTjCFMORNJwcmAEFSBtl6gbQQgCFYqrCYAADagBtBTwUAIACOJDS2gSbgaDh5MAMJwrgy+EIgJln7ofkE7oIMB3IdCiAG/i2+Fgb8jmvFADRH/DGN3QRYOiBGFgDAGQVoPCJAEMPxADcwLftJ9YPzBhMAIVDC1ADoAbQoQBaDsz44MCIqAEAXb4x8YEAgxQAawCAqgLoSOGsKwDWAPyCiXO3VKHgG14ogMxiSoP8H3WAgo/o8D0vFKCBvwEafSS4GqCrc1gDAFQJkIemAO8YX+/g21rAezAEUDisADUAagCtafLQAzNuBjY2N9k5A4ZthJ+vRZqxEB3zzMDxPIbBpxQPdF169GAVMgFoXJogCWBgDaB18jfh51rX1CtFm5xU65Zecw8cvSJC1zr7GxABwlAAhYORr6EiZ69sDDy1vxGjJj3RjhPhkyVCtA7/Q+GBUt6D25jZNBgCDD0Qo1QY/B/cAXwZfCLdK13twtI9u2YaycD7/cK/w0AQ8REHidrk1lkr2WBvjv2x6fj7ZY+/W7Nroft0QKENBU/FTHw+fe7qqIY9u54MtSs31Wcf/MrXFKhLAe50RzxKSQq6JhQh8j6K0yG9bSHZCDl20/dcK1Kpin3uI3uds+trj8jGv+uR+i772PCC+loI/Z5kF6Y6z6Qb1clkwcFyfXEw5IPamSqD5RWmtxGvkIxkM/q7DX2GLWxIwWYy5KS/6Wrnjl1zSfvP6PM2Fvu9p+97ou83oVBLmQa5cv6JpOEWHZ/BjbntO/Dk8HNKK3ZHv7Cmtk162m4lONRSwuZz+i6fsKP+zHUQglJeGUxcEKCUbGR5RrL75OhLIkooWPdRBiL0pGekXwfU/y2NWeHKt2wQYCbZSNnU5snDKK8SGZcqEUpIl2KwgVQxT0FPBjMXBNCapwnyvj3Gh31fIlypE0LHViJNHFRf9sWQvUBjTUTibF+xH3fsWmVxnhPAB/yB9/EcEVrHJzs8ZHEeGFLQGLc1g66xHrtQAOW52sijfd+0YHaSTu4StUWnKthaC7gZGNWkF2BoLnyepX0kErcDL2pf6fdZwrZoVYHXCc/s9bvCareyL42GrAFIvL3qsxAFAKr+wkgz8pkAAGAUqgS4UXT+kCJ5Q9fpvvjqQnrSTtm12wmKAFO2dvsC73t770O7taML4pjeUX9FW3gN7pMqGyRvIgoC7YC/ZZJ7dnoauN32zMkw9TCdq4S+Vwp7dqoLfRf3GE0DDQj6UiCarnvwILK3g17Z3iZMhODF6yeHRSwvovn28FfbN8HQhEYpBAPXSvHIbLC01fmlwymzhU8Pc2rJQFN5O0tTqL0WkyzboKCxcTW1vbTZ2Y0Dpw8mFzVkn00otRdtZbFNhk1MBDB2M4hlIuw0RfwyYDu0+7r2MRHA5B77eUzTcwP29eytyrodW8xNBs+QCbA+RvyUaIqCG8lAkEdsj9LE9m6bxY6uNGcV80ArTh4sE7JHTj6gKz0qbLHXyp1TkQ767MyA753sa/drFm2oKpQ2GrtQKOJWKTv9GRXdnzh/Acv8QYaVwiTCQvb7VFaCLzlxk/35ZLYqkefYSIGvULPB+sh+XNM/fYadftuGL+g90yUuuPHXaXZ5e4Z0gB0pMLSrAQ0GUC3aCYMOwA8BAAAAAAAAAAAAAAAAAAAAAAAAQA/+FWAAV/eYy/UR7lcAAAAASUVORK5CYII="/></a></h1><h3 class="footer-slogan">Publish Early, Publish Often</h3></div><div><ul class="footer-list-break"><li><h5 class="footer-headings">Path</h5></li><li><div class="footer-descriptions-top">There are many paths, but the one you&#x27;re on right now on Leanpub is...</div></li><li><div> › </div></li></ul></div><div class="footer-links"><ul class="footer-list"><ul class="footer-columns"><li><h5 class="footer-headings">READERS</h5></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Newsletters</h5></li><li><a href="/newsletters">Weekly Sale</a></li><li><a href="/newsletters">Monthly Sale</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Store</h5></li><li><a href="/">Home</a></li><li><a href="/redeem">Redeem a Token</a></li><li><a href="/bookstore/book?search">Search</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Support</h5></li><li><a href="https://help.leanpub.com/en/articles/3788293-the-leanpub-faq">Leanpub FAQ</a></li><li><a href="https://help.leanpub.com/en/articles/4405350-leanpub-author-faq">Leanpub Author FAQ</a></li><li><a href="https://help.leanpub.com/en/">Search our Help Center</a></li><li><a href="https://help.leanpub.com/en/articles/110768-if-i-can-t-find-an-answer-to-my-question-in-this-help-center-what-should-i-do">How to Contact Us</a></li></ul><ul class="footer-columns"><li><h5 class="footer-headings">FRONTMATTER PODCAST</h5></li></ul><ul class="footer-list-break"><li><a href="/podcasts/featured">Featured Episode</a></li><li><a href="/podcasts/frontmatter">Episode List</a></li></ul><ul class="footer-columns"><li><h5 class="footer-headings">MEMBERSHIPS</h5></li></ul><ul class="footer-list-break"><li><a href="/reader_memberships">Reader Memberships</a></li><li><a href="/departmentmemberships">Department Reader Memberships</a></li><li><a href="/author_memberships">Author Memberships</a></li><li><a href="/membership">Your Membership</a></li></ul><ul class="footer-columns"><li><h5 class="footer-headings">COMPANY</h5></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">About</h5></li><li><a href="/about">About Leanpub</a></li><li><a href="/blog">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/press">Press</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Essays</h5></li><li><a href="/ai_services">AI Services</a></li><li><a href="/imagine_a_world">Imagine a world...</a></li><li><a href="/manifesto">Manifesto</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">More</h5></li><li><a href="/partner_program">Partner Program</a></li><li><a href="/causes">Causes</a></li><li><a href="/accessibility">Accessibility</a></li></ul></ul><ul class="footer-list"><ul class="footer-columns"><li><h5 class="footer-headings">AUTHORS</h5></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Write and Publish on Leanpub</h5></li><li><a href="/create/book">Create a Book</a></li><li><a href="/create/course">Create a Course</a></li><li><a href="/course_set_admin/leanpub/course_sets/new">Create a Track</a></li><li><a href="/testimonials">Testimonials</a></li><li><a href="/authors">Why Leanpub</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Services</h5></li><li><a href="/translate_ai/buy">TranslateAI</a></li><li><a href="/translate_word/buy">TranslateWord</a></li><li><a href="/translate_epub/buy">TranslateEPUB</a></li><li><a href="/publish_word/create">PublishWord</a></li><li><a href="/publish_on_amazon/buy">Publish on Amazon</a></li><li><a href="/course_ai/buy">CourseAI</a></li><li><a href="/global_author/buy">GlobalAuthor</a></li><li><a href="/shelf/buy">Marketing Packages</a></li><li><a href="/index_ai/buy">IndexAI</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Author Newsletter</h5></li><li><a href="/newsletters">The Leanpub Author Update</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Author Support</h5></li><li><a href="https://help.leanpub.com/author-help">Author Help Center</a></li><li><a href="https://community.leanpub.com/c/authors">Leanpub Authors Forum</a></li><li><a href="https://leanpub.com/manual/read">The Leanpub Manual</a></li><li><a href="/help/supported_languages">Supported Languages</a></li><li><a href="https://leanpub.com/lfm/read">The LFM Manual</a></li><li><a href="https://leanpub.com/markua/read">The Markua Manual</a></li><li><a href="/help/api">API Docs</a></li></ul><ul class="footer-list-break"><li><h5 class="footer-list-title">Organizations</h5></li><li><a href="/organizations">Learn More</a></li><li><a href="/p/register">Sign Up</a></li></ul><ul class="footer-columns"><li><h5 class="footer-headings">LEGAL</h5></li></ul><ul class="footer-list-break"><li><a href="/terms">Terms of Service</a></li><li><a href="/takedown">Copyright Policy</a></li><li><a href="/privacy">Privacy Policy</a></li><li><a href="/refunds">Refund Policy</a></li></ul></ul></div><p class="footer-copyright">*   *   *</p><p class="footer-copyright">Leanpub is copyright © 2010-<!-- -->2025<!-- --> <a href="http://ruboss.com">Ruboss Technology Corp.</a><br/>All rights reserved.</p><p class="footer-copyright">This site is protected by reCAPTCHA<br/>and the Google <a rel="noopener noreferrer" target="_blank" href="https://policies.google.com/privacy">Privacy Policy</a> and <a rel="noopener noreferrer" target="_blank" href="https://policies.google.com/terms">Terms of Service</a> apply.</p></div></div></div></div><ul class="react-flash-container"></ul><div class="modal-wrapper"></div><span></span></div></div> <div class='cookies-banner alert alert--info' style='display: none'> Leanpub requires cookies in order to provide you the best experience. <a class='dismiss link'>Dismiss</a> </div> <script type='text/javascript'> window.addEventListener('load', function() { var shouldShowCookies = document.cookie.indexOf('should_show_cookies') !== -1 if (shouldShowCookies) { var banner = document.querySelector('.cookies-banner') // IE < 9 check if (banner.style.removeProperty) { banner.style.removeProperty('display'); } else { banner.style.removeAttribute('display'); } document.querySelector('.cookies-banner').classList.add('shown') // Note that we have to use vanilla JS here because ujs (remote links) code doesn't live in the react app, and i don't // want to have to write this shit twice. document.querySelector('.cookies-banner .dismiss').addEventListener('click', function() { document.querySelector('.cookies-banner').remove() var xhr = new XMLHttpRequest() xhr.open("POST", "/api/v1/accepted_terms/dismiss_cookies", true); xhr.send() }) } }) </script> </body> <script charSet="UTF-8" data-reactroot="">window.__data={"AdminFlag":{"all":{"1":{"type":"AdminFlag","flag":false,"slug":"homepage_essay","subtitle":null,"text":"\u003Ch2 id=\"ai-services\"\u003EAI Services\u003C\u002Fh2\u003E\n\n\u003Cp\u003E\u003Cem\u003EIn 2023 AI is evolving quickly, and so are Leanpub’s AI services and our other author services! So, I’m going to update \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fai_services\"\u003Emy AI services essay\u003C\u002Fa\u003E as our vision and our services evolve. (We are Leanpub after all: so just as our books can be updated a click of a button, so can our essays.) I’m also posting this on our homepage briefly today, since it’s relevant for so many of our current and future authors…\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Chr class='scene-break'\u002F\u003E\n\n\u003Cp\u003ELeanpub exists to serve our authors, readers and learners.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe way we do this is by building infrastructure to support Lean Publishing. The definition of Lean Publishing from 2013 is:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003E“Lean Publishing is the act of publishing an in-progress book using lightweight tools and many iterations to get reader feedback, pivot until you have the right book, and build traction once you do.”\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn the decade since then, we’ve produced a number of innovations to support Lean Publishing. Leanpub authors can generate an ebook with one click, they can generate a print-ready PDF with another click, and they can write in a variety of ways including in their web browser and on GitHub. These innovations aren’t just for ebooks. Years ago we added online course support, so our authors can create a course and generate it with one click, complete with quizzes, exercises and automated marking.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe foundation of all this innovation is \u003Ca href=\"http:\u002F\u002Fmarkua.com\u002F\"\u003EMarkua\u003C\u002Fa\u003E, our dialect of Markdown for writing books and courses in plain text.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe important thing to understand about our AI services is that they are a natural extension of this innovation, and they are built on top of Markua as well. So, just as Leanpub automates the process of creating a PDF and EPUB ebook and a print-ready PDF all from your book manuscript, and automates the process of creating an online course from a course manuscript, we also wanted to use AI to give our authors even more.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe’ve always tried to give our authors more than what they get from a traditional publisher: a better royalty rate, more royalties overall, more control, more flexibility, etc. Now, with our AI services, we can go even further: more translations (with \u003Ca href=\"\u002Ftranslate_ai\u002Fbuy\"\u003ETranslateAI\u003C\u002Fa\u003E, which recently translated \u003Ca href=\"\u002Fdatastyle\"\u003E\u003Cem\u003EThe Elements of Data Analytic Style\u003C\u002Fem\u003E\u003C\u002Fa\u003E into all 31 supported languages), more course creation (with \u003Ca href=\"\u002Fcourse_ai\u002Fbuy\"\u003ECourseAI\u003C\u002Fa\u003E), more copy editing (with \u003Ca href=\"\u002Fedit_ai\u002Fbuy\"\u003EEditAI\u003C\u002Fa\u003E), and even more ghostwriting (with \u003Ca href=\"\u002Fghost_ai\u002Fbuy\"\u003EGhostAI\u003C\u002Fa\u003E).\u003C\u002Fp\u003E\n\n\u003Cp\u003EThese services have evolved greatly in the past six months, and GhostAI is a brand new service. All four of these services are described in more detail below.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBesides these four standalone services, however, we have also created two amazing offers…\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Fglobal_author\u002Fbuy\"\u003EGlobalAuthor\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Fglobal_instructor\u002Fbuy\"\u003EGlobalInstructor\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Ch3 id=\"globalauthor\"\u003EGlobalAuthor\u003C\u002Fh3\u003E\n\n\u003Cp\u003E\u003Ca href=\"\u002Fglobal_author\u002Fbuy\"\u003E\u003Cstrong\u003EGlobalAuthor\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E is for authors who have finished their book in English, and now want to go global and reach readers around the world!\u003C\u002Fp\u003E\n\n\u003Cp\u003EWith GlobalAuthor, Leanpub will translate your book using TranslateAI from English into \u003Cstrong\u003E5 or 10 languages\u003C\u002Fstrong\u003E (based on which version of GlobalAuthor you get). These languages are \u003Cstrong\u003Eread by billions of people\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo, you can unlock revenue from global readers in two ways:\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003EMost important, \u003Cstrong\u003Eyour book will be in their language.\u003C\u002Fstrong\u003E Even if someone can read English, most people will prefer to read in their native language.\u003C\u002Fli\u003E\n \u003Cli\u003EYou can \u003Cstrong\u003Eprice your book differently per language\u003C\u002Fstrong\u003E. Instead of us trying to do purchasing power parity based on geolocation (which is vulnerable to VPNs and which has other issues), you can just price your book with different minimum prices for different languages.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003EWith GlobalAuthor, not only do you get the TranlateAI service at a discount, you also get a number of bonuses!\u003C\u002Fp\u003E\n\n\u003Cp\u003EFirst, we’ll \u003Cstrong\u003Epromote your book\u003C\u002Fstrong\u003E on social media, including posting on \u003Cstrong\u003ETwitter, Facebook, Instagram, LinkedIn and Mastodon\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe’ll also \u003Cstrong\u003Einterview you on our Frontmatter podcast\u003C\u002Fstrong\u003E, and we’ll make a \u003Cstrong\u003ELAUNCH video\u003C\u002Fstrong\u003E about your books. Both the Frontmatter Podcast and the LAUNCH video will also go on \u003Cstrong\u003EYouTube\u003C\u002Fstrong\u003E, and we’ll even make \u003Cstrong\u003EYouTube Shorts\u003C\u002Fstrong\u003E with clips from both videos. (This is optional, so if you’re shy, you don’t have to do it, of course. But we strongly encourage you to do so!)\u003C\u002Fp\u003E\n\n\u003Cp\u003EFinally, we’ll give you a \u003Cstrong\u003Eone month spot on The Shelf\u003C\u002Fstrong\u003E, which includes featuring your book in one \u003Cstrong\u003Emonthly newsletter\u003C\u002Fstrong\u003E and in one \u003Cstrong\u003Eweekly newsletter\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIf you’ve finished your book and are now \u003Cstrong\u003Eserious about promoting it\u003C\u002Fstrong\u003E, the GlobalAuthor service is the place to start!\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"globalinstructor\"\u003EGlobalInstructor\u003C\u002Fh3\u003E\n\n\u003Cp\u003E\u003Ca href=\"\u002Fglobal_instructor\u002Fbuy\"\u003E\u003Cstrong\u003EGlobalInstructor\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E is for authors who have finished their book in English, and now want to go global and reach readers \u003Cstrong\u003Eand learners\u003C\u002Fstrong\u003E around the world!\u003C\u002Fp\u003E\n\n\u003Cp\u003EGlobalInstructor includes everything that GlobalAuthor does, including \u003Cstrong\u003Etranslating the book into either 5 or 10 languages\u003C\u002Fstrong\u003E and all the promotional bonuses above.\u003C\u002Fp\u003E\n\n\u003Cp\u003EGlobalInstructor also includes two important additional services:\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003ELeanpub will also \u003Cstrong\u003Eproduce a course from your book using CourseAI\u003C\u002Fstrong\u003E.\u003C\u002Fli\u003E\n \u003Cli\u003ELeanpub will then \u003Cstrong\u003Etranslate this course\u003C\u002Fstrong\u003E into the same \u003Cstrong\u003E5 or 10 languages\u003C\u002Fstrong\u003E that we are translating your book into. This process uses a version of CourseAI which is currently available only for the GlobalInstructor service.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003ESo, readers and learners around the world will be able to read your book or take your course in their own language. Even better, corporate training budgets support higher prices than most books. So, since we also translate the course we’ve produced into the same languages as we’re translating your book into, not only will your book be in their language, your course will be as well!\u003C\u002Fp\u003E\n\n\u003Cp\u003EJust as people who speak English have corporate training budgets, so do people who speak French, German, Japanese, and other languages. So now you can click a button and we’ll produce a course, and multiple translations of that course, for you to market to them. In their language.\u003C\u002Fp\u003E\n\n\u003Cp\u003EGlobalInstructor is a truly ambitious service for equally ambitious authors. Your book can be translated into 5 or 10 languages, produce a course, and that course will also be available in those languages. So you can have readers and learners from all around the world, reading your book or taking your course!\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"four-ai-services\"\u003EFour AI Services\u003C\u002Fh3\u003E\n\n\u003Cp\u003EGlobalAuthor is built on top of TranslateAI, and GlobalInstructor is built on top of both TranslateAI and CourseAI. However, we actually now have four AI services!\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Ftranslate_ai\u002Fbuy\"\u003ETranslateAI\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Fcourse_ai\u002Fbuy\"\u003ECourseAI\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Fedit_ai\u002Fbuy\"\u003EEditAI\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Ca href=\"\u002Fghost_ai\u002Fbuy\"\u003EGhostAI\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003EEach of our AI services now has their own page (linked above) which explains the service in detail, and where you can buy the service. Or you can use your royalties in the author app for your book: we now have a Services section so you can find these services more easily. Also, these services now have dynamic pricing, where the price is determined by the combination of a minimum price and a per-word price above the number of words included in the minimum price. So, on the page for each service, you can choose your book to see what it costs for you.\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"translateai\"\u003ETranslateAI\u003C\u002Fh3\u003E\n\n\u003Cp\u003EOur \u003Ca href=\"\u002Ftranslate_ai\u002Fbuy\"\u003ETranslateAI\u003C\u002Fa\u003E service can now translate a book from English into one of 31 languages, or from one of those 31 languages into English, with one click.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe’ve greatly improved TranslateAI: it is now fully-automated, and the translations are even better, using two GPT-4 translation passes and automated validation using AI and regular expressions.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think it makes a lot of sense for any English-language book which sells reasonably well to be translated into a handful of non-English languages which also sell well on Leanpub. For starters, this would be (alphabetically) French, German, Japanese and Spanish. Since we pay 80% royalties, if you sell the translation for $20, you earn $16 per copy. So, the cost of the translation is covered if you sell a small number of copies in the translated language at that price.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor example, earlier this year, the \u003Ca href=\"\u002Fcloudstrategy_jp\"\u003EJapanese translation of \u003Cem\u003ECloud Strategy\u003C\u002Fem\u003E\u003C\u002Fa\u003E was the #2 bestselling book on Leanpub for a week. (No, this wasn’t a TranslateAI translation: it was done by a human!) \u003C\u002Fp\u003E\n\n\u003Cp\u003ETranslateAI is potentially even more valuable for authors whose first language is \u003Cem\u003Enot English\u003C\u002Fem\u003E, because AI translation will empower these people to have an English-language version of their book. Those of us whose first language is English are kind of spoiled. If I write a computer programming book in English, lots of people in the world can read my book, since English is in many ways the lingua franca of computer programming. But if you don’t speak English, you haven’t been able to write a computer programming book in English. \u003Cem\u003EWell, now you can.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn case you think these two thoughts are contradictory, there are two related ideas: (a) for a popular book it’s worth it to produce a translation into many languages since you reach additional readers (even though some subset of them may have bought the English version if there was no translation) and (b) for many non-English books, it’s especially worth it to produce an English translation, since that lets you reach the largest single-language market on Leanpub.\u003C\u002Fp\u003E\n\n\u003Cp\u003ETo see TranslateAI in action right now, you can also check out the Leanpub book \u003Ca href=\"\u002Fdatastyle\"\u003E\u003Cem\u003EThe Elements of Data Analytic Style\u003C\u002Fem\u003E\u003C\u002Fa\u003E, which has been translated into all 31 supported languages. (This book and all its translations have a free minimum price, so feel free to buy it for free in both the English language version and in one or more translations if you want to see what TranslateAI can do.) There are links to all the translations of \u003Cem\u003EThe Elements of Data Analytic Style\u003C\u002Fem\u003E on \u003Ca href=\"\u002Fdatastyle\"\u003Eits landing page\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"courseai\"\u003ECourseAI\u003C\u002Fh3\u003E\n\n\u003Cp\u003EOur \u003Ca href=\"\u002Fcourse_ai\u002Fbuy\"\u003ECourseAI\u003C\u002Fa\u003E service now can \u003Cstrong\u003Eautomatically\u003C\u002Fstrong\u003E produce an online course from your book manuscript, complete with quizzes, exercises, automated marking and a certificate of completion for learners who pass the course.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe built CourseAI for the following reason: many Leanpub books are already basically courses, and many more can be easily adapted into courses. Most importantly, making your book into a course helps you and your learners.\u003C\u002Fp\u003E\n\n\u003Cp\u003EA company typically won’t pay someone to sit around and read a book, but they often will pay for them to take an expensive course. So you can now get one created from your book, with one click! Your learners can get a certificate of completion for taking your course, which they can use to show their employer that they have learned the material.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis helps you as well, since you can charge a lot more (typically between 2x and 10x) for a course than for a book (even with essentially identical content, plus the quizzes and exercises), since you’re pricing it for corporate training budgets! (Now \u003Cem\u003Ethat’s\u003C\u002Fem\u003E win-win.)\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"editai\"\u003EEditAI\u003C\u002Fh3\u003E\n\n\u003Cp\u003EOur \u003Ca href=\"\u002Fedit_ai\u002Fbuy\"\u003EEditAI\u003C\u002Fa\u003E service now can \u003Cstrong\u003Eautomatically\u003C\u002Fstrong\u003E copy edit an entire book, using two GPT-4 passes and automated validation.\u003C\u002Fp\u003E\n\n\u003Cp\u003EEditAI is configurable by choosing one of \u003Cstrong\u003Etwo modes\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn the \u003Cstrong\u003ETraditional Publisher Copy Edit\u003C\u002Fstrong\u003E mode (the default), EditAI gives the author the type of copy edit that they would get from a traditional publisher. It will correct the grammar and orthography (spelling, hyphenation, capitalization, etc.), and it will also do a thorough copy edit. This includes making copy edits directly to your manuscript, and adding suggestions and questions via HTML comments in the manuscript. You can also optionally choose from one of \u003Cstrong\u003Eten style guides\u003C\u002Fstrong\u003E (Chicago, APA, MLA, etc.) for EditAI to use when editing in \u003Cem\u003ETraditional Publisher Copy Edit\u003C\u002Fem\u003E mode. (You don’t need to choose a style guide: EditAI also does a great job without one specified, and the default is to use no style guide.)\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn the \u003Cstrong\u003EGrammar and Orthography Only\u003C\u002Fstrong\u003E mode, EditAI just corrects the grammar and orthography of your writing, while preserving your tone and voice. If you want a light touch copy edit, choose this setting. Both modes support \u003Cstrong\u003Eeight dialects\u003C\u002Fstrong\u003E of English (American, British, Canadian, etc.).\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"ghostai\"\u003EGhostAI\u003C\u002Fh3\u003E\n\n\u003Cp\u003EOur new \u003Ca href=\"\u002Fghost_ai\u002Fbuy\"\u003EGhostAI\u003C\u002Fa\u003E service grew out of the following crazy question:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EWhat if, instead of just getting an AI copy edit, you could get an AI to ghostwrite your book like a famous author instead?\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EGhostAI is like EditAI, but instead of just doing AI copy editing, it’s fully-automated AI ghostwriting.\u003C\u002Fp\u003E\n\n\u003Cp\u003EGhostAI is configurable by choosing one of \u003Cstrong\u003Eseven author personas\u003C\u002Fstrong\u003E, including parodies of three well-known modern authors (\u003Cem\u003EGraul Paham\u003C\u002Fem\u003E, \u003Cem\u003EArc Mandreessen\u003C\u002Fem\u003E and \u003Cem\u003EHen Borowitz\u003C\u002Fem\u003E) and parodies of four historical authors (\u003Cem\u003EBrary Maddon\u003C\u002Fem\u003E, \u003Cem\u003ECilkie Wollins\u003C\u002Fem\u003E, \u003Cem\u003EDuck Chickens\u003C\u002Fem\u003E and \u003Cem\u003EDodor Fyostoevsky\u003C\u002Fem\u003E).\u003C\u002Fp\u003E\n\n\u003Cp\u003EGhostAI also supports eight dialects of English (American, British, Canadian, etc.), plus the default of “Persona” to write in the English dialect favoured by the AI persona.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EYes, we’re having fun here, but this is a real service, and it’s awesome.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"other-services\"\u003EOther Services\u003C\u002Fh3\u003E\n\n\u003Cp\u003ENow, we want to help you reach as many readers and learners as possible, and we want to help you make as much money as possible. We also want to help you save time, so you can spend more time writing and less time doing other things.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo, we have other services. Gradually we’re adding AI to some of them where it makes sense.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe’ve recently improved two of our other services, \u003Cstrong\u003EConvert to Markua\u003C\u002Fstrong\u003E and \u003Cstrong\u003EPublish on Amazon\u003C\u002Fstrong\u003E. Again, we built both of these to save our authors time.\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"convert-to-markua\"\u003EConvert to Markua\u003C\u002Fh3\u003E\n\n\u003Cp\u003EFirst, we’ve improved \u003Ca href=\"\u002Fconvert_to_markua\u002Fbuy\"\u003E\u003Cstrong\u003EConvert to Markua\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EConvert to Markua can convert a manuscript from Leanpub Flavoured Markdown (LFM) or an EPUB file into Markua.\u003C\u002Fp\u003E\n\n\u003Cp\u003E(You can do this yourself, of course, but it’s even easier to click a button and have us do it for you!)\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe way that this service works depends on the input format. For books written in LFM, the Convert to Markua service will use GPT-4. For books written in EPUB, the Convert to Markua service will use Pandoc.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMarkua is the future of Leanpub, so we want all our authors to be writing in Markua. More importantly, our AI services all require that the book be in Markua.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe reason for this is that GPT-4 actually understands Markua (!!!), since it has an open specification. So, we built our AI services to be Markua-only, not Markua or Leanpub Flavoured Markdown.\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"publish-on-amazon\"\u003EPublish on Amazon\u003C\u002Fh3\u003E\n\n\u003Cp\u003ENext, we’ve improved the \u003Ca href=\"\u002Fpublish_on_amazon\u002Fbuy\"\u003E\u003Cstrong\u003EPublish on Amazon\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E service.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFirst and foremost, we now pay authors \u003Cstrong\u003E90%\u003C\u002Fstrong\u003E of the money that Amazon pays us. (This is also true for the authors who have already purchased the Publish on Amazon service, effective November 1, 2023.)\u003C\u002Fp\u003E\n\n\u003Cp\u003ESecond, there are now \u003Cstrong\u003Ethree ways to pay\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003EThere’s now a \u003Cstrong\u003EFull Upfront\u003C\u002Fstrong\u003E cost option, where you pay with either your Leanpub royalties or with money.\u003C\u002Fli\u003E\n \u003Cli\u003EThere is now also a \u003Cstrong\u003ENo Upfront\u003C\u002Fstrong\u003E cost option, where the entire cost is subtracted from your future Amazon royalties only.\u003C\u002Fli\u003E\n \u003Cli\u003EFinally, there’s a \u003Cstrong\u003EPartial Upfront\u003C\u002Fstrong\u003E cost option, where part of the cost is subtracted from your current Leanpub royalties, with the balance subtracted from your future Amazon royalties only.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003ESo, even if you haven’t earned enough royalties to pay the Full Upfront cost of Publish on Amazon, you can now opt in to the Partial Upfront and No Upfront cost options. To opt in to either of these options, you just check a checkbox on the Publish on Amazon page for your book.\u003C\u002Fp\u003E\n\n\u003Cp\u003EPeriodically we will review the books which have opted in, and produce any which we have the time to do. (We will typically produce those which we think will earn back the cost the fastest, or which would use the largest amount of unpaid royalties, or both.)\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"the-epiphany\"\u003EThe Epiphany\u003C\u002Fh3\u003E\n\n\u003Cp\u003EEarlier this year, I had an epiphany:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EThe 5 most important technological updates in book writing and course creation in the past 500 years are happening right now:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI-powered translations\u003C\u002Fstrong\u003E: AI is going to be able to translate a book into every human language.\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI-powered copy editing and writing\u003C\u002Fstrong\u003E: Regardless of whether the text was typed or dictated, AI will be able to copy edit it, improving sentences and paragraphs, or just adding its own.\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI-powered course creation\u003C\u002Fstrong\u003E: An online course will be able to be automatically created by AI from a book manuscript, with automatically generated quizzes, exercises, and online marking.\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI-powered speech-to-text\u003C\u002Fstrong\u003E: Books can now be dictated (or produced from podcast audio or lecture recordings), and AI will ensure enough accuracy for it to be useful without massive editing required.\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI-powered text-to-speech\u003C\u002Fstrong\u003E: Instant audiobooks. AI-powered text-to-speech will read books in a way which sounds human.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003EIt sounds obvious, but all these innovations are based on just two things:\u003C\u002Fp\u003E\n\n\u003Col class=\"numeric\"\u003E\n \u003Cli\u003E\u003Cstrong\u003EAI\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\n \u003Cli\u003E\u003Cstrong\u003EPlain text\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\n\u003Cp\u003EAt Leanpub, we’re going to use the power of AI and plain text to automatically produce books and courses for the whole world, in their own language.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELeanpub is building the AI-powered book and course printing press for the internet.\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe eventual goal is as follows:\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EFrom one plain text manuscript, we will generate the ebook, ebook translations in dozens of languages, audiobooks of the book and all its translations, an online course based on the book, including quizzes, exercises, and automated marking, and online course translations also in dozens of languages. And we’re going to be able to do all of this with one click. One single click, once.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EWith the work we’ve done this year, we’ve made great strides in this direction. Our current AI services will help our authors reach more readers \u003Cem\u003E(with TranslateAI)\u003C\u002Fem\u003E and learners \u003Cem\u003E(with CourseAI)\u003C\u002Fem\u003E, improve the quality of their books \u003Cem\u003E(with EditAI)\u003C\u002Fem\u003E and even have some fun \u003Cem\u003E(with GhostAI)\u003C\u002Fem\u003E. To use these services, your book needs to be in Markua, so we have a \u003Cem\u003EConvert to Markua\u003C\u002Fem\u003E service to help here. Finally, when you’re done, you may want to produce and sell a print book, so the \u003Cem\u003EPublish on Amazon\u003C\u002Fem\u003E service lets you do that with one click.\u003C\u002Fp\u003E\n\n\u003Ch3 id=\"looking-backward-and-forward\"\u003ELooking Backward and Forward\u003C\u002Fh3\u003E\n\n\u003Cp\u003EIt’s been over 10 years since \u003Ca href=\"https:\u002F\u002Fyoutu.be\u002FozO0kOnqmyA\"\u003Emy Tools of Change conference talk\u003C\u002Fa\u003E was recorded, and 10 years ago none of us could have predicted the changes that happened in 2023 with the launch of GPT-4. So, I’m not going to try to predict everything that you’ll be able to do with AI on Leanpub in the next 10 years.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAll I’ll say is that we’re fully committed to the expanded mission of \u003Cstrong\u003Ebuilding the best way in the world for authors to publish books and courses using lightweight, AI-powered tools and many iterations to get reader feedback, pivot until you have the right book or course, and build traction once you do\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFinally, on a personal note, I consider myself to be extremely fortunate: if I could have foreseen the development of GPT-4 10 years ago, I couldn’t have picked a better product to build, or a better set of customers to serve.\u003C\u002Fp\u003E\n\n\u003Cp\u003EPeter Armstrong\u003C\u002Fp\u003E\n\n\u003Cp\u003ENovember 6, 2023\u003C\u002Fp\u003E\n","title":null,"updated_at":"2023-11-06T18:25:50.000Z","id":1},"2":{"type":"AdminFlag","flag":false,"slug":"homepage_news","subtitle":"You asked, we coded: Local currency is now supported with credit card checkout with Stripe!","text":"You can now buy Leanpub books and courses in your local currency (EUR, GBP, CAD, etc.), as well as in US dollars! This is an option when you check out with a credit card using Stripe. The currency exchange is handled by Stripe, and we don't earn any profit from it. We love all our readers and authors, all around the world, and we want Leanpub to be the best place for you to buy ebooks and online courses!","title":"Buy with Your Currency","updated_at":"2025-02-14T19:59:23.000Z","id":2}},"errors":{},"indexes":{"{}":[2]},"loading":{"{}":false}},"Answer":{"all":{},"errors":{},"indexes":{},"loading":{}},"Asset":{"all":{},"errors":{},"indexes":{},"loading":{}},"Author":{"all":{"47858":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2018-04-06T10:39:42.000Z","name":"Marcin Moskała","position":1,"profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2021-09-26T14:42:21.000Z","username":"mmoskala","user_id":1251350,"book_id":45844,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","view_invitation_path":null,"id":47858,"user":[{"id":1251350,"type":"User"}],"book":[{"id":45844,"type":"Book"}]},"75387":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2021-03-19T08:32:54.000Z","name":"Marcin Moskała","position":1,"profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2021-09-26T14:42:35.000Z","username":"mmoskala","user_id":1251350,"book_id":72494,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","view_invitation_path":null,"id":75387,"user":[{"id":1251350,"type":"User"}],"book":[{"id":72494,"type":"Book"}]},"82319":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2022-04-03T22:26:27.000Z","name":"Erik Schön","position":1,"profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EERIK SCHÖN \u003C\u002Fstrong\u003Eis a change catalyst who has successfully led global organizations for 25 years. Hacker, software researcher and system engineer turned leader, executive and strategist, Erik is the author of the widely acclaimed trilogy \u003Cem\u003EThe Art of Change\u003C\u002Fem\u003E, \u003Cem\u003EThe Art of Leadership\u003C\u002Fem\u003E and \u003Cem\u003EThe Art of Strategy\u003C\u002Fem\u003E.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2022-04-03T23:50:43.000Z","username":"erik_schon","user_id":29360,"book_id":78373,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F29360\u002Ftiny\u002FErikScho%CC%88n.jpg?1586437689","view_invitation_path":null,"id":82319,"user":[{"id":29360,"type":"User"}],"book":[{"id":78373,"type":"Book"}]},"82433":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2022-04-13T07:49:58.000Z","name":"Marcin Moskała","position":1,"profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2022-04-27T06:23:30.000Z","username":"mmoskala","user_id":1251350,"book_id":78480,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","view_invitation_path":null,"id":82433,"user":[{"id":1251350,"type":"User"}],"book":[{"id":78480,"type":"Book"}]},"82641":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2022-05-05T08:44:52.000Z","name":"Marcin Moskała","position":1,"profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2022-08-26T10:48:15.000Z","username":"mmoskala","user_id":1251350,"book_id":78674,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","view_invitation_path":null,"id":82641,"user":[{"id":1251350,"type":"User"}],"book":[{"id":78674,"type":"Book"}]},"84688":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2022-12-07T10:47:09.000Z","name":"Marcin Moskała","position":1,"profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2023-01-29T16:13:15.000Z","username":"mmoskala","user_id":1251350,"book_id":80651,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","view_invitation_path":null,"id":84688,"user":[{"id":1251350,"type":"User"}],"book":[{"id":80651,"type":"Book"}]},"90648":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2024-04-04T15:57:37.000Z","name":"Petri Silen","position":1,"profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EPetri Silén\u003C\u002Fstrong\u003E is a seasoned software developer working at Nokia Networks in Finland with industry experience of almost 30 years. He has done both frontend and backend development with a solid competence in multiple programming languages, including C++, Java, Python and JavaScript\u002FTypeScript. He started his career at Nokia Telecommunications in 1995. During his first years, he developed a real-time mobile networks analytics product called \"Traffica\" in C++ for major telecom customers worldwide, including companies like T-Mobile, Orange, Vodafone, and Claro. The initial product was for monitoring a 2G circuit-switched core network and GPRS packet-switched core network. Later, functionality to Traffica was added to cover new network technologies, like 3G circuit-switched and packet core networks, 3G radio networks, and 4G\u002FLTE. He later developed new functionality for Traffica using Java and web technologies, including jQuery and React. During the last few years, he has developed cloud-native containerized microservices with Java and C++ for the next-generation Customer and Networks Insights CNI) product used by major communications service providers like Verizon, AT&amp;T, USCC, and KDDI. The main application areas he has contributed during the last years include KPI-based real-time alerting, anomaly detection for KPIs, and configurable real-time data exporting.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDuring his free time, he has developed a data visualization application using React, Redux, TypeScript, and Jakarta EE. He has also developed a security-first cloud-native microservice framework for Node.js in TypeScript. He likes to take care of his Kaapo cat, take walks, play tennis and badminton, ski in the winter, and watch soccer and ice hockey on TV.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2024-04-04T16:40:38.000Z","username":"petrisilen","user_id":2907962,"book_id":86270,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2907962\u002Ftiny\u002Fpksilen.jpg?1675257567","view_invitation_path":null,"id":90648,"user":[{"id":2907962,"type":"User"}],"book":[{"id":86270,"type":"Book"}]},"91947":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2024-07-04T12:14:08.000Z","name":"Gijs Reijn","position":1,"profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EGijs Reijn\u003C\u002Fstrong\u003E is a Microsoft MVP with nearly a decade of IT experience. He predominantly works with Azure technologies. He’s currently working in the financial sector. He enjoys sharing his knowledge on his website \u003Ca href=\"https:\u002F\u002Fthelonelyengineer.com\u002F\" target=\"_blank\"\u003EThe Lonely Engineer\u003C\u002Fa\u003E, as well as on \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@gijsreijn\" target=\"_blank\"\u003EMedium\u003C\u002Fa\u003E and the \u003Ca href=\"https:\u002F\u002Frabobank.jobs\u002Fen\u002Ftechblog\u002F\" target=\"_blank\"\u003ERabo Tech Blog\u003C\u002Fa\u003E, where he is currently employed. You can find his books here on \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fgijsr\" target=\"_blank\"\u003ELeanPub\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\u003Cp\u003EFor those looking to reach him, feel free to connect with him on \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fgijs-reijn-582b81198\u002F\" target=\"_blank\"\u003ELinkedIn\u003C\u002Fa\u003E or stay updated by following him on \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fgijsreijn\" target=\"_blank\"\u003ETwitter\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2024-07-16T10:19:39.000Z","username":"gijsr","user_id":2205412,"book_id":87360,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2205412\u002Ftiny\u002Fme_2.png?1702878147","view_invitation_path":null,"id":91947,"user":[{"id":2205412,"type":"User"}],"book":[{"id":87360,"type":"Book"}]},"95251":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2025-01-15T10:43:41.000Z","name":"Alberto Souza","position":1,"profile_blurb":"\u003Cp\u003EThose who study more—and study better—tend to create more opportunities in life. And it's not just about financial opportunities; it's about making the most of everything.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003EAlberto firmly believes in this mindset and applies it to every area of his life. As a software engineer, he focuses his technical growth by creating learning plans to master what he wants and what he may eventually need.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003EBeyond his career, Alberto adopted the same mentality to prepare for the arrival of both his children. He read various parenting books, from guides written by experienced parents to accounts from caregivers. This knowledge equipped him to handle the natural challenges of this life stage with greater confidence.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003EIn short, he believes in the power of the earlier preparation. Being able to effectively learn anything puts you in a position to embrace opportunities with much greater ease.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2025-01-30T13:54:32.000Z","username":"alberto-souza","user_id":246054,"book_id":90279,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F246054\u002Ftiny\u002Ffoto-capa-2.jpg?1735334266","view_invitation_path":null,"id":95251,"user":[{"id":246054,"type":"User"}],"book":[{"id":90279,"type":"Book"}]},"95527":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2025-01-22T00:53:39.000Z","name":"Daniel S. Vacanti","position":1,"profile_blurb":"\u003Cp\u003E\u003Cspan style=\"color: black;\"\u003EDaniel Vacanti is a 25-plus year software industry veteran who has spent most of his career focusing on Lean and Agile practices.&nbsp;In 2007, he helped to develop Kanban as a strategy for knowledge work and managed the world’s first project implementation using Kanban that year.&nbsp;He has been conducting Lean-Agile training, coaching, and consulting ever since. In 2013 he founded ActionableAgile® which provides industry-leading predictive analytics tools and services to organizations that utilize Lean-Agile practices.&nbsp;In 2014 he published his first book, “Actionable Agile Metrics for Predictability”, which is the definitive guide to flow-based metrics and analytics.&nbsp;In 2017, he helped to develop the “Professional Scrum with Kanban” (PSK) class with Scrum.org and in 2018 he published his second book, “When Will It Be Done?”.&nbsp;2020 saw Daniel co-found ProKanban.org whose aim is to create a safe, diverse, and inclusive community to learn about Kanban.&nbsp;Most recently, Daniel published his third book, “Actionable Agile Metrics for Predictability Volume II”.\u003C\u002Fspan\u003E\u003C\u002Fp\u003E","state":"accepted","updated_at":"2025-01-30T00:48:09.000Z","username":"daniel_vacanti","user_id":405678,"book_id":90444,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F405678\u002Ftiny\u002FDaniel_Vacanti.jpg?1425586242","view_invitation_path":null,"id":95527,"user":[{"id":405678,"type":"User"}],"book":[{"id":90444,"type":"Book"}]},"96147":{"type":"Author","cause_royalty_percentage":"0.0","created_at":"2025-02-15T16:14:31.000Z","name":"Mike Burrows","position":1,"profile_blurb":"\u003Cp\u003EAgendashift founder Mike Burrows is author of \u003Cem\u003EWholehearted: Engaging with Complexity in the Deliberately Adaptive Organisation\u003C\u002Fem\u003E (2025)., \u003Cem\u003EOrganizing Conversations\u003C\u002Fem\u003E (2024), \u003Cem\u003EAgendashift\u003C\u002Fem\u003E (2nd edition 2021), \u003Cem\u003ERight to Left\u003C\u002Fem\u003E (2019, audiobook 2020), and the Lean-Agile classic \u003Cem\u003EKanban from the Inside \u003C\u002Fem\u003E(2014), He has been the interim delivery manager for two UK government digital \"exemplar\" projects and consultant to public and private sector organisations at home and abroad. Prior to his consulting career, he was global development manager and Executive Director at a top tier investment bank, and IT Director for an energy risk management startup. A speaker at conferences around the world, he now works as a consultant and trainer.\u003C\u002Fp\u003E","state":"accepted","updated_at":"2025-02-20T16:19:14.000Z","username":"mikeburrows","user_id":840643,"book_id":90921,"cause_id":null,"tiny_avatar_url":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F840643\u002Ftiny\u002Fmike-burrows-mug-317kb.jpg?1740134459","view_invitation_path":null,"id":96147,"user":[{"id":840643,"type":"User"}],"book":[{"id":90921,"type":"Book"}]}},"errors":{},"indexes":{},"loading":{},"stats":{}},"AuthorServicesBook":{"all":{},"errors":{},"indexes":{},"loading":{}},"Book":{"all":{"45844":{"type":"Book","about_the_book":"\u003Cp\u003EKotlin is a powerful and pragmatic language, but it's not enough to know about its features. We also need to know when they should be used and in what way. This book is a guide for Kotlin developers on how to become excellent Kotlin developers. It presents and explains in-depth the best practices for Kotlin development. Each item is presented as a clear rule of thumb, supported by detailed explanations and practical examples.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIf you are interested in paperback, you can purchase it \u003Ca href=\"https:\u002F\u002Fwww.amazon.com\u002FEffective-Kotlin-practices-Marcin-Moskala\u002Fdp\u002F8395452837\u002F\" target=\"_blank\"\u003Ehere\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":53,"slug":"computer_programming","description":"","mature_content":false,"created_at":"2015-09-14T21:13:24.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Computers and Programming","book_categories_count":2101},{"id":42,"slug":"engineering","description":"","mature_content":false,"created_at":"2015-09-10T03:11:20.000Z","updated_at":"2020-11-06T04:24:53.000Z","can_be_short":false,"parent_category_id":13,"name":"Engineering","book_categories_count":202},{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":"","community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Feffectivekotlin\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Feffectivekotlin\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":"","created_at":"2018-04-06T10:39:42.000Z","default_package_id":51378,"meta_description":"A comprehensive guide of best practices for Kotlin code quality: safety, readability, code design, and efficiency. ","editor_read_only":false,"forum_url":"https:\u002F\u002Fcommunity.leanpub.com\u002Fc\u002Feffectivekotlin","forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":true,"embargo":false,"name":"Effective Kotlin","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":9975824,"free_purchase_only":false,"google_analytics_code":"G-5RCMMHTMYF","generate_community_edition":null,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_featured?1694006150","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-12-03T08:02:38.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":385,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-12-03T08:10:00.000Z","primary_author_id":47858,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Feffectivekotlin-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=3fe9e5ffe0d43dbc6246bb98839ee830f9b8a01e5f7e5e40629cc56efca3c297","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Feffectivekotlin-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=9e138750649ee55e60c0319fb002dd33512efc7437503e451b79287eb3c58f4e","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":true,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":true,"show_read_link":"sample","show_word_count":false,"slug":"effectivekotlin","state":"published","subtitle":"Best practices","suggested_tweet":"I just bought @EffectiveKotlin!","sync_mode":"github","tagline":"Effective Kotlin summarizes the best practices and experiences of the Kotlin community, together with a deep explanation of some lesser-known Kotlin functionalities. All of the best practices are presented as simple rules with detailed explanations.","thank_you_message":null,"title":"Effective Kotlin","json_toc":"[{\"level\":2,\"title\":\"Introduction: Be pragmatic\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction-be-pragmatic\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Who is this book for?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-who-is-this-book-for\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Code Sources\",\"quiz_type\":null,\"path\":\"#leanpub-auto-code-sources\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 1: Good code\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1-good-code\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 1: Safety\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-1-safety\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 1: Limit mutability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-1-limit-mutability\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 2: Eliminate critical sections\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-2-eliminate-critical-sections\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 3: Eliminate platform types as soon as possible\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-3-eliminate-platform-types-as-soon-as-possible\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 4: Minimize the scope of variables\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-4-minimize-the-scope-of-variables\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 5: Specify your expectations for arguments and state\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-5-specify-your-expectations-for-arguments-and-state\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 6: Prefer standard errors to custom ones\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-6-prefer-standard-errors-to-custom-ones\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 7: Prefer a nullable or \\u003ccode\\u003eResult\\u003c\u002Fcode\\u003e result type when the lack of a result is possible\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-7-prefer-a-nullable-or-result-result-type-when-the-lack-of-a-result-is-possible\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 8: Close resources with \\u003ccode\\u003euse\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-8-close-resources-with-use\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 9: Write unit tests\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-9-write-unit-tests\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 2: Readability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-2-readability\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 10: Design for readability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-10-design-for-readability\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 11: An operator’s meaning should be consistent with its function name\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-11-an-operators-meaning-should-be-consistent-with-its-function-name\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 12: Use operators to increase readability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-12-use-operators-to-increase-readability\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 13: Consider making types explicit\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-13-consider-making-types-explicit\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 14: Consider referencing receivers explicitly\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-14-consider-referencing-receivers-explicitly\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 15: Properties should represent a state, not a behavior\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-15-properties-should-represent-a-state-not-a-behavior\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 16: Avoid returning or operating on \\u003ccode\\u003eUnit?\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-16-avoid-returning-or-operating-on-unit\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 17: Consider naming arguments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-17-consider-naming-arguments\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 18: Respect coding conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-18-respect-coding-conventions\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 2: Code design\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-2-code-design\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 3: Reusability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-3-reusability\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 19: Do not repeat knowledge\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-19-do-not-repeat-knowledge\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 20: Do not repeat common algorithms\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-20-do-not-repeat-common-algorithms\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 21: Use generics when implementing common algorithms\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-21-use-generics-when-implementing-common-algorithms\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 22: Avoid shadowing type parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-22-avoid-shadowing-type-parameters\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 23: Consider using variance modifiers for generic types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-23-consider-using-variance-modifiers-for-generic-types\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 24: Reuse between different platforms by extracting common modules\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-24-reuse-between-different-platforms-by-extracting-common-modules\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 4: Abstraction design\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-4-abstraction-design\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 25: Each function should be written in terms of a single level of abstraction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-25-each-function-should-be-written-in-terms-of-a-single-level-of-abstraction\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 26: Use abstraction to protect code against changes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-26-use-abstraction-to-protect-code-against-changes\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 27: Specify API stability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-27-specify-api-stability\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 28: Consider wrapping external APIs\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-28-consider-wrapping-external-apis\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 29: Minimize elements’ visibility\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-29-minimize-elements-visibility\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 30: Define contracts with documentation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-30-define-contracts-with-documentation\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 31: Respect abstraction contracts\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-31-respect-abstraction-contracts\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 5: Object creation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-5-object-creation\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 32: Consider factory functions instead of constructors\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-32-consider-factory-functions-instead-of-constructors\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 33: Consider a primary constructor with named optional arguments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-33-consider-a-primary-constructor-with-named-optional-arguments\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 34: Consider defining a DSL for complex object creation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-34-consider-defining-a-dsl-for-complex-object-creation\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 35: Consider using dependency injection\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-35-consider-using-dependency-injection\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 6: Class design\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-6-class-design\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 36: Prefer composition over inheritance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-36-prefer-composition-over-inheritance\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 37: Use the data modifier to represent a bundle of data\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-37-use-the-data-modifier-to-represent-a-bundle-of-data\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 38: Use function types or functional interfaces to pass operations and actions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-38-use-function-types-or-functional-interfaces-to-pass-operations-and-actions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 39: Use sealed classes and interfaces to express restricted hierarchies\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-39-use-sealed-classes-and-interfaces-to-express-restricted-hierarchies\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 40: Prefer class hierarchies instead of tagged classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-40-prefer-class-hierarchies-instead-of-tagged-classes\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 41: Use enum to represent a list of values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-41-use-enum-to-represent-a-list-of-values\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 42: Respect the contract of \\u003ccode\\u003eequals\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-42-respect-the-contract-of-equals\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 43: Respect the contract of \\u003ccode\\u003ehashCode\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-43-respect-the-contract-of-hashcode\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 44: Respect the contract of \\u003ccode\\u003ecompareTo\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-44-respect-the-contract-of-compareto\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 45: Consider extracting non-essential parts of your API into extensions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-45-consider-extracting-non-essential-parts-of-your-api-into-extensions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 46: Avoid member extensions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-46-avoid-member-extensions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 3: Efficiency\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-3-efficiency\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 7: Make it cheap\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-7-make-it-cheap\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 47: Avoid unnecessary object creation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-47-avoid-unnecessary-object-creation\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 48: Consider using object declarations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-48-consider-using-object-declarations\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 49: Use caching when possible\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-49-use-caching-when-possible\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 50: Extract objects that can be reused\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-50-extract-objects-that-can-be-reused\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 51: Use the inline modifier for functions with parameters of functional types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-51-use-the-inline-modifier-for-functions-with-parameters-of-functional-types\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 52: Consider using inline value classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-52-consider-using-inline-value-classes\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 53: Eliminate obsolete object references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-53-eliminate-obsolete-object-references\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Chapter 8: Efficient collection processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-chapter-8-efficient-collection-processing\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 54: Prefer Sequences for big collections with more than one processing step\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-54-prefer-sequences-for-big-collections-with-more-than-one-processing-step\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 55: Consider associating elements to a map\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-55-consider-associating-elements-to-a-map\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 56: Consider using groupingBy instead of groupBy\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-56-consider-using-groupingby-instead-of-groupby\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 57: Limit the number of operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-57-limit-the-number-of-operations\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 58: Consider Arrays with primitives for performance-critical processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-58-consider-arrays-with-primitives-for-performance-critical-processing\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 59: Consider using mutable collections\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-59-consider-using-mutable-collections\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Item 60: Use appropriate collection types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-item-60-use-appropriate-collection-types\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Dictionary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dictionary\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_mini?1694006150","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_mini2x?1694006150","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_list?1694006150","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_list2x?1694006150","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_shelf?1694006150","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_shelf2x?1694006150","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_featured?1694006150","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_featured2x?1694006150","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_hero?1694006150","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_hero2x?1694006150","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Introduction: Be pragmatic\n \u003Cul\u003E\n \u003Cli\u003E\n Who is this book for?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Code Sources\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 1: Good code\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 1: Safety\n \u003Cul\u003E\n \u003Cli\u003E\n Item 1: Limit mutability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 2: Eliminate critical sections\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 3: Eliminate platform types as soon as possible\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 4: Minimize the scope of variables\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 5: Specify your expectations for arguments and state\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 6: Prefer standard errors to custom ones\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 7: Prefer a nullable or \u003Ccode\u003EResult\u003C\u002Fcode\u003E result type when the lack of a result is possible\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 8: Close resources with \u003Ccode\u003Euse\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 9: Write unit tests\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 2: Readability\n \u003Cul\u003E\n \u003Cli\u003E\n Item 10: Design for readability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 11: An operator’s meaning should be consistent with its function name\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 12: Use operators to increase readability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 13: Consider making types explicit\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 14: Consider referencing receivers explicitly\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 15: Properties should represent a state, not a behavior\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 16: Avoid returning or operating on \u003Ccode\u003EUnit?\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 17: Consider naming arguments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 18: Respect coding conventions\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 2: Code design\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 3: Reusability\n \u003Cul\u003E\n \u003Cli\u003E\n Item 19: Do not repeat knowledge\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 20: Do not repeat common algorithms\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 21: Use generics when implementing common algorithms\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 22: Avoid shadowing type parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 23: Consider using variance modifiers for generic types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 24: Reuse between different platforms by extracting common modules\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 4: Abstraction design\n \u003Cul\u003E\n \u003Cli\u003E\n Item 25: Each function should be written in terms of a single level of abstraction\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 26: Use abstraction to protect code against changes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 27: Specify API stability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 28: Consider wrapping external APIs\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 29: Minimize elements’ visibility\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 30: Define contracts with documentation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 31: Respect abstraction contracts\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 5: Object creation\n \u003Cul\u003E\n \u003Cli\u003E\n Item 32: Consider factory functions instead of constructors\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 33: Consider a primary constructor with named optional arguments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 34: Consider defining a DSL for complex object creation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 35: Consider using dependency injection\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 6: Class design\n \u003Cul\u003E\n \u003Cli\u003E\n Item 36: Prefer composition over inheritance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 37: Use the data modifier to represent a bundle of data\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 38: Use function types or functional interfaces to pass operations and actions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 39: Use sealed classes and interfaces to express restricted hierarchies\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 40: Prefer class hierarchies instead of tagged classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 41: Use enum to represent a list of values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 42: Respect the contract of \u003Ccode\u003Eequals\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 43: Respect the contract of \u003Ccode\u003EhashCode\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 44: Respect the contract of \u003Ccode\u003EcompareTo\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 45: Consider extracting non-essential parts of your API into extensions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 46: Avoid member extensions\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 3: Efficiency\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 7: Make it cheap\n \u003Cul\u003E\n \u003Cli\u003E\n Item 47: Avoid unnecessary object creation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 48: Consider using object declarations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 49: Use caching when possible\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 50: Extract objects that can be reused\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 51: Use the inline modifier for functions with parameters of functional types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 52: Consider using inline value classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 53: Eliminate obsolete object references\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Chapter 8: Efficient collection processing\n \u003Cul\u003E\n \u003Cli\u003E\n Item 54: Prefer Sequences for big collections with more than one processing step\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 55: Consider associating elements to a map\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 56: Consider using groupingBy instead of groupBy\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 57: Limit the number of operations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 58: Consider Arrays with primitives for performance-critical processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 59: Consider using mutable collections\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Item 60: Use appropriate collection types\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dictionary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Notes\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Effective Kotlin on Leanpub!","unpublished_sample":true,"updated_at":"2025-04-04T13:57:35.000Z","vimeo_url":null,"available_web_book":true,"word_count":86908,"word_count_published":null,"youtube_url":null,"team_discount_package_id":51378,"external_forum_url":null,"num_copies_sold":4460,"page_count":385,"percent_complete":100,"seo_title":"Effective Kotlin by Marcin Moskała [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":45844,"accepted_authors":[{"id":47858,"type":"Author"}]},"72494":{"type":"Book","about_the_book":"\u003Cp\u003EThis is a practical book. It shows everything by examples and focuses on real-life use cases. As this technology is already widely used on Android and backend applications, we will see how we can use it there and what the best practices are.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIf you are interested in paperback, you can purchase it \u003Ca href=\"https:\u002F\u002Fwww.amazon.com\u002FKotlin-Coroutines-Deep-Marcin-Moskala\u002Fdp\u002F8396395837\u002Fref=sr_1_1?crid=2G1JU7AMF3YVS&amp;keywords=kotlin+coroutines&amp;qid=1675009619&amp;sprefix=kotlin+coro%2Caps%2C168&amp;sr=8-1\" target=\"_blank\"\u003Ehere\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":53,"slug":"computer_programming","description":"","mature_content":false,"created_at":"2015-09-14T21:13:24.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Computers and Programming","book_categories_count":2101},{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":"","community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fcoroutines\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fcoroutines\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2021-03-19T08:32:54.000Z","default_package_id":80516,"meta_description":"Kotlin Coroutines, Concurrency, Threads, Multithreading, Parallel programming, Async Await","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Kotlin Coroutines","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":12867553,"free_purchase_only":false,"google_analytics_code":"G-5RCMMHTMYF","generate_community_edition":null,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_featured?1715367508","installments_completed":25,"installments_planned":25,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-12-16T13:08:17.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-12-16T13:17:35.000Z","primary_author_id":75387,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fcoroutines-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=a8e1bc4374b510c3d23d108c7aaa3a1c14fa3ba4af3088644c8b12af8175a7c4","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fcoroutines-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=094761aa73371a88e13babdac75bca1cf63a9b8c562ffeeea372dd6470fd5671","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":true,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"coroutines","state":"published","subtitle":"Deep Dive","suggested_tweet":"I just bought Kotlin Coroutines by Marcin Moskała","sync_mode":"github","tagline":"Kotlin coroutines have revolutionized JVM development, especially on Android and the backend, as they let us easily implement efficient and reliable multithreading. Their cutting-edge design and features are ideally suited to modern use cases. In this book, we will explore how Kotlin coroutines work and how we can use them to improve our code.","thank_you_message":null,"title":"Kotlin Coroutines","json_toc":"[{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Who is this book for?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-who-is-this-book-for\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The structure of this book\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-structure-of-this-book\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What will be covered?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-will-be-covered\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Kotlin for Developers series\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-kotlin-for-developers-series\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Code conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-code-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Version\",\"quiz_type\":null,\"path\":\"#leanpub-auto-version\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercises and solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercises-and-solutions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Acknowledgments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-acknowledgments\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 1: Understanding Kotlin Coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1-understanding-kotlin-coroutines\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Why Kotlin Coroutines?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-why-kotlin-coroutines\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Simplicity\",\"quiz_type\":null,\"path\":\"#leanpub-auto-simplicity\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Performance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-performance\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Cancellation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellation\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Synchronization\",\"quiz_type\":null,\"path\":\"#leanpub-auto-synchronization\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testability\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Coroutines are multiplatform\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutines-are-multiplatform\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The biggest problem with Kotlin Coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-biggest-problem-with-kotlin-coroutines\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Sequence builder\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sequence-builder\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Real-life usages\",\"quiz_type\":null,\"path\":\"#leanpub-auto-real-life-usages\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Factorial sequence\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-factorial-sequence\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Prime numbers sequence\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-prime-numbers-sequence\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"How does suspension work?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-does-suspension-work\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A game analogy\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-game-analogy\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Suspending functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-suspending-functions\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Your first suspension\",\"quiz_type\":null,\"path\":\"#leanpub-auto-your-first-suspension\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What is stored in the continuation?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-is-stored-in-the-continuation\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Delaying a coroutine\",\"quiz_type\":null,\"path\":\"#leanpub-auto-delaying-a-coroutine\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Resuming with a value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-resuming-with-a-value\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Resume with an exception\",\"quiz_type\":null,\"path\":\"#leanpub-auto-resume-with-an-exception\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Suspending a coroutine, not a function\",\"quiz_type\":null,\"path\":\"#leanpub-auto-suspending-a-coroutine-not-a-function\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-1\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Callback function wrappers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-callback-function-wrappers\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Continuation storage\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-continuation-storage\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Coroutines under the hood\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutines-under-the-hood\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Continuation-passing style\",\"quiz_type\":null,\"path\":\"#leanpub-auto-continuation-passing-style\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A very simple function\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-very-simple-function\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A function with a state\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-function-with-a-state\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A function resumed with a value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-function-resumed-with-a-value\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The call stack\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-call-stack\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Suspending functions in other contexts\",\"quiz_type\":null,\"path\":\"#leanpub-auto-suspending-functions-in-other-contexts\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The actual code\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-actual-code\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The performance of suspending functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-performance-of-suspending-functions\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-2\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: What is stored by a continuation?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-what-is-stored-by-a-continuation\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Coroutines: built-in support vs library\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutines-built-in-support-vs-library\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 2: Kotlin Coroutines library\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-2-kotlin-coroutines-library\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Starting coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-starting-coroutines\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Asynchronous coroutine builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-asynchronous-coroutine-builders\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Blocking coroutine builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-blocking-coroutine-builders\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Structured Concurrency\",\"quiz_type\":null,\"path\":\"#leanpub-auto-structured-concurrency\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Coroutine scope functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutine-scope-functions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-3\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: UserDetailsRepository\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-userdetailsrepository\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: BestStudentUseCase\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-beststudentusecase\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: CommentService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-commentservice\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: mapAsync\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-mapasync\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The bigger picture\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-bigger-picture\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Coroutine context\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutine-context\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eCoroutineContext\\u003c\u002Fcode\\u003e interface\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutinecontext-interface\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Finding elements in CoroutineContext\",\"quiz_type\":null,\"path\":\"#leanpub-auto-finding-elements-in-coroutinecontext\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Adding contexts\",\"quiz_type\":null,\"path\":\"#leanpub-auto-adding-contexts\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Empty coroutine context\",\"quiz_type\":null,\"path\":\"#leanpub-auto-empty-coroutine-context\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Subtracting elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-subtracting-elements\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Folding context\",\"quiz_type\":null,\"path\":\"#leanpub-auto-folding-context\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Coroutine context and builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutine-context-and-builders\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Accessing context in a suspending function\",\"quiz_type\":null,\"path\":\"#leanpub-auto-accessing-context-in-a-suspending-function\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Changing context in suspending functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-changing-context-in-suspending-functions\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Creating our own context\",\"quiz_type\":null,\"path\":\"#leanpub-auto-creating-our-own-context\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Coroutines and thread elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutines-and-thread-elements\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-4\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Understanding context propagation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-understanding-context-propagation\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: CounterContext\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-countercontext\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Dispatchers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dispatchers\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Default dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-default-dispatcher\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Limiting the default dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-limiting-the-default-dispatcher\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Main dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-main-dispatcher\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"IO dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-io-dispatcher\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Dispatcher with a custom limit\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dispatcher-with-a-custom-limit\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Dispatcher with a fixed pool of threads\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dispatcher-with-a-fixed-pool-of-threads\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Dispatcher limited to a single thread\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dispatcher-limited-to-a-single-thread\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using virtual threads from Project Loom\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-virtual-threads-from-project-loom\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Unconfined dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unconfined-dispatcher\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Immediate main dispatching\",\"quiz_type\":null,\"path\":\"#leanpub-auto-immediate-main-dispatching\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Continuation interceptor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-continuation-interceptor\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Performance of dispatchers when executing different tasks\",\"quiz_type\":null,\"path\":\"#leanpub-auto-performance-of-dispatchers-when-executing-different-tasks\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-5\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Using dispatchers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-using-dispatchers\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: DiscNewsRepository\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-discnewsrepository\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Experiments with dispatchers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-experiments-with-dispatchers\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Job and coroutine lifecycle\",\"quiz_type\":null,\"path\":\"#leanpub-auto-job-and-coroutine-lifecycle\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Job and relationships\",\"quiz_type\":null,\"path\":\"#leanpub-auto-job-and-relationships\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Coroutine lifecycle\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutine-lifecycle\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Awaiting job completion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-awaiting-job-completion\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Job factory function\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-job-factory-function\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Synchronizing coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-synchronizing-coroutines\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-6\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Cancellation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellation-1\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Basic cancellation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-basic-cancellation\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003efinally\\u003c\u002Fcode\\u003e block\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-finally-block\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"invokeOnCompletion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-invokeoncompletion\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Cancellation of children\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellation-of-children\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Cancellation in a coroutine scope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellation-in-a-coroutine-scope\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Just one more call\",\"quiz_type\":null,\"path\":\"#leanpub-auto-just-one-more-call\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Stopping the unstoppable\",\"quiz_type\":null,\"path\":\"#leanpub-auto-stopping-the-unstoppable\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"CancellationException is special\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellationexception-is-special\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"CancellationException does not propagate to its parent\",\"quiz_type\":null,\"path\":\"#leanpub-auto-cancellationexception-does-not-propagate-to-its-parent\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"withTimeout\",\"quiz_type\":null,\"path\":\"#leanpub-auto-withtimeout\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003esuspendCancellableCoroutine\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-suspendcancellablecoroutine\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-7\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Correct mistakes with cancellation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-correct-mistakes-with-cancellation\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exception handling\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exception-handling\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exceptions and structured concurrency\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exceptions-and-structured-concurrency\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"SupervisorJob\",\"quiz_type\":null,\"path\":\"#leanpub-auto-supervisorjob\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"supervisorScope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-supervisorscope\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exceptions and await call\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exceptions-and-await-call\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eCoroutineExceptionHandler\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutineexceptionhandler\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-8\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Constructing a coroutine scope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constructing-a-coroutine-scope\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"CoroutineScope factory function\",\"quiz_type\":null,\"path\":\"#leanpub-auto-coroutinescope-factory-function\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Constructing a background scope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constructing-a-background-scope\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Constructing a scope on Android\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constructing-a-scope-on-android\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-9\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: NotificationSender\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-notificationsender\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: BaseViewModel\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-baseviewmodel\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Synchronizing access to mutable state\",\"quiz_type\":null,\"path\":\"#leanpub-auto-synchronizing-access-to-mutable-state\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using atomic values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-atomic-values\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Synchronized blocks\",\"quiz_type\":null,\"path\":\"#leanpub-auto-synchronized-blocks\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using a dispatcher limited to a single thread\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-a-dispatcher-limited-to-a-single-thread\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Mutex\",\"quiz_type\":null,\"path\":\"#leanpub-auto-mutex\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Semaphore\",\"quiz_type\":null,\"path\":\"#leanpub-auto-semaphore\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-10\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: CompanyDetailsRepository\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-companydetailsrepository\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: CancellingRefresher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-cancellingrefresher\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: TokenRepository\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-tokenrepository\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Suspended lazy\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-suspended-lazy\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: mapAsync with concurrency limit\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-mapasync-with-concurrency-limit\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Testing Kotlin Coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-kotlin-coroutines\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing time dependencies\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-time-dependencies\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eTestCoroutineScheduler\\u003c\u002Fcode\\u003e and \\u003ccode\\u003eStandardTestDispatcher\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testcoroutinescheduler-and-standardtestdispatcher\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"runTest\",\"quiz_type\":null,\"path\":\"#leanpub-auto-runtest\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Background scope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-background-scope\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing cancellation and context passing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-cancellation-and-context-passing\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eUnconfinedTestDispatcher\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unconfinedtestdispatcher\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using mocks\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-mocks\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing functions that change a dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-functions-that-change-a-dispatcher\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing what happens during function execution\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-what-happens-during-function-execution\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing functions that launch new coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-functions-that-launch-new-coroutines\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing classes that need scope in runTest\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-classes-that-need-scope-in-runtest\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Replacing the main dispatcher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-replacing-the-main-dispatcher\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing Android functions that launch coroutines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-android-functions-that-launch-coroutines\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Setting a test dispatcher with a rule\",\"quiz_type\":null,\"path\":\"#leanpub-auto-setting-a-test-dispatcher-with-a-rule\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-11\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Test UserDetailsRepository\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-test-userdetailsrepository\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Testing mapAsync\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-testing-mapasync\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Testing the NotificationSender class\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-testing-the-notificationsender-class\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Testing a View Model\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-testing-a-view-model\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 3: Channel and Flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-3-channel-and-flow\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Channel\",\"quiz_type\":null,\"path\":\"#leanpub-auto-channel\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Channel types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-channel-types\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"On buffer overflow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-on-buffer-overflow\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"On undelivered element handler\",\"quiz_type\":null,\"path\":\"#leanpub-auto-on-undelivered-element-handler\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Fan-out\",\"quiz_type\":null,\"path\":\"#leanpub-auto-fan-out\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Fan-in\",\"quiz_type\":null,\"path\":\"#leanpub-auto-fan-in\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Pipelines\",\"quiz_type\":null,\"path\":\"#leanpub-auto-pipelines\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Practical usage\",\"quiz_type\":null,\"path\":\"#leanpub-auto-practical-usage\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-12\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: UserRefresher\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-userrefresher\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Cafeteria simulation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-cafeteria-simulation\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Select\",\"quiz_type\":null,\"path\":\"#leanpub-auto-select\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Selecting deferred values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-selecting-deferred-values\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Selecting from channels\",\"quiz_type\":null,\"path\":\"#leanpub-auto-selecting-from-channels\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-13\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: raceOf\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-raceof\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Hot and cold data sources\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hot-and-cold-data-sources\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Hot vs cold\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hot-vs-cold\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Hot channels, cold flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hot-channels-cold-flow\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-14\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Flow introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-introduction\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Comparing flow to other ways of representing values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-comparing-flow-to-other-ways-of-representing-values\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The characteristics of Flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-characteristics-of-flow\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow nomenclature\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-nomenclature\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Real-life use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-real-life-use-cases\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-15\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Understanding \\u003ccode\\u003eFlow\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-understanding-flow\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Understanding \\u003ccode\\u003eFlow\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-understanding-flow-1\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"How \\u003ccode\\u003eFlow\\u003c\u002Fcode\\u003e processing works\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-flow-processing-works\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow is synchronous\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-is-synchronous\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow and shared state\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-and-shared-state\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conclusion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conclusion\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Flow building\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-building\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow from raw values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-from-raw-values\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Converters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-converters\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Converting a function to a flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-converting-a-function-to-a-flow\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow and Reactive Streams\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-and-reactive-streams\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-builders\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Understanding flow builder\",\"quiz_type\":null,\"path\":\"#leanpub-auto-understanding-flow-builder\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"channelFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-channelflow\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"callbackFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-callbackflow\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-16\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Flow utils\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-flow-utils\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: All users flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-all-users-flow\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: distinct\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-distinct\",\"file_count\":25,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Flow lifecycle functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-lifecycle-functions\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"onEach\",\"quiz_type\":null,\"path\":\"#leanpub-auto-oneach\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"onStart\",\"quiz_type\":null,\"path\":\"#leanpub-auto-onstart\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"onCompletion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-oncompletion\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"onEmpty\",\"quiz_type\":null,\"path\":\"#leanpub-auto-onempty\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"catch\",\"quiz_type\":null,\"path\":\"#leanpub-auto-catch\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Uncaught exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-uncaught-exceptions\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eretry\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-retry\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"flowOn\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flowon\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"launchIn\",\"quiz_type\":null,\"path\":\"#leanpub-auto-launchin\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-17\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: TemperatureService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-temperatureservice\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: NewsViewModel\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-newsviewmodel\",\"file_count\":26,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Flow processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-processing\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003emap\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-map\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003efilter\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-filter\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003etake\\u003c\u002Fcode\\u003e and \\u003ccode\\u003edrop\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-take-and-drop\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"How does collection processing work?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-does-collection-processing-work\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003emerge\\u003c\u002Fcode\\u003e, \\u003ccode\\u003ezip\\u003c\u002Fcode\\u003e and \\u003ccode\\u003ecombine\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-merge-zip-and-combine\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003efold\\u003c\u002Fcode\\u003e and \\u003ccode\\u003escan\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-fold-and-scan\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eflatMapConcat\\u003c\u002Fcode\\u003e, \\u003ccode\\u003eflatMapMerge\\u003c\u002Fcode\\u003e and \\u003ccode\\u003eflatMapLatest\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flatmapconcat-flatmapmerge-and-flatmaplatest\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Distinct until changed\",\"quiz_type\":null,\"path\":\"#leanpub-auto-distinct-until-changed\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ebuffer\\u003c\u002Fcode\\u003e and \\u003ccode\\u003econflate\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-buffer-and-conflate\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003edebounce\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-debounce\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003esample\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sample\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Terminal operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-terminal-operations\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-18\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: ProductService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-productservice\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Flow Kata\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-flow-kata\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: MessageService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-messageservice\",\"file_count\":27,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"SharedFlow and StateFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sharedflow-and-stateflow\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"SharedFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sharedflow\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eshareIn\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sharein\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"StateFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-stateflow\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003estateIn\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-statein\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-19\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Update ProductService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-update-productservice\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Update TemperatureService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-update-temperatureservice\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: LocationService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-locationservice\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: PriceService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-priceservice\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: NewsViewModel using stateIn\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-newsviewmodel-using-statein\",\"file_count\":28,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Testing flow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-flow\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Transformation functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-transformation-functions\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing infinite flows\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-infinite-flows\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Determining how many connections were opened\",\"quiz_type\":null,\"path\":\"#leanpub-auto-determining-how-many-connections-were-opened\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing view models\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-view-models\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-20\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Flow testing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-flow-testing\",\"file_count\":29,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 4: Kotlin Coroutines in practice\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-4-kotlin-coroutines-in-practice\",\"file_count\":30,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Common use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-common-use-cases\",\"file_count\":31,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Data\u002FAdapters Layer\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dataadapters-layer\",\"file_count\":31,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Domain Layer\",\"quiz_type\":null,\"path\":\"#leanpub-auto-domain-layer\",\"file_count\":31,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Presentation\u002FAPI\u002FUI layer\",\"quiz_type\":null,\"path\":\"#leanpub-auto-presentationapiui-layer\",\"file_count\":31,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-21\",\"file_count\":31,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Using coroutines from other languages\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-coroutines-from-other-languages\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Threads on different platforms\",\"quiz_type\":null,\"path\":\"#leanpub-auto-threads-on-different-platforms\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Transforming suspending into non-suspending functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-transforming-suspending-into-non-suspending-functions\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Calling suspending functions from other languages\",\"quiz_type\":null,\"path\":\"#leanpub-auto-calling-suspending-functions-from-other-languages\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Flow and Reactive Streams\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flow-and-reactive-streams-1\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-22\",\"file_count\":32,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Launching coroutines vs. suspending functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-launching-coroutines-vs-suspending-functions\",\"file_count\":33,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Best practices\",\"quiz_type\":null,\"path\":\"#leanpub-auto-best-practices\",\"file_count\":34,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The End\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-end\",\"file_count\":35,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exercise solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-solutions\",\"file_count\":36,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_mini?1715367508","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_mini2x?1715367508","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_list?1715367508","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_list2x?1715367508","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_shelf?1715367508","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_shelf2x?1715367508","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_featured?1715367508","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_featured2x?1715367508","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_hero?1715367508","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_hero2x?1715367508","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Introduction\n \u003Cul\u003E\n \u003Cli\u003E\n Who is this book for?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The structure of this book\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What will be covered?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Kotlin for Developers series\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Code conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Version\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercises and solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Acknowledgments\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 1: Understanding Kotlin Coroutines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Why Kotlin Coroutines?\n \u003Cul\u003E\n \u003Cli\u003E\n Simplicity\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Performance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Cancellation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Synchronization\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutines are multiplatform\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The biggest problem with Kotlin Coroutines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sequence builder\n \u003Cul\u003E\n \u003Cli\u003E\n Real-life usages\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Factorial sequence\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Prime numbers sequence\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n How does suspension work?\n \u003Cul\u003E\n \u003Cli\u003E\n A game analogy\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Suspending functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Your first suspension\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What is stored in the continuation?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Delaying a coroutine\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Resuming with a value\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Resume with an exception\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Suspending a coroutine, not a function\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Callback function wrappers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Continuation storage\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutines under the hood\n \u003Cul\u003E\n \u003Cli\u003E\n Continuation-passing style\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A very simple function\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A function with a state\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A function resumed with a value\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The call stack\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Suspending functions in other contexts\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The actual code\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The performance of suspending functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: What is stored by a continuation?\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutines: built-in support vs library\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 2: Kotlin Coroutines library\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Starting coroutines\n \u003Cul\u003E\n \u003Cli\u003E\n Asynchronous coroutine builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Blocking coroutine builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Structured Concurrency\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutine scope functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: UserDetailsRepository\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: BestStudentUseCase\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: CommentService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: mapAsync\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The bigger picture\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutine context\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ccode\u003ECoroutineContext\u003C\u002Fcode\u003E interface\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Finding elements in CoroutineContext\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Adding contexts\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Empty coroutine context\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Subtracting elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Folding context\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutine context and builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Accessing context in a suspending function\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Changing context in suspending functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Creating our own context\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutines and thread elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Understanding context propagation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: CounterContext\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dispatchers\n \u003Cul\u003E\n \u003Cli\u003E\n Default dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Limiting the default dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Main dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n IO dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dispatcher with a custom limit\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dispatcher with a fixed pool of threads\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dispatcher limited to a single thread\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using virtual threads from Project Loom\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Unconfined dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Immediate main dispatching\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Continuation interceptor\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Performance of dispatchers when executing different tasks\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Using dispatchers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: DiscNewsRepository\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Experiments with dispatchers\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Job and coroutine lifecycle\n \u003Cul\u003E\n \u003Cli\u003E\n Job and relationships\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Coroutine lifecycle\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Awaiting job completion\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Job factory function\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Synchronizing coroutines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Cancellation\n \u003Cul\u003E\n \u003Cli\u003E\n Basic cancellation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003Efinally\u003C\u002Fcode\u003E block\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n invokeOnCompletion\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Cancellation of children\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Cancellation in a coroutine scope\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Just one more call\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Stopping the unstoppable\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n CancellationException is special\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n CancellationException does not propagate to its parent\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n withTimeout\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EsuspendCancellableCoroutine\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Correct mistakes with cancellation\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exception handling\n \u003Cul\u003E\n \u003Cli\u003E\n Exceptions and structured concurrency\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n SupervisorJob\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n supervisorScope\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exceptions and await call\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003ECoroutineExceptionHandler\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constructing a coroutine scope\n \u003Cul\u003E\n \u003Cli\u003E\n CoroutineScope factory function\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constructing a background scope\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constructing a scope on Android\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: NotificationSender\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: BaseViewModel\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Synchronizing access to mutable state\n \u003Cul\u003E\n \u003Cli\u003E\n Using atomic values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Synchronized blocks\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using a dispatcher limited to a single thread\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Mutex\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Semaphore\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: CompanyDetailsRepository\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: CancellingRefresher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: TokenRepository\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Suspended lazy\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: mapAsync with concurrency limit\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing Kotlin Coroutines\n \u003Cul\u003E\n \u003Cli\u003E\n Testing time dependencies\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003ETestCoroutineScheduler\u003C\u002Fcode\u003E and \u003Ccode\u003EStandardTestDispatcher\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n runTest\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Background scope\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing cancellation and context passing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EUnconfinedTestDispatcher\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using mocks\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing functions that change a dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing what happens during function execution\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing functions that launch new coroutines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing classes that need scope in runTest\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Replacing the main dispatcher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing Android functions that launch coroutines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Setting a test dispatcher with a rule\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Test UserDetailsRepository\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Testing mapAsync\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Testing the NotificationSender class\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Testing a View Model\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 3: Channel and Flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Channel\n \u003Cul\u003E\n \u003Cli\u003E\n Channel types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n On buffer overflow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n On undelivered element handler\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Fan-out\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Fan-in\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Pipelines\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Practical usage\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: UserRefresher\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Cafeteria simulation\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Select\n \u003Cul\u003E\n \u003Cli\u003E\n Selecting deferred values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Selecting from channels\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: raceOf\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Hot and cold data sources\n \u003Cul\u003E\n \u003Cli\u003E\n Hot vs cold\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Hot channels, cold flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow introduction\n \u003Cul\u003E\n \u003Cli\u003E\n Comparing flow to other ways of representing values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The characteristics of Flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow nomenclature\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Real-life use cases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Understanding \u003Ccode\u003EFlow\u003C\u002Fcode\u003E\n \u003Cul\u003E\n \u003Cli\u003E\n Understanding \u003Ccode\u003EFlow\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n How \u003Ccode\u003EFlow\u003C\u002Fcode\u003E processing works\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow is synchronous\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow and shared state\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conclusion\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow building\n \u003Cul\u003E\n \u003Cli\u003E\n Flow from raw values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Converters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Converting a function to a flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow and Reactive Streams\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Understanding flow builder\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n channelFlow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n callbackFlow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Flow utils\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: All users flow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: distinct\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow lifecycle functions\n \u003Cul\u003E\n \u003Cli\u003E\n onEach\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n onStart\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n onCompletion\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n onEmpty\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n catch\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Uncaught exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Eretry\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n flowOn\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n launchIn\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: TemperatureService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: NewsViewModel\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow processing\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ccode\u003Emap\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Efilter\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Etake\u003C\u002Fcode\u003E and \u003Ccode\u003Edrop\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n How does collection processing work?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Emerge\u003C\u002Fcode\u003E, \u003Ccode\u003Ezip\u003C\u002Fcode\u003E and \u003Ccode\u003Ecombine\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Efold\u003C\u002Fcode\u003E and \u003Ccode\u003Escan\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EflatMapConcat\u003C\u002Fcode\u003E, \u003Ccode\u003EflatMapMerge\u003C\u002Fcode\u003E and \u003Ccode\u003EflatMapLatest\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Distinct until changed\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Ebuffer\u003C\u002Fcode\u003E and \u003Ccode\u003Econflate\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Edebounce\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Esample\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Terminal operations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: ProductService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Flow Kata\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: MessageService\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n SharedFlow and StateFlow\n \u003Cul\u003E\n \u003Cli\u003E\n SharedFlow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EshareIn\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n StateFlow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EstateIn\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Update ProductService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Update TemperatureService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: LocationService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: PriceService\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: NewsViewModel using stateIn\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing flow\n \u003Cul\u003E\n \u003Cli\u003E\n Transformation functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing infinite flows\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Determining how many connections were opened\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing view models\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Flow testing\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 4: Kotlin Coroutines in practice\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Common use cases\n \u003Cul\u003E\n \u003Cli\u003E\n Data\u002FAdapters Layer\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Domain Layer\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Presentation\u002FAPI\u002FUI layer\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using coroutines from other languages\n \u003Cul\u003E\n \u003Cli\u003E\n Threads on different platforms\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Transforming suspending into non-suspending functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Calling suspending functions from other languages\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Flow and Reactive Streams\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Launching coroutines vs. suspending functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Best practices\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The End\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Notes\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Kotlin Coroutines on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-05T12:14:26.000Z","vimeo_url":null,"available_web_book":true,"word_count":93368,"word_count_published":null,"youtube_url":null,"team_discount_package_id":80516,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Kotlin Coroutines by Marcin Moskała [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":72494,"accepted_authors":[{"id":75387,"type":"Author"}]},"78373":{"type":"Book","about_the_book":"\u003Cp\u003E\u003Cem\u003EWhat is leadership? \u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003EWhy is this important? \u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003EHow do you lead successfully? \u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003ETHE ART OF LEADERSHIP provides timeless answers to these eternal questions\u003C\u002Fstrong\u003E. It is a modern reading of Lao Tzu’s \u003Cem\u003ETao Te Ching\u003C\u002Fem\u003E — a guide for sustainable success in turbulent times. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIt is an interpretation of 81 short, poetic sections on leadership, people and how to succeed together in a volatile, uncertain, complex and ambiguous world where the rate of change is increasing daily.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EYou will discover new perspectives\u003C\u002Fstrong\u003E on the world, people and their behaviours, get actionable advice on \u003Cstrong\u003Ehow to lead strategically and effectively,\u003C\u002Fstrong\u003E and, learn how to \u003Cstrong\u003Emake a difference using purpose and integrity\u003C\u002Fstrong\u003E instead of pressure and control.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EYou will also improve your understanding of China, Chinese ways of leading and strategising\u003C\u002Fstrong\u003E since the \u003Cem\u003ETao Te Ching \u003C\u002Fem\u003Eis deeply ingrained in Chinese thinking, decision-making and actions.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":false,"available_downloadable_pdf":true,"categories":[{"id":1,"slug":"business_and_management","description":"","mature_content":false,"created_at":"2012-06-11T19:12:39.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Management","book_categories_count":634},{"id":119,"slug":"leadership","description":"","mature_content":false,"created_at":"2015-09-27T23:01:54.000Z","updated_at":"2015-09-27T23:01:54.000Z","can_be_short":false,"parent_category_id":1,"name":"Leadership","book_categories_count":457},{"id":247,"slug":"agile_business_leadership","description":"","mature_content":false,"created_at":"2020-11-03T00:08:38.000Z","updated_at":"2020-12-09T21:38:06.000Z","can_be_short":false,"parent_category_id":119,"name":"Agile","book_categories_count":98},{"id":16,"slug":"agile","description":"","mature_content":false,"created_at":"2012-06-11T19:12:39.000Z","updated_at":"2020-11-06T04:24:47.000Z","can_be_short":false,"parent_category_id":1,"name":"Agile","book_categories_count":690},{"id":245,"slug":"leadership_agile","description":"","mature_content":false,"created_at":"2020-11-03T00:07:09.000Z","updated_at":"2020-12-09T21:38:06.000Z","can_be_short":false,"parent_category_id":16,"name":"Leadership","book_categories_count":135},{"id":121,"slug":"teamwork","description":"","mature_content":false,"created_at":"2015-10-03T21:29:32.000Z","updated_at":"2015-10-03T21:29:32.000Z","can_be_short":false,"parent_category_id":1,"name":"Teamwork","book_categories_count":312}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002FTheArtOfLeadership\u002Fce\u002Fepub","community_edition_pdf_url":"\u002FTheArtOfLeadership\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":"","created_at":"2022-04-03T22:26:27.000Z","default_package_id":86832,"meta_description":"leadership, management, strategy, ways of working, self-improvement, Lao Tzu, Tao Te Ching, Dao De Jing, DaoDeJing, TaoTeChing","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"THE ART OF LEADERSHIP","epub_available":false,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":null,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":false,"has_epub_sample":false,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_featured?1649026963","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2025-01-19T15:43:34.000Z","last_published_sync_mode":"upload","leanpub_app_available":false,"mature_content":false,"new_edition_id":null,"page_count_published":176,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":null,"primary_author_id":82319,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002FTheArtOfLeadership-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=c335c4864ea5257dcc3daa6d91b86c193f40bbaea4fc5f032a8a0df329f07ab8","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002FTheArtOfLeadership-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=d1bcd43374f325855a1b4f5a970e69098ca7d1aaba5aeb2433bf39b78b2f95ac","show_also_by_authors":true,"show_community_edition_on_book_page":false,"show_num_readers":true,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":true,"show_read_link":"none","show_word_count":false,"slug":"TheArtOfLeadership","state":"published","subtitle":"Purpose and Integrity for Sustainable Success in Turbulent Times","suggested_tweet":null,"sync_mode":"upload","tagline":"“Purpose is a surer path to productivity than pressure. Pressure keeps knocking you off the path. Purpose keeps bringing you back onto the path.” Kent Beck THE ART OF LEADERSHIPis a modern interpretation of Lao Tzu’sTao Te Ching— a guide for sustainable success in turbulent times using purpose and integrity instead of pressure and control.","thank_you_message":"THANK YOU for purchasing THE ART OF LEADERSHIP - I hope you will find it useful and look forward to your feedback, e.g. by a short review on Leanpub. Stay safe. Rgds\u002FErik","title":"THE ART OF LEADERSHIP","json_toc":null,"title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_mini?1649026963","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_mini2x?1649026963","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_list?1649026963","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_list2x?1649026963","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_shelf?1649026963","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_shelf2x?1649026963","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_featured?1649026963","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_featured2x?1649026963","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_hero?1649026963","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_hero2x?1649026963","toc":"\u003Cul class=\"toc no-parts\"\u003E\n \u003Cli\u003E\n \u003Cem\u003EIntroduction\u003C\u002Fem\u003E     9\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EAcknowledgements\u003C\u002Fem\u003E     13\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EPart I: Purpose\u003C\u002Fem\u003E     17\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EPart II: Integrity\u003C\u002Fem\u003E     63\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003ESources\u003C\u002Fem\u003E     131\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EGlossary\u003C\u002Fem\u003E     139 \n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EIndex\u003C\u002Fem\u003E     163\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Cem\u003EList of Figures\u003C\u002Fem\u003E     173\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read THE ART OF LEADERSHIP on Leanpub!","unpublished_sample":true,"updated_at":"2025-03-28T22:54:34.000Z","vimeo_url":"","available_web_book":false,"word_count":null,"word_count_published":null,"youtube_url":"GAggecwMFH0","team_discount_package_id":86832,"external_forum_url":null,"num_copies_sold":163,"page_count":176,"percent_complete":100,"seo_title":"THE ART OF LEADERSHIP by Erik Schön [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":78373,"accepted_authors":[{"id":82319,"type":"Author"}]},"78480":{"type":"Book","about_the_book":"\u003Cp\u003EThis book is about functional programming features in Kotlin. It first covers the essentials, and then it builds on them: it presents important and practical topics like collection processing, function references, scope functions, DSL usage and creation, and context receivers.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis position is perfect for developers who know the basics of Kotlin and want to learn well a bit more advanced features. It is a natural continuation of \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fkotlin_developers\" target=\"_blank\"\u003EKotlin for developers: Essentials\u003C\u002Fa\u003E. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIt is based on the second day of the \u003Ca href=\"https:\u002F\u002Fkt.academy\u002Fworkshop\u002Fkotlin\" target=\"_blank\"\u003EKotlin for developers\u003C\u002Fa\u003E workshop and serves as one of the official workbooks for the workshop. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIf you are interested in paperback, you can purchase it \u003Ca href=\"https:\u002F\u002Fwww.amazon.com\u002FFunctional-Kotlin-Developers-Book-ebook\u002Fdp\u002FB0BN8TRQDF\u002Fref=sr_1_3?crid=WZLJSKFY7JSG&amp;keywords=Functional+Kotlin&amp;qid=1675009485&amp;sprefix=functional+kotlin%2Caps%2C209&amp;sr=8-3\" target=\"_blank\"\u003Ehere\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43},{"id":62,"slug":"android","description":"","mature_content":false,"created_at":"2015-09-20T01:32:46.000Z","updated_at":"2015-09-20T01:32:46.000Z","can_be_short":false,"parent_category_id":53,"name":"Android","book_categories_count":114}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":"","community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fkotlin_functional\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fkotlin_functional\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2022-04-13T07:49:58.000Z","default_package_id":86949,"meta_description":"The one book you need about functional features in Kotlin, including lambda expressions, function types, collection processing, scope functions, DSL, and more.","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Functional Kotlin","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":7639212,"free_purchase_only":false,"google_analytics_code":"G-5RCMMHTMYF","generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_featured?1700149092","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-12-03T07:51:42.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-12-03T07:59:29.000Z","primary_author_id":82433,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fkotlin_functional-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=1260ea6eca34bf0c44c5ce884b0a552c15f0173b508c9e753aa9e9c05e38386b","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fkotlin_functional-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=19053ad3b1038eb9dfaa8de958eeb7f034b8e85ffe498a4e988e545d8aef3aec","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"kotlin_functional","state":"published","subtitle":"","suggested_tweet":null,"sync_mode":"github","tagline":"This book is about functional programming features in Kotlin. It first covers the essentials and then builds on them: it presents important and practical topics like collection processing, scope functions, and DSL usage and creation, context receivers.","thank_you_message":null,"title":"Functional Kotlin","json_toc":"[{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Who is this book for?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-who-is-this-book-for\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What will be covered?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-will-be-covered\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Kotlin for Developers series\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-kotlin-for-developers-series\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Code conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-code-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercises and solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercises-and-solutions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Acknowledgments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-acknowledgments\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Introduction to functional programming with Kotlin\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction-to-functional-programming-with-kotlin\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Why do we need to use functions as objects?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-why-do-we-need-to-use-functions-as-objects\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Function types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-types\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Defining function types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-defining-function-types\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using function types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-function-types\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Named parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-named-parameters\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Type aliases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-type-aliases\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A function type is an interface\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-function-type-is-an-interface\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Anonymous functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-anonymous-functions\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lambda expressions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lambda-expressions\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Tricky braces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-tricky-braces\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-parameters\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Trailing lambdas\",\"quiz_type\":null,\"path\":\"#leanpub-auto-trailing-lambdas\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Result values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-result-values\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lambda expression examples\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lambda-expression-examples\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"An implicit name for a single parameter\",\"quiz_type\":null,\"path\":\"#leanpub-auto-an-implicit-name-for-a-single-parameter\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Closures\",\"quiz_type\":null,\"path\":\"#leanpub-auto-closures\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lambda expressions vs anonymous functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lambda-expressions-vs-anonymous-functions\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Function types and literals\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-function-types-and-literals\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Observable value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-observable-value\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Function references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Top-level functions references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-top-level-functions-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Method references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-method-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extension function references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extension-function-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Method references and generic types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-method-references-and-generic-types\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Bounded function references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-bounded-function-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Constructor references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constructor-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Bounded object declaration references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-bounded-object-declaration-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function overloading and references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-overloading-and-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Property references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-property-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Inferred function types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-inferred-function-types\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Function references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-function-references\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"SAM Interface support in Kotlin\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sam-interface-support-in-kotlin\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Support for Java SAM interfaces in Kotlin\",\"quiz_type\":null,\"path\":\"#leanpub-auto-support-for-java-sam-interfaces-in-kotlin\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Functional interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-functional-interfaces\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Inline functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inline-functions\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Inline functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inline-functions-1\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Inline functions with functional parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inline-functions-with-functional-parameters\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Non-local return\",\"quiz_type\":null,\"path\":\"#leanpub-auto-non-local-return\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Crossinline and noinline\",\"quiz_type\":null,\"path\":\"#leanpub-auto-crossinline-and-noinline\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Reified type parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-reified-type-parameters\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Inline properties\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inline-properties\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Costs of the inline modifier\",\"quiz_type\":null,\"path\":\"#leanpub-auto-costs-of-the-inline-modifier\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using inline functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-inline-functions\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Inline functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-inline-functions\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Collection processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-collection-processing\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eforEach\\u003c\u002Fcode\\u003e and \\u003ccode\\u003eonEach\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-foreach-and-oneach\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003efilter\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-filter\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003emap\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-map\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003emapNotNull\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-mapnotnull\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eflatMap\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-flatmap\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Implement map\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-implement-map\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Optimize collection processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-optimize-collection-processing\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003efold\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-fold\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ereduce\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-reduce\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003esum\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sum\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ewithIndex\\u003c\u002Fcode\\u003e and indexed variants\",\"quiz_type\":null,\"path\":\"#leanpub-auto-withindex-and-indexed-variants\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003etake\\u003c\u002Fcode\\u003e, \\u003ccode\\u003etakeLast\\u003c\u002Fcode\\u003e, \\u003ccode\\u003edrop\\u003c\u002Fcode\\u003e, \\u003ccode\\u003edropLast\\u003c\u002Fcode\\u003e and \\u003ccode\\u003esubList\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-take-takelast-drop-droplast-and-sublist\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Adding element at position\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-adding-element-at-position\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Getting elements at certain positions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-getting-elements-at-certain-positions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Finding an element\",\"quiz_type\":null,\"path\":\"#leanpub-auto-finding-an-element\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Counting elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-counting-elements\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eany\\u003c\u002Fcode\\u003e, \\u003ccode\\u003eall\\u003c\u002Fcode\\u003e and \\u003ccode\\u003enone\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-any-all-and-none\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Implement shop functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-implement-shop-functions\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003epartition\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-partition\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003egroupBy\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-groupby\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Associating to a map\",\"quiz_type\":null,\"path\":\"#leanpub-auto-associating-to-a-map\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003edistinct\\u003c\u002Fcode\\u003e and \\u003ccode\\u003edistinctBy\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-distinct-and-distinctby\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Prime access list\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-prime-access-list\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sorting: \\u003ccode\\u003esorted\\u003c\u002Fcode\\u003e, \\u003ccode\\u003esortedBy\\u003c\u002Fcode\\u003e and \\u003ccode\\u003esortedWith\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sorting-sorted-sortedby-and-sortedwith\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sorting mutable collections\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sorting-mutable-collections\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Maximum and minimum\",\"quiz_type\":null,\"path\":\"#leanpub-auto-maximum-and-minimum\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eshuffled\\u003c\u002Fcode\\u003e and \\u003ccode\\u003erandom\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-shuffled-and-random\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Top articles\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-top-articles\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Refactor collection processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-refactor-collection-processing\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ezip\\u003c\u002Fcode\\u003e and \\u003ccode\\u003ezipWithNext\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-zip-and-zipwithnext\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Windowing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-windowing\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ejoinToString\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jointostring\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eMap\\u003c\u002Fcode\\u003e, \\u003ccode\\u003eSet\\u003c\u002Fcode\\u003e and \\u003ccode\\u003eString\\u003c\u002Fcode\\u003e processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-map-set-and-string-processing\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Passing students list\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-passing-students-list\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Best students list\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-best-students-list\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Functional Quick Sort\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-functional-quick-sort\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Powerset\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-powerset\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: All possible partitions of a set\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-all-possible-partitions-of-a-set\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Sequences\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sequences\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What is a sequence?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-is-a-sequence\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Order is important\",\"quiz_type\":null,\"path\":\"#leanpub-auto-order-is-important\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sequences do the minimum number of operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sequences-do-the-minimum-number-of-operations\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sequences can be infinite\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sequences-can-be-infinite\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sequences do not create collections at every processing step\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sequences-do-not-create-collections-at-every-processing-step\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"When aren’t sequences faster?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-arent-sequences-faster\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What about Java streams?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-about-java-streams\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin Sequence debugging\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-sequence-debugging\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Understanding sequences\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-understanding-sequences\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Type Safe DSL Builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-type-safe-dsl-builders\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A function type with a receiver\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-function-type-with-a-receiver\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Simple DSL builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-simple-dsl-builders\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using \\u003ccode\\u003eapply\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-apply\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Simple DSL-like builders\",\"quiz_type\":null,\"path\":\"#leanpub-auto-simple-dsl-like-builders\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Multi-level DSLs\",\"quiz_type\":null,\"path\":\"#leanpub-auto-multi-level-dsls\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"DslMarker\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dslmarker\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A more complex example\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-more-complex-example\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"When should we use DSLs?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-should-we-use-dsls\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-1\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: HTML table DSL\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-html-table-dsl\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Creating user table row\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-creating-user-table-row\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Scope functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-scope-functions\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003elet\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-let\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ealso\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-also\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003etakeIf\\u003c\u002Fcode\\u003e and \\u003ccode\\u003etakeUnless\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-takeif-and-takeunless\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eapply\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-apply\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The dangers of careless receiver overloading\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-dangers-of-careless-receiver-overloading\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003ewith\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-with\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003erun\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-run\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using scope functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-scope-functions\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Using scope functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-using-scope-functions\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: orThrow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-orthrow\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Context parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-context-parameters\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extension function problems\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extension-function-problems\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Introducing context parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introducing-context-parameters\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-use-cases\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Concerns\",\"quiz_type\":null,\"path\":\"#leanpub-auto-concerns\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Named context parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-named-context-parameters\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-2\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Logger\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-logger\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"A birds-eye view of Arrow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-birds-eye-view-of-arrow\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Functions and Arrow Core\",\"quiz_type\":null,\"path\":\"#leanpub-auto-functions-and-arrow-core\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing higher-order functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-higher-order-functions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Error Handling\",\"quiz_type\":null,\"path\":\"#leanpub-auto-error-handling\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Data Immutability with Arrow Optics\",\"quiz_type\":null,\"path\":\"#leanpub-auto-data-immutability-with-arrow-optics\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Final words\",\"quiz_type\":null,\"path\":\"#leanpub-auto-final-words\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Final Project: UserService\",\"quiz_type\":null,\"path\":\"#leanpub-auto-final-project-userservice\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exercise solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-solutions\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_mini?1700149092","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_mini2x?1700149092","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_list?1700149092","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_list2x?1700149092","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_shelf?1700149092","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_shelf2x?1700149092","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_featured?1700149092","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_featured2x?1700149092","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_hero?1700149092","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_hero2x?1700149092","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Introduction\n \u003Cul\u003E\n \u003Cli\u003E\n Who is this book for?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What will be covered?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Kotlin for Developers series\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Code conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercises and solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Acknowledgments\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Introduction to functional programming with Kotlin\n \u003Cul\u003E\n \u003Cli\u003E\n Why do we need to use functions as objects?\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function types\n \u003Cul\u003E\n \u003Cli\u003E\n Defining function types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using function types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Named parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Type aliases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A function type is an interface\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Anonymous functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lambda expressions\n \u003Cul\u003E\n \u003Cli\u003E\n Tricky braces\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Trailing lambdas\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Result values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lambda expression examples\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n An implicit name for a single parameter\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Closures\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lambda expressions vs anonymous functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Function types and literals\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Observable value\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function references\n \u003Cul\u003E\n \u003Cli\u003E\n Top-level functions references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Method references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extension function references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Method references and generic types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Bounded function references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constructor references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Bounded object declaration references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function overloading and references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Property references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Inferred function types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Function references\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n SAM Interface support in Kotlin\n \u003Cul\u003E\n \u003Cli\u003E\n Support for Java SAM interfaces in Kotlin\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Functional interfaces\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Inline functions\n \u003Cul\u003E\n \u003Cli\u003E\n Inline functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Inline functions with functional parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Non-local return\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Crossinline and noinline\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Reified type parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Inline properties\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Costs of the inline modifier\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using inline functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Inline functions\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Collection processing\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ccode\u003EforEach\u003C\u002Fcode\u003E and \u003Ccode\u003EonEach\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Efilter\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Emap\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EmapNotNull\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EflatMap\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Implement map\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Optimize collection processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Efold\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Ereduce\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Esum\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EwithIndex\u003C\u002Fcode\u003E and indexed variants\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Etake\u003C\u002Fcode\u003E, \u003Ccode\u003EtakeLast\u003C\u002Fcode\u003E, \u003Ccode\u003Edrop\u003C\u002Fcode\u003E, \u003Ccode\u003EdropLast\u003C\u002Fcode\u003E and \u003Ccode\u003EsubList\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Adding element at position\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Getting elements at certain positions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Finding an element\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Counting elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Eany\u003C\u002Fcode\u003E, \u003Ccode\u003Eall\u003C\u002Fcode\u003E and \u003Ccode\u003Enone\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Implement shop functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Epartition\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EgroupBy\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Associating to a map\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Edistinct\u003C\u002Fcode\u003E and \u003Ccode\u003EdistinctBy\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Prime access list\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sorting: \u003Ccode\u003Esorted\u003C\u002Fcode\u003E, \u003Ccode\u003EsortedBy\u003C\u002Fcode\u003E and \u003Ccode\u003EsortedWith\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sorting mutable collections\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Maximum and minimum\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Eshuffled\u003C\u002Fcode\u003E and \u003Ccode\u003Erandom\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Top articles\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Refactor collection processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Ezip\u003C\u002Fcode\u003E and \u003Ccode\u003EzipWithNext\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Windowing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EjoinToString\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EMap\u003C\u002Fcode\u003E, \u003Ccode\u003ESet\u003C\u002Fcode\u003E and \u003Ccode\u003EString\u003C\u002Fcode\u003E processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Passing students list\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Best students list\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Functional Quick Sort\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Powerset\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: All possible partitions of a set\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sequences\n \u003Cul\u003E\n \u003Cli\u003E\n What is a sequence?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Order is important\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sequences do the minimum number of operations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sequences can be infinite\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sequences do not create collections at every processing step\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n When aren’t sequences faster?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What about Java streams?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin Sequence debugging\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Understanding sequences\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Type Safe DSL Builders\n \u003Cul\u003E\n \u003Cli\u003E\n A function type with a receiver\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Simple DSL builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using \u003Ccode\u003Eapply\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Simple DSL-like builders\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Multi-level DSLs\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n DslMarker\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A more complex example\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n When should we use DSLs?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: HTML table DSL\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Creating user table row\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Scope functions\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ccode\u003Elet\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Ealso\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EtakeIf\u003C\u002Fcode\u003E and \u003Ccode\u003EtakeUnless\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Eapply\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The dangers of careless receiver overloading\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Ewith\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Erun\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using scope functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Using scope functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: orThrow\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Context parameters\n \u003Cul\u003E\n \u003Cli\u003E\n Extension function problems\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Introducing context parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Use cases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Concerns\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Named context parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Logger\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A birds-eye view of Arrow\n \u003Cul\u003E\n \u003Cli\u003E\n Functions and Arrow Core\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing higher-order functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Error Handling\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Data Immutability with Arrow Optics\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Final words\n \u003Cul\u003E\n \u003Cli\u003E\n Final Project: UserService\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Notes\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Functional Kotlin on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-07T12:04:14.000Z","vimeo_url":null,"available_web_book":true,"word_count":48131,"word_count_published":null,"youtube_url":null,"team_discount_package_id":86949,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Functional Kotlin by Marcin Moskała [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":78480,"accepted_authors":[{"id":82433,"type":"Author"}]},"78674":{"type":"Book","about_the_book":"\u003Cp\u003EKotlin is a powerful language, largely thanks to its expressive syntax, intuitive and null-safe type system, and great tooling support. In this book, we cover the essentials of Kotlin, so you can start developing with this amazing programming language. We show nearly everything you need to know in clear and executable code examples.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIf you are interested in paperback, you can purchase it \u003Ca href=\"https:\u002F\u002Fwww.amazon.com\u002FKotlin-Essentials-Developers-Book-ebook\u002Fdp\u002FB0BQCD2W97\u002Fref=sr_1_1?crid=37559VAEBQHJH&amp;keywords=kotlin+essentials&amp;qid=1675009539&amp;sprefix=Kotlin+Esse%2Caps%2C179&amp;sr=8-1\" target=\"_blank\"\u003Ehere\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":"","community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fkotlin_developers\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fkotlin_developers\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2022-05-05T08:44:52.000Z","default_package_id":87159,"meta_description":"This book covers the essentials of Kotlin so you can start developing with Kotlin programming language.","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Kotlin Essentials","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":17048332,"free_purchase_only":false,"google_analytics_code":"G-5RCMMHTMYF","generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_featured?1694632605","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-12-16T13:07:24.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-12-16T13:15:51.000Z","primary_author_id":82641,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fkotlin_developers-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=7a456b3c4dc10236b01f7e718fae54d33b093feeaaca0dfe39fd4065f64dc203","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fkotlin_developers-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=ebd06f5f6219a8465ac60f4585f353b7e58f4e76f6f211d07cb46a2cc4cb4a36","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"kotlin_developers","state":"published","subtitle":"","suggested_tweet":null,"sync_mode":"github","tagline":"This book covers the essentials of Kotlin so you can start developing with this amazing programming language. We show nearly everything you need to know in clear and executable code examples.","thank_you_message":null,"title":"Kotlin Essentials","json_toc":"[{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Who is this book for?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-who-is-this-book-for\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What will be covered?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-will-be-covered\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Kotlin for Developers series\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-kotlin-for-developers-series\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"My story\",\"quiz_type\":null,\"path\":\"#leanpub-auto-my-story\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Code conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-code-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercises and solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercises-and-solutions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Acknowledgments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-acknowledgments\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"What is Kotlin?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-is-kotlin\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin platforms\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-platforms\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Kotlin IDE\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-kotlin-ide\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Where do we use Kotlin?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-where-do-we-use-kotlin\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Your first program in Kotlin\",\"quiz_type\":null,\"path\":\"#leanpub-auto-your-first-program-in-kotlin\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Live templates\",\"quiz_type\":null,\"path\":\"#leanpub-auto-live-templates\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What is under the hood on JVM?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-is-under-the-hood-on-jvm\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Packages and importing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-packages-and-importing\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Your first program\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-your-first-program\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Variables\",\"quiz_type\":null,\"path\":\"#leanpub-auto-variables\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Basic types, their literals and operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-basic-types-their-literals-and-operations\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Numbers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-numbers\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Booleans\",\"quiz_type\":null,\"path\":\"#leanpub-auto-booleans\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Characters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-characters\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Strings\",\"quiz_type\":null,\"path\":\"#leanpub-auto-strings\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-1\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Basic values operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-basic-values-operations\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Conditional statements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conditional-statements\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"if-statement\",\"quiz_type\":null,\"path\":\"#leanpub-auto-if-statement\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"when-statement\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-statement\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"when-statement with a value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-statement-with-a-value\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"is check\",\"quiz_type\":null,\"path\":\"#leanpub-auto-is-check\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Explicit casting\",\"quiz_type\":null,\"path\":\"#leanpub-auto-explicit-casting\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Smart-casting\",\"quiz_type\":null,\"path\":\"#leanpub-auto-smart-casting\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"While and do-while statements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-while-and-do-while-statements\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-2\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Using when\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-using-when\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Pretty time display\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-pretty-time-display\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-functions\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Single-expression functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-single-expression-functions\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Functions on all levels\",\"quiz_type\":null,\"path\":\"#leanpub-auto-functions-on-all-levels\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Parameters and arguments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-parameters-and-arguments\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eUnit\\u003c\u002Fcode\\u003e return type\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unit-return-type\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Vararg parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-vararg-parameters\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Named parameter syntax and default arguments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-named-parameter-syntax-and-default-arguments\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function overloading\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-overloading\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Infix syntax\",\"quiz_type\":null,\"path\":\"#leanpub-auto-infix-syntax\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function formatting\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-formatting\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-3\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Person details display\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-person-details-display\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The power of the for-loop\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-power-of-the-for-loop\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Ranges\",\"quiz_type\":null,\"path\":\"#leanpub-auto-ranges\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Break and continue\",\"quiz_type\":null,\"path\":\"#leanpub-auto-break-and-continue\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-use-cases\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-4\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Range Operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-range-operations\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Nullability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-nullability\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Safe calls\",\"quiz_type\":null,\"path\":\"#leanpub-auto-safe-calls\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Not-null assertion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-not-null-assertion\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Smart-casting\",\"quiz_type\":null,\"path\":\"#leanpub-auto-smart-casting-1\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Elvis operator\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-elvis-operator\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extensions on nullable types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extensions-on-nullable-types\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003enull\\u003c\u002Fcode\\u003e is our friend\",\"quiz_type\":null,\"path\":\"#leanpub-auto-null-is-our-friend\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"lateinit\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lateinit\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-5\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: User Information Processor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-user-information-processor\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-classes\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Member functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-member-functions\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Properties\",\"quiz_type\":null,\"path\":\"#leanpub-auto-properties\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Constructors\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constructors\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Classes representing data in Kotlin and Java\",\"quiz_type\":null,\"path\":\"#leanpub-auto-classes-representing-data-in-kotlin-and-java\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Inner classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inner-classes\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-6\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Implementing the Product class\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-implementing-the-product-class\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Inheritance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-inheritance\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Overriding elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-overriding-elements\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Parents with non-empty constructors\",\"quiz_type\":null,\"path\":\"#leanpub-auto-parents-with-non-empty-constructors\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Super call\",\"quiz_type\":null,\"path\":\"#leanpub-auto-super-call\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Abstract class\",\"quiz_type\":null,\"path\":\"#leanpub-auto-abstract-class\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-interfaces\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Visibility\",\"quiz_type\":null,\"path\":\"#leanpub-auto-visibility\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"\\u003ccode\\u003eAny\\u003c\u002Fcode\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-any\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-7\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: GUI View Hierarchy Simulation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-gui-view-hierarchy-simulation\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Data classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-data-classes\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Transforming to a string\",\"quiz_type\":null,\"path\":\"#leanpub-auto-transforming-to-a-string\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Objects equality\",\"quiz_type\":null,\"path\":\"#leanpub-auto-objects-equality\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Hash code\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hash-code\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Copying objects\",\"quiz_type\":null,\"path\":\"#leanpub-auto-copying-objects\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Destructuring\",\"quiz_type\":null,\"path\":\"#leanpub-auto-destructuring\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"When and how should we use destructuring?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-and-how-should-we-use-destructuring\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Data class limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-data-class-limitations\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Prefer data classes instead of tuples\",\"quiz_type\":null,\"path\":\"#leanpub-auto-prefer-data-classes-instead-of-tuples\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-8\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Data class practice\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-data-class-practice\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Objects\",\"quiz_type\":null,\"path\":\"#leanpub-auto-objects\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Object expressions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-object-expressions\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Object declaration\",\"quiz_type\":null,\"path\":\"#leanpub-auto-object-declaration\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Companion objects\",\"quiz_type\":null,\"path\":\"#leanpub-auto-companion-objects\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Data object declarations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-data-object-declarations\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Constant values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-constant-values\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-9\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Pizza factory\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-pizza-factory\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Throwing exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-throwing-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Defining exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-defining-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Catching exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-catching-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A try-catch block used as an expression\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-try-catch-block-used-as-an-expression\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The finally block\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-finally-block\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Important exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-important-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The hierarchy of exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-hierarchy-of-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-10\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Catching exceptions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-catching-exceptions\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Enum classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-enum-classes\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Data in enum values\",\"quiz_type\":null,\"path\":\"#leanpub-auto-data-in-enum-values\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Enum classes with custom methods\",\"quiz_type\":null,\"path\":\"#leanpub-auto-enum-classes-with-custom-methods\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-11\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Days of the week enum\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-days-of-the-week-enum\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Sealed classes and interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sealed-classes-and-interfaces\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sealed classes and \\u003ccode\\u003ewhen\\u003c\u002Fcode\\u003e expressions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sealed-classes-and-when-expressions\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sealed vs enum\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sealed-vs-enum\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-use-cases-1\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-12\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Annotation classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-annotation-classes\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Meta-annotations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-meta-annotations\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Annotating the primary constructor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-annotating-the-primary-constructor\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"List literals\",\"quiz_type\":null,\"path\":\"#leanpub-auto-list-literals\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-13\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Extensions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extensions\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extension functions under the hood\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extension-functions-under-the-hood\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extension properties\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extension-properties\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extensions vs members\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extensions-vs-members\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Extension functions on object declarations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-extension-functions-on-object-declarations\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Member extension functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-member-extension-functions\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Use cases\",\"quiz_type\":null,\"path\":\"#leanpub-auto-use-cases-2\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-14\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Conversion and measurement unit creation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-conversion-and-measurement-unit-creation\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Collections\",\"quiz_type\":null,\"path\":\"#leanpub-auto-collections\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The hierarchy of interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-hierarchy-of-interfaces\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Mutable vs read-only types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-mutable-vs-read-only-types\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Creating collections\",\"quiz_type\":null,\"path\":\"#leanpub-auto-creating-collections\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lists\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lists\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Sets\",\"quiz_type\":null,\"path\":\"#leanpub-auto-sets\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Maps\",\"quiz_type\":null,\"path\":\"#leanpub-auto-maps\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using arrays in practice\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-arrays-in-practice\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-15\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Inventory management\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-inventory-management\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Operator overloading\",\"quiz_type\":null,\"path\":\"#leanpub-auto-operator-overloading\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"An example of operator overloading\",\"quiz_type\":null,\"path\":\"#leanpub-auto-an-example-of-operator-overloading\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Arithmetic operators\",\"quiz_type\":null,\"path\":\"#leanpub-auto-arithmetic-operators\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003ein\\u003c\u002Fcode\\u003e operator\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-in-operator\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The iterator operator\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-iterator-operator\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The equality and inequality operators\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-equality-and-inequality-operators\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Comparison operators\",\"quiz_type\":null,\"path\":\"#leanpub-auto-comparison-operators\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The indexed access operator\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-indexed-access-operator\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Augmented assignments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-augmented-assignments\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Unary prefix operators\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unary-prefix-operators\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Increment and decrement\",\"quiz_type\":null,\"path\":\"#leanpub-auto-increment-and-decrement\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The invoke operator\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-invoke-operator\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Precedence\",\"quiz_type\":null,\"path\":\"#leanpub-auto-precedence\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-16\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Money operations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-money-operations\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The beauty of Kotlin’s type system\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-beauty-of-kotlins-type-system\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What is a type?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-is-a-type\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Why do we have types?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-why-do-we-have-types\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The relation between classes and types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-relation-between-classes-and-types\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Class vs type in practice\",\"quiz_type\":null,\"path\":\"#leanpub-auto-class-vs-type-in-practice\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The relationship between types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-relationship-between-types\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The subtype of all the types: Nothing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-subtype-of-all-the-types-nothing\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The result type from return and throw\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-result-type-from-return-and-throw\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"When is some code not reachable?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-when-is-some-code-not-reachable\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The type of null\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-type-of-null\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-17\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: The closest supertype of types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-the-closest-supertype-of-types\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Generics\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generics\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generic functions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-functions\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generic classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-classes\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generic classes and nullability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-classes-and-nullability\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generic interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-interfaces\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Type parameters and inheritance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-type-parameters-and-inheritance\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Type erasure\",\"quiz_type\":null,\"path\":\"#leanpub-auto-type-erasure\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generic constraints\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-constraints\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Star projection\",\"quiz_type\":null,\"path\":\"#leanpub-auto-star-projection\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Underscore operator for type arguments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-underscore-operator-for-type-arguments\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-18\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Stock\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-stock\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Final words\",\"quiz_type\":null,\"path\":\"#leanpub-auto-final-words\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Final Project: Workout manager\",\"quiz_type\":null,\"path\":\"#leanpub-auto-final-project-workout-manager\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exercise solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-solutions\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_mini?1694632605","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_mini2x?1694632605","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_list?1694632605","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_list2x?1694632605","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_shelf?1694632605","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_shelf2x?1694632605","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_featured?1694632605","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_featured2x?1694632605","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_hero?1694632605","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_hero2x?1694632605","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Introduction\n \u003Cul\u003E\n \u003Cli\u003E\n Who is this book for?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What will be covered?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Kotlin for Developers series\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n My story\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Code conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercises and solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Acknowledgments\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What is Kotlin?\n \u003Cul\u003E\n \u003Cli\u003E\n Kotlin platforms\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Kotlin IDE\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Where do we use Kotlin?\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Your first program in Kotlin\n \u003Cul\u003E\n \u003Cli\u003E\n Live templates\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n What is under the hood on JVM?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Packages and importing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Your first program\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Variables\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Basic types, their literals and operations\n \u003Cul\u003E\n \u003Cli\u003E\n Numbers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Booleans\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Characters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Strings\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Basic values operations\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conditional statements\n \u003Cul\u003E\n \u003Cli\u003E\n if-statement\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n when-statement\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n when-statement with a value\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n is check\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Explicit casting\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Smart-casting\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n While and do-while statements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Using when\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Pretty time display\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Functions\n \u003Cul\u003E\n \u003Cli\u003E\n Single-expression functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Functions on all levels\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Parameters and arguments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EUnit\u003C\u002Fcode\u003E return type\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Vararg parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Named parameter syntax and default arguments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function overloading\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Infix syntax\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function formatting\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Person details display\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The power of the for-loop\n \u003Cul\u003E\n \u003Cli\u003E\n Ranges\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Break and continue\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Use cases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Range Operations\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Nullability\n \u003Cul\u003E\n \u003Cli\u003E\n Safe calls\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Not-null assertion\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Smart-casting\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Elvis operator\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extensions on nullable types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003Enull\u003C\u002Fcode\u003E is our friend\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n lateinit\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: User Information Processor\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Classes\n \u003Cul\u003E\n \u003Cli\u003E\n Member functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Properties\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constructors\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Classes representing data in Kotlin and Java\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Inner classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Implementing the Product class\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Inheritance\n \u003Cul\u003E\n \u003Cli\u003E\n Overriding elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Parents with non-empty constructors\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Super call\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Abstract class\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Interfaces\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Visibility\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ccode\u003EAny\u003C\u002Fcode\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: GUI View Hierarchy Simulation\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Data classes\n \u003Cul\u003E\n \u003Cli\u003E\n Transforming to a string\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Objects equality\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Hash code\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Copying objects\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Destructuring\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n When and how should we use destructuring?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Data class limitations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Prefer data classes instead of tuples\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Data class practice\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Objects\n \u003Cul\u003E\n \u003Cli\u003E\n Object expressions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Object declaration\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Companion objects\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Data object declarations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Constant values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Pizza factory\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exceptions\n \u003Cul\u003E\n \u003Cli\u003E\n Throwing exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Defining exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Catching exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A try-catch block used as an expression\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The finally block\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Important exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The hierarchy of exceptions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Catching exceptions\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Enum classes\n \u003Cul\u003E\n \u003Cli\u003E\n Data in enum values\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Enum classes with custom methods\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Days of the week enum\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sealed classes and interfaces\n \u003Cul\u003E\n \u003Cli\u003E\n Sealed classes and \u003Ccode\u003Ewhen\u003C\u002Fcode\u003E expressions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sealed vs enum\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Use cases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Annotation classes\n \u003Cul\u003E\n \u003Cli\u003E\n Meta-annotations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Annotating the primary constructor\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n List literals\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extensions\n \u003Cul\u003E\n \u003Cli\u003E\n Extension functions under the hood\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extension properties\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extensions vs members\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Extension functions on object declarations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Member extension functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Use cases\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Conversion and measurement unit creation\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Collections\n \u003Cul\u003E\n \u003Cli\u003E\n The hierarchy of interfaces\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Mutable vs read-only types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Creating collections\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lists\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Sets\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Maps\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using arrays in practice\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Inventory management\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Operator overloading\n \u003Cul\u003E\n \u003Cli\u003E\n An example of operator overloading\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Arithmetic operators\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003Ein\u003C\u002Fcode\u003E operator\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The iterator operator\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The equality and inequality operators\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Comparison operators\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The indexed access operator\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Augmented assignments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Unary prefix operators\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Increment and decrement\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The invoke operator\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Precedence\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Money operations\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The beauty of Kotlin’s type system\n \u003Cul\u003E\n \u003Cli\u003E\n What is a type?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Why do we have types?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The relation between classes and types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Class vs type in practice\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The relationship between types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The subtype of all the types: Nothing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The result type from return and throw\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n When is some code not reachable?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The type of null\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: The closest supertype of types\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generics\n \u003Cul\u003E\n \u003Cli\u003E\n Generic functions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generic classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generic classes and nullability\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generic interfaces\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Type parameters and inheritance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Type erasure\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generic constraints\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Star projection\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Underscore operator for type arguments\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Stock\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Final words\n \u003Cul\u003E\n \u003Cli\u003E\n Final Project: Workout manager\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Notes\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Kotlin Essentials on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-04T13:57:34.000Z","vimeo_url":null,"available_web_book":true,"word_count":59836,"word_count_published":null,"youtube_url":null,"team_discount_package_id":87159,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Kotlin Essentials by Marcin Moskała [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":78674,"accepted_authors":[{"id":82641,"type":"Author"}]},"80651":{"type":"Book","about_the_book":"\u003Cp\u003EYou can be a developer - even a good one - without understanding the topics explained in this book, but at some point, you’ll need it. You are likely using tools made using features described in this book every day, such as libraries based on annotation processing or compiler plugins, classes that use variance modifiers, functions with contracts, or property delegates, but do you understand these features? Would you be able to implement similar tools yourself? Would you be able to analyze and debug them? This book will make all this possible for you. It focuses exclusively on the most advanced Kotlin topics, which are often not well understood even by senior Kotlin developers. It should equip you with the knowledge you need and show you possibilities you never before imagined. I hope you enjoy it as much as I enjoyed writing it.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":62,"slug":"android","description":"","mature_content":false,"created_at":"2015-09-20T01:32:46.000Z","updated_at":"2015-09-20T01:32:46.000Z","can_be_short":false,"parent_category_id":53,"name":"Android","book_categories_count":114},{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43},{"id":80,"slug":"java","description":"","mature_content":false,"created_at":"2015-09-20T01:40:41.000Z","updated_at":"2015-09-20T01:40:41.000Z","can_be_short":false,"parent_category_id":53,"name":"Java","book_categories_count":274}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":"","community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fadvanced_kotlin\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fadvanced_kotlin\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2022-12-07T10:47:09.000Z","default_package_id":89339,"meta_description":"variance modifiers, property delegation, interface delegation, contracts, multiplatform development, annotation processing, KSP, compiler plugin, detekt","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":false,"enabled_forums":false,"embargo":false,"name":"Advanced Kotlin","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":12688852,"free_purchase_only":false,"google_analytics_code":"G-5RCMMHTMYF","generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_featured?1693299705","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-12-03T07:59:44.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-12-03T08:05:16.000Z","primary_author_id":84688,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fadvanced_kotlin-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=cce9ad4015f6fb815f208c93e275448bd1284fe8fe080bae9bcdd09a42efcc55","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fadvanced_kotlin-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064840Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=1a650c3cc157f3cee455c9fb58ff680b7bcfc1fb00ded9161370242f79968d57","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"advanced_kotlin","state":"published","subtitle":"","suggested_tweet":null,"sync_mode":"github","tagline":"The book about advanced Kotlin features most of us use, but nearly nobody understands, like variance modifiers, property delegation, interface delegation, contracts, multiplatform development, annotation processing, KSP, compiler plugins, and static analyzers.","thank_you_message":null,"title":"Advanced Kotlin","json_toc":"[{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Who is this book for?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-who-is-this-book-for\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The structure of this book\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-structure-of-this-book\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"That will be covered?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-that-will-be-covered\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Kotlin for Developers series\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-kotlin-for-developers-series\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Code conventions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-code-conventions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercises and solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercises-and-solutions\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Acknowledgments\",\"quiz_type\":null,\"path\":\"#leanpub-auto-acknowledgments\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 1: Advanced Kotlin features\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1-advanced-kotlin-features\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Generic variance modifiers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generic-variance-modifiers\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"List variance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-list-variance\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Consumer variance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-consumer-variance\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-types\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Usage of generic types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-usage-of-generic-types\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Covariant Nothing Object\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-covariant-nothing-object\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The Covariant Nothing Class\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-covariant-nothing-class\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Variance modifier limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-variance-modifier-limitations\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"UnsafeVariance annotation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unsafevariance-annotation\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Variance modifier positions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-variance-modifier-positions\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Star projection\",\"quiz_type\":null,\"path\":\"#leanpub-auto-star-projection\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Generic Response\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-generic-response\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Generic Consumer\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-generic-consumer\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Interface delegation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-interface-delegation\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The delegation pattern\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-delegation-pattern\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Delegation and inheritance\",\"quiz_type\":null,\"path\":\"#leanpub-auto-delegation-and-inheritance\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin interface delegation support\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-interface-delegation-support\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Wrapper classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-wrapper-classes\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The decorator pattern\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-decorator-pattern\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Intersection types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-intersection-types\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-limitations\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conflicting elements from parents\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conflicting-elements-from-parents\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: ApplicationScope\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-applicationscope\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Property delegation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-property-delegation\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"How property delegation works\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-property-delegation-works\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Other \\u003ccode\\u003egetValue\\u003c\u002Fcode\\u003e and \\u003ccode\\u003esetValue\\u003c\u002Fcode\\u003e parameters\",\"quiz_type\":null,\"path\":\"#leanpub-auto-other-getvalue-and-setvalue-parameters\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Implementing a custom property delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-implementing-a-custom-property-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Provide a delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-provide-a-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Property delegates in Kotlin stdlib\",\"quiz_type\":null,\"path\":\"#leanpub-auto-property-delegates-in-kotlin-stdlib\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003enotNull\\u003c\u002Fcode\\u003e delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-notnull-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Lateinit delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-lateinit-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003elazy\\u003c\u002Fcode\\u003e delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-lazy-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Blog Post Properties\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-blog-post-properties\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003eobservable\\u003c\u002Fcode\\u003e delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-observable-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The \\u003ccode\\u003evetoable\\u003c\u002Fcode\\u003e delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-vetoable-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A map as a delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-map-as-a-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Review of how variables work\",\"quiz_type\":null,\"path\":\"#leanpub-auto-review-of-how-variables-work\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Mutable lazy delegate\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-mutable-lazy-delegate\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Kotlin Contracts\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-contracts\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"The meaning of a contract\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-meaning-of-a-contract\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"How many times do we invoke a function from an argument?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-many-times-do-we-invoke-a-function-from-an-argument\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Implications of the fact that a function has returned a value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-implications-of-the-fact-that-a-function-has-returned-a-value\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using contracts in practice\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-contracts-in-practice\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Coroutine time measurement\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-coroutine-time-measurement\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 2: Kotlin on different platforms\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-2-kotlin-on-different-platforms\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Java interoperability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-java-interoperability\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Nullable types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-nullable-types\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin type mapping\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-type-mapping\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JVM primitives\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvm-primitives\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Collection types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-collection-types\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Annotation targets\",\"quiz_type\":null,\"path\":\"#leanpub-auto-annotation-targets\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Static elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-static-elements\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JvmField\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvmfield\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using Java accessors in Kotlin\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-java-accessors-in-kotlin\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JvmName\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvmname\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JvmMultifileClass\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvmmultifileclass\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JvmOverloads\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvmoverloads\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Unit\",\"quiz_type\":null,\"path\":\"#leanpub-auto-unit\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function types and function interfaces\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-types-and-function-interfaces\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Tricky names\",\"quiz_type\":null,\"path\":\"#leanpub-auto-tricky-names\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Throws\",\"quiz_type\":null,\"path\":\"#leanpub-auto-throws\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JvmRecord\",\"quiz_type\":null,\"path\":\"#leanpub-auto-jvmrecord\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-4\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Adjust Kotlin for Java usage\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-adjust-kotlin-for-java-usage\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Using Kotlin Multiplatform\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-kotlin-multiplatform\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Multiplatform module configuration\",\"quiz_type\":null,\"path\":\"#leanpub-auto-multiplatform-module-configuration\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Expect and actual elements\",\"quiz_type\":null,\"path\":\"#leanpub-auto-expect-and-actual-elements\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Possibilities\",\"quiz_type\":null,\"path\":\"#leanpub-auto-possibilities\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Multiplatform libraries\",\"quiz_type\":null,\"path\":\"#leanpub-auto-multiplatform-libraries\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"A multiplatform mobile application\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-multiplatform-mobile-application\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-5\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Multiplatform LocalDateTime\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-multiplatform-localdatetime\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"JavaScript interoperability\",\"quiz_type\":null,\"path\":\"#leanpub-auto-javascript-interoperability\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Setting up a project\",\"quiz_type\":null,\"path\":\"#leanpub-auto-setting-up-a-project\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using libraries available for Kotlin\u002FJS\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-libraries-available-for-kotlinjs\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using Kotlin\u002FJS\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-kotlinjs\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Building and linking a package\",\"quiz_type\":null,\"path\":\"#leanpub-auto-building-and-linking-a-package\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Distributing a package to npm\",\"quiz_type\":null,\"path\":\"#leanpub-auto-distributing-a-package-to-npm\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exposing objects\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exposing-objects\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exposing Flow and StateFlow\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exposing-flow-and-stateflow\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Adding npm dependencies\",\"quiz_type\":null,\"path\":\"#leanpub-auto-adding-npm-dependencies\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Frameworks and libraries for Kotlin\u002FJS\",\"quiz_type\":null,\"path\":\"#leanpub-auto-frameworks-and-libraries-for-kotlinjs\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"JavaScript and Kotlin\u002FJS limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-javascript-and-kotlinjs-limitations\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-6\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Migrating a Kotlin\u002FJVM project to KMP\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-migrating-a-kotlinjvm-project-to-kmp\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 3: Metaprogramming\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-3-metaprogramming\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Reflection\",\"quiz_type\":null,\"path\":\"#leanpub-auto-reflection\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Hierarchy of classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hierarchy-of-classes\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Function references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-function-references\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Parameter references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-parameter-references\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Property references\",\"quiz_type\":null,\"path\":\"#leanpub-auto-property-references\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Class reference\",\"quiz_type\":null,\"path\":\"#leanpub-auto-class-reference\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Serialization example\",\"quiz_type\":null,\"path\":\"#leanpub-auto-serialization-example\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Referencing types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-referencing-types\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Type reflection example: Random value\",\"quiz_type\":null,\"path\":\"#leanpub-auto-type-reflection-example-random-value\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin and Java reflection\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-and-java-reflection\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Breaking encapsulation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-breaking-encapsulation\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-7\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Function caller\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-function-caller\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Object serialization to JSON\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-object-serialization-to-json\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Object serialization to XML\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-object-serialization-to-xml\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: DSL-based dependency injection library\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-dsl-based-dependency-injection-library\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Annotation processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-annotation-processing\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Your first annotation processor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-your-first-annotation-processor\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Hiding generated classes\",\"quiz_type\":null,\"path\":\"#leanpub-auto-hiding-generated-classes\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-8\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: Annotation Processing execution measurement wrapper\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-annotation-processing-execution-measurement-wrapper\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Kotlin Symbol Processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-symbol-processing\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Your first KSP processor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-your-first-ksp-processor\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Testing KSP\",\"quiz_type\":null,\"path\":\"#leanpub-auto-testing-ksp\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Dependencies and incremental processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-dependencies-and-incremental-processing\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Multiple rounds processing\",\"quiz_type\":null,\"path\":\"#leanpub-auto-multiple-rounds-processing\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Using KSP on multiplatform projects\",\"quiz_type\":null,\"path\":\"#leanpub-auto-using-ksp-on-multiplatform-projects\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise: KSP execution measurement wrapper\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-ksp-execution-measurement-wrapper\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Kotlin Compiler Plugins\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-compiler-plugins\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Compiler frontend and backend\",\"quiz_type\":null,\"path\":\"#leanpub-auto-compiler-frontend-and-backend\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Compiler extensions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-compiler-extensions\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Popular compiler plugins\",\"quiz_type\":null,\"path\":\"#leanpub-auto-popular-compiler-plugins\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Making all classes open\",\"quiz_type\":null,\"path\":\"#leanpub-auto-making-all-classes-open\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Changing a type\",\"quiz_type\":null,\"path\":\"#leanpub-auto-changing-a-type\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Generate function wrappers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-generate-function-wrappers\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Example plugin implementations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-example-plugin-implementations\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Summary\",\"quiz_type\":null,\"path\":\"#leanpub-auto-summary-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Static Code Analysers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-static-code-analysers\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"What are Static Analysers?\",\"quiz_type\":null,\"path\":\"#leanpub-auto-what-are-static-analysers\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Types of analysers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-types-of-analysers\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Kotlin Code Analysers\",\"quiz_type\":null,\"path\":\"#leanpub-auto-kotlin-code-analysers\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Setting up detekt\",\"quiz_type\":null,\"path\":\"#leanpub-auto-setting-up-detekt\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Writing your first detekt Rule\",\"quiz_type\":null,\"path\":\"#leanpub-auto-writing-your-first-detekt-rule\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Conclusion\",\"quiz_type\":null,\"path\":\"#leanpub-auto-conclusion\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Ending\",\"quiz_type\":null,\"path\":\"#leanpub-auto-ending\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Exercise solutions\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-solutions\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_mini?1693299705","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_mini2x?1693299705","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_list?1693299705","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_list2x?1693299705","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_shelf?1693299705","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_shelf2x?1693299705","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_featured?1693299705","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_featured2x?1693299705","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_hero?1693299705","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_hero2x?1693299705","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Introduction\n \u003Cul\u003E\n \u003Cli\u003E\n Who is this book for?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The structure of this book\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n That will be covered?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Kotlin for Developers series\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Code conventions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercises and solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Acknowledgments\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 1: Advanced Kotlin features\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generic variance modifiers\n \u003Cul\u003E\n \u003Cli\u003E\n List variance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Consumer variance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Usage of generic types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Covariant Nothing Object\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Covariant Nothing Class\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Variance modifier limitations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n UnsafeVariance annotation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Variance modifier positions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Star projection\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Generic Response\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Generic Consumer\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Interface delegation\n \u003Cul\u003E\n \u003Cli\u003E\n The delegation pattern\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Delegation and inheritance\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin interface delegation support\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Wrapper classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The decorator pattern\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Intersection types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Limitations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conflicting elements from parents\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: ApplicationScope\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Property delegation\n \u003Cul\u003E\n \u003Cli\u003E\n How property delegation works\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Other \u003Ccode\u003EgetValue\u003C\u002Fcode\u003E and \u003Ccode\u003EsetValue\u003C\u002Fcode\u003E parameters\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Implementing a custom property delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Provide a delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Property delegates in Kotlin stdlib\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003EnotNull\u003C\u002Fcode\u003E delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Lateinit delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003Elazy\u003C\u002Fcode\u003E delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Blog Post Properties\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003Eobservable\u003C\u002Fcode\u003E delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The \u003Ccode\u003Evetoable\u003C\u002Fcode\u003E delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A map as a delegate\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Review of how variables work\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Mutable lazy delegate\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin Contracts\n \u003Cul\u003E\n \u003Cli\u003E\n The meaning of a contract\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n How many times do we invoke a function from an argument?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Implications of the fact that a function has returned a value\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using contracts in practice\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Coroutine time measurement\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 2: Kotlin on different platforms\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Java interoperability\n \u003Cul\u003E\n \u003Cli\u003E\n Nullable types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin type mapping\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JVM primitives\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Collection types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Annotation targets\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Static elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JvmField\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using Java accessors in Kotlin\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JvmName\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JvmMultifileClass\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JvmOverloads\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Unit\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function types and function interfaces\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Tricky names\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Throws\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JvmRecord\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Adjust Kotlin for Java usage\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using Kotlin Multiplatform\n \u003Cul\u003E\n \u003Cli\u003E\n Multiplatform module configuration\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Expect and actual elements\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Possibilities\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Multiplatform libraries\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A multiplatform mobile application\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Multiplatform LocalDateTime\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JavaScript interoperability\n \u003Cul\u003E\n \u003Cli\u003E\n Setting up a project\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using libraries available for Kotlin\u002FJS\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using Kotlin\u002FJS\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Building and linking a package\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Distributing a package to npm\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exposing objects\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exposing Flow and StateFlow\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Adding npm dependencies\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Frameworks and libraries for Kotlin\u002FJS\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n JavaScript and Kotlin\u002FJS limitations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Migrating a Kotlin\u002FJVM project to KMP\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 3: Metaprogramming\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Reflection\n \u003Cul\u003E\n \u003Cli\u003E\n Hierarchy of classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Function references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Parameter references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Property references\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Class reference\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Serialization example\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Referencing types\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Type reflection example: Random value\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin and Java reflection\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Breaking encapsulation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Function caller\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Object serialization to JSON\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Object serialization to XML\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: DSL-based dependency injection library\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Annotation processing\n \u003Cul\u003E\n \u003Cli\u003E\n Your first annotation processor\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Hiding generated classes\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: Annotation Processing execution measurement wrapper\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin Symbol Processing\n \u003Cul\u003E\n \u003Cli\u003E\n Your first KSP processor\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Testing KSP\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Dependencies and incremental processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Multiple rounds processing\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Using KSP on multiplatform projects\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise: KSP execution measurement wrapper\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin Compiler Plugins\n \u003Cul\u003E\n \u003Cli\u003E\n Compiler frontend and backend\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Compiler extensions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Popular compiler plugins\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Making all classes open\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Changing a type\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Generate function wrappers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Example plugin implementations\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Summary\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Static Code Analysers\n \u003Cul\u003E\n \u003Cli\u003E\n What are Static Analysers?\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Types of analysers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Kotlin Code Analysers\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Setting up detekt\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Writing your first detekt Rule\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Conclusion\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Ending\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise solutions\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Notes\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Advanced Kotlin on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-06T07:04:09.000Z","vimeo_url":null,"available_web_book":true,"word_count":61937,"word_count_published":null,"youtube_url":null,"team_discount_package_id":89339,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Advanced Kotlin by Marcin Moskała [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":80651,"accepted_authors":[{"id":84688,"type":"Author"}]},"86270":{"type":"Book","about_the_book":"\u003Cp\u003EThere is also a Python edition of the book available here: \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fcleancodeprinciplesandpatternspythonedition\u002F\" target=\"_blank\"\u003Ehttps:\u002F\u002Fleanpub.com\u002Fcleancodeprinciplesandpatternspythonedition\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EPaperback version of the book is available on \u003Ca href=\"https:\u002F\u002Fwww.amazon.com\u002Fdp\u002FB0D1ZDYKMV\" target=\"_blank\"\u003EAmazon\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EClean Code Principles and Patterns is one of the most comprehensive no-fluff guides for software developers to help them write clean code every day. The author \u003Cem\u003EPetri Silén\u003C\u002Fem\u003E has almost 30 years of industry experience in designing and implementing software, and now he puts all his knowledge gained during the years into this book. The book is packed with principles and patterns that help developers, from novices and juniors to seniors and experts, to write cleaner code. The principles and patterns presented in the book are accompanied by realistic yet straightforward examples to help the reader to understand them better. Examples are written in Java, JavaScript\u002FTypeScript, and C++. Most of the examples are directly applicable to other programming languages, too. Also, having basic knowledge of Docker and Kubernetes concepts is beneficial. The reader should have basic knowledge of one object-oriented programming language to get the full benefit from this book. All the major examples presented in the book are available in a public GitHub repository.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThe book is divided into ten chapters:\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003EArchitectural design principles\u003C\u002Fli\u003E\u003Cli\u003EObject-oriented design principles\u003C\u002Fli\u003E\u003Cli\u003ECoding principles\u003C\u002Fli\u003E\u003Cli\u003ETesting principles\u003C\u002Fli\u003E\u003Cli\u003ESecurity principles\u003C\u002Fli\u003E\u003Cli\u003EAPI design principles\u003C\u002Fli\u003E\u003Cli\u003EDatabase types and related principles\u003C\u002Fli\u003E\u003Cli\u003EConcurrent programming principles\u003C\u002Fli\u003E\u003Cli\u003EAgile and teamwork principles\u003C\u002Fli\u003E\u003Cli\u003EDevSecOps\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003EAfter reading this book, you will know the following and much more:\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EHow to architect modern cloud-native microservices (examples with Kubernetes)\u003C\u002Fli\u003E\u003Cli\u003EWhat are autopilot microservices\u003C\u002Fli\u003E\u003Cli\u003EWhat are event sourcing, CQRS, distributed transactions, saga orchestration pattern, and saga choreography pattern\u003C\u002Fli\u003E\u003Cli\u003EWhat are the five SOLID principles, and how to put them into use in real-life code\u003C\u002Fli\u003E\u003Cli\u003EWhat are the 25 design patterns, and how to use them\u003C\u002Fli\u003E\u003Cli\u003ELaw of Demeter, Tell, don't ask principle, YAGNI, primitive obsession\u003C\u002Fli\u003E\u003Cli\u003EWhat is the MVC pattern, and how MVP and MVVM differ from each other\u003C\u002Fli\u003E\u003Cli\u003EWhat is clean (or hexagonal) architecture and vertical slice architecture\u003C\u002Fli\u003E\u003Cli\u003EWhy and how to use dependency injection\u003C\u002Fli\u003E\u003Cli\u003EDetailed instructions with concrete examples on how to uniformly name various software entities like classes, functions, and variables\u003C\u002Fli\u003E\u003Cli\u003EWhy you should prefer composition over inheritance\u003C\u002Fli\u003E\u003Cli\u003EStrategic and tactical domain-driven design (DDD) with examples\u003C\u002Fli\u003E\u003Cli\u003EHow to organize a source code repository\u003C\u002Fli\u003E\u003Cli\u003EHow to organize code into directories\u003C\u002Fli\u003E\u003Cli\u003EConcrete ways how to avoid writing comments and refactor comments away\u003C\u002Fli\u003E\u003Cli\u003EWhat are the most common issues that static code analyzers find, and how to correct them\u003C\u002Fli\u003E\u003Cli\u003EMost important refactoring techniques for everyday use\u003C\u002Fli\u003E\u003Cli\u003EWhy you should use a statically typed language\u003C\u002Fli\u003E\u003Cli\u003EHow to correctly handle errors and exceptions\u003C\u002Fli\u003E\u003Cli\u003EHow to not forget handle errors and exceptions\u003C\u002Fli\u003E\u003Cli\u003EWhy you should never pass or return a null value\u003C\u002Fli\u003E\u003Cli\u003EHow to avoid off-by-one errors effectively\u003C\u002Fli\u003E\u003Cli\u003EWhat you should remember when using a Google search to get answers\u003C\u002Fli\u003E\u003Cli\u003EWhen and how to optimize code\u003C\u002Fli\u003E\u003Cli\u003ETDD, Detroit\u002FChicago vs. London schools, Unit testing, mocking, integration testing, E2E testing, and non-functional testing\u003C\u002Fli\u003E\u003Cli\u003EWhat is threat modeling and how to conduct it\u003C\u002Fli\u003E\u003Cli\u003EAuthentication and authorization using OpenID Connect and OAuth2\u003C\u002Fli\u003E\u003Cli\u003EWhat are the essential security features to implement in an application\u003C\u002Fli\u003E\u003Cli\u003EHow to design APIs using technologies like JSON-RPC, REST, GraphQL, SSE, WebSocket, gRPC, and event-driven services\u003C\u002Fli\u003E\u003Cli\u003EWhen and how to use a relational database, document database, key-value store, or wide-column database\u003C\u002Fli\u003E\u003Cli\u003EHow to avoid SQL injection attacks using ORM or parameterized SQL queries\u003C\u002Fli\u003E\u003Cli\u003EWhen to use threading or parallel algorithms and how to ensure thread safety\u003C\u002Fli\u003E\u003Cli\u003EWhat principles to follow when working in a software development team\u003C\u002Fli\u003E\u003Cli\u003EWhat are DevOps, SecOps, and continuous integration (CI), and what is the difference between continuous delivery (CD) and continuous deployment (CD). Examples with Docker, Kubernetes and GitHub Actions.\u003C\u002Fli\u003E\u003C\u002Ful\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":63,"slug":"api_design","description":"","mature_content":false,"created_at":"2015-09-20T01:32:58.000Z","updated_at":"2016-03-17T02:22:08.000Z","can_be_short":false,"parent_category_id":143,"name":"API Design","book_categories_count":76},{"id":53,"slug":"computer_programming","description":"","mature_content":false,"created_at":"2015-09-14T21:13:24.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Computers and Programming","book_categories_count":2101},{"id":80,"slug":"java","description":"","mature_content":false,"created_at":"2015-09-20T01:40:41.000Z","updated_at":"2015-09-20T01:40:41.000Z","can_be_short":false,"parent_category_id":53,"name":"Java","book_categories_count":274},{"id":55,"slug":"javascript","description":"","mature_content":false,"created_at":"2015-09-14T21:15:01.000Z","updated_at":"2015-09-14T21:15:01.000Z","can_be_short":false,"parent_category_id":53,"name":"JavaScript","book_categories_count":558},{"id":98,"slug":"testing","description":"","mature_content":false,"created_at":"2015-09-20T01:56:12.000Z","updated_at":"2015-09-20T01:56:12.000Z","can_be_short":false,"parent_category_id":53,"name":"Testing","book_categories_count":308},{"id":139,"slug":"software_engineering","description":"","mature_content":false,"created_at":"2016-03-16T02:58:54.000Z","updated_at":"2020-12-09T21:38:04.000Z","can_be_short":false,"parent_category_id":53,"name":"Software Engineering","book_categories_count":728},{"id":251,"slug":"typescript","description":"","mature_content":false,"created_at":"2021-01-25T18:44:26.000Z","updated_at":"2021-01-25T18:44:26.000Z","can_be_short":false,"parent_category_id":55,"name":"TypeScript","book_categories_count":70},{"id":192,"slug":"refactoring","description":"","mature_content":false,"created_at":"2017-12-06T02:27:57.000Z","updated_at":"2017-12-06T02:27:57.000Z","can_be_short":false,"parent_category_id":53,"name":"Refactoring","book_categories_count":41},{"id":138,"slug":"software_architecture","description":"","mature_content":false,"created_at":"2016-03-16T02:58:25.000Z","updated_at":"2020-12-09T21:38:04.000Z","can_be_short":false,"parent_category_id":53,"name":"Software Architecture","book_categories_count":716}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":"","created_at":"2024-04-04T15:57:37.000Z","default_package_id":95359,"meta_description":"The most comprehensive no-fluff guide for software developers to help them write clean code every day","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Clean Code Principles and Patterns, 2nd Edition","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":33978040,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":false,"has_pdf_sample":false,"has_sample":false,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_featured?1712998004","installments_completed":null,"installments_planned":null,"input_format":"markuaspec","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2024-04-16T17:19:11.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":671,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2024-04-13T08:59:12.000Z","primary_author_id":90648,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fcleancodeprinciplesandpatterns2ndedition-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094600Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=0a9918d3e00d7ed07619825b9bad43bc169bc074d19623b26dcb98c603186680","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fcleancodeprinciplesandpatterns2ndedition-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094600Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=805e75fa8b4e4b6352c8dd802a59d85b8d2ed2f60e8b8294e862e2c3cc0d2801","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":false,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":true,"show_read_link":"none","show_word_count":false,"slug":"cleancodeprinciplesandpatterns2ndedition","state":"published","subtitle":"A Software Practitioner's Handbook","suggested_tweet":"","sync_mode":"github","tagline":"One of the most comprehensive no-fluff guides for software developers to help them write clean code every day. The book is packed with principles and patterns that help developers, from novices and juniors to seniors and experts, to write cleaner code.","thank_you_message":null,"title":"Clean Code Principles and Patterns, 2nd Edition","json_toc":"null","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_mini?1712998004","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_mini2x?1712998004","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_list?1712998004","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_list2x?1712998004","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_shelf?1712998004","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_shelf2x?1712998004","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_featured?1712998004","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_featured2x?1712998004","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_hero?1712998004","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_hero2x?1712998004","toc":"\u003Cul class='toc no-parts'\u003E\u003Cli\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E1:\u003C\u002Fspan\u003EAbout the Author\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E2:\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3:\u003C\u002Fspan\u003EArchitectural Principles and Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.1:\u003C\u002Fspan\u003ESoftware Hierarchy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.2:\u003C\u002Fspan\u003EThe Twelve-Factor App\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.3:\u003C\u002Fspan\u003ESingle Responsibility Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.4:\u003C\u002Fspan\u003EUniform Naming Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.5:\u003C\u002Fspan\u003EEncapsulation Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.6:\u003C\u002Fspan\u003EService Aggregation Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.7:\u003C\u002Fspan\u003EHigh Cohesion, Low Coupling Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.8:\u003C\u002Fspan\u003ELibrary Composition Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.9:\u003C\u002Fspan\u003EAvoid Duplication Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.10:\u003C\u002Fspan\u003EExternalized Service Configuration Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.10.1:\u003C\u002Fspan\u003EEnvironment Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.10.2:\u003C\u002Fspan\u003EKubernetes ConfigMaps\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.10.3:\u003C\u002Fspan\u003EKubernetes Secrets\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.10.4:\u003C\u002Fspan\u003EExternal Store\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.11:\u003C\u002Fspan\u003EService Substitution Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.12:\u003C\u002Fspan\u003EInter-Service Communication Methods\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.12.1:\u003C\u002Fspan\u003ESynchronous Communication Method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.12.2:\u003C\u002Fspan\u003EAsynchronous Communication Method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.12.3:\u003C\u002Fspan\u003EShared Data Communication Method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.13:\u003C\u002Fspan\u003EStrategical Domain-Driven Design Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.13.1:\u003C\u002Fspan\u003EStrategical DDD Example 1: Mobile Telecom Network Analytics Software System\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.13.2:\u003C\u002Fspan\u003EStrategical DDD Example 2: Banking Software System\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14:\u003C\u002Fspan\u003EAutopilot Microservices Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14.1:\u003C\u002Fspan\u003EStateless Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14.2:\u003C\u002Fspan\u003EResilient Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14.3:\u003C\u002Fspan\u003EHorizontally Autoscaling Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14.4:\u003C\u002Fspan\u003EHighly-Available Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.14.5:\u003C\u002Fspan\u003EObservable Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.15:\u003C\u002Fspan\u003EIndividually Deployable Microservices Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16:\u003C\u002Fspan\u003ESoftware Versioning Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16.1:\u003C\u002Fspan\u003EUse Semantic Versioning Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16.2:\u003C\u002Fspan\u003EAvoid Using 0.x Versions Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16.3:\u003C\u002Fspan\u003EDon’t Increase Major Version Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16.4:\u003C\u002Fspan\u003EImplement Security Patches and Bug Corrections to All Major Versions Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.16.5:\u003C\u002Fspan\u003EAvoid Using Non-LTS Versions in Production Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.17:\u003C\u002Fspan\u003EGit Version Control Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.17.1:\u003C\u002Fspan\u003EFeature Branch\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.17.2:\u003C\u002Fspan\u003EFeature Toggle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18:\u003C\u002Fspan\u003EArchitectural Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.1:\u003C\u002Fspan\u003EMulti-Container Design Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.1.1:\u003C\u002Fspan\u003ESidecar Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.1.2:\u003C\u002Fspan\u003EAmbassador Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.1.3:\u003C\u002Fspan\u003EAdapter Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.2:\u003C\u002Fspan\u003ECircuit Breaker Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.3:\u003C\u002Fspan\u003ECompeting Consumers Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.4:\u003C\u002Fspan\u003EAPI Gateway Offloading Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.5:\u003C\u002Fspan\u003ERetry Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.6:\u003C\u002Fspan\u003EStatic Content Hosting Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.7:\u003C\u002Fspan\u003EEvent Sourcing Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.8:\u003C\u002Fspan\u003ECommand Query Responsibility Segregation (CQRS) Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.9:\u003C\u002Fspan\u003EDistributed Transaction Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.9.1:\u003C\u002Fspan\u003ESaga Orchestration Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.18.9.2:\u003C\u002Fspan\u003ESaga Choreography Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.19:\u003C\u002Fspan\u003EPreferred Technology Stacks Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E3.20:\u003C\u002Fspan\u003E8 Fallacies Of Distributed Computing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4:\u003C\u002Fspan\u003EObject-Oriented Design Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1:\u003C\u002Fspan\u003EObject-Oriented Programming Concepts\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.1:\u003C\u002Fspan\u003EClasses\u002FObjects\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.2:\u003C\u002Fspan\u003EEncapsulation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.3:\u003C\u002Fspan\u003EAbstraction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.4:\u003C\u002Fspan\u003EInheritance\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.5:\u003C\u002Fspan\u003EInterface\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.5.1:\u003C\u002Fspan\u003EInterface evolution\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.1.6:\u003C\u002Fspan\u003EPolymorphism\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.2:\u003C\u002Fspan\u003EProgramming Paradigms\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.2.1:\u003C\u002Fspan\u003EImperative Programming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.2.2:\u003C\u002Fspan\u003EFunctional Programming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.3:\u003C\u002Fspan\u003EMulti-Paradigm Programming Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.4:\u003C\u002Fspan\u003EWhy is Object-Oriented Programming Hard?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5:\u003C\u002Fspan\u003ESOLID Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5.1:\u003C\u002Fspan\u003ESingle Responsibility Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5.2:\u003C\u002Fspan\u003EOpen-Closed Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5.3:\u003C\u002Fspan\u003ELiskov’s Substitution Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5.4:\u003C\u002Fspan\u003EInterface Segregation and Multiple Inheritance Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.5.5:\u003C\u002Fspan\u003EProgram Against Interfaces Principle (a.k.a. Generalized Dependency Inversion Principle)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.6:\u003C\u002Fspan\u003EClean Architecture Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.6.1:\u003C\u002Fspan\u003EReal-Life Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.7:\u003C\u002Fspan\u003EVertical Slice Architecture Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.8:\u003C\u002Fspan\u003EClass Organization Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.9:\u003C\u002Fspan\u003EPackage\u002FDirectory, Class and Function Sizing Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10:\u003C\u002Fspan\u003EUniform Naming Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.1:\u003C\u002Fspan\u003ENaming Interfaces and Classes\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2:\u003C\u002Fspan\u003ENaming Functions\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.1:\u003C\u002Fspan\u003EPreposition in Function Name\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.2:\u003C\u002Fspan\u003EExample 1: Renaming JavaScript Array Methods\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.3:\u003C\u002Fspan\u003ENaming Method Pairs\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.4:\u003C\u002Fspan\u003ENaming Boolean Functions (Predicates)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.5:\u003C\u002Fspan\u003ENaming Builder Methods\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.6:\u003C\u002Fspan\u003ENaming Methods with Implicit Verbs\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.7:\u003C\u002Fspan\u003ENaming Property Getter Functions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.8:\u003C\u002Fspan\u003ENaming Lifecycle Methods\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.9:\u003C\u002Fspan\u003ENaming Generic Type Parameters\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.10.2.10:\u003C\u002Fspan\u003ENaming Function Parameters\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.11:\u003C\u002Fspan\u003EEncapsulation Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.11.1:\u003C\u002Fspan\u003EImmutable Objects\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.11.2:\u003C\u002Fspan\u003EDon’t Leak Modifiable Internal State Outside an Object Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.11.3:\u003C\u002Fspan\u003EDon’t Assign From a Method Parameter to a Modifiable Attribute\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.12:\u003C\u002Fspan\u003EPrefer Composition Over Inheritance Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13:\u003C\u002Fspan\u003ETactical Domain-Driven Design Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1:\u003C\u002Fspan\u003ETactical DDD Concepts\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.1:\u003C\u002Fspan\u003EEntities\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.2:\u003C\u002Fspan\u003EValue Objects\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.3:\u003C\u002Fspan\u003EAggregates\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.4:\u003C\u002Fspan\u003EAggregate Roots\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.5:\u003C\u002Fspan\u003EActors\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.6:\u003C\u002Fspan\u003EFactories\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.7:\u003C\u002Fspan\u003ERepositories\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.8:\u003C\u002Fspan\u003EServices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.9:\u003C\u002Fspan\u003EEvents\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.1.10:\u003C\u002Fspan\u003EDesign-Level Event Storming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.2:\u003C\u002Fspan\u003ETactical DDD Example 1: Data Exporter Microservice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.13.3:\u003C\u002Fspan\u003ETactical DDD Example 2: Anomaly Detection Microservice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14:\u003C\u002Fspan\u003EDesign Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1:\u003C\u002Fspan\u003EDesign Patterns for Creating Objects\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.1:\u003C\u002Fspan\u003EFactory Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.2:\u003C\u002Fspan\u003EAbstract Factory Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.3:\u003C\u002Fspan\u003EStatic Factory Method Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.4:\u003C\u002Fspan\u003EBuilder Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.5:\u003C\u002Fspan\u003ESingleton Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.6:\u003C\u002Fspan\u003EPrototype Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.1.7:\u003C\u002Fspan\u003EObject Pool Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2:\u003C\u002Fspan\u003EStructural Design Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.1:\u003C\u002Fspan\u003EComposite Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.2:\u003C\u002Fspan\u003EFacade Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.3:\u003C\u002Fspan\u003EBridge Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.4:\u003C\u002Fspan\u003EStrategy Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.5:\u003C\u002Fspan\u003EAdapter Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.6:\u003C\u002Fspan\u003EProxy Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.7:\u003C\u002Fspan\u003EDecorator Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.2.8:\u003C\u002Fspan\u003EFlyweight Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3:\u003C\u002Fspan\u003EBehavioral Design Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.1:\u003C\u002Fspan\u003EChain of Responsibility Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.2:\u003C\u002Fspan\u003EObserver Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.3:\u003C\u002Fspan\u003ECommand\u002FAction Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.4:\u003C\u002Fspan\u003EIterator Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.5:\u003C\u002Fspan\u003EInterpreter Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.6:\u003C\u002Fspan\u003EState Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.7:\u003C\u002Fspan\u003EMediator Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.8:\u003C\u002Fspan\u003ETemplate Method Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.9:\u003C\u002Fspan\u003EMemento Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.10:\u003C\u002Fspan\u003EVisitor Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.14.3.11:\u003C\u002Fspan\u003ENull Object Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.15:\u003C\u002Fspan\u003EDon’t Ask, Tell Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.16:\u003C\u002Fspan\u003ELaw of Demeter\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.17:\u003C\u002Fspan\u003EAvoid Primitive Obsession Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.18:\u003C\u002Fspan\u003EYou Aren’t Gonna Need It (YAGNI) Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.19:\u003C\u002Fspan\u003EDependency Injection (DI) Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.20:\u003C\u002Fspan\u003EAvoid Code Duplication Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E4.21:\u003C\u002Fspan\u003EInheritance in Cascading Style Sheets (CSS)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5:\u003C\u002Fspan\u003ECoding Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1:\u003C\u002Fspan\u003EUniform Variable Naming Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.1:\u003C\u002Fspan\u003ENaming Integer Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.2:\u003C\u002Fspan\u003ENaming Floating-Point Number Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.3:\u003C\u002Fspan\u003ENaming Boolean Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.4:\u003C\u002Fspan\u003ENaming String Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.5:\u003C\u002Fspan\u003ENaming Enum Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.6:\u003C\u002Fspan\u003ENaming Collection (List and Set) Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.7:\u003C\u002Fspan\u003ENaming Map Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.8:\u003C\u002Fspan\u003ENaming Pair and Tuple Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.9:\u003C\u002Fspan\u003ENaming Object Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.10:\u003C\u002Fspan\u003ENaming Optional Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.11:\u003C\u002Fspan\u003ENaming Function Variables (Callbacks)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.12:\u003C\u002Fspan\u003ENaming Class Properties\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.13:\u003C\u002Fspan\u003EGeneral Naming Rules\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.13.1:\u003C\u002Fspan\u003EUse Short, Common Names\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.13.2:\u003C\u002Fspan\u003EPick One Term And Use It Consistently\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.13.3:\u003C\u002Fspan\u003EAvoid Obscure Abbreviations\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.1.13.4:\u003C\u002Fspan\u003EAvoid Too Short Or Meaningless Names\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.2:\u003C\u002Fspan\u003EUniform Source Code Repository Structure Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.2.1:\u003C\u002Fspan\u003EJava Source Code Repository Structure\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.2.2:\u003C\u002Fspan\u003EC++ Source Code Repository Structure\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.2.3:\u003C\u002Fspan\u003EJavaScript\u002FTypeScript Source Code Repository Structure\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.3:\u003C\u002Fspan\u003EDomain-Based Source Code Structure Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4:\u003C\u002Fspan\u003EAvoid Comments Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.1:\u003C\u002Fspan\u003EName Things Properly\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.2:\u003C\u002Fspan\u003ESingle Return Of Named Value At The End Of Function\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.3:\u003C\u002Fspan\u003EReturn Type Aliasing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.4:\u003C\u002Fspan\u003EExtract Constant for Boolean Expression\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.5:\u003C\u002Fspan\u003EExtract Named Constant or Enumerated Type\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.6:\u003C\u002Fspan\u003EExtract Function\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.7:\u003C\u002Fspan\u003EAvoid Comments for Regular Expression\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.8:\u003C\u002Fspan\u003EName Anonymous Function\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.4.9:\u003C\u002Fspan\u003EAvoiding Comments in Bash Shell Scripts\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.5:\u003C\u002Fspan\u003EFunction Single Return Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6:\u003C\u002Fspan\u003EPrefer a Statically Typed Language for Production Code Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.1:\u003C\u002Fspan\u003EFunction Arguments Might Be Given in Wrong Order\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.2:\u003C\u002Fspan\u003EFunction Argument Might Be Given with Wrong Type\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.3:\u003C\u002Fspan\u003EFunction Return Value Type Might Be Misunderstood\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.4:\u003C\u002Fspan\u003ERefactoring Code Is More Difficult\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.5:\u003C\u002Fspan\u003EForced to Write Public API Comments\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.6.6:\u003C\u002Fspan\u003EType Errors Are Not Found in Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7:\u003C\u002Fspan\u003ERefactoring Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.1:\u003C\u002Fspan\u003ERename\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.2:\u003C\u002Fspan\u003EExtract Method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.3:\u003C\u002Fspan\u003EExtract Class\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.4:\u003C\u002Fspan\u003EExtract Constant\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.5:\u003C\u002Fspan\u003EReplace Conditionals with Polymorphism\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.6:\u003C\u002Fspan\u003EIntroduce Parameter Object\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.7:\u003C\u002Fspan\u003EInvert If-Statement\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.7.8:\u003C\u002Fspan\u003ECreating Rich Object\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.8:\u003C\u002Fspan\u003EStatic Code Analysis Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.8.1:\u003C\u002Fspan\u003ECommon Static Code Analysis Issues\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9:\u003C\u002Fspan\u003EError\u002FException Handling Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.1:\u003C\u002Fspan\u003EHandling Checked Exceptions in Java\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2:\u003C\u002Fspan\u003EReturning Errors\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.1:\u003C\u002Fspan\u003EReturning Failure Indicator\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.2:\u003C\u002Fspan\u003EReturning an Optional Value\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.3:\u003C\u002Fspan\u003EReturning an Error Object\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.4:\u003C\u002Fspan\u003EAdapt to Wanted Error Handling Mechanism\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.5:\u003C\u002Fspan\u003EAsynchronous Function Error Handling\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.6:\u003C\u002Fspan\u003EFunctional Exception Handling\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.9.2.7:\u003C\u002Fspan\u003EStream Error Handling\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.10:\u003C\u002Fspan\u003EDon’t Pass or Return Null Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.11:\u003C\u002Fspan\u003EAvoid Off-By-One Errors Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.12:\u003C\u002Fspan\u003EBe Critical When Googling or Using Generative AI Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.13:\u003C\u002Fspan\u003EMake One Change At A Time Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.14:\u003C\u002Fspan\u003EChoosing Right 3rd Party Component Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15:\u003C\u002Fspan\u003EUse Appropriate Data Structure Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.1:\u003C\u002Fspan\u003EMap\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.2:\u003C\u002Fspan\u003ETuple\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.3:\u003C\u002Fspan\u003ESet\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.4:\u003C\u002Fspan\u003EString\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.5:\u003C\u002Fspan\u003EDeque (Double Ended Queue)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.6:\u003C\u002Fspan\u003EStack (LIFO Queue)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.7:\u003C\u002Fspan\u003EQueue (FIFO Queue)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.15.8:\u003C\u002Fspan\u003EPriority Queue\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16:\u003C\u002Fspan\u003EOptimization Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1:\u003C\u002Fspan\u003EOptimization Patterns\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.1:\u003C\u002Fspan\u003EOptimize Busy Loops Only Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.2:\u003C\u002Fspan\u003ERemove Unnecessary Functionality Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.3:\u003C\u002Fspan\u003EObject Pool Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.4:\u003C\u002Fspan\u003EAlgorithm Complexity Reduction Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.5:\u003C\u002Fspan\u003ECache Function Results Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.6:\u003C\u002Fspan\u003EBuffer File I\u002FO Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.7:\u003C\u002Fspan\u003EShare Identical Objects a.k.a Flyweight Pattern\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.8:\u003C\u002Fspan\u003ECopy Memory in Chunks Pattern (C++)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.9:\u003C\u002Fspan\u003EReplace Virtual Methods with Non-Virtual Methods Pattern (C++)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.10:\u003C\u002Fspan\u003EInline Methods Pattern (C++)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E5.16.1.11:\u003C\u002Fspan\u003EUse Unique Pointer Pattern (C++)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6:\u003C\u002Fspan\u003ETesting Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1:\u003C\u002Fspan\u003EFunctional Testing Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1:\u003C\u002Fspan\u003EUnit Testing Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.1:\u003C\u002Fspan\u003ETDD Schools: London vs. Detroit\u002FChicago\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.2:\u003C\u002Fspan\u003ETest-Driven Development (TDD)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.3:\u003C\u002Fspan\u003EUnit Specification-Driven Development (USDD)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.4:\u003C\u002Fspan\u003ENaming Conventions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.5:\u003C\u002Fspan\u003EMocking\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.1.6:\u003C\u002Fspan\u003EWeb UI Component Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.2:\u003C\u002Fspan\u003ESoftware Component Integration Testing Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.2.1:\u003C\u002Fspan\u003EWeb UI Integration Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.2.2:\u003C\u002Fspan\u003ESetting Up Integration Testing Environment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.3:\u003C\u002Fspan\u003EComplete Example with BDD, ATDD, DDD, OOD and TDD\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.1.4:\u003C\u002Fspan\u003EEnd-to-End (E2E) Testing Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2:\u003C\u002Fspan\u003ENon-Functional Testing Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.1:\u003C\u002Fspan\u003EPerformance Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.2:\u003C\u002Fspan\u003EData Volume Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.3:\u003C\u002Fspan\u003EStability Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.4:\u003C\u002Fspan\u003EReliability Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.5:\u003C\u002Fspan\u003EStress and Scalability Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.6:\u003C\u002Fspan\u003ESecurity Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.7:\u003C\u002Fspan\u003EOther Non-Functional Testing\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E6.2.7.1:\u003C\u002Fspan\u003EVisual Testing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7:\u003C\u002Fspan\u003ESecurity Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.1:\u003C\u002Fspan\u003EShift Security to Left Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.2:\u003C\u002Fspan\u003EHave a Product Security Lead Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3:\u003C\u002Fspan\u003EUse Threat Modelling Process Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.1:\u003C\u002Fspan\u003EDecompose Application\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.2:\u003C\u002Fspan\u003EDetermine and Rank Threats\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.2.1:\u003C\u002Fspan\u003ESTRIDE method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.2.2:\u003C\u002Fspan\u003ESTRIDE Threat Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.2.3:\u003C\u002Fspan\u003EApplication Security Frame (ASF) method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.3:\u003C\u002Fspan\u003EDetermine Countermeasures and Mitigation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.4:\u003C\u002Fspan\u003EThreat Modeling Example using STRIDE\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.4.1:\u003C\u002Fspan\u003EDecompose Application\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.4.2:\u003C\u002Fspan\u003EDetermine and Rank Threats\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.5:\u003C\u002Fspan\u003EDetermine Countermeasures and Mitigation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.3.6:\u003C\u002Fspan\u003EThreat Modeling Example Using ASF\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4:\u003C\u002Fspan\u003ESecurity Features\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.1:\u003C\u002Fspan\u003EAuthentication and Authorization\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.1.1:\u003C\u002Fspan\u003EOpenID Connect Authentication and Authorization in Frontend\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.1.2:\u003C\u002Fspan\u003EOAuth2 Authorization in Backend\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.2:\u003C\u002Fspan\u003EPassword Policy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.3:\u003C\u002Fspan\u003ECryptography\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.3.1:\u003C\u002Fspan\u003EEncryption Key Lifetime and Rotation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.4:\u003C\u002Fspan\u003EDenial-of-service (DoS) Prevention\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.5:\u003C\u002Fspan\u003EDatabase Security\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.6:\u003C\u002Fspan\u003ESQL Injection Prevention\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.7:\u003C\u002Fspan\u003EOS Command Injection Prevention\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.8:\u003C\u002Fspan\u003ESecurity Configuration\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.9:\u003C\u002Fspan\u003EAutomatic Vulnerability Scanning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.10:\u003C\u002Fspan\u003EIntegrity\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.11:\u003C\u002Fspan\u003EError Handling\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.12:\u003C\u002Fspan\u003ELogging\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.13:\u003C\u002Fspan\u003EAudit Logging\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14:\u003C\u002Fspan\u003EInput Validation\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.1:\u003C\u002Fspan\u003EValidating Numbers\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.2:\u003C\u002Fspan\u003EValidating Strings\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.3:\u003C\u002Fspan\u003EValidating Timestamps\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.4:\u003C\u002Fspan\u003EValidating Arrays\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.5:\u003C\u002Fspan\u003EValidating Objects\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.6:\u003C\u002Fspan\u003EValidating Files Uploaded to Server\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E7.4.14.7:\u003C\u002Fspan\u003EValidation Library Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8:\u003C\u002Fspan\u003EAPI Design Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1:\u003C\u002Fspan\u003EFrontend Facing API Design Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.1:\u003C\u002Fspan\u003EJSON-based RPC API Design Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2:\u003C\u002Fspan\u003EREST API Design Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.1:\u003C\u002Fspan\u003ECreating a Resource\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.2:\u003C\u002Fspan\u003EReading Resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.3:\u003C\u002Fspan\u003EUpdating Resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.4:\u003C\u002Fspan\u003EDeleting Resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.5:\u003C\u002Fspan\u003EExecuting Non-CRUD Actions on Resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.6:\u003C\u002Fspan\u003EResource Composition\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.7:\u003C\u002Fspan\u003EHTTP Status Codes\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.8:\u003C\u002Fspan\u003EHATEOAS and HAL\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.9:\u003C\u002Fspan\u003EAPI Versioning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.10:\u003C\u002Fspan\u003EDocumentation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.2.11:\u003C\u002Fspan\u003EImplementation Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.3:\u003C\u002Fspan\u003EGraphQL API Design\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.4:\u003C\u002Fspan\u003ESubscription-Based API Design\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.4.1:\u003C\u002Fspan\u003EServer-Sent Events (SSE)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.4.2:\u003C\u002Fspan\u003EGraphQL Subscriptions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.1.5:\u003C\u002Fspan\u003EWebSocket Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2:\u003C\u002Fspan\u003EInter-Microservice API Design Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.1:\u003C\u002Fspan\u003ESynchronous API Design Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.1.1:\u003C\u002Fspan\u003EgRPC-Based API Design Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.2:\u003C\u002Fspan\u003EAsynchronous API Design Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.2.1:\u003C\u002Fspan\u003ERequest-Only Asynchronous API Design\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.2.2:\u003C\u002Fspan\u003ERequest-Response Asynchronous API Design\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.2.2.3:\u003C\u002Fspan\u003EAsynchronous API Documentation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E8.3:\u003C\u002Fspan\u003EAPI Design Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9:\u003C\u002Fspan\u003EDatabases And Database Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1:\u003C\u002Fspan\u003ERelational Databases\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.1:\u003C\u002Fspan\u003EStructure of Relational Database\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.2:\u003C\u002Fspan\u003EUse Object Relational Mapper (ORM) Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.2.1:\u003C\u002Fspan\u003EEntity\u002FTable Relationships\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.2.1.1:\u003C\u002Fspan\u003EOne-To-One\u002FMany Relationships\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.2.1.2:\u003C\u002Fspan\u003EMany-To-Many Relationships\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.2.2:\u003C\u002Fspan\u003ESales Item Repository Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.3:\u003C\u002Fspan\u003EUse Parameterized SQL Statements Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.3.1:\u003C\u002Fspan\u003ESales Item Repository Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.4:\u003C\u002Fspan\u003ENormalization Rules\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.4.1:\u003C\u002Fspan\u003EFirst Normal Form (1NF)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.4.2:\u003C\u002Fspan\u003ESecond Normal Form (2NF)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.1.4.3:\u003C\u002Fspan\u003EThird Normal Form (3NF)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.2:\u003C\u002Fspan\u003EDocument Databases\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.2.1:\u003C\u002Fspan\u003ESales Item Repository Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.3:\u003C\u002Fspan\u003EKey-Value Database Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.4:\u003C\u002Fspan\u003EWide-Column Databases\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E9.5:\u003C\u002Fspan\u003ESearch Engines\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10:\u003C\u002Fspan\u003EConcurrent Programming Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.1:\u003C\u002Fspan\u003EThreading Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.1.1:\u003C\u002Fspan\u003EParallel Algorithms\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2:\u003C\u002Fspan\u003EThread Safety Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2.1:\u003C\u002Fspan\u003ESynchronization Directive\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2.2:\u003C\u002Fspan\u003EAtomic Variables\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2.3:\u003C\u002Fspan\u003EConcurrent Collections\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2.4:\u003C\u002Fspan\u003EMutexes\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E10.2.5:\u003C\u002Fspan\u003ESpinlocks\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11:\u003C\u002Fspan\u003EAgile and Teamwork Principles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.1:\u003C\u002Fspan\u003ETwelve Principles of Agile Software\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.2:\u003C\u002Fspan\u003EUse Agile Framework Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.3:\u003C\u002Fspan\u003EDefine the Done Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.4:\u003C\u002Fspan\u003EYou Write Code for Other People Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.5:\u003C\u002Fspan\u003EAvoid Technical Debt Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.6:\u003C\u002Fspan\u003ESoftware Component Documentation Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7:\u003C\u002Fspan\u003ECode Review Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.1:\u003C\u002Fspan\u003EFocus on Object-Oriented Design\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.2:\u003C\u002Fspan\u003EFocus on Removal of Duplicate Information (DRY principle)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.3:\u003C\u002Fspan\u003EFocus on Spreading Knowledge\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.4:\u003C\u002Fspan\u003EFocus on Function Specification by Unit Tests\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.5:\u003C\u002Fspan\u003EFocus on Proper and Uniform Naming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.6:\u003C\u002Fspan\u003EDon’t Focus on Premature Optimization\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.7.7:\u003C\u002Fspan\u003EDetect Possible Malicious Code\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.8:\u003C\u002Fspan\u003EUniform Code Formatting Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.9:\u003C\u002Fspan\u003EHighly Concurrent Development Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.9.1:\u003C\u002Fspan\u003EDedicated Microservices and Microlibraries\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.9.2:\u003C\u002Fspan\u003EDedicated Domains\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.9.3:\u003C\u002Fspan\u003EFollow Open-Closed Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.10:\u003C\u002Fspan\u003EPair Programming Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.11:\u003C\u002Fspan\u003EMob Programming Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.12:\u003C\u002Fspan\u003EAsk and Offer Help Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13:\u003C\u002Fspan\u003EWell-Defined Development Team Roles Principle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.1:\u003C\u002Fspan\u003EProduct Owner\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.2:\u003C\u002Fspan\u003EScrum Master\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.3:\u003C\u002Fspan\u003ESoftware Developer\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.4:\u003C\u002Fspan\u003ETest Automation Developer\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.5:\u003C\u002Fspan\u003EDevOps Engineer\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.13.6:\u003C\u002Fspan\u003EUI Designer\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.14:\u003C\u002Fspan\u003ECompetence Transfer Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E11.15:\u003C\u002Fspan\u003EInter-Team Communication Principle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12:\u003C\u002Fspan\u003EDevSecOps\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.1:\u003C\u002Fspan\u003ESecOps Lifecycle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2:\u003C\u002Fspan\u003EDevOps Lifecycle\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.1:\u003C\u002Fspan\u003EPlan\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.2:\u003C\u002Fspan\u003ECode\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.3:\u003C\u002Fspan\u003EBuild and Test\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.4:\u003C\u002Fspan\u003ERelease\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.4.1:\u003C\u002Fspan\u003EExample Dockerfile\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.4.2:\u003C\u002Fspan\u003EExample Kubernetes Deployment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.4.3:\u003C\u002Fspan\u003EExample CI\u002FCD Pipeline\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.5:\u003C\u002Fspan\u003EDeploy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.6:\u003C\u002Fspan\u003EOperate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7:\u003C\u002Fspan\u003EMonitor\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7.1:\u003C\u002Fspan\u003ELogging to Standard Input\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7.2:\u003C\u002Fspan\u003EDistributed Tracing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7.3:\u003C\u002Fspan\u003EMetrics Collection\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7.4:\u003C\u002Fspan\u003EMetrics Visualization\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.7.5:\u003C\u002Fspan\u003EAlerting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.8:\u003C\u002Fspan\u003ESoftware System Alerts Dashboard Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.9:\u003C\u002Fspan\u003EMicroservice Grafana Dashboard Example\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.9.1:\u003C\u002Fspan\u003ELogging\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.9.2:\u003C\u002Fspan\u003EOpenTelemetry Log Data Model\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E12.2.9.3:\u003C\u002Fspan\u003EPrometheusRule Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E13:\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E14:\u003C\u002Fspan\u003EAppendix A\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read Clean Code Principles and Patterns, 2nd Edition on Leanpub!","unpublished_sample":false,"updated_at":"2025-03-28T20:00:04.000Z","vimeo_url":null,"available_web_book":true,"word_count":172119,"word_count_published":null,"youtube_url":null,"team_discount_package_id":95359,"external_forum_url":null,"num_copies_sold":null,"page_count":671,"percent_complete":100,"seo_title":"Clean Code Principles and… by Petri Silen [PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":86270,"accepted_authors":[{"id":90648,"type":"Author"}]},"87360":{"type":"Book","about_the_book":"\u003Cp\u003EWhenever you think of Desired State Configuration (DSC), you think of Windows systems and bring them to the desired state they should be when defined from a configuration. However, DSC version 3 threw a whole different ballgame and expanded more to become cross-platform after the class-based DSC resources were decoupled from Windows already, supporting Linux-based systems. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIn this extensive handbook, you will learn about the philosophy and rise of ideas from the core PowerShell DSC members and community. There's also a whole different set of terminologies to explore, as the core engine has been written in Rust. The book covers this in more depth, touches upon new operations, like `Export` or `Delete`, and how you can get started building command-based DSC resources. In the last chapter, advanced concepts are teached, covering the adapter lookup table for adapted resources, migration from DSC v1\u002Fv2 Configuration Documents and how DSC v3 has implemented localization.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDSC is not a PowerShell cmdlet anymore, but instead an executable for different platforms. You can now easily run it on your MacOS, Windows, or Linux machine. This handbook will use Windows as primary system. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Ch1\u003EIs this book for you?\u003C\u002Fh1\u003E\u003Cp\u003EThis book is for the system administrator, DevOps engineer, and even developers that are managing large scale cross-platform systems. Yes, you heard that right. All these roles can make use of this book even though you don't have to manage these systems. Instead, developers can assist system administrators or DevOps engineers by writing tools in different languages other then PowerShell, which in turn can hook into DSC's core engine. You will learn all about it in this book!\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":188,"slug":"cloud_computing","description":"","mature_content":false,"created_at":"2017-10-23T18:51:00.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":53,"name":"Cloud Computing","book_categories_count":416},{"id":191,"slug":"microsoft_azure","description":"","mature_content":false,"created_at":"2017-10-23T18:52:35.000Z","updated_at":"2017-10-23T18:52:35.000Z","can_be_short":false,"parent_category_id":188,"name":"Microsoft Azure","book_categories_count":93},{"id":168,"slug":"PowerShell","description":"","mature_content":false,"created_at":"2016-09-27T21:42:44.000Z","updated_at":"2016-09-27T21:42:44.000Z","can_be_short":false,"parent_category_id":53,"name":"PowerShell","book_categories_count":71},{"id":218,"slug":"c_sharp","description":"","mature_content":false,"created_at":"2018-06-23T23:52:33.000Z","updated_at":"2020-12-09T21:38:04.000Z","can_be_short":false,"parent_category_id":131,"name":"C#","book_categories_count":110}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fthedscv3handbook\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fthedscv3handbook\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2024-07-04T12:14:08.000Z","default_package_id":96544,"meta_description":"","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"The DSC V3 Handbook","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":3372230,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_featured?1722314672","installments_completed":null,"installments_planned":null,"input_format":"markuaspec","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2025-03-14T04:16:49.000Z","last_published_sync_mode":"leanpub","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2025-03-14T04:17:54.000Z","primary_author_id":91947,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fthedscv3handbook-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=6611bd131330cedefe9ad444680e45b34968c49bb3788f8b3f9c227023f7e509","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fthedscv3handbook-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=c0bb4d0ef9b7a6e4948380d2cda3bd559b6e2acf3131777c68028370db2db796","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"thedscv3handbook","state":"published","subtitle":"","suggested_tweet":null,"sync_mode":"leanpub","tagline":"Learn about the beginning journey of the DSC Version 3 open-source project on GitHub in this extensive handbook, which started from the early alpha releases.","thank_you_message":null,"title":"The DSC V3 Handbook","json_toc":"null","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_mini?1722314672","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_mini2x?1722314672","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_list?1722314672","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_list2x?1722314672","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_shelf?1722314672","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_shelf2x?1722314672","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_featured?1722314672","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_featured2x?1722314672","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_hero?1722314672","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_hero2x?1722314672","toc":"\u003Cul class=\"toc no-parts\"\u003E\u003Cli\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPreface\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWho is this book for?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECode listings and typographic conventions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat you need for this book\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFeedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAbout the author\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 1 - Desired state is $true or $false\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EYour development environment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe beginning of DSC version 3\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExecuting DSC resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGet-Help\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESummary\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 2 - The DSC Language\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExploring new terminology\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESchema integration and input\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFormatting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELogging messages\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EProgressive messages\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat-if support\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESummary\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3 - Exploring DSC Capabilities and Commands\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow assertions drive logic\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EUsing ARM template functionality in configuration documents\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeep dive into adapters\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExporting resources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGrouping, includes and parallelism\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDSC Meta settings\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESummary\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 4 - Building C# DSC Resource\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESet up your development environment for .NET\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECreate CLI utility application\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EImplement config get command\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EImplement config set command\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGenerate schema command\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECreate build automation script\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe resource manifest\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EValidate commands using Pester\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESummary\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 5 - Advanced Concepts\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEnsure or _exist\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMigrating existing Configuration Documents\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeep dive into export operation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe adapter lookup table\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELocalize messages\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESummary\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EA glimpse into the future\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBicep as authoring for configuration documents\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOther tooling to author configurations\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMachine Configuration collaboration\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EResource discovery and publishing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERelease notes\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read The DSC V3 Handbook on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-06T14:48:41.000Z","vimeo_url":null,"available_web_book":true,"word_count":23594,"word_count_published":null,"youtube_url":null,"team_discount_package_id":96544,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"The DSC V3 Handbook by Gijs Reijn [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":87360,"accepted_authors":[{"id":91947,"type":"Author"}]},"90279":{"type":"Book","about_the_book":"\u003Cp\u003E\u003Cstrong\u003EUnlock Your Full Learning Potential with a Proven, Actionable Method\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis book isn’t just about learning—it’s about mastering the art of learning efficiently and effectively. Whether you want to deepen your expertise or acquire new skills, you'll discover a powerful, structured approach designed to help you retain knowledge and apply it with confidence.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EInside, you’ll find \u003Cstrong\u003Epractical, real-world examples\u003C\u002Fstrong\u003E of creating personalized learning plans, with a focus on software engineering—though the principles apply to any field. Unlike traditional learning guides that discuss theory without application, this book delivers clear, actionable steps you can implement immediately.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EInspired by athletic training and grounded in four key psychology theories, the author presents a dynamic method built around five essential elements. This framework empowers you to systematically absorb and apply knowledge, turning learning into a skill you can refine for life.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":102,"slug":"education","description":"","mature_content":false,"created_at":"2015-09-20T01:59:13.000Z","updated_at":"2020-11-06T04:24:53.000Z","can_be_short":false,"parent_category_id":13,"name":"Education","book_categories_count":470},{"id":148,"slug":"personal_transformation","description":"","mature_content":false,"created_at":"2016-04-26T03:13:14.000Z","updated_at":"2020-11-12T06:14:23.000Z","can_be_short":false,"parent_category_id":14,"name":"Personal Transformation","book_categories_count":356}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fbe-a-learning-machine\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fbe-a-learning-machine\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2025-01-15T10:43:40.000Z","default_package_id":100333,"meta_description":"Have an effective study method will transform your life","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Be a Learning Machine","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":2880615,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":false,"has_pdf_sample":false,"has_sample":false,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_featured?1738244214","installments_completed":null,"installments_planned":null,"input_format":"markuaspec","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2025-01-30T14:24:24.000Z","last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2025-01-30T14:25:09.000Z","primary_author_id":95251,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fbe-a-learning-machine-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=3de500c4ed13a31701728643ef08aa207216ce0c0dc4c4b1e7a057ce70beed06","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fbe-a-learning-machine-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=659b116082b5d7a3735a85a42516eb49e0525f68e25cee0f7beca72656667684","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"be-a-learning-machine","state":"published","subtitle":"","suggested_tweet":"","sync_mode":"github","tagline":"You’ll just need the Five Essential Elements of Learning Through five essential elements, you’ll gain the ability to learn anything deeply—no matter how complex the subject. These five pillars of effective learning will become lifelong tools, guiding you every time you set out to truly master new knowledge and retain it permanently. If you're...","thank_you_message":null,"title":"Be a Learning Machine","json_toc":"null","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_mini?1738244214","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_mini2x?1738244214","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_list?1738244214","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_list2x?1738244214","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_shelf?1738244214","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_shelf2x?1738244214","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_featured?1738244214","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_featured2x?1738244214","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_hero?1738244214","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_hero2x?1738244214","toc":"\u003Cul class=\"toc no-parts\"\u003E\u003Cli\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction: Why Be a Learning Machine?\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMy Learning Journey\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApplying The Method In Different Areas Of Life\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat You Will Learn In This Book\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EShall We Begin?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETheories that Inspire this Book\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGoal Setting Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelf-Efficacy Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECognitive Load Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeliberate Practice Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Studying Effectively\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy Reflect on Your Study Mechanisms?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Learning Journey\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Applicability of the Method\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E5 Essential Elements for Effective Learning\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E1. Definition of Learning Objective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E2. Expectation Alignment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E3. The Role of Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E4. The Importance of Retrieval Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E5. Feedback for Course Correction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFinal Considerations\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining Good Learning Objectives\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExamples of Very Generic Objectives\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERefining Objectives\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Good Objectives\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelf-Efficacy Theory\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat do you want to be able to do?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExamples of Self-Efficacy Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EImportance of Self-Efficacy in Learning Goals\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow to Develop Self-Efficacy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAwareness of the Influence of Self-Efficacy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIncorporating Self-Efficacy into Learning Goals Definition\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMaking Goals More Specific\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining the Desired Capability Level\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOther Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExercise\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBloom’s Taxonomy: A Path to Define Levels of Cognitive Demand\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBloom’s Taxonomy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApplying the Taxonomy to Learning Objectives\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdding Bloom’s Taxonomy to the Learning Objective\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERecap\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELevels of Cognitive Demand\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApplication in Different Contexts\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdding what tools are necessary in the learning objective\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETools\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExamples beyond technology\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdding Context to Learning Objectives\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Context\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApplying Context to Your Objectives\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOther Context Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIncorporating Validation Criteria\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExample: A learning goal with an incorporated validation criterion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Evolution of a Learning Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EUsing Generative AI Assistant to Refine Learning Objectives\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBuilding study plans with ChatGPT\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELevel of Help We Get When Using a Basic Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELevel of Help We Get When Using a Well Defined Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEvaluating Quality of Learning Objectives\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEvaluating Objectives with ChatGPT\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAnalyzing a Poorly Defined Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAnalyzing a Well-Defined Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBreaking Objectives into Smaller Parts\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDecomposing the Learning Objective for Better Planning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKeeping the Essential Elements\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Example: HTTP APIs Development with Java\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFlexibility in Planning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMonitoring Progress\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAligning Expectations to Achieve Learning Goals\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEvaluating Your Current Ability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGoal Setting Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelf-Efficacy Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETask Complexity\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReflection Before Starting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Example of the Effects of Low Self-Efficacy\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining a Learning Objective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEvaluating Your Self-Efficacy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELow Self-Efficacy and Simpler Tasks\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELow Self-Efficacy and More Complex Tasks\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrategies to Deal with Low Self-Efficacy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Example of High Self-Efficacy Effects\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESetting a Tangible Goal related to something we have prior knowledge of\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELearning Transfer\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAligning Expectations Once Again\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelecting Theoretical Sources for Effective Learning\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy consume theories?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Impact of Theory When Practicing Something\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExample: Query Optimization in Databases\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStructuring Theories for Effective Learning\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReliability and Ease of Consumption\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EScale to Rank Reliability and Ease of Consumption\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESeeking the Ideal Balance\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelecting Theoretical Sources for Learning Technologies\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWriting Books as a Result of Learning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELearning Blockchain and Other Technologies\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EValidating Acquired Knowledge\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReliable Sources for Technology Learning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow to Select Sources for Learning More Open Topics\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat is the Best Sequence to Read the Theoretical Sources?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETip to Facilitate Understanding: The Three Readings Technique\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EControversy: Does the Three Reading Rule Really Help?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPersonal Example: Studying Blockchain\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPersistence in Reading\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETechnique Successfully Tested\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFinal Considerations\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Myth of Learning Styles\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELack of Evidence\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Risks of Believing in the Myth\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKeep an Open Mind\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECognitive Load Theory and Information Processing Limitation\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Magic Number Seven\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Connection with Reality\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Evolution to Cognitive Load Theory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntrinsic and Extrinsic Complexity\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMeasured Complexity Vs Perceived Complexity\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWorking Memory and Long-Term Memory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Power of Information Retrieval Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPrecautions When Consuming Online Content\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Link Hell\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWorking Memory and Content Consumption\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Link Trap\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETactics to Avoid Overload\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReinforcing the Role of Reflection in Learning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrategies to Optimize Information Processing\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Reading and Reflection Process Combined with the Three-Reading Tip\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAnalogy with the Process of Watching a Movie\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIdentifying the Reliability of Theoretical Sources\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMechanisms for Reliability Evaluation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Example of Evaluation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Having a Guide in the Learning Process\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy Does a Guide Make a Difference?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIs Having a Guide Essential?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKnowledge Retrieval Practices as a Fundamental Element to be a Learning Machine\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EImportance of Multiple Ways of Exercising Knowledge\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETypes of Retrieval Practice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EInspiration for so-called Support Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Deliberate Practice in Learning\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Science Behind Retrieval Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Mental GPS\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeliberate Practice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeliberate Practice as a Path to Increase Self-Efficacy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Process of Cognitive Simplification\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExamples of Supplemental Recovery Practices\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELearning Objective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDetailing the Combination of Practice Types\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPart-task Practice: Super Specific Recovery Practice\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat is a Part-task Practice?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApplication Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBenefits of Part-task Practice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EProgression of Difficulty and Variability for Priority Recovery Practices\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReminding Our Definition of Priority Recovery Practice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EProgression of Difficulty\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EVariability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBuilding an Exercise Matrix with Progression of Difficulty and Variability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining the Learning Objective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EUsing a Generative-Artificial Intelligence-based Assistant to Suggest Exercises Considering Progression and Variability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECreating an Exercise Matrix\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Power to Control Your Learning Journey\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETaking Control of Your Learning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESome Examples of Advance Preparation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Fifth Element - Feedback\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Role of Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMaximizing Chances of Getting Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat is Important in Feedback and When to Seek It\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Best Time to Seek Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Benefits of Early Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAnalogy with GPS Navigation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Elements of Good Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow To Find Good Sources of Feedback\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFinding Mentors at Work\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESeeking External Experts\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELeveraging Social Networks\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EUsing Generative AI for Feedback\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESelf-Regulation\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Importance of Self-Regulation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow to Practice Self-Regulation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Exercise of Reflection\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChanging the Perception of Complexity: The Importance of Mental Schemes\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWorking Memory vs. Long-term Memory\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMental Schemes and Cognitive Effort\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPractical Examples from Everyday Life\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExample in the Context of Software Development\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMental Schemas in Practice\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExample in the Context of Web Application Development\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMathematical Examples\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHands-on: Building a Learning Plan for Something We Have a Lot of Background\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdapting an Existing Plan\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFeedback Mechanisms\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExpectation Alignment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETheory Matrix\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDeliberate Practice\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Five Elements of a Combined Learning Plan\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHands-On: Building a Learning Plan from Scratch\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAwareness Phase\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EValidating the Knowledge Acquired in the Awareness Phase\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining the Theory Matrix\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERetrieval Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining Feedback Mechanisms\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHands-On: Building a Learning Plan for a Topic with No Defined Source of Truth\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAnd When We Don’t Have a Source of Maximum Reliability?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESearching for a Mentor\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining the Learning Objective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBuilding the Theory Matrix\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining Knowledge Recovery Practices\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFour Learning Saboteurs and How to Avoid Them\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESaboteur 1: Lack of Expectation Alignment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESaboteur 2: Comparison with Others\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESaboteur 3: Excessive Time\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESaboteur 4: Lack of a Specific Goal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELearning Journey Accelerators\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe power of consistency\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERoutine and predictability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStart now\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ENow It’s Up to You\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEducation is Your Primary Vector for Growth\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read Be a Learning Machine on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-01T13:04:36.000Z","vimeo_url":null,"available_web_book":true,"word_count":28206,"word_count_published":null,"youtube_url":null,"team_discount_package_id":100333,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Be a Learning Machine by Alberto Souza [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":90279,"accepted_authors":[{"id":95251,"type":"Author"}]},"90444":{"type":"Book","about_the_book":"\u003Cp\u003E“When will it be done?”\u003C\u002Fp\u003E\u003Cp\u003EThat is probably the first question your customers ask you once you start working on something for them.  Think about how many times you have been asked that question.  How many times have you ever actually been right?\u003C\u002Fp\u003E\u003Cp\u003EWe can debate all we want whether this is a fair question to ask given the tremendous amount of uncertainty in knowledge work, but the truth of the matter is that our customers are going to inquire about completion time whether we like it or not.  Which means we need to come up with an accurate way to answer them.  The problem is that the forecasting tools that we currently utilize have made us ill-equipped to provide accurate answers to reasonable customer questions. \u003C\u002Fp\u003E\u003Cp\u003EUntil now.\u003C\u002Fp\u003E\u003Cp\u003E(You can also find out more at \u003Ca href=\"https:\u002F\u002Fwww.actionableagile.com\u002F\" target=\"_blank\"\u003E https:\u002F\u002Fwww.actionableagile.com\u003C\u002Fa\u003E)\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":1,"slug":"business_and_management","description":"","mature_content":false,"created_at":"2012-06-11T19:12:39.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Management","book_categories_count":634},{"id":16,"slug":"agile","description":"","mature_content":false,"created_at":"2012-06-11T19:12:39.000Z","updated_at":"2020-11-06T04:24:47.000Z","can_be_short":false,"parent_category_id":1,"name":"Agile","book_categories_count":690},{"id":245,"slug":"leadership_agile","description":"","mature_content":false,"created_at":"2020-11-03T00:07:09.000Z","updated_at":"2020-12-09T21:38:06.000Z","can_be_short":false,"parent_category_id":16,"name":"Leadership","book_categories_count":135},{"id":247,"slug":"agile_business_leadership","description":"","mature_content":false,"created_at":"2020-11-03T00:08:38.000Z","updated_at":"2020-12-09T21:38:06.000Z","can_be_short":false,"parent_category_id":119,"name":"Agile","book_categories_count":98},{"id":57,"slug":"lean","description":"","mature_content":false,"created_at":"2015-09-19T19:38:25.000Z","updated_at":"2015-09-19T19:38:25.000Z","can_be_short":false,"parent_category_id":1,"name":"Lean","book_categories_count":326},{"id":119,"slug":"leadership","description":"","mature_content":false,"created_at":"2015-09-27T23:01:54.000Z","updated_at":"2015-09-27T23:01:54.000Z","can_be_short":false,"parent_category_id":1,"name":"Leadership","book_categories_count":457}],"cc_license_text":"Creative Commons Attribution 4.0 International License","cc_slug":"by","cc_version":"4.0","clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Faamfp-10th\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Faamfp-10th\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"custom","contact_author_method":"email","contact_author_url":null,"created_at":"2025-01-22T00:53:39.000Z","default_package_id":100508,"meta_description":"Actionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics and analytics to get the predictability your customers crave.","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Actionable Agile Metrics For Predictability: Tenth Anniversary Edition","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":6204644,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":true,"has_pdf_sample":true,"has_sample":true,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_featured?1743556078","installments_completed":null,"installments_planned":null,"input_format":"markuaspec","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2025-04-02T01:08:19.000Z","last_published_sync_mode":"dropbox","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2025-04-02T01:10:41.000Z","primary_author_id":95527,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Faamfp-10th-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064834Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=cd0735eb080931d96890fb68018c47abef2ad5f91b8d1fa35b13352812031eab","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Faamfp-10th-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064834Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=f59eb9a9a62783161a537714e599baa390abf0631dfb2bf5f74c31b61d634def","show_also_by_authors":true,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"aamfp-10th","state":"published","subtitle":"","suggested_tweet":null,"sync_mode":"dropbox","tagline":"Actionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics and analytics to get the predictability your customers crave.","thank_you_message":"Thank you for your interest!","title":"Actionable Agile Metrics For Predictability: Tenth Anniversary Edition","json_toc":"null","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_mini?1743556078","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_mini2x?1743556078","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_list?1743556078","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_list2x?1743556078","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_shelf?1743556078","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_shelf2x?1743556078","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_featured?1743556078","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_featured2x?1743556078","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_hero?1743556078","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_hero2x?1743556078","toc":"\u003Cul class=\"toc has-parts\"\u003E\u003Cli\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EForeword\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPreface\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003E10th Anniversary Edition\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPreface To All Editions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy Write this Book?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWho Should Read this Book\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConventions Used\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EActionableAgile.com\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPART I: Foundations of Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 1 - The Most Important Part of Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBackground\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Moral of the Story\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAll Assumptions Are Equal. But Some Assumptions Are More Equal Than Others.\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPredictability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 2 - Setting Up For Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EModeling Flow\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining Arrivals and Departures\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy Start and Finish Matter\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3 - The Basic Metrics of Flow\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWork In Progress\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECycle Time\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThroughput\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWork Item Age\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3a - Flow Metrics Data and Calculation\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat Data To Collect\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFlow Metrics Calculation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERandomness\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Flaw of Averages\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 4 - Introduction to Cycle Time Scatterplots\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat is a Cycle Time Scatterplot?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPercentile Lines\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EYour Data is Not Normal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 5 - Service Level Expectations\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECalculating an SLE\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESLEs for Different Work Item Types\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPercentiles as Intervention Triggers\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERight-Sizing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 6 - The Work Item Aging Chart\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat Is a Work Item Aging Chart?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdditional Data\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 7 - Leveraging the Aging Chart for Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Daily Meeting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPercentiles As Intervention Triggers Redux\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EActions to Take\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPART II: More Flow Principles for Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 8 - Introduction to CFDs\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat makes a CFD a CFD?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 8a - Constructing a CFD\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EA Simple Example\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat About Knowledge Work?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 9 - Flow Metrics and CFDs\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWork In Progress\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApproximate Average Cycle Time\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAverage Throughput\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 10 - Interpreting CFDs\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMismatched Arrivals and Departures\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EFlat Lines\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStair Steps\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBulging Bands\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDisappearing Bands\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe S-Curve\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EA Boring CFD\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 11 - Conservation of Flow Part I\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EArrivals and Departures Revisited\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EArrivals and Departures on a CFD\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 12 - Conservation of Flow Part II\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EJust-in-time Prioritization\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EJust-in-time Commitment\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EExceptions to Conservation of Flow\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConditioning Flow and Predictability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 13 - Flow Debt\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApproximate Average Greater Than Actual Average\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApproximate Average is Less Than Actual Average\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EApproximate Average Roughly Equal to Actual Average\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow Different is Different?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 14 - Pull Policies\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EClass of Service\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Impact of Class of Service on Predictability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESlack\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPART III: Getting Started With Predictability\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 15 - Getting Started\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDefining Your Process\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECapturing Data\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow Much Data?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECreate an Aging Chart\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ECreate a Scatterplot\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESome Pitfalls to Consider\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 16 - Next Steps\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EForecasting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ELittle’s Law (Again)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOther Methods to be Wary About\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EContinue Learning\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAppendices\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAppendix A - Introduction to Little’s Law\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWe Need a Little Help\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EA Different Perspective\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIt is all about the Assumptions\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAssumptions as Process Policies\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESegmenting WIP\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKanban Systems\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESize Does Not Matter\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EForecasting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAppendix B - Interpreting Cycle Time Scatterplots\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Triangle\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EClusters of Dots\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EGaps\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EInternal and External Variability\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAppendix C - Cycle Time Histograms\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat is a Histogram?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConstructing a Histogram\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EConclusion\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EKey Learnings and Takeaways\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEndnotes\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 1\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 2\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3a\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 4\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 5\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 6\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 7\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 8\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 8a\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 10\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 11\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 12\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 13\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 14\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 15\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBibliography\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAcknowledgements for the 10th Anniversary Edition\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAbout The Author\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read Actionable Agile Metrics For Predictability: Tenth Anniversary Edition on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-09T00:07:29.000Z","vimeo_url":null,"available_web_book":true,"word_count":72025,"word_count_published":null,"youtube_url":null,"team_discount_package_id":100508,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":100,"seo_title":"Actionable Agile Metrics… by Daniel S. Vacanti [PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":90444,"default_package":[{"id":100508,"type":"Package"}],"accepted_authors":[{"id":95527,"type":"Author"}]},"90579":{"type":"Book","about_the_book":"","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":null,"created_at":"2025-01-25T21:51:34.000Z","default_package_id":100666,"meta_description":null,"editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Material for Generative AI in a Nutshell (The Course)","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":37736600,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":false,"has_pdf_sample":false,"has_sample":false,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_featured?1737841909","installments_completed":null,"installments_planned":null,"input_format":"markua010","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":null,"last_published_sync_mode":"github","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2025-02-05T17:50:02.000Z","primary_author_id":95725,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064835Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=8ffc39f35f4051f927566bd1c0bd17a124feae4d65d1dc7718be2a91c59e958e","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T064835Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=7908278350e7dd6b22e229b667138b06c70e96160cc93fbe1926728cba5b61b2","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":null,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":false,"slug":"ainutshell-6C90B94E8B904A14919FCB81C929B2ED","state":"published","subtitle":null,"suggested_tweet":null,"sync_mode":"github","tagline":"","thank_you_message":null,"title":"Material for Generative AI in a Nutshell (The Course)","json_toc":"[{\"level\":2,\"title\":\"Part 1 - In a Nutshell\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1---in-a-nutshell\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 1: How it Works\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-1-how-it-works\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 1\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-5-0\",\"file_count\":3,\"quiz_id\":50126,\"quiz_markua_id\":\"exercise-5-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 1\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-5\",\"file_count\":3,\"quiz_id\":50127,\"quiz_markua_id\":\"quiz-5\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 2: Large Language Model Training\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-2-large-language-model-training\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 2\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-7-2\",\"file_count\":4,\"quiz_id\":50128,\"quiz_markua_id\":\"exercise-7-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 2\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-7\",\"file_count\":4,\"quiz_id\":50129,\"quiz_markua_id\":\"quiz-7\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 3: Limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-3-limitations\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 3\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-8-4\",\"file_count\":5,\"quiz_id\":50130,\"quiz_markua_id\":\"exercise-8-4\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 3\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-8\",\"file_count\":5,\"quiz_id\":50131,\"quiz_markua_id\":\"quiz-8\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 4: Model Types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-4-model-types\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 4\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-9-1\",\"file_count\":6,\"quiz_id\":50132,\"quiz_markua_id\":\"exercise-9-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 4\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-9\",\"file_count\":6,\"quiz_id\":50133,\"quiz_markua_id\":\"quiz-9\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 5: Multimodal Models, Emergent Capabilities, and the Age of AI\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-5-multimodal-models-emergent-capabilities-and-the-age-of-ai\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 5\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-12-1\",\"file_count\":7,\"quiz_id\":50134,\"quiz_markua_id\":\"exercise-12-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 5\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-12\",\"file_count\":7,\"quiz_id\":50135,\"quiz_markua_id\":\"quiz-12\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 6: Mindset\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-6-mindset\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 6\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-13-0\",\"file_count\":8,\"quiz_id\":50136,\"quiz_markua_id\":\"exercise-13-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 6\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-13\",\"file_count\":8,\"quiz_id\":50137,\"quiz_markua_id\":\"quiz-13\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 7: The Role of Humans\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-7-the-role-of-humans\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 7\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-14-3\",\"file_count\":9,\"quiz_id\":50138,\"quiz_markua_id\":\"exercise-14-3\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 7\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-14\",\"file_count\":9,\"quiz_id\":50139,\"quiz_markua_id\":\"quiz-14\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 8: Prompt Engineering and Building AI-Powered Products\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-8-prompt-engineering-and-building-ai-powered-products\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 8\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-16-1\",\"file_count\":10,\"quiz_id\":50140,\"quiz_markua_id\":\"exercise-16-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 8\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-16\",\"file_count\":10,\"quiz_id\":50141,\"quiz_markua_id\":\"quiz-16\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 9: Autonomous Agents with Tools\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-9-autonomous-agents-with-tools\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 9\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-17-3\",\"file_count\":11,\"quiz_id\":50142,\"quiz_markua_id\":\"exercise-17-3\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 9\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-17\",\"file_count\":11,\"quiz_id\":50143,\"quiz_markua_id\":\"quiz-17\",\"attempts\":2},{\"level\":2,\"title\":\"Part 1 Wrap up\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1-wrap-up\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 2 - Beyond the Nutshell\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-2---beyond-the-nutshell\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 10: My Journey into AI\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-10-my-journey-into-ai\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 10\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-20-5\",\"file_count\":14,\"quiz_id\":50144,\"quiz_markua_id\":\"exercise-20-5\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 10\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-20\",\"file_count\":14,\"quiz_id\":50145,\"quiz_markua_id\":\"quiz-20\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 11: Leading an AI transformation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-11-leading-an-ai-transformation\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Avoid using AI to fire people\",\"quiz_type\":null,\"path\":\"#leanpub-auto-avoid-using-ai-to-fire-people\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 11\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-21-2\",\"file_count\":15,\"quiz_id\":50146,\"quiz_markua_id\":\"exercise-21-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 11\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-21\",\"file_count\":15,\"quiz_id\":50147,\"quiz_markua_id\":\"quiz-21\",\"attempts\":2},{\"level\":2,\"title\":\"Interlude: Egbert’s Life Story\",\"quiz_type\":null,\"path\":\"#leanpub-auto-interlude-egberts-life-story\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 12: Prompt Engineering \\u003cspan i=\\\"prompt engineering techniques\\\"\\u003eTechniques\\u003c\u002Fspan\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-12-prompt-engineering-techniquesi-prompt-engineering-techniques-\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 12\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-23-2\",\"file_count\":17,\"quiz_id\":50148,\"quiz_markua_id\":\"exercise-23-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 12\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-23\",\"file_count\":17,\"quiz_id\":50149,\"quiz_markua_id\":\"quiz-23\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 13: Prompt Generation (or The Angry Grandma) and Retrieval Augmented \\u003cspan i=\\\"Retrieval Augmented Generation (RAG)\\\"\\u003eGeneration\\u003c\u002Fspan\\u003e and Function Calling\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-13-prompt-generation-or-the-angry-grandma-and-retrieval-augmented-generationi-retrieval-augmented-generation-rag-and-function-calling\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Prompt Generation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-prompt-generation\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Approach 1: Including all data\",\"quiz_type\":null,\"path\":\"#leanpub-auto-approach-1-including-all-data\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-12\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 13\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-25-1\",\"file_count\":18,\"quiz_id\":50150,\"quiz_markua_id\":\"exercise-25-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-12\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 13\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-25\",\"file_count\":18,\"quiz_id\":50151,\"quiz_markua_id\":\"quiz-25\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 14: The AI Doctor and the AI Nutrionist\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-14-the-ai-doctor-and-the-ai-nutrionist\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-12\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-13\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 14\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-27-0\",\"file_count\":19,\"quiz_id\":50152,\"quiz_markua_id\":\"exercise-27-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-13\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 14\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-27\",\"file_count\":19,\"quiz_id\":50153,\"quiz_markua_id\":\"quiz-27\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 15: The AI Career Coach and the AI Book Editor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-15-the-ai-career-coach-and-the-ai-book-editor\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-13\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-14\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 15\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-28-1\",\"file_count\":20,\"quiz_id\":50154,\"quiz_markua_id\":\"exercise-28-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-14\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 15\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-28\",\"file_count\":20,\"quiz_id\":50155,\"quiz_markua_id\":\"quiz-28\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 16: The AI Software Engineer, the AI Journalist Who Became a TV Star, and the AI Butler with a Will of His Own\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-16-the-ai-software-engineer-the-ai-journalist-who-became-a-tv-star-and-the-ai-butler-with-a-will-of-his-own\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-14\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-15\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 16\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-31-2\",\"file_count\":21,\"quiz_id\":50156,\"quiz_markua_id\":\"exercise-31-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-15\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 16\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-31\",\"file_count\":21,\"quiz_id\":50157,\"quiz_markua_id\":\"quiz-31\",\"attempts\":2},{\"level\":2,\"title\":\"A Safety Experiment\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-safety-experiment\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The Meta-Chapter (or Bookception)\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-meta-chapter-or-bookception\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"How this book (and the video) came to be\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-this-book-and-the-video-came-to-be\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null}]","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_mini?1737841909","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_mini2x?1737841909","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_list?1737841909","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_list2x?1737841909","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_shelf?1737841909","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_shelf2x?1737841909","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_featured?1737841909","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_featured2x?1737841909","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_hero?1737841909","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fainutshell-6C90B94E8B904A14919FCB81C929B2ED\u002Fs_hero2x?1737841909","toc":"\u003Cul class='toc no-parts'\u003E\n \u003Cli\u003E\n Part 1 - In a Nutshell\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Introduction\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 1: How it Works\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 2: Large Language Model Training\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 3: Limitations\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 4: Model Types\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 5: Multimodal Models, Emergent Capabilities, and the Age of AI\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 6: Mindset\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 7: The Role of Humans\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 8: Prompt Engineering and Building AI-Powered Products\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 9: Autonomous Agents with Tools\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 1 Wrap up\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Part 2 - Beyond the Nutshell\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 10: My Journey into AI\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 11: Leading an AI transformation\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Avoid using AI to fire people\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Interlude: Egbert’s Life Story\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 12: Prompt Engineering \u003Cspan i=\"prompt engineering techniques\"\u003ETechniques\u003C\u002Fspan\u003E\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 13: Prompt Generation (or The Angry Grandma) and Retrieval Augmented \u003Cspan i=\"Retrieval Augmented Generation (RAG)\"\u003EGeneration\u003C\u002Fspan\u003E and Function Calling\n \u003Cul\u003E\n \u003Cli\u003E\n Prompt Generation\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Approach 1: Including all data\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 14: The AI Doctor and the AI Nutrionist\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 15: The AI Career Coach and the AI Book Editor\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Lesson 16: The AI Software Engineer, the AI Journalist Who Became a TV Star, and the AI Butler with a Will of His Own\n \u003Cul\u003E\n \u003Cli\u003E\n Lesson Material\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Exercise\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Quiz\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n A Safety Experiment\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n The Meta-Chapter (or Bookception)\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n How this book (and the video) came to be\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n Answers to Exercises\n \u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","translated_from_id":null,"tweet_text":"Read Material for Generative AI in a Nutshell (The Course) on Leanpub!","unpublished_sample":false,"updated_at":"2025-02-05T17:50:03.000Z","vimeo_url":null,"available_web_book":true,"word_count":83020,"word_count_published":null,"youtube_url":null,"team_discount_package_id":100666,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":0,"seo_title":null,"title_direction":"ltr","past_editions_reader_count":null,"id":90579,"language":[{"id":124,"type":"Language"}]},"90921":{"type":"Book","about_the_book":"\u003Cp\u003E\u003Cem\u003E“A refreshingly candid exploration of what it takes to lead effectively in an environment defined by constant change”\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003E“A must-read for anyone interested in transforming organisational design and strategy. It doesn’t just inform; it inspires and equips you to make a tangible difference in your organisational landscape.”\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003E“At a time when many organisations are still wrestling with bureaucratic inertia and outdated processes, Wholehearted offers a pathway to more effective decision-making and leadership.”\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHow do leaders at all scales of organisation create the conditions for innovation, excellence, and performance? Initial clues are to be found in the Wholehearted organisation – one that recognises the leadership of those who find the right challenges to engage with, invite others into that process, and celebrate their successes.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDeeper answers come via the Deliberately Adaptive Organisation, a ground-up and complexity-aware reconstruction of Stafford Beer’s classic Viable System Model. Through its lens, and with reference to a number of complementary models, frameworks, and patterns, you will make new sense of your organisation’s myriad relationships – relationships not only between people, but between different organisational scopes, their different aspects, and different levels of scale. Where these relationships are insufficiently healthy and productive, they are drains on your organisation’s adaptive capacity – capacity you will want to liberate!\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThe need for organisations to be adaptive has never been greater. But because they ignore too many other dimensions, the process-centric approaches of the past couple of decades are proving themselves insufficient to the task. For the digital-age organisation in which product development, customer-focused service delivery, and participatory organisational renewal must become increasingly integrated, challenges of context and scale are never far away. \u003Cem\u003EWholehearted\u003C\u002Fem\u003E tackles these head-on.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EFormer Executive Director and CTO Mike Burrows is the author of \u003Cem\u003EOrganizing Conversations\u003C\u002Fem\u003E, \u003Cem\u003ERight to Left\u003C\u002Fem\u003E, \u003Cem\u003EAgendashift\u003C\u002Fem\u003E, and the Lean-Agile classic, \u003Cem\u003EKanban from the Inside\u003C\u002Fem\u003E.\u003C\u002Fp\u003E","author_count":1,"author_community_preview_short_url":null,"author_preview_short_url":null,"author_sample_preview_short_url":null,"authors_are_editors":false,"available_downloadable_epub":true,"available_downloadable_pdf":true,"categories":[{"id":119,"slug":"leadership","description":"","mature_content":false,"created_at":"2015-09-27T23:01:54.000Z","updated_at":"2015-09-27T23:01:54.000Z","can_be_short":false,"parent_category_id":1,"name":"Leadership","book_categories_count":457},{"id":196,"slug":"enterprise_management","description":"","mature_content":false,"created_at":"2018-04-10T00:28:08.000Z","updated_at":"2020-12-09T21:38:04.000Z","can_be_short":false,"parent_category_id":1,"name":"Enterprise Management","book_categories_count":77},{"id":295,"slug":"strategy","description":"","mature_content":false,"created_at":"2023-12-29T16:55:43.000Z","updated_at":"2023-12-29T16:55:43.000Z","can_be_short":false,"parent_category_id":1,"name":"Strategy","book_categories_count":59},{"id":120,"slug":"consulting","description":"","mature_content":false,"created_at":"2015-09-27T23:02:06.000Z","updated_at":"2015-09-27T23:02:06.000Z","can_be_short":false,"parent_category_id":1,"name":"Consulting","book_categories_count":190}],"cc_license_text":"Creative Commons Attribution","cc_slug":"by","cc_version":null,"clicky_analytics_code":null,"community_edition_about_the_book":"","community_edition_callout_quote":"","community_edition_epub_url":"\u002Fwholehearted-mike-burrows\u002Fce\u002Fepub","community_edition_pdf_url":"\u002Fwholehearted-mike-burrows\u002Fce\u002Fpdf","community_edition_require_firstname":"required","community_edition_require_lastname":"required","community_edition_teaser_text":"","community_edition_whats_included":"","copyright_type":"default","contact_author_method":"email","contact_author_url":"","created_at":"2025-02-15T16:14:31.000Z","default_package_id":101105,"meta_description":"New ways to understand your organisation, and new ways to engage with its challenges. A fresh, ground-up reconstruction of a classic model, approached humanely and with a modern appreciation for complexity.","editor_read_only":false,"forum_url":null,"forced_markua":false,"free_purchase_requires_membership":true,"enabled_forums":false,"embargo":false,"name":"Wholehearted","epub_available":true,"epub_community_edition_available":false,"epub_download_url":null,"epub_file_size":7565297,"free_purchase_only":false,"google_analytics_code":null,"generate_community_edition":false,"generated_on_leanpub":true,"has_epub_sample":false,"has_pdf_sample":false,"has_sample":false,"image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_featured?1742108781","installments_completed":null,"installments_planned":null,"input_format":"markuaspec","language_code3":"eng","language_id":124,"language_name":"English","last_published_at":"2025-04-08T13:21:02.000Z","last_published_sync_mode":"leanpub","leanpub_app_available":true,"mature_content":false,"new_edition_id":null,"page_count_published":null,"pdf_available":true,"pdf_community_edition_available":false,"pre_publish_mailchimp_list_id":"leanpub","preview_generated_at":"2025-04-08T13:22:17.000Z","primary_author_id":96147,"publisher_id":1,"sample_epub_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fwholehearted-mike-burrows-sample.epub?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=8203534da5ef2f6dbd56c68f4b0b73fb15642836ca1d162a2595bdbacf29bb25","sample_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fsamples.leanpub.com\u002Fwholehearted-mike-burrows-sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0XBXHW3Q9GGV69BT7E82%2F20250409%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250409T094559Z&X-Amz-Expires=518400&X-Amz-SignedHeaders=host&X-Amz-Signature=dc5eb5b4e4b1628786026e7f9fc11c35fb1715f0f18509fb5f53d64da6e55260","show_also_by_authors":false,"show_community_edition_on_book_page":false,"show_num_readers":false,"show_feedback_page":true,"show_full_title_for_translations":false,"show_installments":null,"show_page_count":false,"show_read_link":"none","show_word_count":true,"slug":"wholehearted-mike-burrows","state":"published","subtitle":"Engaging with Complexity in the Deliberately Adaptive Organisation","suggested_tweet":null,"sync_mode":"leanpub","tagline":"New ways to understand your organisation, and new ways to engage with its challenges. The Deliberately Adaptive Organisation is a fresh, ground-up reconstruction of the classic Viable System Model, approached humanely and with a 21st-century appreciation for complexity.","thank_you_message":null,"title":"Wholehearted","json_toc":"null","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_mini?1742108781","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_mini2x?1742108781","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_list?1742108781","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_list2x?1742108781","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_shelf?1742108781","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_shelf2x?1742108781","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_featured?1742108781","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_featured2x?1742108781","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_hero?1742108781","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_hero2x?1742108781","toc":"\u003Cul class=\"toc no-parts\"\u003E\u003Cli\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EForeword\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPreface\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAcknowledgements\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIntroduction\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWholehearted\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Deliberately Adaptive Organisation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngaging with complexity\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EIngredients\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhy read this book\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOverview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPart I: Business Agility at Every Scale\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 1. Delivering-Discovering-Renewing\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWhat must be there? What constrains it?\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDelivery, discovery, and renewal\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWe need to talk about dysfunction\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Great Rebalancing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EProcess improvement and the pursuit of excellence\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAs below, so above\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 2. Adaptive Strategising\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPrologue: Right to Left\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ESix constraints on strategising\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPursuing viability: The startup\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EScaling the strategy process\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOutside-in and inside-out\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 3. Mutual Trust Building\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe costs of mistrust\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EModels of trust-building leadership\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ERequisite variety\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EOne hundred years of organising\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETrust building’s systemic role\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Deliberately Adaptive Organisation’s third space\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EModel, map, and method: How they compare\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EPart II: Between Spaces, Scopes, and Scales\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 4. The Space Between\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ENavigating the formal organisation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDimensions of strategy\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EBetween scales\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrand 1. Structuring\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrand 2. Translating\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrand 3. Reconciling\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EStrand 4. Connecting\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EHow product organisations scale\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 5. Organising without Reorganising\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EYour organisation in five networks\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAdaptive Space\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003ETeaming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EDynamic Reteaming\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThinking in circles\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EThe Deliberately Developmental Organisation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EReview\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EChapter 6. What Lies Beneath\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EMoving into action\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngaging with the model, engaging with the organisation\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EWelcome to Constraints Club\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAffordance Mapping\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAffordance, constraint, and inquiry\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEnabling change, increasing possibility\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EEngage, Invite, Celebrate\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAppendix A. Initial study findings\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EResources\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cul\u003E\u003Cli\u003E\u003Cspan class=\"section-number\"\u003E\u003C\u002Fspan\u003EAbout the Author\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","translated_from_id":null,"tweet_text":"Read Wholehearted on Leanpub!","unpublished_sample":false,"updated_at":"2025-04-08T13:22:17.000Z","vimeo_url":"","available_web_book":true,"word_count":73427,"word_count_published":73427,"youtube_url":"13BQ2zpBshw","team_discount_package_id":101105,"external_forum_url":null,"num_copies_sold":null,"page_count":null,"percent_complete":0,"seo_title":"Wholehearted by Mike Burrows [Leanpub PDF\u002FiPad\u002FKindle]","title_direction":"ltr","past_editions_reader_count":null,"id":90921,"accepted_authors":[{"id":96147,"type":"Author"}]}},"errors":{},"indexes":{"{\"featured\":true,\"list\":true}":[90444]},"loading":{"{\"featured\":true,\"list\":true}":false},"stats":{}},"BookPurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"Bundle":{"all":{"1343":{"type":"Bundle","allow_free_purchases":false,"bundle":true,"categories":[{"id":239,"slug":"kotlin","description":"","mature_content":false,"created_at":"2019-10-25T15:14:42.000Z","updated_at":"2019-10-25T15:14:42.000Z","can_be_short":false,"parent_category_id":53,"name":"Kotlin","book_categories_count":43},{"id":62,"slug":"android","description":"","mature_content":false,"created_at":"2015-09-20T01:32:46.000Z","updated_at":"2015-09-20T01:32:46.000Z","can_be_short":false,"parent_category_id":53,"name":"Android","book_categories_count":114},{"id":80,"slug":"java","description":"","mature_content":false,"created_at":"2015-09-20T01:40:41.000Z","updated_at":"2015-09-20T01:40:41.000Z","can_be_short":false,"parent_category_id":53,"name":"Java","book_categories_count":274},{"id":53,"slug":"computer_programming","description":"","mature_content":false,"created_at":"2015-09-14T21:13:24.000Z","updated_at":"2020-11-12T06:14:20.000Z","can_be_short":false,"parent_category_id":null,"name":"Computers and Programming","book_categories_count":2101},{"id":42,"slug":"engineering","description":"","mature_content":false,"created_at":"2015-09-10T03:11:20.000Z","updated_at":"2020-11-06T04:24:53.000Z","can_be_short":false,"parent_category_id":13,"name":"Engineering","book_categories_count":202}],"clicky_analytics_code":"","created_at":"2023-02-10T08:12:13.000Z","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_list\u002Fbundle-cover.png?1734355071","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_list2x\u002Fbundle-cover.png?1734355071","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_featured\u002Fbundle-cover.png?1734355071","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_featured2x\u002Fbundle-cover.png?1734355071","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_hero\u002Fbundle-cover.png?1734355071","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_hero2x\u002Fbundle-cover.png?1734355071","description":null,"display_name":"Big Kotlin pack","free_purchase_only":false,"free_purchase_requires_membership":false,"google_analytics_code":"G-5RCMMHTMYF","language_code2":"en","language_code3":"eng","language_direction":"ltr","maximum_price":160,"mature_content":false,"minimum_paid_price":"80.0","name":"Big Kotlin pack","ratio_of_revenue_to_authors":1,"ratio_of_revenue_to_causes":0,"bought_separately_combined_minimum_paid_price":103.98,"bought_separately_combined_suggested_price":143.88,"royalties_to_revenue_ratio":"0.8","short_description":"","simple_description":null,"show_what_author_gets":true,"show_what_cause_gets":false,"slug":"kotlin_mm","state":"published","stripe_name":"Big Kotlin pack","stripe_package_name":null,"stripe_description":"The bundle Big Kotlin pack with books \"Kotlin Essentials\", \"Functional Kotlin\", \"Advanced Kotlin\", \"Kotlin Coroutines\", \"Effective Kotlin\"","stripe_image":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_list2x\u002Fbundle-cover.png?1734355071","suggested_price":"100.0","updated_at":"2025-04-08T19:37:11.000Z","user_id":1251350,"id":1343,"books":[{"id":45844,"type":"Book"},{"id":72494,"type":"Book"},{"id":78480,"type":"Book"},{"id":78674,"type":"Book"},{"id":80651,"type":"Book"}]}},"errors":{},"indexes":{"{\"featured\":true,\"hero\":true}":[1343]},"loading":{"{\"featured\":true,\"hero\":true}":false}},"BundlePackage":{"all":{},"errors":{},"indexes":{},"loading":{}},"BundlePurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"CartItem":{"all":{},"errors":{},"indexes":{},"loading":{}},"CartPurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"Category":{"all":{"1":{"type":"Category","book_categories_count":633,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Management","mature_content":false,"name":"Management","parent_category_id":null,"slug":"business_and_management","updated_at":"2020-11-12T06:14:20.000Z","id":1},"2":{"type":"Category","book_categories_count":126,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Cookbooks","mature_content":false,"name":"Cookbooks","parent_category_id":null,"slug":"cookbooks","updated_at":"2017-01-21T02:09:53.000Z","id":2},"3":{"type":"Category","book_categories_count":161,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Culture","mature_content":false,"name":"Culture","parent_category_id":59,"slug":"culture","updated_at":"2015-09-20T01:09:52.000Z","id":3},"4":{"type":"Category","book_categories_count":80,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Fiction \u002F Erotica","mature_content":true,"name":"Erotica","parent_category_id":6,"slug":"erotica","updated_at":"2015-09-20T00:57:28.000Z","id":4},"6":{"type":"Category","book_categories_count":331,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Fiction","mature_content":false,"name":"Fiction","parent_category_id":null,"slug":"fiction","updated_at":"2017-01-21T02:10:10.000Z","id":6},"9":{"type":"Category","book_categories_count":159,"can_be_short":true,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Poetry","mature_content":false,"name":"Poetry","parent_category_id":59,"slug":"poetry","updated_at":"2020-11-16T18:20:31.000Z","id":9},"10":{"type":"Category","book_categories_count":204,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality","mature_content":false,"name":"Religion and Spirituality","parent_category_id":59,"slug":"religion_and_spirituality","updated_at":"2020-11-16T18:18:29.000Z","id":10},"11":{"type":"Category","book_categories_count":609,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Computers and Programming \u002F Software","mature_content":false,"name":"Software","parent_category_id":53,"slug":"software","updated_at":"2020-11-12T06:14:20.000Z","id":11},"12":{"type":"Category","book_categories_count":250,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Management \u002F Startups","mature_content":false,"name":"Startups","parent_category_id":1,"slug":"startups","updated_at":"2015-09-19T19:41:16.000Z","id":12},"13":{"type":"Category","book_categories_count":247,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Textbooks","mature_content":false,"name":"Textbooks","parent_category_id":null,"slug":"textbooks","updated_at":"2017-01-21T02:11:16.000Z","id":13},"14":{"type":"Category","book_categories_count":465,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Self-Help","mature_content":false,"name":"Self-Help","parent_category_id":59,"slug":"selfhelp","updated_at":"2020-11-16T18:18:56.000Z","id":14},"15":{"type":"Category","book_categories_count":104,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Diet and Nutrition","mature_content":false,"name":"Diet and Nutrition","parent_category_id":59,"slug":"diet_and_nutrition","updated_at":"2015-09-20T01:10:42.000Z","id":15},"16":{"type":"Category","book_categories_count":690,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Management \u002F Agile","mature_content":false,"name":"Agile","parent_category_id":1,"slug":"agile","updated_at":"2020-11-06T04:24:47.000Z","id":16},"17":{"type":"Category","book_categories_count":102,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Travel","mature_content":false,"name":"Travel","parent_category_id":59,"slug":"travel","updated_at":"2020-11-12T06:14:23.000Z","id":17},"18":{"type":"Category","book_categories_count":107,"can_be_short":false,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Non-Fiction \u002F Sports and Fitness","mature_content":false,"name":"Sports and Fitness","parent_category_id":59,"slug":"sports_and_fitness","updated_at":"2015-09-20T01:28:26.000Z","id":18},"19":{"type":"Category","book_categories_count":171,"can_be_short":true,"created_at":"2012-06-11T19:12:39.000Z","description":"","full_name":"Fiction \u002F Children's Books","mature_content":false,"name":"Children's Books","parent_category_id":6,"slug":"childrens_books","updated_at":"2020-11-12T06:14:20.000Z","id":19},"20":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2012-10-31T22:25:49.000Z","description":"","full_name":"Fiction \u002F NaNoWriMo","mature_content":false,"name":"NaNoWriMo","parent_category_id":6,"slug":"nanowrimo","updated_at":"2015-09-20T01:24:02.000Z","id":20},"23":{"type":"Category","book_categories_count":128,"can_be_short":false,"created_at":"2012-11-09T20:18:55.000Z","description":"","full_name":"Fiction \u002F Humor and Satire","mature_content":false,"name":"Humor and Satire","parent_category_id":6,"slug":"humor_and_satire","updated_at":"2020-11-12T06:14:20.000Z","id":23},"24":{"type":"Category","book_categories_count":50,"can_be_short":false,"created_at":"2013-01-08T23:37:23.000Z","description":"","full_name":"Textbooks \u002F Humanities \u002F History","mature_content":false,"name":"History","parent_category_id":58,"slug":"humanities_history","updated_at":"2022-01-31T21:43:16.000Z","id":24},"25":{"type":"Category","book_categories_count":116,"can_be_short":false,"created_at":"2013-02-08T20:20:12.000Z","description":"","full_name":"Non-Fiction \u002F Family and Parenting","mature_content":false,"name":"Family and Parenting","parent_category_id":59,"slug":"family_and_parenting","updated_at":"2015-09-20T01:12:49.000Z","id":25},"27":{"type":"Category","book_categories_count":138,"can_be_short":false,"created_at":"2013-05-16T22:44:24.000Z","description":"","full_name":"Non-Fiction \u002F Music","mature_content":false,"name":"Music","parent_category_id":59,"slug":"music","updated_at":"2020-11-06T04:24:52.000Z","id":27},"28":{"type":"Category","book_categories_count":158,"can_be_short":false,"created_at":"2013-06-17T23:41:44.000Z","description":"","full_name":"Fiction \u002F Teen and Young Adult","mature_content":false,"name":"Teen and Young Adult","parent_category_id":6,"slug":"teen_and_young_adult","updated_at":"2015-09-20T01:30:08.000Z","id":28},"29":{"type":"Category","book_categories_count":199,"can_be_short":false,"created_at":"2013-10-10T04:09:32.000Z","description":"","full_name":"Fiction \u002F Science Fiction","mature_content":false,"name":"Science Fiction","parent_category_id":6,"slug":"science_fiction","updated_at":"2015-09-20T01:26:33.000Z","id":29},"30":{"type":"Category","book_categories_count":223,"can_be_short":false,"created_at":"2013-10-10T04:09:32.000Z","description":"","full_name":"Fiction \u002F Fantasy","mature_content":false,"name":"Fantasy","parent_category_id":6,"slug":"fantasy","updated_at":"2015-09-20T01:13:10.000Z","id":30},"31":{"type":"Category","book_categories_count":86,"can_be_short":false,"created_at":"2013-10-10T04:09:32.000Z","description":"","full_name":"Fiction \u002F Mystery","mature_content":false,"name":"Mystery","parent_category_id":6,"slug":"mystery","updated_at":"2015-09-20T01:23:33.000Z","id":31},"32":{"type":"Category","book_categories_count":64,"can_be_short":false,"created_at":"2013-10-10T04:09:32.000Z","description":"","full_name":"Fiction \u002F Horror","mature_content":false,"name":"Horror","parent_category_id":6,"slug":"horror","updated_at":"2015-09-20T01:15:42.000Z","id":32},"33":{"type":"Category","book_categories_count":147,"can_be_short":false,"created_at":"2013-10-10T04:09:32.000Z","description":"","full_name":"Fiction \u002F Romance","mature_content":false,"name":"Romance","parent_category_id":6,"slug":"romance","updated_at":"2015-09-20T01:25:53.000Z","id":33},"34":{"type":"Category","book_categories_count":92,"can_be_short":false,"created_at":"2013-10-10T04:09:33.000Z","description":"","full_name":"Fiction \u002F Thriller","mature_content":false,"name":"Thriller","parent_category_id":6,"slug":"thriller","updated_at":"2015-09-20T01:28:52.000Z","id":34},"35":{"type":"Category","book_categories_count":87,"can_be_short":false,"created_at":"2013-10-10T04:09:33.000Z","description":"","full_name":"Fiction \u002F Historical Fiction","mature_content":false,"name":"Historical Fiction","parent_category_id":6,"slug":"historical_fiction","updated_at":"2015-09-20T01:15:20.000Z","id":35},"37":{"type":"Category","book_categories_count":81,"can_be_short":false,"created_at":"2014-01-11T01:29:48.000Z","description":"","full_name":"Non-Fiction \u002F Biographies","mature_content":false,"name":"Biographies","parent_category_id":59,"slug":"biographies","updated_at":"2015-09-20T01:03:37.000Z","id":37},"38":{"type":"Category","book_categories_count":115,"can_be_short":false,"created_at":"2014-04-01T22:01:42.000Z","description":"","full_name":"Non-Fiction \u002F DIY","mature_content":false,"name":"DIY","parent_category_id":59,"slug":"diy","updated_at":"2022-02-01T00:39:44.000Z","id":38},"39":{"type":"Category","book_categories_count":93,"can_be_short":false,"created_at":"2014-07-21T19:07:10.000Z","description":"","full_name":"Textbooks \u002F Humanities \u002F Philosophy","mature_content":false,"name":"Philosophy","parent_category_id":58,"slug":"philosophy","updated_at":"2022-02-01T00:31:04.000Z","id":39},"40":{"type":"Category","book_categories_count":66,"can_be_short":false,"created_at":"2014-07-21T19:07:10.000Z","description":"","full_name":"Non-Fiction \u002F Creative Non-Fiction","mature_content":false,"name":"Creative Non-Fiction","parent_category_id":59,"slug":"creative_non_fiction","updated_at":"2020-12-09T21:38:04.000Z","id":40},"41":{"type":"Category","book_categories_count":17,"can_be_short":false,"created_at":"2015-03-05T20:19:29.000Z","description":"","full_name":"Computers and Programming \u002F Gadgets","mature_content":false,"name":"Gadgets","parent_category_id":53,"slug":"gadgets","updated_at":"2020-11-12T06:14:20.000Z","id":41},"42":{"type":"Category","book_categories_count":202,"can_be_short":false,"created_at":"2015-09-10T03:11:20.000Z","description":"","full_name":"Textbooks \u002F Engineering","mature_content":false,"name":"Engineering","parent_category_id":13,"slug":"engineering","updated_at":"2020-11-06T04:24:53.000Z","id":42},"43":{"type":"Category","book_categories_count":413,"can_be_short":false,"created_at":"2015-09-10T03:13:34.000Z","description":"","full_name":"Textbooks \u002F Computer Science","mature_content":false,"name":"Computer Science","parent_category_id":13,"slug":"computer_science","updated_at":"2020-11-06T04:24:52.000Z","id":43},"44":{"type":"Category","book_categories_count":477,"can_be_short":false,"created_at":"2015-09-10T03:13:52.000Z","description":"","full_name":"Textbooks \u002F Data Science","mature_content":false,"name":"Data Science","parent_category_id":13,"slug":"data_science","updated_at":"2020-11-06T04:24:52.000Z","id":44},"45":{"type":"Category","book_categories_count":103,"can_be_short":false,"created_at":"2015-09-14T21:08:10.000Z","description":"","full_name":"Fiction \u002F Literary Fiction","mature_content":false,"name":"Literary Fiction","parent_category_id":6,"slug":"literary_fiction","updated_at":"2015-09-20T01:25:14.000Z","id":45},"46":{"type":"Category","book_categories_count":188,"can_be_short":false,"created_at":"2015-09-14T21:08:34.000Z","description":"","full_name":"Textbooks \u002F Sciences","mature_content":false,"name":"Sciences","parent_category_id":13,"slug":"science","updated_at":"2020-11-06T04:24:53.000Z","id":46},"48":{"type":"Category","book_categories_count":296,"can_be_short":false,"created_at":"2015-09-14T21:10:06.000Z","description":"","full_name":"Management \u002F Project Management","mature_content":false,"name":"Project Management","parent_category_id":1,"slug":"project_management","updated_at":"2015-09-20T01:25:02.000Z","id":48},"49":{"type":"Category","book_categories_count":7,"can_be_short":false,"created_at":"2015-09-14T21:10:32.000Z","description":"","full_name":"Non-Fiction \u002F Celebrity","mature_content":false,"name":"Celebrity","parent_category_id":59,"slug":"celebrity","updated_at":"2015-09-20T01:04:00.000Z","id":49},"53":{"type":"Category","book_categories_count":2099,"can_be_short":false,"created_at":"2015-09-14T21:13:24.000Z","description":"","full_name":"Computers and Programming","mature_content":false,"name":"Computers and Programming","parent_category_id":null,"slug":"computer_programming","updated_at":"2020-11-12T06:14:20.000Z","id":53},"54":{"type":"Category","book_categories_count":70,"can_be_short":false,"created_at":"2015-09-14T21:13:57.000Z","description":"","full_name":"Computers and Programming \u002F Gaming","mature_content":false,"name":"Gaming","parent_category_id":53,"slug":"gaming","updated_at":"2020-11-12T06:14:20.000Z","id":54},"55":{"type":"Category","book_categories_count":558,"can_be_short":false,"created_at":"2015-09-14T21:15:01.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript","mature_content":false,"name":"JavaScript","parent_category_id":53,"slug":"javascript","updated_at":"2015-09-14T21:15:01.000Z","id":55},"56":{"type":"Category","book_categories_count":95,"can_be_short":false,"created_at":"2015-09-14T21:15:23.000Z","description":"","full_name":"Computers and Programming \u002F PHP \u002F Laravel","mature_content":false,"name":"Laravel","parent_category_id":61,"slug":"laravel","updated_at":"2015-09-20T01:20:48.000Z","id":56},"57":{"type":"Category","book_categories_count":326,"can_be_short":false,"created_at":"2015-09-19T19:38:25.000Z","description":"","full_name":"Management \u002F Lean","mature_content":false,"name":"Lean","parent_category_id":1,"slug":"lean","updated_at":"2015-09-19T19:38:25.000Z","id":57},"58":{"type":"Category","book_categories_count":62,"can_be_short":false,"created_at":"2015-09-20T00:56:06.000Z","description":"","full_name":"Textbooks \u002F Humanities","mature_content":false,"name":"Humanities","parent_category_id":13,"slug":"humanities","updated_at":"2020-11-06T04:24:53.000Z","id":58},"59":{"type":"Category","book_categories_count":442,"can_be_short":false,"created_at":"2015-09-20T01:02:12.000Z","description":"","full_name":"Non-Fiction","mature_content":false,"name":"Non-Fiction","parent_category_id":null,"slug":"non_fiction","updated_at":"2020-12-09T21:38:04.000Z","id":59},"61":{"type":"Category","book_categories_count":210,"can_be_short":false,"created_at":"2015-09-20T01:20:34.000Z","description":"","full_name":"Computers and Programming \u002F PHP","mature_content":false,"name":"PHP","parent_category_id":53,"slug":"php","updated_at":"2022-02-01T00:38:15.000Z","id":61},"62":{"type":"Category","book_categories_count":114,"can_be_short":false,"created_at":"2015-09-20T01:32:46.000Z","description":"","full_name":"Computers and Programming \u002F Android","mature_content":false,"name":"Android","parent_category_id":53,"slug":"android","updated_at":"2015-09-20T01:32:46.000Z","id":62},"63":{"type":"Category","book_categories_count":76,"can_be_short":false,"created_at":"2015-09-20T01:32:58.000Z","description":"","full_name":"Computers and Programming \u002F APIs \u002F API Design","mature_content":false,"name":"API Design","parent_category_id":143,"slug":"api_design","updated_at":"2016-03-17T02:22:08.000Z","id":63},"64":{"type":"Category","book_categories_count":235,"can_be_short":false,"created_at":"2015-09-20T01:33:08.000Z","description":"","full_name":"Computers and Programming \u002F C and C++","mature_content":false,"name":"C and C++","parent_category_id":53,"slug":"c_and_cpp","updated_at":"2015-09-20T01:33:31.000Z","id":64},"65":{"type":"Category","book_categories_count":16,"can_be_short":false,"created_at":"2015-09-20T01:34:04.000Z","description":"","full_name":"Computers and Programming \u002F Clojure","mature_content":false,"name":"Clojure","parent_category_id":53,"slug":"clojure","updated_at":"2022-02-01T00:35:29.000Z","id":65},"66":{"type":"Category","book_categories_count":200,"can_be_short":false,"created_at":"2015-09-20T01:34:35.000Z","description":"","full_name":"Computers and Programming \u002F Databases","mature_content":false,"name":"Databases","parent_category_id":53,"slug":"databases","updated_at":"2020-11-12T06:14:20.000Z","id":66},"67":{"type":"Category","book_categories_count":22,"can_be_short":false,"created_at":"2015-09-20T01:34:49.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F MongoDB","mature_content":false,"name":"MongoDB","parent_category_id":66,"slug":"mongodb","updated_at":"2015-09-20T01:34:49.000Z","id":67},"68":{"type":"Category","book_categories_count":50,"can_be_short":false,"created_at":"2015-09-20T01:35:04.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F MySQL","mature_content":false,"name":"MySQL","parent_category_id":66,"slug":"mysql","updated_at":"2015-09-20T01:35:04.000Z","id":68},"69":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2015-09-20T01:35:16.000Z","description":"","full_name":"Computers and Programming \u002F Delphi","mature_content":false,"name":"Delphi","parent_category_id":53,"slug":"delphi","updated_at":"2015-09-20T01:35:16.000Z","id":69},"70":{"type":"Category","book_categories_count":378,"can_be_short":false,"created_at":"2015-09-20T01:35:32.000Z","description":"","full_name":"Computers and Programming \u002F DevOps","mature_content":false,"name":"DevOps","parent_category_id":53,"slug":"devops","updated_at":"2015-09-20T01:35:32.000Z","id":70},"71":{"type":"Category","book_categories_count":63,"can_be_short":false,"created_at":"2015-09-20T01:35:48.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F AWS","mature_content":false,"name":"AWS","parent_category_id":70,"slug":"aws","updated_at":"2015-09-20T01:35:48.000Z","id":71},"72":{"type":"Category","book_categories_count":88,"can_be_short":false,"created_at":"2015-09-20T01:36:02.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Docker","mature_content":false,"name":"Docker","parent_category_id":70,"slug":"docker","updated_at":"2015-09-20T01:36:02.000Z","id":72},"73":{"type":"Category","book_categories_count":72,"can_be_short":false,"created_at":"2015-09-20T01:36:24.000Z","description":"","full_name":"Computers and Programming \u002F Embedded Systems","mature_content":false,"name":"Embedded Systems","parent_category_id":53,"slug":"embedded_systems","updated_at":"2015-09-20T01:36:24.000Z","id":73},"74":{"type":"Category","book_categories_count":153,"can_be_short":false,"created_at":"2015-09-20T01:36:52.000Z","description":"","full_name":"Computers and Programming \u002F Functional Programming","mature_content":false,"name":"Functional Programming","parent_category_id":53,"slug":"functional_programming","updated_at":"2015-09-20T01:36:52.000Z","id":74},"75":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2015-09-20T01:37:15.000Z","description":"","full_name":"Computers and Programming \u002F Functional Programming \u002F Haskell","mature_content":false,"name":"Haskell","parent_category_id":74,"slug":"haskell","updated_at":"2015-09-20T01:37:15.000Z","id":75},"76":{"type":"Category","book_categories_count":51,"can_be_short":false,"created_at":"2015-09-20T01:37:33.000Z","description":"","full_name":"Computers and Programming \u002F Graphics","mature_content":false,"name":"Graphics","parent_category_id":53,"slug":"graphics","updated_at":"2015-09-20T01:37:33.000Z","id":76},"77":{"type":"Category","book_categories_count":190,"can_be_short":false,"created_at":"2015-09-20T01:39:09.000Z","description":"","full_name":"Computers and Programming \u002F HTML","mature_content":false,"name":"HTML","parent_category_id":53,"slug":"html","updated_at":"2022-02-01T00:36:27.000Z","id":77},"78":{"type":"Category","book_categories_count":65,"can_be_short":false,"created_at":"2015-09-20T01:39:28.000Z","description":"","full_name":"Computers and Programming \u002F iOS","mature_content":false,"name":"iOS","parent_category_id":53,"slug":"ios","updated_at":"2022-02-01T00:38:49.000Z","id":78},"79":{"type":"Category","book_categories_count":42,"can_be_short":false,"created_at":"2015-09-20T01:40:24.000Z","description":"","full_name":"Computers and Programming \u002F iOS \u002F Swift","mature_content":false,"name":"Swift","parent_category_id":78,"slug":"swift","updated_at":"2015-09-20T01:40:24.000Z","id":79},"80":{"type":"Category","book_categories_count":274,"can_be_short":false,"created_at":"2015-09-20T01:40:41.000Z","description":"","full_name":"Computers and Programming \u002F Java","mature_content":false,"name":"Java","parent_category_id":53,"slug":"java","updated_at":"2015-09-20T01:40:41.000Z","id":80},"81":{"type":"Category","book_categories_count":52,"can_be_short":false,"created_at":"2015-09-20T01:41:12.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F AngularJS","mature_content":false,"name":"AngularJS","parent_category_id":55,"slug":"angularjs","updated_at":"2015-09-20T01:41:12.000Z","id":81},"82":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2015-09-20T01:41:26.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Backbone","mature_content":false,"name":"Backbone","parent_category_id":55,"slug":"backbone","updated_at":"2015-09-20T01:41:26.000Z","id":82},"83":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2015-09-20T01:41:54.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F D3.js","mature_content":false,"name":"D3.js","parent_category_id":55,"slug":"d3_js","updated_at":"2015-09-20T01:41:54.000Z","id":83},"84":{"type":"Category","book_categories_count":61,"can_be_short":false,"created_at":"2015-09-20T01:42:09.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F ES6","mature_content":false,"name":"ES6","parent_category_id":55,"slug":"es6","updated_at":"2022-02-01T00:37:07.000Z","id":84},"85":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2015-09-20T01:42:25.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Meteor","mature_content":false,"name":"Meteor","parent_category_id":55,"slug":"meteor","updated_at":"2022-02-01T00:37:35.000Z","id":85},"86":{"type":"Category","book_categories_count":126,"can_be_short":false,"created_at":"2015-09-20T01:43:00.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Node.js","mature_content":false,"name":"Node.js","parent_category_id":55,"slug":"node_js","updated_at":"2015-09-20T01:43:00.000Z","id":86},"87":{"type":"Category","book_categories_count":150,"can_be_short":false,"created_at":"2015-09-20T01:43:12.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F React","mature_content":false,"name":"React","parent_category_id":55,"slug":"react","updated_at":"2015-09-20T01:43:12.000Z","id":87},"88":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2015-09-20T01:52:29.000Z","description":"","full_name":"Computers and Programming \u002F Messaging","mature_content":false,"name":"Messaging","parent_category_id":53,"slug":"messaging","updated_at":"2015-09-20T01:52:29.000Z","id":88},"89":{"type":"Category","book_categories_count":2,"can_be_short":false,"created_at":"2015-09-20T01:52:47.000Z","description":"","full_name":"Computers and Programming \u002F Messaging \u002F RabbitMQ","mature_content":false,"name":"RabbitMQ","parent_category_id":88,"slug":"rabbitmq","updated_at":"2015-09-20T01:52:47.000Z","id":89},"90":{"type":"Category","book_categories_count":183,"can_be_short":false,"created_at":"2015-09-20T01:53:07.000Z","description":"","full_name":"Computers and Programming \u002F Networking","mature_content":false,"name":"Networking","parent_category_id":53,"slug":"networking","updated_at":"2015-09-20T01:53:07.000Z","id":90},"91":{"type":"Category","book_categories_count":42,"can_be_short":false,"created_at":"2015-09-20T01:53:28.000Z","description":"","full_name":"Computers and Programming \u002F PHP \u002F Symfony","mature_content":false,"name":"Symfony","parent_category_id":61,"slug":"symfony","updated_at":"2015-09-20T01:53:28.000Z","id":91},"92":{"type":"Category","book_categories_count":8,"can_be_short":false,"created_at":"2015-09-20T01:53:43.000Z","description":"","full_name":"Computers and Programming \u002F PHP \u002F Zend","mature_content":false,"name":"Zend","parent_category_id":61,"slug":"zend","updated_at":"2015-09-20T01:53:43.000Z","id":92},"93":{"type":"Category","book_categories_count":513,"can_be_short":false,"created_at":"2015-09-20T01:53:54.000Z","description":"","full_name":"Computers and Programming \u002F Python","mature_content":false,"name":"Python","parent_category_id":53,"slug":"python","updated_at":"2015-09-20T01:53:54.000Z","id":93},"94":{"type":"Category","book_categories_count":90,"can_be_short":false,"created_at":"2015-09-20T01:54:13.000Z","description":"","full_name":"Computers and Programming \u002F R","mature_content":false,"name":"R","parent_category_id":53,"slug":"r","updated_at":"2015-09-20T01:54:13.000Z","id":94},"95":{"type":"Category","book_categories_count":44,"can_be_short":false,"created_at":"2015-09-20T01:54:23.000Z","description":"","full_name":"Computers and Programming \u002F Ruby","mature_content":false,"name":"Ruby","parent_category_id":53,"slug":"ruby","updated_at":"2015-09-20T01:54:23.000Z","id":95},"96":{"type":"Category","book_categories_count":168,"can_be_short":false,"created_at":"2015-09-20T01:54:53.000Z","description":"","full_name":"Computers and Programming \u002F Ruby \u002F Ruby on Rails","mature_content":false,"name":"Ruby on Rails","parent_category_id":95,"slug":"ruby_on_rails","updated_at":"2015-09-20T01:54:53.000Z","id":96},"98":{"type":"Category","book_categories_count":308,"can_be_short":false,"created_at":"2015-09-20T01:56:12.000Z","description":"","full_name":"Computers and Programming \u002F Testing","mature_content":false,"name":"Testing","parent_category_id":53,"slug":"testing","updated_at":"2015-09-20T01:56:12.000Z","id":98},"99":{"type":"Category","book_categories_count":31,"can_be_short":false,"created_at":"2015-09-20T01:56:47.000Z","description":"","full_name":"Computers and Programming \u002F Software \u002F Version Control","mature_content":false,"name":"Version Control","parent_category_id":11,"slug":"version_control","updated_at":"2015-09-20T01:56:47.000Z","id":99},"100":{"type":"Category","book_categories_count":66,"can_be_short":false,"created_at":"2015-09-20T01:57:07.000Z","description":"","full_name":"Computers and Programming \u002F Software \u002F Version Control \u002F Git","mature_content":false,"name":"Git","parent_category_id":99,"slug":"git","updated_at":"2015-09-20T01:57:07.000Z","id":100},"101":{"type":"Category","book_categories_count":49,"can_be_short":false,"created_at":"2015-09-20T01:58:44.000Z","description":"","full_name":"Fiction \u002F Serial Fiction","mature_content":false,"name":"Serial Fiction","parent_category_id":6,"slug":"serial_fiction","updated_at":"2015-09-20T01:58:44.000Z","id":101},"102":{"type":"Category","book_categories_count":470,"can_be_short":false,"created_at":"2015-09-20T01:59:13.000Z","description":"","full_name":"Textbooks \u002F Education","mature_content":false,"name":"Education","parent_category_id":13,"slug":"education","updated_at":"2020-11-06T04:24:53.000Z","id":102},"103":{"type":"Category","book_categories_count":81,"can_be_short":false,"created_at":"2015-09-20T02:00:12.000Z","description":"","full_name":"Textbooks \u002F Engineering \u002F Systems Engineering","mature_content":false,"name":"Systems Engineering","parent_category_id":42,"slug":"systems_engineering","updated_at":"2015-09-20T02:00:12.000Z","id":103},"104":{"type":"Category","book_categories_count":43,"can_be_short":false,"created_at":"2015-09-20T02:00:35.000Z","description":"","full_name":"Non-Fiction \u002F Fine Arts","mature_content":false,"name":"Fine Arts","parent_category_id":59,"slug":"fine_arts","updated_at":"2020-11-06T04:24:52.000Z","id":104},"105":{"type":"Category","book_categories_count":42,"can_be_short":false,"created_at":"2015-09-20T02:01:23.000Z","description":"","full_name":"Textbooks \u002F Law","mature_content":false,"name":"Law","parent_category_id":13,"slug":"law","updated_at":"2020-11-06T04:24:53.000Z","id":105},"106":{"type":"Category","book_categories_count":104,"can_be_short":false,"created_at":"2015-09-20T02:01:41.000Z","description":"","full_name":"Textbooks \u002F Medicine","mature_content":false,"name":"Medicine","parent_category_id":13,"slug":"medicine","updated_at":"2020-11-06T04:24:53.000Z","id":106},"107":{"type":"Category","book_categories_count":88,"can_be_short":false,"created_at":"2015-09-20T02:02:51.000Z","description":"","full_name":"Non-Fiction \u002F Crafts and Hobbies","mature_content":false,"name":"Crafts and Hobbies","parent_category_id":59,"slug":"crafts_and_hobbies","updated_at":"2015-09-20T02:02:51.000Z","id":107},"108":{"type":"Category","book_categories_count":51,"can_be_short":false,"created_at":"2015-09-20T02:03:35.000Z","description":"","full_name":"Non-Fiction \u002F Design","mature_content":false,"name":"Design","parent_category_id":59,"slug":"design","updated_at":"2015-09-20T02:03:35.000Z","id":108},"109":{"type":"Category","book_categories_count":154,"can_be_short":false,"created_at":"2015-09-20T02:04:06.000Z","description":"","full_name":"Non-Fiction \u002F Entertainment","mature_content":false,"name":"Entertainment","parent_category_id":59,"slug":"entertainment","updated_at":"2015-09-20T02:04:06.000Z","id":109},"110":{"type":"Category","book_categories_count":114,"can_be_short":false,"created_at":"2015-09-20T02:04:30.000Z","description":"","full_name":"Non-Fiction \u002F Finance","mature_content":false,"name":"Finance","parent_category_id":59,"slug":"finance","updated_at":"2015-09-20T02:04:30.000Z","id":110},"111":{"type":"Category","book_categories_count":93,"can_be_short":false,"created_at":"2015-09-20T02:04:45.000Z","description":"","full_name":"Non-Fiction \u002F Games","mature_content":false,"name":"Games","parent_category_id":59,"slug":"games","updated_at":"2015-09-20T02:04:45.000Z","id":111},"112":{"type":"Category","book_categories_count":22,"can_be_short":false,"created_at":"2015-09-20T02:05:03.000Z","description":"","full_name":"Non-Fiction \u002F Outdoors","mature_content":false,"name":"Outdoors","parent_category_id":59,"slug":"outdoors","updated_at":"2015-09-20T02:05:03.000Z","id":112},"113":{"type":"Category","book_categories_count":103,"can_be_short":false,"created_at":"2015-09-20T02:05:14.000Z","description":"","full_name":"Non-Fiction \u002F Politics","mature_content":false,"name":"Politics","parent_category_id":59,"slug":"politics","updated_at":"2015-09-20T02:05:14.000Z","id":113},"114":{"type":"Category","book_categories_count":22,"can_be_short":false,"created_at":"2015-09-20T02:05:26.000Z","description":"","full_name":"Non-Fiction \u002F Regional","mature_content":false,"name":"Regional","parent_category_id":59,"slug":"regional","updated_at":"2015-09-20T02:05:26.000Z","id":114},"115":{"type":"Category","book_categories_count":94,"can_be_short":false,"created_at":"2015-09-20T02:06:41.000Z","description":"","full_name":"Textbooks \u002F Social Sciences","mature_content":false,"name":"Social Sciences","parent_category_id":13,"slug":"social_science","updated_at":"2020-11-06T04:24:53.000Z","id":115},"116":{"type":"Category","book_categories_count":49,"can_be_short":false,"created_at":"2015-09-20T02:07:09.000Z","description":"","full_name":"Textbooks \u002F Social Sciences \u002F Economics","mature_content":false,"name":"Economics","parent_category_id":115,"slug":"economics","updated_at":"2015-09-20T02:07:09.000Z","id":116},"117":{"type":"Category","book_categories_count":128,"can_be_short":false,"created_at":"2015-09-20T02:07:40.000Z","description":"","full_name":"Textbooks \u002F Social Sciences \u002F Psychology","mature_content":false,"name":"Psychology","parent_category_id":115,"slug":"psychology","updated_at":"2015-09-20T02:07:40.000Z","id":117},"118":{"type":"Category","book_categories_count":91,"can_be_short":false,"created_at":"2015-09-20T05:44:48.000Z","description":"","full_name":"Computers and Programming \u002F CSS","mature_content":false,"name":"CSS","parent_category_id":53,"slug":"css","updated_at":"2022-02-01T00:35:09.000Z","id":118},"119":{"type":"Category","book_categories_count":457,"can_be_short":false,"created_at":"2015-09-27T23:01:54.000Z","description":"","full_name":"Management \u002F Leadership","mature_content":false,"name":"Leadership","parent_category_id":1,"slug":"leadership","updated_at":"2015-09-27T23:01:54.000Z","id":119},"120":{"type":"Category","book_categories_count":190,"can_be_short":false,"created_at":"2015-09-27T23:02:06.000Z","description":"","full_name":"Management \u002F Consulting","mature_content":false,"name":"Consulting","parent_category_id":1,"slug":"consulting","updated_at":"2015-09-27T23:02:06.000Z","id":120},"121":{"type":"Category","book_categories_count":312,"can_be_short":false,"created_at":"2015-10-03T21:29:32.000Z","description":"","full_name":"Management \u002F Teamwork","mature_content":false,"name":"Teamwork","parent_category_id":1,"slug":"teamwork","updated_at":"2015-10-03T21:29:32.000Z","id":121},"122":{"type":"Category","book_categories_count":24,"can_be_short":false,"created_at":"2015-10-06T22:37:48.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Express","mature_content":false,"name":"Express","parent_category_id":55,"slug":"express","updated_at":"2015-10-06T22:38:25.000Z","id":122},"123":{"type":"Category","book_categories_count":7,"can_be_short":false,"created_at":"2015-10-06T22:48:24.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Ember","mature_content":false,"name":"Ember","parent_category_id":55,"slug":"ember","updated_at":"2015-10-06T22:48:24.000Z","id":123},"125":{"type":"Category","book_categories_count":48,"can_be_short":false,"created_at":"2015-10-06T23:10:54.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Ansible","mature_content":false,"name":"Ansible","parent_category_id":70,"slug":"ansible","updated_at":"2015-10-06T23:10:54.000Z","id":125},"126":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2015-10-06T23:13:22.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Vagrant","mature_content":false,"name":"Vagrant","parent_category_id":70,"slug":"vagrant","updated_at":"2015-10-06T23:13:22.000Z","id":126},"127":{"type":"Category","book_categories_count":48,"can_be_short":false,"created_at":"2015-10-26T19:31:05.000Z","description":"","full_name":"Computers and Programming \u002F Python \u002F Django","mature_content":false,"name":"Django","parent_category_id":93,"slug":"django","updated_at":"2015-10-26T19:31:05.000Z","id":127},"128":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2015-11-13T19:29:30.000Z","description":"","full_name":"Non-Fiction \u002F Home & Garden","mature_content":false,"name":"Home & Garden","parent_category_id":59,"slug":"home_and_garden","updated_at":"2020-12-09T21:38:04.000Z","id":128},"129":{"type":"Category","book_categories_count":49,"can_be_short":false,"created_at":"2016-01-18T22:03:01.000Z","description":"","full_name":"Computers and Programming \u002F Ecommerce","mature_content":false,"name":"Ecommerce","parent_category_id":53,"slug":"ecommerce","updated_at":"2016-01-20T23:29:21.000Z","id":129},"130":{"type":"Category","book_categories_count":74,"can_be_short":false,"created_at":"2016-01-18T22:03:28.000Z","description":"","full_name":"Computers and Programming \u002F .NET \u002F ASP.NET","mature_content":false,"name":"ASP.NET","parent_category_id":131,"slug":"aspnet","updated_at":"2016-01-20T23:30:27.000Z","id":130},"131":{"type":"Category","book_categories_count":138,"can_be_short":false,"created_at":"2016-01-20T23:30:05.000Z","description":"","full_name":"Computers and Programming \u002F .NET","mature_content":false,"name":".NET","parent_category_id":53,"slug":"dotnet","updated_at":"2016-01-20T23:30:05.000Z","id":131},"132":{"type":"Category","book_categories_count":36,"can_be_short":false,"created_at":"2016-02-15T17:44:02.000Z","description":"","full_name":"Computers and Programming \u002F Scala","mature_content":false,"name":"Scala","parent_category_id":53,"slug":"scala","updated_at":"2016-02-15T17:44:02.000Z","id":132},"133":{"type":"Category","book_categories_count":668,"can_be_short":false,"created_at":"2016-02-15T17:44:33.000Z","description":"","full_name":"Computers and Programming \u002F Web Development","mature_content":false,"name":"Web Development","parent_category_id":53,"slug":"web_development","updated_at":"2016-02-15T17:44:55.000Z","id":133},"136":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2016-02-27T19:51:08.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F PostgreSQL","mature_content":false,"name":"PostgreSQL","parent_category_id":66,"slug":"postgresql","updated_at":"2016-02-27T19:51:08.000Z","id":136},"137":{"type":"Category","book_categories_count":351,"can_be_short":false,"created_at":"2016-02-28T05:36:58.000Z","description":"","full_name":"Computers and Programming \u002F Computer Security","mature_content":false,"name":"Computer Security","parent_category_id":53,"slug":"computer_security","updated_at":"2020-11-12T06:14:20.000Z","id":137},"138":{"type":"Category","book_categories_count":716,"can_be_short":false,"created_at":"2016-03-16T02:58:25.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture","mature_content":false,"name":"Software Architecture","parent_category_id":53,"slug":"software_architecture","updated_at":"2020-12-09T21:38:04.000Z","id":138},"139":{"type":"Category","book_categories_count":728,"can_be_short":false,"created_at":"2016-03-16T02:58:54.000Z","description":"","full_name":"Computers and Programming \u002F Software Engineering","mature_content":false,"name":"Software Engineering","parent_category_id":53,"slug":"software_engineering","updated_at":"2020-12-09T21:38:04.000Z","id":139},"140":{"type":"Category","book_categories_count":32,"can_be_short":false,"created_at":"2016-03-17T02:20:44.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F SQL Server","mature_content":false,"name":"SQL Server","parent_category_id":66,"slug":"sql_server","updated_at":"2020-12-09T21:38:04.000Z","id":140},"141":{"type":"Category","book_categories_count":17,"can_be_short":false,"created_at":"2016-03-17T02:20:59.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F Oracle","mature_content":false,"name":"Oracle","parent_category_id":66,"slug":"oracle","updated_at":"2016-03-17T18:31:02.000Z","id":141},"142":{"type":"Category","book_categories_count":91,"can_be_short":false,"created_at":"2016-03-17T02:21:18.000Z","description":"","full_name":"Computers and Programming \u002F System Integration","mature_content":false,"name":"System Integration","parent_category_id":53,"slug":"system_integration","updated_at":"2020-12-09T21:38:04.000Z","id":142},"143":{"type":"Category","book_categories_count":121,"can_be_short":false,"created_at":"2016-03-17T02:21:49.000Z","description":"","full_name":"Computers and Programming \u002F APIs","mature_content":false,"name":"APIs","parent_category_id":53,"slug":"apis","updated_at":"2016-03-17T02:21:49.000Z","id":143},"144":{"type":"Category","book_categories_count":51,"can_be_short":false,"created_at":"2016-03-31T17:21:27.000Z","description":"","full_name":"Fiction \u002F Paranormal","mature_content":false,"name":"Paranormal","parent_category_id":6,"slug":"paranormal","updated_at":"2016-03-31T17:21:27.000Z","id":144},"145":{"type":"Category","book_categories_count":148,"can_be_short":false,"created_at":"2016-04-06T21:54:32.000Z","description":"","full_name":"Non-Fiction \u002F Reference","mature_content":false,"name":"Reference","parent_category_id":59,"slug":"reference","updated_at":"2020-11-12T06:14:23.000Z","id":145},"146":{"type":"Category","book_categories_count":12,"can_be_short":false,"created_at":"2016-04-12T22:03:10.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Atheism","mature_content":false,"name":"Atheism","parent_category_id":10,"slug":"atheism","updated_at":"2016-04-12T22:03:10.000Z","id":146},"147":{"type":"Category","book_categories_count":83,"can_be_short":false,"created_at":"2016-04-21T18:40:40.000Z","description":"","full_name":"Non-Fiction \u002F Memoir","mature_content":false,"name":"Memoir","parent_category_id":59,"slug":"memoir","updated_at":"2016-04-21T18:40:40.000Z","id":147},"148":{"type":"Category","book_categories_count":354,"can_be_short":false,"created_at":"2016-04-26T03:13:14.000Z","description":"","full_name":"Non-Fiction \u002F Self-Help \u002F Personal Transformation","mature_content":false,"name":"Personal Transformation","parent_category_id":14,"slug":"personal_transformation","updated_at":"2020-11-12T06:14:23.000Z","id":148},"149":{"type":"Category","book_categories_count":12,"can_be_short":false,"created_at":"2016-06-03T17:11:49.000Z","description":"","full_name":"Non-Fiction \u002F Style and Esthetics","mature_content":false,"name":"Style and Esthetics","parent_category_id":59,"slug":"style_and_esthetics","updated_at":"2020-11-06T04:24:52.000Z","id":149},"150":{"type":"Category","book_categories_count":149,"can_be_short":false,"created_at":"2016-06-07T01:12:37.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Physics","mature_content":false,"name":"Physics","parent_category_id":46,"slug":"physics","updated_at":"2016-06-07T01:12:37.000Z","id":150},"151":{"type":"Category","book_categories_count":28,"can_be_short":false,"created_at":"2016-06-07T01:12:50.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Chemistry","mature_content":false,"name":"Chemistry","parent_category_id":46,"slug":"chemistry","updated_at":"2016-06-07T01:12:50.000Z","id":151},"152":{"type":"Category","book_categories_count":52,"can_be_short":false,"created_at":"2016-06-07T01:13:01.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Biology","mature_content":false,"name":"Biology","parent_category_id":46,"slug":"biology","updated_at":"2016-06-07T01:13:01.000Z","id":152},"153":{"type":"Category","book_categories_count":40,"can_be_short":false,"created_at":"2016-06-07T01:13:13.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Ecology","mature_content":false,"name":"Ecology","parent_category_id":46,"slug":"ecology","updated_at":"2016-06-07T01:13:13.000Z","id":153},"154":{"type":"Category","book_categories_count":18,"can_be_short":false,"created_at":"2016-06-07T01:16:41.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Earth and Ocean Sciences","mature_content":false,"name":"Earth and Ocean Sciences","parent_category_id":46,"slug":"earth_and_ocean_sciences","updated_at":"2016-06-07T01:16:41.000Z","id":154},"155":{"type":"Category","book_categories_count":49,"can_be_short":false,"created_at":"2016-06-07T01:21:01.000Z","description":"","full_name":"Management \u002F Green Business and Sustainability","mature_content":false,"name":"Green Business and Sustainability","parent_category_id":1,"slug":"green_business_and_sustainability","updated_at":"2016-06-07T01:21:01.000Z","id":155},"156":{"type":"Category","book_categories_count":45,"can_be_short":false,"created_at":"2016-06-09T18:07:29.000Z","description":"","full_name":"Textbooks \u002F Social Sciences \u002F Linguistics","mature_content":false,"name":"Linguistics","parent_category_id":115,"slug":"linguistics","updated_at":"2020-11-06T04:24:53.000Z","id":156},"157":{"type":"Category","book_categories_count":10,"can_be_short":false,"created_at":"2016-06-14T00:52:41.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Aurelia","mature_content":false,"name":"Aurelia","parent_category_id":55,"slug":"aurelia","updated_at":"2016-06-14T00:52:41.000Z","id":157},"158":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2016-06-15T16:07:33.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F Azure DocumentDB","mature_content":false,"name":"Azure DocumentDB","parent_category_id":66,"slug":"azure_documentdb","updated_at":"2016-06-15T16:07:33.000Z","id":158},"159":{"type":"Category","book_categories_count":95,"can_be_short":false,"created_at":"2016-06-28T22:14:46.000Z","description":"","full_name":"Non-Fiction \u002F Food & Drink","mature_content":false,"name":"Food & Drink","parent_category_id":59,"slug":"food_and_drink","updated_at":"2016-06-28T22:14:46.000Z","id":159},"160":{"type":"Category","book_categories_count":21,"can_be_short":false,"created_at":"2016-06-28T22:15:06.000Z","description":"","full_name":"Non-Fiction \u002F Food & Drink \u002F Wine","mature_content":false,"name":"Wine","parent_category_id":159,"slug":"wine","updated_at":"2016-06-28T22:15:06.000Z","id":160},"161":{"type":"Category","book_categories_count":86,"can_be_short":false,"created_at":"2016-07-07T23:48:22.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Vue.js","mature_content":false,"name":"Vue.js","parent_category_id":55,"slug":"vuejs","updated_at":"2022-02-01T00:33:38.000Z","id":161},"162":{"type":"Category","book_categories_count":19,"can_be_short":false,"created_at":"2016-08-18T19:58:29.000Z","description":"","full_name":"Computers and Programming \u002F Embedded Systems \u002F Arduino","mature_content":false,"name":"Arduino","parent_category_id":73,"slug":"arduino","updated_at":"2016-08-18T19:58:29.000Z","id":162},"163":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2016-08-18T19:59:21.000Z","description":"","full_name":"Non-Fiction \u002F Crafts and Hobbies \u002F Model Railroading","mature_content":false,"name":"Model Railroading","parent_category_id":107,"slug":"moderailroading","updated_at":"2016-08-18T19:59:21.000Z","id":163},"164":{"type":"Category","book_categories_count":84,"can_be_short":false,"created_at":"2016-09-13T02:36:31.000Z","description":"","full_name":"Computers and Programming \u002F Computer Hardware","mature_content":false,"name":"Computer Hardware","parent_category_id":53,"slug":"computer_hardware","updated_at":"2020-11-12T06:14:20.000Z","id":164},"165":{"type":"Category","book_categories_count":32,"can_be_short":false,"created_at":"2016-09-13T02:37:01.000Z","description":"","full_name":"Computers and Programming \u002F Computer Hardware \u002F Raspberry Pi","mature_content":false,"name":"Raspberry Pi","parent_category_id":164,"slug":"raspberry_pi","updated_at":"2016-09-13T02:39:18.000Z","id":165},"166":{"type":"Category","book_categories_count":99,"can_be_short":false,"created_at":"2016-09-13T02:37:34.000Z","description":"","full_name":"Computers and Programming \u002F Internet of Things","mature_content":false,"name":"Internet of Things","parent_category_id":53,"slug":"internet_of_things","updated_at":"2020-11-12T06:14:20.000Z","id":166},"167":{"type":"Category","book_categories_count":46,"can_be_short":false,"created_at":"2016-09-13T02:37:53.000Z","description":"","full_name":"Computers and Programming \u002F Robotics","mature_content":false,"name":"Robotics","parent_category_id":53,"slug":"robotics","updated_at":"2020-11-12T06:14:20.000Z","id":167},"168":{"type":"Category","book_categories_count":71,"can_be_short":false,"created_at":"2016-09-27T21:42:44.000Z","description":"","full_name":"Computers and Programming \u002F PowerShell","mature_content":false,"name":"PowerShell","parent_category_id":53,"slug":"PowerShell","updated_at":"2016-09-27T21:42:44.000Z","id":168},"169":{"type":"Category","book_categories_count":73,"can_be_short":false,"created_at":"2016-10-22T00:31:08.000Z","description":"","full_name":"Management \u002F Sales","mature_content":false,"name":"Sales","parent_category_id":1,"slug":"sales","updated_at":"2016-10-22T00:31:08.000Z","id":169},"170":{"type":"Category","book_categories_count":31,"can_be_short":false,"created_at":"2016-10-22T00:31:30.000Z","description":"","full_name":"Management \u002F Presentations","mature_content":false,"name":"Presentations","parent_category_id":1,"slug":"presentations","updated_at":"2016-10-22T00:31:30.000Z","id":170},"171":{"type":"Category","book_categories_count":198,"can_be_short":false,"created_at":"2016-10-26T08:34:57.000Z","description":"","full_name":"Management \u002F Career","mature_content":false,"name":"Career","parent_category_id":1,"slug":"career","updated_at":"2016-10-26T08:34:57.000Z","id":171},"172":{"type":"Category","book_categories_count":6,"can_be_short":false,"created_at":"2016-11-28T15:27:58.000Z","description":"","full_name":"Computers and Programming \u002F MATLAB","mature_content":false,"name":"MATLAB","parent_category_id":53,"slug":"MATLAB","updated_at":"2022-02-01T00:37:56.000Z","id":172},"175":{"type":"Category","book_categories_count":10,"can_be_short":false,"created_at":"2016-12-21T02:01:03.000Z","description":"","full_name":"Textbooks \u002F Engineering \u002F Biomedical Engineering","mature_content":false,"name":"Biomedical Engineering","parent_category_id":42,"slug":"biomedical_engineering","updated_at":"2020-12-09T21:38:04.000Z","id":175},"176":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2016-12-21T02:01:24.000Z","description":"","full_name":"Textbooks \u002F Engineering \u002F Biomedical Engineering \u002F Biomaterials","mature_content":false,"name":"Biomaterials","parent_category_id":175,"slug":"biomaterials","updated_at":"2016-12-21T02:01:24.000Z","id":176},"177":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2016-12-21T02:02:01.000Z","description":"","full_name":"Textbooks \u002F Engineering \u002F Biomedical Engineering \u002F Implants","mature_content":false,"name":"Implants","parent_category_id":175,"slug":"implants","updated_at":"2016-12-21T02:02:01.000Z","id":177},"178":{"type":"Category","book_categories_count":2,"can_be_short":false,"created_at":"2016-12-21T02:02:21.000Z","description":"","full_name":"Textbooks \u002F Engineering \u002F Biomedical Engineering \u002F Devices","mature_content":false,"name":"Devices","parent_category_id":175,"slug":"devices","updated_at":"2016-12-21T02:02:21.000Z","id":178},"179":{"type":"Category","book_categories_count":5,"can_be_short":false,"created_at":"2017-04-11T03:52:22.000Z","description":"","full_name":"Textbooks \u002F Gender Research","mature_content":false,"name":"Gender Research","parent_category_id":13,"slug":"gender_research","updated_at":"2020-11-06T04:24:53.000Z","id":179},"180":{"type":"Category","book_categories_count":65,"can_be_short":false,"created_at":"2017-04-22T21:35:57.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Biblical Theology","mature_content":false,"name":"Biblical Theology","parent_category_id":10,"slug":"biblical_theology","updated_at":"2020-12-09T21:38:04.000Z","id":180},"181":{"type":"Category","book_categories_count":21,"can_be_short":false,"created_at":"2017-05-19T19:14:25.000Z","description":"","full_name":"Computers and Programming \u002F Perl","mature_content":false,"name":"Perl","parent_category_id":53,"slug":"perl","updated_at":"2017-05-19T19:14:25.000Z","id":181},"182":{"type":"Category","book_categories_count":109,"can_be_short":false,"created_at":"2017-07-27T22:54:09.000Z","description":"","full_name":"Computers and Programming \u002F Game Development","mature_content":false,"name":"Game Development","parent_category_id":53,"slug":"game_development","updated_at":"2017-07-27T22:54:09.000Z","id":182},"184":{"type":"Category","book_categories_count":57,"can_be_short":false,"created_at":"2017-08-14T06:43:05.000Z","description":"","full_name":"Computers and Programming \u002F Cryptography","mature_content":false,"name":"Cryptography","parent_category_id":53,"slug":"cryptography","updated_at":"2017-08-14T06:43:05.000Z","id":184},"185":{"type":"Category","book_categories_count":73,"can_be_short":false,"created_at":"2017-09-20T13:33:47.000Z","description":"","full_name":"Computers and Programming \u002F Go","mature_content":false,"name":"Go","parent_category_id":53,"slug":"go","updated_at":"2017-09-20T13:33:47.000Z","id":185},"186":{"type":"Category","book_categories_count":20,"can_be_short":false,"created_at":"2017-10-21T17:00:31.000Z","description":"","full_name":"Computers and Programming \u002F Graph Design","mature_content":false,"name":"Graph Design","parent_category_id":53,"slug":"graph_design","updated_at":"2017-10-21T17:00:31.000Z","id":186},"187":{"type":"Category","book_categories_count":25,"can_be_short":false,"created_at":"2017-10-21T17:03:43.000Z","description":"","full_name":"Textbooks \u002F Computer Science \u002F Graph Theory","mature_content":false,"name":"Graph Theory","parent_category_id":43,"slug":"graph_theory","updated_at":"2017-10-21T17:03:43.000Z","id":187},"188":{"type":"Category","book_categories_count":415,"can_be_short":false,"created_at":"2017-10-23T18:51:00.000Z","description":"","full_name":"Computers and Programming \u002F Cloud Computing","mature_content":false,"name":"Cloud Computing","parent_category_id":53,"slug":"cloud_computing","updated_at":"2020-11-12T06:14:20.000Z","id":188},"189":{"type":"Category","book_categories_count":113,"can_be_short":false,"created_at":"2017-10-23T18:51:43.000Z","description":"","full_name":"Computers and Programming \u002F Cloud Computing \u002F Amazon Web Services","mature_content":false,"name":"Amazon Web Services","parent_category_id":188,"slug":"amazon_web_services","updated_at":"2017-10-23T18:51:43.000Z","id":189},"190":{"type":"Category","book_categories_count":32,"can_be_short":false,"created_at":"2017-10-23T18:52:11.000Z","description":"","full_name":"Computers and Programming \u002F Cloud Computing \u002F Google Cloud Platform","mature_content":false,"name":"Google Cloud Platform","parent_category_id":188,"slug":"google_cloud_platform","updated_at":"2017-10-23T18:52:11.000Z","id":190},"191":{"type":"Category","book_categories_count":93,"can_be_short":false,"created_at":"2017-10-23T18:52:35.000Z","description":"","full_name":"Computers and Programming \u002F Cloud Computing \u002F Microsoft Azure","mature_content":false,"name":"Microsoft Azure","parent_category_id":188,"slug":"microsoft_azure","updated_at":"2017-10-23T18:52:35.000Z","id":191},"192":{"type":"Category","book_categories_count":41,"can_be_short":false,"created_at":"2017-12-06T02:27:57.000Z","description":"","full_name":"Computers and Programming \u002F Refactoring","mature_content":false,"name":"Refactoring","parent_category_id":53,"slug":"refactoring","updated_at":"2017-12-06T02:27:57.000Z","id":192},"193":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2018-02-21T20:21:05.000Z","description":"","full_name":"Non-Fiction \u002F Dance","mature_content":false,"name":"Dance","parent_category_id":59,"slug":"dance","updated_at":"2020-11-06T04:24:52.000Z","id":193},"194":{"type":"Category","book_categories_count":81,"can_be_short":false,"created_at":"2018-03-10T16:36:58.000Z","description":"","full_name":"Management \u002F Engineering Management","mature_content":false,"name":"Engineering Management","parent_category_id":1,"slug":"engineering_management","updated_at":"2020-11-06T04:24:47.000Z","id":194},"195":{"type":"Category","book_categories_count":101,"can_be_short":false,"created_at":"2018-04-10T00:27:45.000Z","description":"","full_name":"Management \u002F Business Architecture","mature_content":false,"name":"Business Architecture","parent_category_id":1,"slug":"business_architecture","updated_at":"2020-12-09T21:38:04.000Z","id":195},"196":{"type":"Category","book_categories_count":77,"can_be_short":false,"created_at":"2018-04-10T00:28:08.000Z","description":"","full_name":"Management \u002F Enterprise Management","mature_content":false,"name":"Enterprise Management","parent_category_id":1,"slug":"enterprise_management","updated_at":"2020-12-09T21:38:04.000Z","id":196},"197":{"type":"Category","book_categories_count":178,"can_be_short":false,"created_at":"2018-04-10T00:28:41.000Z","description":"","full_name":"Management \u002F Enterprise Management \u002F Enterprise Architecture","mature_content":false,"name":"Enterprise Architecture","parent_category_id":196,"slug":"enterprise_architecture","updated_at":"2020-12-09T21:38:04.000Z","id":197},"198":{"type":"Category","book_categories_count":129,"can_be_short":false,"created_at":"2018-04-10T00:29:06.000Z","description":"","full_name":"Management \u002F Enterprise Management \u002F Agile Enterprise","mature_content":false,"name":"Agile Enterprise","parent_category_id":196,"slug":"agile_enterprise","updated_at":"2020-12-09T21:38:04.000Z","id":198},"199":{"type":"Category","book_categories_count":95,"can_be_short":false,"created_at":"2018-04-10T00:29:35.000Z","description":"","full_name":"Management \u002F Enterprise Management \u002F Business and IT Alignment","mature_content":false,"name":"Business and IT Alignment","parent_category_id":196,"slug":"business_it_alignment","updated_at":"2020-12-09T21:38:04.000Z","id":199},"200":{"type":"Category","book_categories_count":20,"can_be_short":false,"created_at":"2018-04-10T00:30:06.000Z","description":"","full_name":"Management \u002F Modular Business Models","mature_content":false,"name":"Modular Business Models","parent_category_id":1,"slug":"modular_business_models","updated_at":"2020-12-09T21:38:04.000Z","id":200},"202":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2018-04-10T00:31:12.000Z","description":"","full_name":"Management \u002F Enterprise Management \u002F Normalized Enterprise ","mature_content":false,"name":"Normalized Enterprise ","parent_category_id":196,"slug":"normalized_enterprise","updated_at":"2020-12-09T21:38:04.000Z","id":202},"203":{"type":"Category","book_categories_count":48,"can_be_short":false,"created_at":"2018-04-17T23:42:06.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture \u002F Event-Driven Architecture","mature_content":false,"name":"Event-Driven Architecture","parent_category_id":138,"slug":"event_driven_architecture","updated_at":"2020-12-09T21:38:04.000Z","id":203},"204":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2018-04-17T23:42:32.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture \u002F Actor Model","mature_content":false,"name":"Actor Model","parent_category_id":138,"slug":"actor_model","updated_at":"2020-12-09T21:38:04.000Z","id":204},"205":{"type":"Category","book_categories_count":91,"can_be_short":false,"created_at":"2018-04-17T23:42:55.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture \u002F Distributed Systems","mature_content":false,"name":"Distributed Systems","parent_category_id":138,"slug":"distributed_systems","updated_at":"2020-12-09T21:38:04.000Z","id":205},"206":{"type":"Category","book_categories_count":18,"can_be_short":false,"created_at":"2018-04-17T23:43:16.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture \u002F Reactive","mature_content":false,"name":"Reactive","parent_category_id":138,"slug":"Reactive","updated_at":"2020-11-06T04:24:52.000Z","id":206},"207":{"type":"Category","book_categories_count":44,"can_be_short":false,"created_at":"2018-04-17T23:44:20.000Z","description":"","full_name":"Computers and Programming \u002F Software Architecture \u002F Resiliency","mature_content":false,"name":"Resiliency","parent_category_id":138,"slug":"resiliency","updated_at":"2020-11-06T04:24:52.000Z","id":207},"208":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2018-04-17T23:44:41.000Z","description":"","full_name":"Computers and Programming \u002F Messaging \u002F Message-Driven Design","mature_content":false,"name":"Message-Driven Design","parent_category_id":88,"slug":"message_driven","updated_at":"2020-12-09T21:38:04.000Z","id":208},"209":{"type":"Category","book_categories_count":86,"can_be_short":false,"created_at":"2018-06-02T01:00:39.000Z","description":"","full_name":"Computers and Programming \u002F Technical Communication","mature_content":false,"name":"Technical Communication","parent_category_id":53,"slug":"technical_communication","updated_at":"2020-12-09T21:38:04.000Z","id":209},"210":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2018-06-04T20:53:19.000Z","description":"","full_name":"Management \u002F Lean Six Sigma","mature_content":false,"name":"Lean Six Sigma","parent_category_id":1,"slug":"lean_six_sigma","updated_at":"2020-12-09T21:38:04.000Z","id":210},"211":{"type":"Category","book_categories_count":153,"can_be_short":false,"created_at":"2018-06-04T20:53:45.000Z","description":"","full_name":"Management \u002F Innovation Management","mature_content":false,"name":"Innovation Management","parent_category_id":1,"slug":"innovation_management","updated_at":"2020-12-09T21:38:04.000Z","id":211},"212":{"type":"Category","book_categories_count":93,"can_be_short":false,"created_at":"2018-06-04T20:54:05.000Z","description":"","full_name":"Management \u002F Quality Management","mature_content":false,"name":"Quality Management","parent_category_id":1,"slug":"quality_management","updated_at":"2020-12-09T21:38:04.000Z","id":212},"213":{"type":"Category","book_categories_count":246,"can_be_short":false,"created_at":"2018-06-04T20:54:23.000Z","description":"","full_name":"Management \u002F Product Management","mature_content":false,"name":"Product Management","parent_category_id":1,"slug":"product_management","updated_at":"2020-12-09T21:38:04.000Z","id":213},"214":{"type":"Category","book_categories_count":248,"can_be_short":false,"created_at":"2018-06-07T20:26:09.000Z","description":"","full_name":"Non-Fiction \u002F Writing and Publishing","mature_content":false,"name":"Writing and Publishing","parent_category_id":59,"slug":"writing_and_publishing","updated_at":"2020-12-09T21:38:04.000Z","id":214},"215":{"type":"Category","book_categories_count":650,"can_be_short":false,"created_at":"2018-06-13T00:34:24.000Z","description":"","full_name":"Computers and Programming \u002F Artificial Intelligence","mature_content":false,"name":"Artificial Intelligence","parent_category_id":53,"slug":"ai","updated_at":"2020-11-12T06:14:20.000Z","id":215},"216":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2018-06-16T01:21:17.000Z","description":"","full_name":"Non-Fiction \u002F Pet Care","mature_content":false,"name":"Pet Care","parent_category_id":59,"slug":"pet_care","updated_at":"2020-12-09T21:38:04.000Z","id":216},"217":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2018-06-17T05:38:51.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Extraterrestrials","mature_content":false,"name":"Extraterrestrials","parent_category_id":10,"slug":"extraterrestrials","updated_at":"2018-06-17T05:38:51.000Z","id":217},"218":{"type":"Category","book_categories_count":110,"can_be_short":false,"created_at":"2018-06-23T23:52:33.000Z","description":"","full_name":"Computers and Programming \u002F .NET \u002F C#","mature_content":false,"name":"C#","parent_category_id":131,"slug":"c_sharp","updated_at":"2020-12-09T21:38:04.000Z","id":218},"219":{"type":"Category","book_categories_count":19,"can_be_short":false,"created_at":"2018-08-13T23:33:34.000Z","description":"","full_name":"Computers and Programming \u002F Elixir","mature_content":false,"name":"Elixir","parent_category_id":53,"slug":"elixir","updated_at":"2018-08-13T23:33:34.000Z","id":219},"220":{"type":"Category","book_categories_count":8,"can_be_short":false,"created_at":"2018-08-14T20:58:08.000Z","description":"","full_name":"Computers and Programming \u002F Smart Home","mature_content":false,"name":"Smart Home","parent_category_id":53,"slug":"smart_home","updated_at":"2020-12-09T21:38:04.000Z","id":220},"221":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2018-08-14T20:58:31.000Z","description":"","full_name":"Computers and Programming \u002F Home Automation","mature_content":false,"name":"Home Automation","parent_category_id":53,"slug":"home_automation","updated_at":"2020-12-09T21:38:04.000Z","id":221},"222":{"type":"Category","book_categories_count":148,"can_be_short":false,"created_at":"2018-09-27T20:12:19.000Z","description":"","full_name":"Computers and Programming \u002F Testing \u002F Automated Software Testing","mature_content":false,"name":"Automated Software Testing","parent_category_id":98,"slug":"automated_software_testing","updated_at":"2020-12-09T21:38:04.000Z","id":222},"223":{"type":"Category","book_categories_count":113,"can_be_short":false,"created_at":"2018-10-20T22:19:28.000Z","description":"","full_name":"Management \u002F Business Analysis","mature_content":false,"name":"Business Analysis","parent_category_id":1,"slug":"business_analysis","updated_at":"2020-12-09T21:38:04.000Z","id":223},"224":{"type":"Category","book_categories_count":38,"can_be_short":false,"created_at":"2018-10-28T23:24:42.000Z","description":"","full_name":"Computers and Programming \u002F Ethics & Technology","mature_content":false,"name":"Ethics & Technology","parent_category_id":53,"slug":"ethics_technology","updated_at":"2020-12-09T21:38:04.000Z","id":224},"225":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2018-10-28T23:26:28.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Ext JS","mature_content":false,"name":"Ext JS","parent_category_id":55,"slug":"ext_js","updated_at":"2020-12-09T21:38:04.000Z","id":225},"226":{"type":"Category","book_categories_count":119,"can_be_short":false,"created_at":"2018-11-15T04:05:40.000Z","description":"","full_name":"Management \u002F Organizational Psychology","mature_content":false,"name":"Organizational Psychology","parent_category_id":1,"slug":"organizational_psychology","updated_at":"2020-12-09T21:38:04.000Z","id":226},"227":{"type":"Category","book_categories_count":27,"can_be_short":false,"created_at":"2018-11-28T17:57:54.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Astronomy and Space","mature_content":false,"name":"Astronomy and Space","parent_category_id":46,"slug":"astronomy_and_space","updated_at":"2020-12-09T21:38:06.000Z","id":227},"228":{"type":"Category","book_categories_count":60,"can_be_short":false,"created_at":"2018-12-07T21:03:02.000Z","description":"","full_name":"Non-Fiction \u002F Investment","mature_content":false,"name":"Investment","parent_category_id":59,"slug":"investment","updated_at":"2020-11-06T04:24:52.000Z","id":228},"229":{"type":"Category","book_categories_count":43,"can_be_short":false,"created_at":"2018-12-07T21:03:27.000Z","description":"","full_name":"Non-Fiction \u002F Investment \u002F Cryptocurrency","mature_content":false,"name":"Cryptocurrency","parent_category_id":228,"slug":"cryptocurrency","updated_at":"2018-12-07T21:03:27.000Z","id":229},"230":{"type":"Category","book_categories_count":203,"can_be_short":false,"created_at":"2018-12-30T19:49:40.000Z","description":"","full_name":"Computers and Programming \u002F Machine Learning","mature_content":false,"name":"Machine Learning","parent_category_id":53,"slug":"machine_learning","updated_at":"2020-12-09T21:38:06.000Z","id":230},"231":{"type":"Category","book_categories_count":31,"can_be_short":false,"created_at":"2019-03-16T23:09:18.000Z","description":"","full_name":"Textbooks \u002F Foreign Language Practice & Learning","mature_content":false,"name":"Foreign Language Practice & Learning","parent_category_id":13,"slug":"foreign_language_practice_learning","updated_at":"2020-12-09T21:38:06.000Z","id":231},"232":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2019-04-21T06:55:48.000Z","description":"","full_name":"Computers and Programming \u002F Groovy","mature_content":false,"name":"Groovy","parent_category_id":53,"slug":"groovy","updated_at":"2019-04-21T06:55:48.000Z","id":232},"233":{"type":"Category","book_categories_count":14,"can_be_short":false,"created_at":"2019-04-21T06:56:08.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Jenkins","mature_content":false,"name":"Jenkins","parent_category_id":70,"slug":"jenkins","updated_at":"2019-04-21T06:56:08.000Z","id":233},"234":{"type":"Category","book_categories_count":22,"can_be_short":false,"created_at":"2019-04-25T18:16:56.000Z","description":"","full_name":"Textbooks \u002F Sciences \u002F Neuroscience","mature_content":false,"name":"Neuroscience","parent_category_id":46,"slug":"neuroscience","updated_at":"2020-11-06T04:24:53.000Z","id":234},"235":{"type":"Category","book_categories_count":42,"can_be_short":false,"created_at":"2019-04-25T18:17:18.000Z","description":"","full_name":"Textbooks \u002F Social Sciences \u002F Psychology \u002F Psychotherapy","mature_content":false,"name":"Psychotherapy","parent_category_id":117,"slug":"psychotherapy","updated_at":"2020-11-06T04:24:53.000Z","id":235},"236":{"type":"Category","book_categories_count":95,"can_be_short":false,"created_at":"2019-04-29T20:42:12.000Z","description":"","full_name":"Management \u002F Life Coaching","mature_content":false,"name":"Life Coaching","parent_category_id":1,"slug":"life_coaching","updated_at":"2020-12-09T21:38:06.000Z","id":236},"237":{"type":"Category","book_categories_count":74,"can_be_short":false,"created_at":"2019-04-29T20:42:36.000Z","description":"","full_name":"Management \u002F Executive Coaching","mature_content":false,"name":"Executive Coaching","parent_category_id":1,"slug":"executive_coaching","updated_at":"2020-12-09T21:38:06.000Z","id":237},"238":{"type":"Category","book_categories_count":107,"can_be_short":false,"created_at":"2019-05-16T02:39:35.000Z","description":"","full_name":"Non-Fiction \u002F Writing and Publishing \u002F Self-Publishing","mature_content":false,"name":"Self-Publishing","parent_category_id":214,"slug":"self_publishing","updated_at":"2020-12-09T21:38:06.000Z","id":238},"239":{"type":"Category","book_categories_count":43,"can_be_short":false,"created_at":"2019-10-25T15:14:42.000Z","description":"","full_name":"Computers and Programming \u002F Kotlin","mature_content":false,"name":"Kotlin","parent_category_id":53,"slug":"kotlin","updated_at":"2019-10-25T15:14:42.000Z","id":239},"240":{"type":"Category","book_categories_count":6,"can_be_short":false,"created_at":"2020-01-10T20:57:18.000Z","description":"","full_name":"Computers and Programming \u002F Software \u002F Animation","mature_content":false,"name":"Animation","parent_category_id":11,"slug":"animation","updated_at":"2020-12-03T21:16:05.000Z","id":240},"241":{"type":"Category","book_categories_count":290,"can_be_short":false,"created_at":"2020-02-08T20:50:11.000Z","description":"","full_name":"Textbooks \u002F Mathematics","mature_content":false,"name":"Mathematics","parent_category_id":13,"slug":"mathematics","updated_at":"2020-11-06T04:24:53.000Z","id":241},"242":{"type":"Category","book_categories_count":6,"can_be_short":false,"created_at":"2020-06-12T00:18:45.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F Deno","mature_content":false,"name":"Deno","parent_category_id":55,"slug":"deno","updated_at":"2020-11-06T04:24:52.000Z","id":242},"243":{"type":"Category","book_categories_count":348,"can_be_short":false,"created_at":"2020-08-21T19:40:36.000Z","description":"","full_name":"Management \u002F Digital Transformation","mature_content":false,"name":"Digital Transformation","parent_category_id":1,"slug":"digital_transformation","updated_at":"2020-12-09T21:38:06.000Z","id":243},"244":{"type":"Category","book_categories_count":89,"can_be_short":false,"created_at":"2020-11-03T00:06:23.000Z","description":"","full_name":"Management \u002F Agile \u002F Scrum","mature_content":false,"name":"Scrum","parent_category_id":16,"slug":"scrum","updated_at":"2020-11-03T00:06:23.000Z","id":244},"245":{"type":"Category","book_categories_count":134,"can_be_short":false,"created_at":"2020-11-03T00:07:09.000Z","description":"","full_name":"Management \u002F Agile \u002F Leadership","mature_content":false,"name":"Leadership","parent_category_id":16,"slug":"leadership_agile","updated_at":"2020-12-09T21:38:06.000Z","id":245},"246":{"type":"Category","book_categories_count":51,"can_be_short":false,"created_at":"2020-11-03T00:07:58.000Z","description":"","full_name":"Management \u002F Project Management \u002F Scrum","mature_content":false,"name":"Scrum","parent_category_id":48,"slug":"scrum_project_management","updated_at":"2020-12-09T21:38:06.000Z","id":246},"247":{"type":"Category","book_categories_count":97,"can_be_short":false,"created_at":"2020-11-03T00:08:38.000Z","description":"","full_name":"Management \u002F Leadership \u002F Agile","mature_content":false,"name":"Agile","parent_category_id":119,"slug":"agile_business_leadership","updated_at":"2020-12-09T21:38:06.000Z","id":247},"248":{"type":"Category","book_categories_count":100,"can_be_short":false,"created_at":"2020-11-16T18:03:58.000Z","description":"","full_name":"Computers and Programming \u002F Programming Cookbooks","mature_content":false,"name":"Programming Cookbooks","parent_category_id":53,"slug":"programming_cookbooks","updated_at":"2020-12-09T21:38:06.000Z","id":248},"249":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2021-01-11T19:14:07.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Terraform","mature_content":false,"name":"Terraform","parent_category_id":70,"slug":"terraform","updated_at":"2021-01-11T19:14:07.000Z","id":249},"250":{"type":"Category","book_categories_count":57,"can_be_short":false,"created_at":"2021-01-11T19:14:46.000Z","description":"","full_name":"Computers and Programming \u002F DevOps \u002F Infrastructure as Code","mature_content":false,"name":"Infrastructure as Code","parent_category_id":70,"slug":"infrastructure_as_code","updated_at":"2021-01-28T23:33:52.000Z","id":250},"251":{"type":"Category","book_categories_count":70,"can_be_short":false,"created_at":"2021-01-25T18:44:26.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F TypeScript","mature_content":false,"name":"TypeScript","parent_category_id":55,"slug":"typescript","updated_at":"2021-01-25T18:44:26.000Z","id":251},"252":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2021-02-08T22:57:41.000Z","description":"","full_name":"Non-Fiction \u002F Juvenile","mature_content":false,"name":"Juvenile","parent_category_id":59,"slug":"juvenile","updated_at":"2021-02-08T22:57:41.000Z","id":252},"253":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2021-02-08T22:58:54.000Z","description":"","full_name":"Non-Fiction \u002F Juvenile \u002F Juvenile History","mature_content":false,"name":"Juvenile History","parent_category_id":252,"slug":"juvenile_history","updated_at":"2022-01-31T20:49:52.000Z","id":253},"254":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2021-02-08T22:59:33.000Z","description":"","full_name":"Textbooks \u002F Humanities \u002F History \u002F Black History","mature_content":false,"name":"Black History","parent_category_id":24,"slug":"black_history","updated_at":"2022-01-31T20:50:29.000Z","id":254},"255":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2021-02-11T21:33:33.000Z","description":"","full_name":"Computers and Programming \u002F WordPress","mature_content":false,"name":"WordPress","parent_category_id":53,"slug":"wordpress","updated_at":"2021-02-11T21:33:33.000Z","id":255},"256":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2021-03-29T21:55:23.000Z","description":"","full_name":"Non-Fiction \u002F Anthropology","mature_content":false,"name":"Anthropology","parent_category_id":59,"slug":"anthropology","updated_at":"2022-02-01T00:29:14.000Z","id":256},"257":{"type":"Category","book_categories_count":12,"can_be_short":false,"created_at":"2021-03-29T21:56:02.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity \u002F Christian Anthropology","mature_content":false,"name":"Christian Anthropology","parent_category_id":286,"slug":"christian_anthropology","updated_at":"2023-01-03T23:13:15.000Z","id":257},"258":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2021-05-17T20:16:23.000Z","description":"","full_name":"Computers and Programming \u002F CMake","mature_content":false,"name":"CMake","parent_category_id":53,"slug":"cmake","updated_at":"2022-02-01T00:34:54.000Z","id":258},"259":{"type":"Category","book_categories_count":2,"can_be_short":false,"created_at":"2021-06-13T20:23:14.000Z","description":"","full_name":"Computers and Programming \u002F PureScript","mature_content":false,"name":"PureScript","parent_category_id":53,"slug":"purescript","updated_at":"2021-06-13T20:23:14.000Z","id":259},"260":{"type":"Category","book_categories_count":69,"can_be_short":false,"created_at":"2021-06-16T18:56:25.000Z","description":"","full_name":"Computers and Programming \u002F Operating System Development","mature_content":false,"name":"Operating System Development","parent_category_id":53,"slug":"operating_system_development","updated_at":"2021-06-16T18:56:25.000Z","id":260},"261":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2021-07-14T19:17:48.000Z","description":"","full_name":"Computers and Programming \u002F Rust","mature_content":false,"name":"Rust","parent_category_id":53,"slug":"rust","updated_at":"2021-07-14T19:17:48.000Z","id":261},"262":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2021-08-26T18:10:16.000Z","description":"","full_name":"Computers and Programming \u002F Databases \u002F MS_Access","mature_content":false,"name":"MS_Access","parent_category_id":66,"slug":"ms_access","updated_at":"2021-08-26T18:10:16.000Z","id":262},"263":{"type":"Category","book_categories_count":16,"can_be_short":false,"created_at":"2021-09-19T21:30:53.000Z","description":"","full_name":"Computers and Programming \u002F Storage","mature_content":false,"name":"Storage","parent_category_id":53,"slug":"storage","updated_at":"2021-09-19T21:30:53.000Z","id":263},"264":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2021-12-02T19:44:57.000Z","description":"","full_name":"Computers and Programming \u002F Erlang","mature_content":false,"name":"Erlang","parent_category_id":53,"slug":"erlang","updated_at":"2021-12-02T19:44:57.000Z","id":264},"265":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2022-01-06T21:09:21.000Z","description":"","full_name":"Equity","mature_content":false,"name":"Equity","parent_category_id":null,"slug":"equity","updated_at":"2022-01-06T21:09:21.000Z","id":265},"266":{"type":"Category","book_categories_count":10,"can_be_short":false,"created_at":"2022-01-06T21:09:36.000Z","description":"","full_name":"Non-Fiction \u002F Antiracism","mature_content":false,"name":"Antiracism","parent_category_id":59,"slug":"antiracism","updated_at":"2022-01-31T20:44:31.000Z","id":266},"267":{"type":"Category","book_categories_count":22,"can_be_short":false,"created_at":"2022-01-06T21:10:06.000Z","description":"","full_name":"Non-Fiction \u002F Social Justice","mature_content":false,"name":"Social Justice","parent_category_id":59,"slug":"social_justice","updated_at":"2022-01-31T23:58:40.000Z","id":267},"268":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2022-01-06T21:10:28.000Z","description":"","full_name":"Non-Fiction \u002F Liberation","mature_content":false,"name":"Liberation","parent_category_id":59,"slug":"liberation","updated_at":"2022-01-31T23:57:57.000Z","id":268},"269":{"type":"Category","book_categories_count":16,"can_be_short":false,"created_at":"2022-01-06T21:10:45.000Z","description":"","full_name":"Non-Fiction \u002F Inclusion","mature_content":false,"name":"Inclusion","parent_category_id":59,"slug":"inclusion","updated_at":"2022-01-31T23:57:37.000Z","id":269},"270":{"type":"Category","book_categories_count":11,"can_be_short":false,"created_at":"2022-01-06T21:11:05.000Z","description":"","full_name":"Non-Fiction \u002F Social Equity","mature_content":false,"name":"Social Equity","parent_category_id":59,"slug":"social_equity","updated_at":"2022-01-31T23:58:21.000Z","id":270},"271":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2022-01-06T21:11:17.000Z","description":"","full_name":"Non-Fiction \u002F Equality","mature_content":false,"name":"Equality","parent_category_id":59,"slug":"equality","updated_at":"2022-01-31T23:57:09.000Z","id":271},"272":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2022-01-14T04:36:37.000Z","description":"","full_name":"Non-Fiction \u002F Filmmaking","mature_content":false,"name":"Filmmaking","parent_category_id":59,"slug":"filmmaking","updated_at":"2022-01-14T04:36:37.000Z","id":272},"273":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2022-01-14T04:36:56.000Z","description":"","full_name":"Non-Fiction \u002F Photography","mature_content":false,"name":"Photography","parent_category_id":59,"slug":"photography","updated_at":"2022-01-14T04:36:56.000Z","id":273},"274":{"type":"Category","book_categories_count":53,"can_be_short":false,"created_at":"2022-01-17T20:14:14.000Z","description":"","full_name":"Non-Fiction \u002F Marketing","mature_content":false,"name":"Marketing","parent_category_id":59,"slug":"marketing","updated_at":"2022-01-17T20:14:14.000Z","id":274},"275":{"type":"Category","book_categories_count":24,"can_be_short":false,"created_at":"2022-01-18T20:32:19.000Z","description":"","full_name":"Non-Fiction \u002F Personal Science","mature_content":false,"name":"Personal Science","parent_category_id":59,"slug":"personal_science","updated_at":"2022-01-18T20:32:19.000Z","id":275},"276":{"type":"Category","book_categories_count":36,"can_be_short":false,"created_at":"2022-01-31T20:43:59.000Z","description":"","full_name":"Computers and Programming \u002F JavaScript \u002F TypeScript \u002F Angular","mature_content":false,"name":"Angular","parent_category_id":251,"slug":"angular","updated_at":"2022-01-31T20:43:59.000Z","id":276},"277":{"type":"Category","book_categories_count":50,"can_be_short":false,"created_at":"2022-01-31T21:43:56.000Z","description":"","full_name":"Non-Fiction \u002F History","mature_content":false,"name":"History","parent_category_id":59,"slug":"nonfiction_history","updated_at":"2022-01-31T21:43:56.000Z","id":277},"278":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2022-01-31T21:44:36.000Z","description":"","full_name":"Non-Fiction \u002F History \u002F Computing History","mature_content":false,"name":"Computing History","parent_category_id":277,"slug":"computing_history","updated_at":"2022-01-31T21:44:36.000Z","id":278},"279":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2022-03-18T02:12:15.000Z","description":"","full_name":"Textbooks \u002F Data Science \u002F Geospatial Data Science","mature_content":false,"name":"Geospatial Data Science","parent_category_id":44,"slug":"geospatial_data_science","updated_at":"2022-03-18T02:12:15.000Z","id":279},"280":{"type":"Category","book_categories_count":12,"can_be_short":false,"created_at":"2022-03-24T22:14:52.000Z","description":"","full_name":"Fiction \u002F Roleplaying Games","mature_content":false,"name":"Roleplaying Games","parent_category_id":6,"slug":"roleplaying_games","updated_at":"2022-03-24T22:14:52.000Z","id":280},"283":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2022-06-16T23:03:49.000Z","description":"","full_name":"Computers and Programming \u002F Digital Forensics","mature_content":false,"name":"Digital Forensics","parent_category_id":53,"slug":"digital_forensics","updated_at":"2022-06-16T23:03:49.000Z","id":283},"284":{"type":"Category","book_categories_count":29,"can_be_short":false,"created_at":"2022-12-19T22:44:14.000Z","description":"","full_name":"Non-Fiction \u002F Personal Finance","mature_content":false,"name":"Personal Finance","parent_category_id":59,"slug":"personal_finance","updated_at":"2022-12-19T22:44:14.000Z","id":284},"285":{"type":"Category","book_categories_count":69,"can_be_short":false,"created_at":"2023-01-02T20:19:24.000Z","description":"","full_name":"Fiction \u002F Short Stories","mature_content":false,"name":"Short Stories","parent_category_id":6,"slug":"short_stories","updated_at":"2023-01-02T20:19:24.000Z","id":285},"286":{"type":"Category","book_categories_count":72,"can_be_short":false,"created_at":"2023-01-03T23:12:30.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity","mature_content":false,"name":"Christianity","parent_category_id":10,"slug":"christianity","updated_at":"2023-01-03T23:12:30.000Z","id":286},"287":{"type":"Category","book_categories_count":178,"can_be_short":false,"created_at":"2023-01-05T23:16:25.000Z","description":"","full_name":"GPT","mature_content":false,"name":"GPT","parent_category_id":null,"slug":"gpt","updated_at":"2023-01-05T23:16:25.000Z","id":287},"288":{"type":"Category","book_categories_count":8,"can_be_short":false,"created_at":"2023-03-15T02:22:10.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Judaism","mature_content":false,"name":"Judaism","parent_category_id":10,"slug":"judaism","updated_at":"2023-03-15T02:22:10.000Z","id":288},"289":{"type":"Category","book_categories_count":30,"can_be_short":false,"created_at":"2023-05-31T22:13:19.000Z","description":"","full_name":"Fiction \u002F Business","mature_content":false,"name":"Business","parent_category_id":6,"slug":"fiction_business","updated_at":"2023-05-31T22:13:19.000Z","id":289},"290":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2023-09-12T22:02:56.000Z","description":"","full_name":"Non-Fiction \u002F Esports","mature_content":false,"name":"Esports","parent_category_id":59,"slug":"esports","updated_at":"2023-09-12T22:02:56.000Z","id":290},"291":{"type":"Category","book_categories_count":5,"can_be_short":false,"created_at":"2023-10-05T21:55:20.000Z","description":"","full_name":"Non-Fiction \u002F Law Enforcement","mature_content":false,"name":"Law Enforcement","parent_category_id":59,"slug":"law_enforcement","updated_at":"2023-10-05T21:55:20.000Z","id":291},"292":{"type":"Category","book_categories_count":10,"can_be_short":false,"created_at":"2023-11-06T19:59:55.000Z","description":"","full_name":"Textbooks \u002F Data Science \u002F Neural Networks","mature_content":false,"name":"Neural Networks","parent_category_id":44,"slug":"neural_networks","updated_at":"2023-11-06T19:59:55.000Z","id":292},"293":{"type":"Category","book_categories_count":14,"can_be_short":false,"created_at":"2023-11-06T20:00:28.000Z","description":"","full_name":"Textbooks \u002F Data Science \u002F Deep Learning","mature_content":false,"name":"Deep Learning","parent_category_id":44,"slug":"deep_learning","updated_at":"2023-11-06T20:00:28.000Z","id":293},"294":{"type":"Category","book_categories_count":8,"can_be_short":false,"created_at":"2023-12-16T22:23:31.000Z","description":"","full_name":"Computers and Programming \u002F Software \u002F IDEs","mature_content":false,"name":"IDEs","parent_category_id":11,"slug":"ides","updated_at":"2023-12-16T22:23:31.000Z","id":294},"295":{"type":"Category","book_categories_count":59,"can_be_short":false,"created_at":"2023-12-29T16:55:43.000Z","description":"","full_name":"Management \u002F Strategy","mature_content":false,"name":"Strategy","parent_category_id":1,"slug":"strategy","updated_at":"2023-12-29T16:55:43.000Z","id":295},"296":{"type":"Category","book_categories_count":13,"can_be_short":false,"created_at":"2024-02-08T20:43:20.000Z","description":"","full_name":"Computers and Programming \u002F Blockchain Technology","mature_content":false,"name":"Blockchain Technology","parent_category_id":53,"slug":"blockchain_technology","updated_at":"2024-02-08T20:43:20.000Z","id":296},"297":{"type":"Category","book_categories_count":39,"can_be_short":false,"created_at":"2024-02-19T20:40:21.000Z","description":"","full_name":"Computers and Programming \u002F Algorithm","mature_content":false,"name":"Algorithm","parent_category_id":53,"slug":"algorithm","updated_at":"2024-02-19T20:40:21.000Z","id":297},"298":{"type":"Category","book_categories_count":23,"can_be_short":false,"created_at":"2024-02-19T20:40:39.000Z","description":"","full_name":"Computers and Programming \u002F Data Structures","mature_content":false,"name":"Data Structures","parent_category_id":53,"slug":"data_structures","updated_at":"2024-02-19T20:40:39.000Z","id":298},"299":{"type":"Category","book_categories_count":48,"can_be_short":false,"created_at":"2024-05-24T00:53:24.000Z","description":"","full_name":"Computers and Programming \u002F Systems Administration","mature_content":false,"name":"Systems Administration","parent_category_id":53,"slug":"systems_administration","updated_at":"2024-05-24T00:53:24.000Z","id":299},"300":{"type":"Category","book_categories_count":9,"can_be_short":false,"created_at":"2024-05-31T18:28:46.000Z","description":"","full_name":"Non-Fiction \u002F Environment","mature_content":false,"name":"Environment","parent_category_id":59,"slug":"environment","updated_at":"2024-05-31T18:28:46.000Z","id":300},"301":{"type":"Category","book_categories_count":5,"can_be_short":false,"created_at":"2024-05-31T18:29:25.000Z","description":"","full_name":"Non-Fiction \u002F Environment \u002F Energy","mature_content":false,"name":"Energy","parent_category_id":300,"slug":"environment_energy","updated_at":"2024-05-31T18:29:25.000Z","id":301},"302":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2024-05-31T18:29:54.000Z","description":"","full_name":"Non-Fiction \u002F Environment \u002F Policy","mature_content":false,"name":"Policy","parent_category_id":300,"slug":"environment_policy","updated_at":"2024-05-31T18:29:54.000Z","id":302},"304":{"type":"Category","book_categories_count":10,"can_be_short":false,"created_at":"2024-05-31T18:32:59.000Z","description":"","full_name":"Non-Fiction \u002F Environment \u002F Behavior Change","mature_content":false,"name":"Behavior Change","parent_category_id":300,"slug":"environment_behavior_change","updated_at":"2024-05-31T18:32:59.000Z","id":304},"305":{"type":"Category","book_categories_count":8,"can_be_short":false,"created_at":"2024-09-08T22:26:06.000Z","description":"","full_name":"Non-Fiction \u002F Economics","mature_content":false,"name":"Economics","parent_category_id":59,"slug":"non_fiction_ecoonomics","updated_at":"2024-09-08T22:26:06.000Z","id":305},"306":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2024-09-27T20:16:39.000Z","description":"","full_name":"Screenplays","mature_content":false,"name":"Screenplays","parent_category_id":null,"slug":"screenplays","updated_at":"2024-09-27T20:16:39.000Z","id":306},"309":{"type":"Category","book_categories_count":2,"can_be_short":false,"created_at":"2024-09-29T23:48:12.000Z","description":"","full_name":"Computers and Programming \u002F SolidStart","mature_content":false,"name":"SolidStart","parent_category_id":53,"slug":"SolidStart","updated_at":"2024-09-29T23:48:12.000Z","id":309},"310":{"type":"Category","book_categories_count":2,"can_be_short":false,"created_at":"2024-09-29T23:48:39.000Z","description":"","full_name":"Computers and Programming \u002F SolidJS","mature_content":false,"name":"SolidJS","parent_category_id":53,"slug":"SolidJS","updated_at":"2024-09-29T23:48:39.000Z","id":310},"311":{"type":"Category","book_categories_count":7,"can_be_short":false,"created_at":"2024-12-04T02:51:09.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity \u002F Bible Study","mature_content":false,"name":"Bible Study","parent_category_id":286,"slug":"bible_study","updated_at":"2024-12-04T02:51:09.000Z","id":311},"312":{"type":"Category","book_categories_count":3,"can_be_short":false,"created_at":"2024-12-04T02:51:33.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity \u002F Devotions","mature_content":false,"name":"Devotions","parent_category_id":286,"slug":"devotions","updated_at":"2024-12-04T02:51:33.000Z","id":312},"313":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2024-12-04T02:51:54.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity \u002F Worship","mature_content":false,"name":"Worship","parent_category_id":286,"slug":"worship","updated_at":"2024-12-04T02:51:54.000Z","id":313},"314":{"type":"Category","book_categories_count":1,"can_be_short":false,"created_at":"2024-12-04T02:52:17.000Z","description":"","full_name":"Non-Fiction \u002F Religion and Spirituality \u002F Christianity \u002F Psalms","mature_content":false,"name":"Psalms","parent_category_id":286,"slug":"psalms","updated_at":"2024-12-04T02:52:17.000Z","id":314},"315":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2025-01-18T12:03:58.000Z","description":"","full_name":"Management \u002F Hiring","mature_content":false,"name":"Hiring","parent_category_id":1,"slug":"hiring","updated_at":"2025-01-18T12:03:58.000Z","id":315},"316":{"type":"Category","book_categories_count":4,"can_be_short":false,"created_at":"2025-01-18T12:05:41.000Z","description":"","full_name":"Computers and Programming \u002F Hiring Developers","mature_content":false,"name":"Hiring Developers","parent_category_id":53,"slug":"hiringdevelopers","updated_at":"2025-01-18T12:05:41.000Z","id":316}},"errors":{},"indexes":{"{\"list\":true,\"sort\":\"top\"}":[53,11,215,139,138,16,230,44,43,293,188,55,64,292,1,133,13,70,93,14,137,287,98,80,119,12,66,156,74,121,38,131,61,102,48,191,218,57,243,77,213,103,205,90,197,42,143,184,168,248,250,73,260,166,181,199,298,222,148,87,241,130,211,239,132,226,96,59,189,62,86,207,120,72,125,245,91,140,94,141,100,71,63,68,297,212,203,251,261,78,142,249,247,106,75,3,195,185,196,171,167,182,118,136,223,56,164,194,46,209,161,198,244,79,192,39,84,15,145,127,150,27,219,88,99,283,110,108,18,299,151,159,76,190,295,117,69,24,95,6,263,9,294,237,111,40,276,29,165,81,228,19,104,10,236,214,115,246,259,23,170,109,17,83,231,122,169,2,25,107,54,187,113,30,229,58,147,277,155,267,221,272,296,37,128,67,233,152,116,238,273,274,157,45,129,65,206,309,310,208,284,162,269,316,315,31,180,235,234,33,34,280,175,210,105,112,123,35,28,220,92,255,186,126,89,172,224,275,41,289,32,242,178,285,270,101,227,217,268,279,4,256,232,262,286,153,154,176,177,305,278,114,266,146,85,144,158,82,204,193,20,200,149,304,49,257,160,271,252,240,311,312,313,314,301,216,288,291,254,163,179,202,225,253,258,264,265,290,300,302,306]},"loading":{"{\"list\":true,\"sort\":\"top\"}":false}},"Cause":{"all":{},"errors":{},"indexes":{},"loading":{}},"Chapter":{"all":{},"errors":{},"indexes":{},"loading":{},"dirty":false},"Choice":{"all":{},"errors":{},"indexes":{},"loading":{}},"CommunityEditionSignup":{"all":{},"errors":{},"indexes":{},"loading":{}},"Contributor":{"all":{},"errors":{},"indexes":{},"loading":{}},"CorrectChoice":{"all":{},"errors":{},"indexes":{},"loading":{}},"Coupon":{"all":{},"errors":{},"indexes":{},"loading":{},"newsletterCoupons":null,"newsletterCouponsLoading":false,"newsletterCouponsErrors":null},"Course":{"all":{"141":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fart-of-clean-coding","home":"\u002Fcourses\u002Fleanpub\u002Fart-of-clean-coding\u002Fhome"},"type":"Course","about_the_course":"\u003Ch2\u003EImprove your knowledge in object-oriented programming in the context of clean coding and building types of high quality\u003C\u002Fh2\u003E\u003Cul\u003E\u003Cli\u003ELearn how to give the best names for API members \u003C\u002Fli\u003E\u003Cli\u003ELearn all the tricks related to writing clean functions\u003C\u002Fli\u003E\u003Cli\u003EAvoid common architectural smells. Get rid of unpleasant smells\u003C\u002Fli\u003E\u003Cli\u003EApply principles of functional programming: achieve immutability, remove side effects, extend types\u003C\u002Fli\u003E\u003Cli\u003EAvoid smells related to dependency injection\u003C\u002Fli\u003E\u003Cli\u003EWrite cleaner unit tests\u003C\u002Fli\u003E\u003Cli\u003EPractice Test-Driven Development\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch2\u003EFoundations of building object-oriented infrastructures\u003C\u002Fh2\u003E\u003Cp\u003EDespite the fact that C# is a very rich on features language, it's very common to see poorly designed and implemented types in a real world. In fact, C# is one of the richest on features language among object-oriented languages in the world nowadays. But \u003Cem\u003Ewith great power comes great responsibility. \u003C\u002Fem\u003EIt's challenging  to use all those features in a right way.\u003C\u002Fp\u003E\u003Cp\u003EYou probably have already heard the following well-known statement: \u003Cem\u003Emost code sucks.\u003C\u002Fem\u003E Well, this course is all about how to produce code which doesn't suck.\u003C\u002Fp\u003E\u003Cp\u003EOwning skills of producing a well-designed and well-implemented types is the prerequisite for the other developers to treat you as a real professional.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Ch2\u003EContent and Overview\u003C\u002Fh2\u003E\u003Cp\u003EThis course is aimed at all the C# developers, from beginners to seniors. Topics which are covered in the course are relevant for all kinds of C# developers since all developers design and implement APIs. The topics complexity is very different. There are plenty of very simple topics, and at the same time, there are topics which require from you a solid C# background. There are plenty of code examples throughout this course, so you will learn both theoretical and practical material.\u003C\u002Fp\u003E\u003Cp\u003EThe course covers the following topics:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EMeta Principles: DRY, KISS, YAGNI, SoC, CQS, PoLA, Encapsulation\u003C\u002Fli\u003E\u003Cli\u003EHow to give better names for API members and what naming conventions exist in the .NET platform and suited for C#\u003C\u002Fli\u003E\u003Cli\u003ECommon problems encountered by C# developers in the process of designing and implementing APIs: classes vs structures, creational patterns vs constructors, poor naming, excessively long methods, output parameters and so on.\u003C\u002Fli\u003E\u003Cli\u003ECommon Architectural Design Smells such as Primitive Obsession, Hidden Dependencies, Violation of Law of Demeter and other.\u003C\u002Fli\u003E\u003Cli\u003EFunctional Programming: immutability, temporal coupling, pipelining, extending IDisposable, Builder Design Pattern, abusing extension methods, dealing with errors\u003C\u002Fli\u003E\u003Cli\u003EDI-related anti-patterns: control freak, hidden dependencies, temporal coupling, ambient context, facade service, bastard injection, cyclic dependencies\u003C\u002Fli\u003E\u003Cli\u003EClean Unit Tests: singletons and static classes, excessive number of interfaces, testing trivial code, testing of a single concern, different best practices\u003C\u002Fli\u003E\u003Cli\u003EPracticing TDD: definition, 3 laws, parsing roman numerals, continuous testing, implementing Tic-Tac-Toe\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EThe list is far from being complete. The course covers a great number of topics. \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EEnroll and start Mastering the Art of Writing Clean Code in C#!\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E","attempts_allowed":1,"author_count":1,"categories":[],"clicky_analytics_code":null,"copyright_html":"\u003Cdiv dir=\"ltr\"\u003E© 2018 - 2025 EngineerSpock\u003C\u002Fdiv\u003E","copyright_in_footer":false,"created_at":"2018-06-17T07:55:32.000Z","current_published_version_id":548,"default_package_id":52603,"enabled_forums":null,"forum_url":null,"free_purchase_requires_membership":true,"full_slug":"courses\u002Fleanpub\u002Fart-of-clean-coding","google_analytics_code":null,"home_page_path":"\u002Fcourses\u002Fleanpub\u002Fart-of-clean-coding\u002Fhome","instructors_label":"Instructors","landing_page_path":"\u002Fcourses\u002Fleanpub\u002Fart-of-clean-coding","landing_page_url":"http:\u002F\u002Fleanpub.com\u002Fcourses\u002Fleanpub\u002Fart-of-clean-coding","material_book_id":46964,"mature_content":false,"meta_description":"C# Clean Code, C# Best Practices, API in C#, Building API in C#, Clean Code in C# tutorial, Refactoring, C#, Design Patterns in C#, Clean Coding C#","percent_complete":0,"preview_version_id":544,"publisher_id":1,"show_what_author_gets":true,"show_num_readers":true,"slug":"art-of-clean-coding","state":"published","subscription_id":null,"publisher_slug":"leanpub","subtitle":"Learn how to write clean and maintainable code in C#","sync_mode":"dropbox_cold_storage","tagline":"","teaser_text":"\u003Cp\u003ELearn how to design and implement types in C# so that the other developers won't hate you when using one of the types developed by you. It means you are going to learn how to write code of the high quality: readable, understandable and reliable.\u003C\u002Fp\u003E","title":"Master the Art of Writing Clean Code in C#","non_leanpub_publisher":false,"name":"Master the Art of Writing Clean Code in C#","num_copies_sold":null,"title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_list?1621303820","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_list2x?1621303820","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_featured?1621303820","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_featured2x?1621303820","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_hero?1621303820","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_hero2x?1621303820","total_copies_sold":68,"unlisted":false,"position":104,"id":141,"preview_version":null},"374":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fdotnet-injection","home":"\u002Fcourses\u002Fleanpub\u002Fdotnet-injection\u002Fhome"},"type":"Course","about_the_course":"\u003Ch2\u003ETeaching Approach\u003C\u002Fh2\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ENo fluff, no ranting, no beating the air. I respect your time. The course material is succinct, yet comprehensive. All the important concepts are covered. Particularly important topics are covered in-depth. For absolute beginners, I offer my help on Skype absolutely free, if requested. \u003C\u002Fp\u003E\u003Cp\u003ETake this course, and you will be satisfied. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Ch2\u003EBuild a solid foundation in software architecture applying Dependency Injection with IoC-Containers\u003C\u002Fh2\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIn many of my courses I use techniques of Dependency Injection and each time students write me private messages saying that they don't what it is and thus they don't understand what's going on in the course I teach. This is very unfortunate from the learning perspectives.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDependency Injection is the set of techniques that allow to supply dependencies to objects. Actually, if you have ever passed dependencies via constructors, then you applied the so-called constructor injection. \u003Cstrong\u003EDependency Injection (DI)\u003C\u002Fstrong\u003E \u003Cstrong\u003Eis simple and difficult at the same time.\u003C\u002Fstrong\u003E On one hand, DI is comprised of simple techniques and on the other hand, when we need to bring DI to the next level, we need to make things more complicated using the so-called DI or IoC (Inversion of Control) Containers. These are the frameworks which perform dependency injection automatically. You just need to set one up in the application root (an extremely important notion which you'll learn about in the course) and after that, it will resolve all the dependencies it knows about in the runtime.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIf you still don't understand what am I talking about, just believe me, you absolutely need to know about Dependency Injection. This course will tremendously\u003Cstrong\u003E improve your understanding of how software architectures emerge.\u003C\u002Fstrong\u003E So, this course is\u003Cstrong\u003E \"must watch\" for anyone who still doesn't understand what is DI and IoC-Containers.\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EContent and Overview\u003C\u002Fstrong\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis course is aimed at all kind of developers. \u003Cstrong\u003EIt provides solid theoretical base reinforced by practical material.\u003C\u002Fstrong\u003E \u003C\u002Fp\u003E\u003Cp\u003EThe course covers:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EIntroduction to Inversion of Control\u003C\u002Fstrong\u003E: \u003C\u002Fli\u003E\u003Cli\u003EDependency Inversion Principle (DIP), Inversion of Control (IoC), Dependency Injection (DI),\u003C\u002Fli\u003E\u003Cli\u003EDependencies and their types, Pure DI and IoC-Containers, Service Locator\u003C\u002Fli\u003E\u003Cli\u003EThe \u003Cstrong\u003EArchitectural Implications of Dependency Injection\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EDI-related Anti-Patterns &amp; Refactorings:\u003C\u002Fstrong\u003E \u003C\u002Fli\u003E\u003Cli\u003EControl Freak, Hidden Dependencies, Temporal Coupling, \u003C\u002Fli\u003E\u003Cli\u003EConstructor Over-Injection and how to avoid it, \u003C\u002Fli\u003E\u003Cli\u003EAmbient Context, Facade Service, Property Injection vs Bastard Injection, Cyclic Dependencies\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ERefactoring \u003C\u002Fstrong\u003EExample of an existing code base applying Dependency Injection\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EHow to reap the fruits of DI\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EDI-Containers (IoC-Containers):\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003EOverview, Unity, Late Binding with Unity, Aspect-Oriented Programming (AOP), Interception vs Pure DI vs AOP Tools,\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESetting up a bootstrapper with Unity, Autofac and Castle.Windsor\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","attempts_allowed":1,"author_count":1,"categories":[],"clicky_analytics_code":null,"copyright_html":"\u003Cdiv dir=\"ltr\"\u003E© 2019 - 2025 EngineerSpock\u003C\u002Fdiv\u003E","copyright_in_footer":false,"created_at":"2019-01-25T16:15:48.000Z","current_published_version_id":1350,"default_package_id":57554,"enabled_forums":null,"forum_url":null,"free_purchase_requires_membership":true,"full_slug":"courses\u002Fleanpub\u002Fdotnet-injection","google_analytics_code":null,"home_page_path":"\u002Fcourses\u002Fleanpub\u002Fdotnet-injection\u002Fhome","instructors_label":"Instructors","landing_page_path":"\u002Fcourses\u002Fleanpub\u002Fdotnet-injection","landing_page_url":"http:\u002F\u002Fleanpub.com\u002Fcourses\u002Fleanpub\u002Fdotnet-injection","material_book_id":51639,"mature_content":false,"meta_description":"Build a solid foundation in software architecture applying Dependency Injection with IoC-Containers.","percent_complete":0,"preview_version_id":1346,"publisher_id":1,"show_what_author_gets":true,"show_num_readers":true,"slug":"dotnet-injection","state":"published","subscription_id":null,"publisher_slug":"leanpub","subtitle":"Learn Dependency Injection techniques along with corresponding IoC-frameworks (DI-Containers)","sync_mode":"dropbox_cold_storage","tagline":"Chance favors the prepared mind.","teaser_text":"\u003Cp\u003EBuild a solid foundation in software architecture applying Dependency Injection with IoC-Containers.\u003C\u002Fp\u003E","title":"Software Architecture: Dependency Injection in .NET","non_leanpub_publisher":false,"name":"Software Architecture: Dependency Injection in .NET","num_copies_sold":null,"title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_list?1621304164","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_list2x?1621304164","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_featured?1621304164","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_featured2x?1621304164","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_hero?1621304164","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_hero2x?1621304164","total_copies_sold":42,"unlisted":false,"position":298,"id":374,"preview_version":null},"461":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Ffuncsharp","home":"\u002Fcourses\u002Fleanpub\u002Ffuncsharp\u002Fhome"},"type":"Course","about_the_course":"\u003Cp\u003ELearn how to write C# code in a functional style. The “Functional Programming in C#” is for you if you want to improve your code, design and architecture. It means you are going to learn how to write code of the high quality: readable, understandable and reliable.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Ch2\u003E\u003Cstrong\u003ELearn Functional Programming in the context of clean coding and building types of high quality\u003C\u002Fstrong\u003E \u003C\u002Fh2\u003E\u003Cul\u003E\u003Cli\u003EGet Deep Understanding of what is Functional Programming \u003C\u002Fli\u003E\u003Cli\u003ELearn how to design Immutable types in C# \u003C\u002Fli\u003E\u003Cli\u003EApply new C# 6 and C# 7 features to write better code in a functional style \u003C\u002Fli\u003E\u003Cli\u003ELearn how to Extend and Compose any Types \u003C\u002Fli\u003E\u003Cli\u003EHandle Errors and Exceptions in a functional programming style \u003C\u002Fli\u003E\u003Cli\u003ETackle the Problem of Null-Values by the means of functional programming \u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch2\u003E\u003Cstrong\u003EFoundations of Functional Programming\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDespite the fact that C# is primarily an object-oriented language, it is very powerful on features which enable functional programming style. In fact, C# is one of the richest on features language among object-oriented languages in the world nowadays. But \u003Cem\u003Ewith great power comes great responsibility. \u003C\u002Fem\u003EIt's challenging to use all those features in a right way. \u003C\u002Fp\u003E\u003Cp\u003EYou probably have already heard the following well-known statement: \u003Cem\u003Emost code sucks.\u003C\u002Fem\u003E Well, this course is all about how to produce code which doesn't suck. \u003C\u002Fp\u003E\u003Cp\u003EOwning skills of producing well-designed and well-implemented types with regards to functional programming principles. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Ch2\u003E\u003Cstrong\u003EContent and Overview\u003C\u002Fstrong\u003E \u003C\u002Fh2\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis course is aimed at all the C# developers, from beginners to seniors. Topics which are covered in the course are relevant for all kinds of C# developers since all developers design and implement types. The topics complexity is very different. There are plenty of very simple topics, and at the same time, there are topics which require from you a solid C# background. There are plenty of code examples throughout this course, so you will learn both theoretical and practical material. \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EWe’re going to start with the theoretical foundations of the functional programming paradigm. You’ll learn what is Functional Programming and what are the benefits of applying that paradigm.\u003C\u002Fli\u003E\u003Cli\u003EIn the second section, we’re going to elaborate the core concepts of the functional programming. You’ll learn more about immutability, purity, side effects and expressions.\u003C\u002Fli\u003E\u003Cli\u003ETo write modern code in a functional style, you need to learn modern C# features appeared in C# 6 and C# 7.\u003C\u002Fli\u003E\u003Cli\u003EWe’re going to learn more about immutability in a separate section. This is a very important topic.\u003C\u002Fli\u003E\u003Cli\u003EWe’re going to learn how to extend types. You’ll see practical cases, you’ll learn about general extensions needed for functional programming.\u003C\u002Fli\u003E\u003Cli\u003EAfter mastering the topic of types extending you will face the great problem of exceptions handling. Yep, it's a hard nut to crack. We will start from discussing a question of why we use exceptions as a mechanism of errors handling. And why C# team didn't invent any other mechanisms?\u003C\u002Fli\u003E\u003Cli\u003EIn the end, we will look at how to fight with null values. As you may know, Tony Hoar said that the invention of a null value was his billion-dollar mistake.\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003ETo sum up, \u003Cstrong\u003Ethe course covers the following topics:\u003C\u002Fstrong\u003E \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003ETheoretical Foundations of Functional Programming \u003C\u002Fli\u003E\u003Cli\u003ECore Concepts of Functional Programming \u003C\u002Fli\u003E\u003Cli\u003EFunctional Features in C# \u003C\u002Fli\u003E\u003Cli\u003EImmutability in C# \u003C\u002Fli\u003E\u003Cli\u003EExtendibility in C# \u003C\u002Fli\u003E\u003Cli\u003EDealing with Errors \u003C\u002Fli\u003E\u003Cli\u003EDealing with Nulls \u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E------------------------------------------------------------ \u003C\u002Fp\u003E\u003Cp\u003EKeywords related to the course: \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EC# Clean Code\u003C\u002Fstrong\u003E \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EC# Best Practices\u003C\u002Fstrong\u003E \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EFunctional Programming in C#\u003C\u002Fstrong\u003E \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EC# Functional Programming\u003C\u002Fstrong\u003E \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EClean Code in C# tutorial\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","attempts_allowed":1,"author_count":1,"categories":[],"clicky_analytics_code":null,"copyright_html":"\u003Cdiv dir=\"ltr\"\u003E© 2019 - 2025 EngineerSpock\u003C\u002Fdiv\u003E","copyright_in_footer":false,"created_at":"2019-04-03T11:10:25.000Z","current_published_version_id":1552,"default_package_id":59295,"enabled_forums":null,"forum_url":null,"free_purchase_requires_membership":true,"full_slug":"courses\u002Fleanpub\u002Ffuncsharp","google_analytics_code":null,"home_page_path":"\u002Fcourses\u002Fleanpub\u002Ffuncsharp\u002Fhome","instructors_label":"Instructors","landing_page_path":"\u002Fcourses\u002Fleanpub\u002Ffuncsharp","landing_page_url":"http:\u002F\u002Fleanpub.com\u002Fcourses\u002Fleanpub\u002Ffuncsharp","material_book_id":53288,"mature_content":false,"meta_description":"Want to improve your skills in building software architecture through the functional design in C#? Then this course is for you!","percent_complete":0,"preview_version_id":1551,"publisher_id":1,"show_what_author_gets":true,"show_num_readers":true,"slug":"funcsharp","state":"published","subscription_id":null,"publisher_slug":"leanpub","subtitle":"Learn the principles of Functional Programming & how to apply them with the power of C# to improve software architecture.","sync_mode":"dropbox_cold_storage","tagline":"Chance favors the prepared mind.","teaser_text":"\u003Cp\u003EWant to improve your skills in building software architecture through the functional design in C#? Then this course is for you!\u003C\u002Fp\u003E","title":"Software Design: Functional Programming in C#","non_leanpub_publisher":false,"name":"Software Design: Functional Programming in C#","num_copies_sold":null,"title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_list?1621304309","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_list2x?1621304309","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_featured?1621304309","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_featured2x?1621304309","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_hero?1621304309","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_hero2x?1621304309","total_copies_sold":69,"unlisted":false,"position":375,"id":461,"preview_version":null},"473":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fsolid","home":"\u002Fcourses\u002Fleanpub\u002Fsolid\u002Fhome"},"type":"Course","about_the_course":"\u003Cp\u003E\u003Cstrong\u003ESOLID\u003C\u002Fstrong\u003E is an acronym which stands for \u003Cstrong\u003ESRP, OCP, LSP, ISP and DIP.\u003C\u002Fstrong\u003E These five acronyms in their turn stand for:  \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESingle Responsibility Principle  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EOpen\u002FClosed Principle  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ELiskov Substitution Principle  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EInterface Segregation Principle  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EDependency Inversion Principle\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EIn this course, you’ll learn how to apply meta and SOLID principles so that your application will live a long healthy life. It means you are going to learn how to write code of the high quality: readable, understandable and reliable.  \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EImprove your knowledge in object-oriented programming\u003C\u002Fstrong\u003E  \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EUnderstand the meta principles on which all the other development principles are based  \u003C\u002Fli\u003E\u003Cli\u003EUnderstand the symptoms of code defects  \u003C\u002Fli\u003E\u003Cli\u003ELearn the foundations of SOLID principles\u003C\u002Fli\u003E\u003Cli\u003ELearn how to detect the violations of SOLID principles and how to fix the problems\u003C\u002Fli\u003E\u003Cli\u003ELearn how meta principles and SOLID principles are related to each other and how to find the balance between them  \u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E\u003Cstrong\u003EFoundations of writing object-oriented code\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003EDespite the fact that C# is a very rich on features language, it's very common to see poorly designed and implemented applications in a real world. Language by itself does not guarantee that the architecture of an application will be great. In order to design and build maintainable software, we need to understand the principles of software development. This video course is exactly about how to achieve clean and maintainable software.  \u003C\u002Fp\u003E\u003Cp\u003EYou probably have already heard the following well-known statement: most code sucks. Well, this course is all about how to produce code which doesn't suck.  \u003C\u002Fp\u003E\u003Cp\u003EOwning skills of producing a well-designed and well-implemented types is the prerequisite for the other developers to treat you as a decent professional.  \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EContent and Overview\u003C\u002Fstrong\u003E  \u003C\u002Fp\u003E\u003Cp\u003EThis course is\u003Cstrong\u003E aimed at middle and senior developers.\u003C\u002Fstrong\u003E \u003Cstrong\u003ESolid experience in C# is required.\u003C\u002Fstrong\u003E  \u003C\u002Fp\u003E\u003Cp\u003EThere are plenty of code examples throughout this course so that you will learn both theoretical and practical material.  \u003C\u002Fp\u003E\u003Cp\u003EStarting with SOLID principles we will go further to the meta-principles. Going through the SOLID principles, you’ll also learn about the related patterns. Then we will get to the problem of contradictions between different principles. You’ll learn about the relationships between SOLID principles and meta principles.  \u003C\u002Fp\u003E\u003Cp\u003EIn general, you’ll learn in this course:  \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESRP  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EOCP  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ELSP  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EISP  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EDIP\u003C\u002Fstrong\u003E  \u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EThese are the \u003Cstrong\u003ESOLID\u003C\u002Fstrong\u003E principles. You’ll learn the background problems that can be solved by particular principle, you’ll see the demonstrations in code, you’ll learn the related patterns to every principle.  \u003C\u002Fp\u003E\u003Cp\u003ELearning \u003Cstrong\u003EDIP\u003C\u002Fstrong\u003E you’ll in addition learn what is\u003Cstrong\u003E Dependency Injection, Inversion of Control, IoC-Containers\u003C\u002Fstrong\u003E and what are the architectural implications of \u003Cstrong\u003EDI.\u003C\u002Fstrong\u003E  \u003C\u002Fp\u003E\u003Cp\u003EHere are other topics you’ll learn in the course:  \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDRY\u003C\u002Fstrong\u003E – don’t repeat yourself  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EKISS\u003C\u002Fstrong\u003E – keep it simple stupid  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EYAGNI\u003C\u002Fstrong\u003E – You Ain’t Gonna Need It  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESoC\u003C\u002Fstrong\u003E – separation of concerns  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ECQS\u003C\u002Fstrong\u003E – command query separation  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ELaw of Demeter\u003C\u002Fstrong\u003E  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EPrinciple of Least Astonishment\u003C\u002Fstrong\u003E  \u003C\u002Fli\u003E\u003Cli\u003EInformation Hiding and Encapsulation  \u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EAPI Development Principles  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EContradiction between SOLID and YAGNI  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EContradiction between OCP and YAGNI  \u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003EWhat is Architecture and Design\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E\u003Cstrong\u003ETeaching Approach\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003ENo fluff, no ranting, no beating the air. I respect your time. The course material is succinct, yet comprehensive. All important concepts are covered. Particularly important topics are covered in-depth.\u003C\u002Fp\u003E\u003Cp\u003ETake this course, and you will be satisfied!\u003C\u002Fp\u003E\u003Cp\u003E------------------------------------------------------------\u003C\u002Fp\u003E\u003Cp\u003EKeywords related to the course:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESoftware Architecture\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESOLID Principles Tutorial C#\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESOLID Tutorial C#\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESoftware Design\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESOLID Principles\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003ESRP, OCP, LSP, ISP, DIP\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E","attempts_allowed":1,"author_count":1,"categories":[],"clicky_analytics_code":null,"copyright_html":"\u003Cdiv dir=\"ltr\"\u003E© 2019 - 2025 EngineerSpock\u003C\u002Fdiv\u003E","copyright_in_footer":false,"created_at":"2019-04-08T09:26:10.000Z","current_published_version_id":1564,"default_package_id":59429,"enabled_forums":null,"forum_url":null,"free_purchase_requires_membership":true,"full_slug":"courses\u002Fleanpub\u002Fsolid","google_analytics_code":null,"home_page_path":"\u002Fcourses\u002Fleanpub\u002Fsolid\u002Fhome","instructors_label":"Instructors","landing_page_path":"\u002Fcourses\u002Fleanpub\u002Fsolid","landing_page_url":"http:\u002F\u002Fleanpub.com\u002Fcourses\u002Fleanpub\u002Fsolid","material_book_id":53410,"mature_content":false,"meta_description":"Do you want to write clean and maintainable applications in C#? Then this course is for you!","percent_complete":0,"preview_version_id":1563,"publisher_id":1,"show_what_author_gets":true,"show_num_readers":true,"slug":"solid","state":"published","subscription_id":null,"publisher_slug":"leanpub","subtitle":"Learn how to develop maintainable software systems applying Design Patterns based on Meta and SOLID Principles.","sync_mode":"dropbox_cold_storage","tagline":"Chance favors the prepared mind.","teaser_text":"\u003Cp\u003EDo you want to write clean and maintainable applications in C#? Then this course is for you!\u003C\u002Fp\u003E","title":"Software Architecture: Meta and SOLID Principles in C#","non_leanpub_publisher":false,"name":"Software Architecture: Meta and SOLID Principles in C#","num_copies_sold":null,"title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_list?1621304338","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_list2x?1621304338","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_featured?1621304338","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_featured2x?1621304338","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_hero?1621304338","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_hero2x?1621304338","total_copies_sold":64,"unlisted":false,"position":387,"id":473,"preview_version":null},"3467":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fainutshell","home":"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fhome"},"type":"Course","about_the_course":"\u003Cp\u003E\u003Cem\u003EHi everyone, Henrik here: This Leanpub course is basically the book content, plus 16 quizzes and 16 exercises to help you focus. It's for people who want to learn the material for work, but their company would rather pay for them to do a course than to sit around in their pyjamas and fuzzy slippers reading a book :) Let me know what you think!\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EWelcome to the strange new world of Generative AI! This course is a fast-paced, practical, and mostly human-written guide to what the heck is going on, and what you can do about it. It is like an extended version of Henrik's viral video with the same name.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis course covers questions like: What is generative AI? How does it work? How do I use it? What are some of the risks &amp; limitations? It also covers topics like how to lead an AI transformation, autonomous agents, the role of us humans, prompt engineering tips, AI-powered product development, different types of models, and some tips about mindset and how not to freak out.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EEverything is explained in plain English with Henrik's signature hand-drawn illustrations and concrete real-life examples. Minimum use of jargon and buzzwords.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003EDon't just survive the Age of AI — learn how to thrive in it!\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EThis course is based on the book \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fainutshell\" target=\"_blank\"\u003EGenerative AI in a Nutshell: How to Survive and Thrive in the Age of AI\u003C\u002Fa\u003E. It was generated from the book using \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fcourse_ai\u002Fbuy\" target=\"_blank\"\u003ECourseAI\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","attempts_allowed":5,"author_count":1,"categories":[],"clicky_analytics_code":null,"copyright_html":"\u003Cdiv dir=\"ltr\"\u003E© 2025 Henrik Kniberg\u003C\u002Fdiv\u003E","copyright_in_footer":false,"created_at":"2025-01-25T21:51:32.000Z","current_published_version_id":22749,"default_package_id":100665,"enabled_forums":null,"forum_url":null,"free_purchase_requires_membership":false,"full_slug":"courses\u002Fleanpub\u002Fainutshell","google_analytics_code":null,"home_page_path":"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fhome","instructors_label":"Instructors","landing_page_path":"\u002Fcourses\u002Fleanpub\u002Fainutshell","landing_page_url":"http:\u002F\u002Fleanpub.com\u002Fcourses\u002Fleanpub\u002Fainutshell","material_book_id":90579,"mature_content":false,"meta_description":"High level introduction to Generative AI, with concrete examples","percent_complete":100,"preview_version_id":22708,"publisher_id":1,"show_what_author_gets":true,"show_num_readers":null,"slug":"ainutshell","state":"published","subscription_id":null,"publisher_slug":"leanpub","subtitle":"How to Survive and Thrive in the Age of AI","sync_mode":"github","tagline":null,"teaser_text":"\u003Cp\u003EThis is a fast-paced, practical, and visual guide to the strange new world of Generative AI. It is like an extended version of Henrik's viral video with the same name.\u003C\u002Fp\u003E","title":"Generative AI in a Nutshell (The Course)","non_leanpub_publisher":false,"name":"Generative AI in a Nutshell (The Course)","num_copies_sold":null,"title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_list?1738779790","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_list2x?1738779790","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_featured?1738779790","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_featured2x?1738779790","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_hero?1738779790","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_hero2x?1738779790","total_copies_sold":12,"unlisted":false,"position":3241,"id":3467,"accepted_course_authors":[{"id":3634,"type":"CourseAuthor"}],"packages":[{"id":100665,"type":"Package"}],"published_course_sets":[],"current_published_version":[{"id":22749,"type":"CourseVersion"}],"publisher":[{"id":1,"type":"Publisher"}],"preview_version":null,"material_book":[{"id":90579,"type":"Book"}]}},"errors":{},"indexes":{"{\"featured\":true}":[3467]},"loading":{"{\"featured\":true}":false}},"CourseAttempt":{"all":{},"errors":{},"indexes":{},"loading":{}},"CourseAuthor":{"all":{"3634":{"type":"CourseAuthor","course_id":3467,"created_at":"2025-01-25T21:51:32.000Z","cause_royalty_percentage":"0.0","cause_id":null,"instructor_title":"Instructor","is_instructor":true,"name":"Henrik Kniberg","blurb":"\u003Cp\u003EHenrik Kniberg is a cofounder and chief scientist at Ymnig.ai. He is an AI whisperer, trainer, product developer, and author. Henrik is famous for his viral videos \"Spotify Engineering Culture\", \"Product Ownership in a Nutshell\", and \"Generative AI in a Nutshell\", for silly metaphors such as the skateboard metaphor for product development, and for his work as Minecraft developer. He lives in Stockholm with his wife and four kids and a bunch of random music instruments.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E","state":"accepted","updated_at":"2025-01-25T21:51:41.000Z","username":"hkniberg","user_id":4496,"primary":true,"view_invitation_path":null,"id":3634,"user":[{"id":4496,"type":"User"}],"course":[{"id":3467,"type":"Course"}]}},"errors":{},"indexes":{},"loading":{}},"CoursePurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"CourseSet":{"all":{"34":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fcsharp-architect"},"type":"CourseSet","allow_free_purchases":false,"clicky_analytics_code":null,"course_count":4,"course_set":true,"created_at":"2021-05-12T07:19:59.000Z","description":"\u003Cp\u003ETaking this course bundle, you'll learn:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003ESOLID principles (SRP, OCP, ISP, LSP, DIP) in-depth\u003C\u002Fli\u003E\u003Cli\u003EMeta principles: DRY, KISS, YAGNI, SoC, CQS, Law of Demeter, PoLA\u003C\u002Fli\u003E\u003Cli\u003EDependency Injection in Depth: IoC or DI containers, best practices, and anti-patterns\u003C\u002Fli\u003E\u003Cli\u003EFunctional Programming in C#: purity and side effects, functional C# features, immutability, extendibility, dealing with errors, dealing with nulls\u003C\u002Fli\u003E\u003Cli\u003EClean Coding in C#: best practices of API designing\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003ETake this course set right now and become a better C# developer!\u003C\u002Fp\u003E","featured":true,"free_purchase_requires_membership":true,"google_analytics_code":null,"is_editor_and_jhu_is_publisher":false,"language_code3":"eng","language_id":124,"mature_content":false,"maximum_price":60,"minimum_paid_price":"29.0","name":"Design and Architecture Fundamentals in C#","publisher_id":1,"publisher_is_leanpub":true,"publisher_slug":"leanpub","ratio_of_revenue_to_authors":1,"royalties_to_revenue_ratio":"0.8","s_banner_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_banner\u002FControl-Statements-Loops.jpg?1621306529","s_banner_cover_url2x":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_banner2x\u002FControl-Statements-Loops.jpg?1621306529","s_banner2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_banner2x\u002FControl-Statements-Loops.jpg?1621306529","s_featured_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_featured\u002FControl-Statements-Loops.jpg?1621306529","s_featured2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_featured2x\u002FControl-Statements-Loops.jpg?1621306529","s_hero_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_hero\u002FControl-Statements-Loops.jpg?1621306529","s_hero2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_hero2x\u002FControl-Statements-Loops.jpg?1621306529","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_list\u002FControl-Statements-Loops.jpg?1621306529","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_list2x\u002FControl-Statements-Loops.jpg?1621306529","simple_description":"Taking this course bundle, you'll learn:SOLID principles (SRP, OCP, ISP, LSP, DIP) in-depthMeta principles: DRY, KISS, YAGNI, SoC, CQS, Law of Demeter, PoLADependency Injection in Depth: IoC or DI containers, best practices, and anti-patternsFunctional Programming in C#: purity and side effects, functional C# features, immutability, extendibility, dealing with errors, dealing with nullsClean Coding in C#: best practices of API designingTake this course set right now and become a better C# developer!","slug":"csharp-architect","state":"published","stripe_description":"The Track Design and Architecture Fundamentals in C# with courses \"Software Architecture: Meta and SOLID Principles in C#\", \"Software Architecture: Dependency Injection in .NET\", \"Software Design: Functional Programming in C#\", \"Master the Art of Writing Clean Code in C#\"","stripe_image":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_list2x\u002FControl-Statements-Loops.jpg?1621306529","stripe_name":"Design and Architecture Fundamentals in C#","stripe_package_name":null,"suggested_price":"29.0","title":"Design and Architecture Fundamentals in C#","updated_at":"2025-04-08T19:37:12.000Z","user_id":871896,"id":34,"publisher":[{"id":1,"type":"Publisher"}],"course_set_packages":[{"id":77,"type":"CourseSetPackage"},{"id":78,"type":"CourseSetPackage"},{"id":79,"type":"CourseSetPackage"},{"id":80,"type":"CourseSetPackage"}],"packages":[{"id":52603,"type":"Package"},{"id":57554,"type":"Package"},{"id":59295,"type":"Package"},{"id":59429,"type":"Package"}],"courses":[{"id":141,"type":"Course"},{"id":374,"type":"Course"},{"id":461,"type":"Course"},{"id":473,"type":"Course"}]}},"errors":{},"indexes":{"{\"featured\":true}":[34]},"loading":{"{\"featured\":true}":false}},"CourseSetAttempt":{"all":{},"errors":{},"indexes":{},"loading":{}},"CourseSetPackage":{"all":{"77":{"type":"CourseSetPackage","course_set_id":34,"course_package_id":59429,"course_id":473,"state":"accepted","user_id":871896,"id":77,"course_set":[{"id":34,"type":"CourseSet"}],"course_package":[{"id":59429,"type":"Package"}]},"78":{"type":"CourseSetPackage","course_set_id":34,"course_package_id":57554,"course_id":374,"state":"accepted","user_id":871896,"id":78,"course_set":[{"id":34,"type":"CourseSet"}],"course_package":[{"id":57554,"type":"Package"}]},"79":{"type":"CourseSetPackage","course_set_id":34,"course_package_id":59295,"course_id":461,"state":"accepted","user_id":871896,"id":79,"course_set":[{"id":34,"type":"CourseSet"}],"course_package":[{"id":59295,"type":"Package"}]},"80":{"type":"CourseSetPackage","course_set_id":34,"course_package_id":52603,"course_id":141,"state":"accepted","user_id":871896,"id":80,"course_set":[{"id":34,"type":"CourseSet"}],"course_package":[{"id":52603,"type":"Package"}]}},"errors":{},"indexes":{},"loading":{}},"CourseSetPurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"CourseVersion":{"all":{"22749":{"type":"CourseVersion","course_id":3467,"state":"completed","release_notes":null,"json_toc":"[{\"level\":2,\"title\":\"Part 1 - In a Nutshell\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1---in-a-nutshell\",\"file_count\":1,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Introduction\",\"quiz_type\":null,\"path\":\"#leanpub-auto-introduction\",\"file_count\":2,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 1: How it Works\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-1-how-it-works\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 1\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-5-0\",\"file_count\":3,\"quiz_id\":50126,\"quiz_markua_id\":\"exercise-5-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz\",\"file_count\":3,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 1\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-5\",\"file_count\":3,\"quiz_id\":50127,\"quiz_markua_id\":\"quiz-5\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 2: Large Language Model Training\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-2-large-language-model-training\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 2\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-7-2\",\"file_count\":4,\"quiz_id\":50128,\"quiz_markua_id\":\"exercise-7-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-1\",\"file_count\":4,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 2\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-7\",\"file_count\":4,\"quiz_id\":50129,\"quiz_markua_id\":\"quiz-7\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 3: Limitations\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-3-limitations\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 3\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-8-4\",\"file_count\":5,\"quiz_id\":50130,\"quiz_markua_id\":\"exercise-8-4\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-2\",\"file_count\":5,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 3\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-8\",\"file_count\":5,\"quiz_id\":50131,\"quiz_markua_id\":\"quiz-8\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 4: Model Types\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-4-model-types\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 4\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-9-1\",\"file_count\":6,\"quiz_id\":50132,\"quiz_markua_id\":\"exercise-9-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-3\",\"file_count\":6,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 4\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-9\",\"file_count\":6,\"quiz_id\":50133,\"quiz_markua_id\":\"quiz-9\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 5: Multimodal Models, Emergent Capabilities, and the Age of AI\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-5-multimodal-models-emergent-capabilities-and-the-age-of-ai\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 5\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-12-1\",\"file_count\":7,\"quiz_id\":50134,\"quiz_markua_id\":\"exercise-12-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-4\",\"file_count\":7,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 5\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-12\",\"file_count\":7,\"quiz_id\":50135,\"quiz_markua_id\":\"quiz-12\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 6: Mindset\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-6-mindset\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 6\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-13-0\",\"file_count\":8,\"quiz_id\":50136,\"quiz_markua_id\":\"exercise-13-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-5\",\"file_count\":8,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 6\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-13\",\"file_count\":8,\"quiz_id\":50137,\"quiz_markua_id\":\"quiz-13\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 7: The Role of Humans\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-7-the-role-of-humans\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 7\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-14-3\",\"file_count\":9,\"quiz_id\":50138,\"quiz_markua_id\":\"exercise-14-3\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-6\",\"file_count\":9,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 7\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-14\",\"file_count\":9,\"quiz_id\":50139,\"quiz_markua_id\":\"quiz-14\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 8: Prompt Engineering and Building AI-Powered Products\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-8-prompt-engineering-and-building-ai-powered-products\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 8\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-16-1\",\"file_count\":10,\"quiz_id\":50140,\"quiz_markua_id\":\"exercise-16-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-7\",\"file_count\":10,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 8\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-16\",\"file_count\":10,\"quiz_id\":50141,\"quiz_markua_id\":\"quiz-16\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 9: Autonomous Agents with Tools\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-9-autonomous-agents-with-tools\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 9\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-17-3\",\"file_count\":11,\"quiz_id\":50142,\"quiz_markua_id\":\"exercise-17-3\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-8\",\"file_count\":11,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 9\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-17\",\"file_count\":11,\"quiz_id\":50143,\"quiz_markua_id\":\"quiz-17\",\"attempts\":2},{\"level\":2,\"title\":\"Part 1 Wrap up\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-1-wrap-up\",\"file_count\":12,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Part 2 - Beyond the Nutshell\",\"quiz_type\":null,\"path\":\"#leanpub-auto-part-2---beyond-the-nutshell\",\"file_count\":13,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 10: My Journey into AI\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-10-my-journey-into-ai\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 10\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-20-5\",\"file_count\":14,\"quiz_id\":50144,\"quiz_markua_id\":\"exercise-20-5\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-9\",\"file_count\":14,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 10\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-20\",\"file_count\":14,\"quiz_id\":50145,\"quiz_markua_id\":\"quiz-20\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 11: Leading an AI transformation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-11-leading-an-ai-transformation\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Avoid using AI to fire people\",\"quiz_type\":null,\"path\":\"#leanpub-auto-avoid-using-ai-to-fire-people\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 11\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-21-2\",\"file_count\":15,\"quiz_id\":50146,\"quiz_markua_id\":\"exercise-21-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-10\",\"file_count\":15,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 11\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-21\",\"file_count\":15,\"quiz_id\":50147,\"quiz_markua_id\":\"quiz-21\",\"attempts\":2},{\"level\":2,\"title\":\"Interlude: Egbert’s Life Story\",\"quiz_type\":null,\"path\":\"#leanpub-auto-interlude-egberts-life-story\",\"file_count\":16,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"Lesson 12: Prompt Engineering \\u003cspan i=\\\"prompt engineering techniques\\\"\\u003eTechniques\\u003c\u002Fspan\\u003e\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-12-prompt-engineering-techniquesi-prompt-engineering-techniques-\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 12\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-23-2\",\"file_count\":17,\"quiz_id\":50148,\"quiz_markua_id\":\"exercise-23-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-11\",\"file_count\":17,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 12\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-23\",\"file_count\":17,\"quiz_id\":50149,\"quiz_markua_id\":\"quiz-23\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 13: Prompt Generation (or The Angry Grandma) and Retrieval Augmented \\u003cspan i=\\\"Retrieval Augmented Generation (RAG)\\\"\\u003eGeneration\\u003c\u002Fspan\\u003e and Function Calling\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-13-prompt-generation-or-the-angry-grandma-and-retrieval-augmented-generationi-retrieval-augmented-generation-rag-and-function-calling\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Prompt Generation\",\"quiz_type\":null,\"path\":\"#leanpub-auto-prompt-generation\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Approach 1: Including all data\",\"quiz_type\":null,\"path\":\"#leanpub-auto-approach-1-including-all-data\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-12\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 13\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-25-1\",\"file_count\":18,\"quiz_id\":50150,\"quiz_markua_id\":\"exercise-25-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-12\",\"file_count\":18,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 13\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-25\",\"file_count\":18,\"quiz_id\":50151,\"quiz_markua_id\":\"quiz-25\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 14: The AI Doctor and the AI Nutrionist\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-14-the-ai-doctor-and-the-ai-nutrionist\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-12\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-13\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 14\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-27-0\",\"file_count\":19,\"quiz_id\":50152,\"quiz_markua_id\":\"exercise-27-0\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-13\",\"file_count\":19,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 14\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-27\",\"file_count\":19,\"quiz_id\":50153,\"quiz_markua_id\":\"quiz-27\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 15: The AI Career Coach and the AI Book Editor\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-15-the-ai-career-coach-and-the-ai-book-editor\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-13\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-14\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 15\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-28-1\",\"file_count\":20,\"quiz_id\":50154,\"quiz_markua_id\":\"exercise-28-1\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-14\",\"file_count\":20,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 15\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-28\",\"file_count\":20,\"quiz_id\":50155,\"quiz_markua_id\":\"quiz-28\",\"attempts\":2},{\"level\":2,\"title\":\"Lesson 16: The AI Software Engineer, the AI Journalist Who Became a TV Star, and the AI Butler with a Will of His Own\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-16-the-ai-software-engineer-the-ai-journalist-who-became-a-tv-star-and-the-ai-butler-with-a-will-of-his-own\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Lesson Material\",\"quiz_type\":null,\"path\":\"#leanpub-auto-lesson-material-14\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":3,\"title\":\"Exercise\",\"quiz_type\":null,\"path\":\"#leanpub-auto-exercise-15\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Exercise 16\",\"quiz_type\":\"exercise\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fexercise-31-2\",\"file_count\":21,\"quiz_id\":50156,\"quiz_markua_id\":\"exercise-31-2\",\"attempts\":null},{\"level\":3,\"title\":\"Quiz\",\"quiz_type\":null,\"path\":\"#leanpub-auto-quiz-15\",\"file_count\":21,\"quiz_id\":null,\"section_num\":null},{\"level\":4,\"title\":\"Quiz 16\",\"quiz_type\":\"test\",\"path\":\"\u002Fcourses\u002Fleanpub\u002Fainutshell\u002Fquizzes\u002Fquiz-31\",\"file_count\":21,\"quiz_id\":50157,\"quiz_markua_id\":\"quiz-31\",\"attempts\":2},{\"level\":2,\"title\":\"A Safety Experiment\",\"quiz_type\":null,\"path\":\"#leanpub-auto-a-safety-experiment\",\"file_count\":22,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"The Meta-Chapter (or Bookception)\",\"quiz_type\":null,\"path\":\"#leanpub-auto-the-meta-chapter-or-bookception\",\"file_count\":23,\"quiz_id\":null,\"section_num\":null},{\"level\":2,\"title\":\"How this book (and the video) came to be\",\"quiz_type\":null,\"path\":\"#leanpub-auto-how-this-book-and-the-video-came-to-be\",\"file_count\":24,\"quiz_id\":null,\"section_num\":null}]","id":22749}},"errors":{},"indexes":{},"loading":{}},"CurrentUser":{"all":{},"errors":{},"indexes":{},"loading":{},"id":null},"Editor":{"all":{},"errors":{},"indexes":{},"loading":{}},"EditorFile":{"all":{},"errors":{},"indexes":{},"loading":{}},"EditorResource":{"all":{},"errors":{},"indexes":{},"loading":{}},"GoogleDocsBook":{"all":{},"errors":{},"indexes":{},"loading":{}},"Invitation":{"all":{},"errors":{},"indexes":{},"loading":{}},"Language":{"all":{"124":{"type":"Language","books_count":28452,"code":"eng","created_at":"2015-04-24T03:26:30.000Z","name":"English","code2":"en","direction":"ltr","updated_at":"2025-04-09T06:47:48.000Z","id":124}},"errors":{},"indexes":{},"loading":{}},"Notification":{"all":{},"errors":{},"indexes":{},"loading":{}},"Order":{"all":{},"errors":{},"indexes":{},"loading":{}},"OrderItem":{"all":{},"errors":{},"indexes":{},"loading":{}},"Package":{"all":{"52603":{"type":"Package","created_at":"2018-06-17T07:55:32.000Z","packagable_id":141,"packagable_type":"Course","packagable_slug":"art-of-clean-coding","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":true,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":false,"maximum_price":40,"minimum_paid_price":"19.0","name":"The Course","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"Master the Art of Writing Clean Code in C#","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"course","subtitle":"Learn how to write clean and maintainable code in C#","suggested_price":"19.0","stripe_name":"Master the Art of Writing Clean Code in C#","stripe_package_name":"The Course","stripe_description":"The Course","stripe_image":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_list2x?1621303820","tagline":"Master the Art of Writing Clean Code in C#","team_discount":false,"title":"Master the Art of Writing Clean Code in C#","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_list?1621303820","title_page_url_s_shelf":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_shelf?1621303820","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_featured?1621303820","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F141\u002Fs_hero?1621303820","updated_at":"2018-06-29T11:33:24.000Z","id":52603,"packagable":[{"id":141,"type":"Course"}],"asset_packagings":[],"assets":[]},"57554":{"type":"Package","created_at":"2019-01-25T16:15:48.000Z","packagable_id":374,"packagable_type":"Course","packagable_slug":"dotnet-injection","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":true,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":false,"maximum_price":40,"minimum_paid_price":"19.0","name":"The Course","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"Software Architecture: Dependency Injection in .NET","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"course","subtitle":"Learn Dependency Injection techniques along with corresponding IoC-frameworks (DI-Containers)","suggested_price":"19.0","stripe_name":"Software Architecture: Dependency Injection in .NET","stripe_package_name":"The Course","stripe_description":"The Course","stripe_image":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_list2x?1621304164","tagline":"Software Architecture: Dependency Injection in .NET","team_discount":false,"title":"Software Architecture: Dependency Injection in .NET","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_list?1621304164","title_page_url_s_shelf":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_shelf?1621304164","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_featured?1621304164","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F374\u002Fs_hero?1621304164","updated_at":"2019-01-29T14:03:26.000Z","id":57554,"packagable":[{"id":374,"type":"Course"}],"asset_packagings":[],"assets":[]},"59295":{"type":"Package","created_at":"2019-04-03T11:10:25.000Z","packagable_id":461,"packagable_type":"Course","packagable_slug":"funcsharp","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":true,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":false,"maximum_price":40,"minimum_paid_price":"19.0","name":"The Course","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"Software Design: Functional Programming in C#","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"course","subtitle":"Learn the principles of Functional Programming & how to apply them with the power of C# to improve software architecture.","suggested_price":"19.0","stripe_name":"Software Design: Functional Programming in C#","stripe_package_name":"The Course","stripe_description":"The Course","stripe_image":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_list2x?1621304309","tagline":"Software Design: Functional Programming in C#","team_discount":false,"title":"Software Design: Functional Programming in C#","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_list?1621304309","title_page_url_s_shelf":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_shelf?1621304309","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_featured?1621304309","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F461\u002Fs_hero?1621304309","updated_at":"2019-04-06T11:05:23.000Z","id":59295,"packagable":[{"id":461,"type":"Course"}],"asset_packagings":[],"assets":[]},"59429":{"type":"Package","created_at":"2019-04-08T09:26:10.000Z","packagable_id":473,"packagable_type":"Course","packagable_slug":"solid","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":true,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":false,"maximum_price":40,"minimum_paid_price":"19.0","name":"The Course","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"Software Architecture: Meta and SOLID Principles in C#","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"course","subtitle":"Learn how to develop maintainable software systems applying Design Patterns based on Meta and SOLID Principles.","suggested_price":"19.0","stripe_name":"Software Architecture: Meta and SOLID Principles in C#","stripe_package_name":"The Course","stripe_description":"The Course","stripe_image":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_list2x?1621304338","tagline":"Software Architecture: Meta and SOLID Principles in C#","team_discount":false,"title":"Software Architecture: Meta and SOLID Principles in C#","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_list?1621304338","title_page_url_s_shelf":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_shelf?1621304338","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_featured?1621304338","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F473\u002Fs_hero?1621304338","updated_at":"2019-04-08T09:36:53.000Z","id":59429,"packagable":[{"id":473,"type":"Course"}],"asset_packagings":[],"assets":[]},"100508":{"type":"Package","created_at":"2025-01-22T00:53:39.000Z","packagable_id":90444,"packagable_type":"Book","packagable_slug":"aamfp-10th","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":true,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":true,"maximum_price":50,"minimum_paid_price":"19.0","name":"The Book","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"\u003Cp\u003EActionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics...\u003C\u002Fp\u003E","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"book","subtitle":"","suggested_price":"25.0","stripe_name":"Actionable Agile Metrics For Predictability: Tenth Anniversary Edition","stripe_package_name":"The Book","stripe_description":"The Book","stripe_image":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_list2x?1743556078","tagline":"\u003Cp\u003EActionable Agile Metrics for Predictability is a comprehensive guide on how to use flow metrics and analytics to get the predictability your customers crave.\u003C\u002Fp\u003E","team_discount":false,"title":"Actionable Agile Metrics For Predictability: Tenth Anniversary Edition","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_list?1743556078","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_shelf?1743556078","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_featured?1743556078","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Faamfp-10th\u002Fs_hero?1743556078","updated_at":"2025-02-02T13:40:08.000Z","id":100508,"packagable":[{"id":90444,"type":"Book"}],"asset_packagings":[],"assets":[]},"100665":{"type":"Package","created_at":"2025-01-25T21:51:32.000Z","packagable_id":3467,"packagable_type":"Course","packagable_slug":"ainutshell","allow_free_purchases":false,"description":null,"free_minimum":false,"free_purchase_only":false,"free_purchase_requires_membership":false,"is_package":true,"leanpub_can_adjust_prices":false,"leanpub_can_create_team_discounts":false,"maximum_price":260,"minimum_paid_price":"129.0","name":"The Course","package":true,"quantity":1,"ratio_of_revenue_to_authors":"1.0","ratio_of_revenue_to_causes":"0.0","royalties_to_revenue_ratio":"0.8","short_about_the_book":null,"short_description":"","short_tagline":"Generative AI in a Nutshell (The Course)","show_what_author_gets":true,"show_what_cause_gets":false,"slug":"course","subtitle":"How to Survive and Thrive in the Age of AI","suggested_price":"129.0","stripe_name":"Generative AI in a Nutshell (The Course)","stripe_package_name":"The Course","stripe_description":"The Course","stripe_image":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_list2x?1738779790","tagline":"Generative AI in a Nutshell (The Course)","team_discount":false,"title":"Generative AI in a Nutshell (The Course)","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_list?1738779790","title_page_url_s_shelf":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_shelf?1738779790","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_featured?1738779790","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3467\u002Fs_hero?1738779790","updated_at":"2025-02-05T17:43:31.000Z","id":100665,"packagable":[{"id":3467,"type":"Course"}],"asset_packagings":[],"assets":[]}},"errors":{},"indexes":{},"loading":{}},"PackageDiscount":{"all":{},"errors":{},"indexes":{},"loading":{}},"PartnerSale":{"all":{},"errors":{},"indexes":{},"loading":{}},"PendingProduct":{"all":{},"errors":{},"indexes":{},"loading":{}},"PendingServiceProduct":{"all":{},"errors":{},"indexes":{},"loading":{}},"Plan":{"all":{},"errors":{},"indexes":{},"loading":{}},"Podcast":{"all":{},"errors":{},"indexes":{},"loading":{}},"PodcastEpisode":{"all":{"161":{"type":"PodcastEpisode","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3","avatar_url":"missing_avatar.jpg","blog_link":"https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc","blurb_html":"\u003Cp\u003EWe've decided to merge our Backmatter podcast interviews into our other podcast, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter\"\u003EFrontmatter\u003C\u002Fa\u003E, and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor an explanation of why we're doing this (it's good news!), please listen to \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3\"\u003Ethis short recording\u003C\u002Fa\u003E wherever you've found it, or read this post on our blog: ...\u003C\u002Fp\u003E","created_at":"2019-09-07T01:41:21.000Z","description_html":"\u003Cp\u003EWe've decided to merge our Backmatter podcast interviews into our other podcast, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter\"\u003EFrontmatter\u003C\u002Fa\u003E, and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor an explanation of why we're doing this (it's good news!), please listen to \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3\"\u003Ethis short recording\u003C\u002Fa\u003E wherever you've found it, or read this post on our blog: \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\"\u003Ehttps:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.\u003C\u002Fp\u003E\n","duration":"02:29","episode_number":null,"featured":true,"interview_date":"2019-09-07","interviewee_urls":[],"interviewer_name":"Len Epp","keywords":"","name":"Len Epp","is_newest":false,"podcast_type":"backmatter","related_links_html":"\n","release_date":"2019-09-07T01:38:00.000Z","short_description_html":"We&#39;ve decided to merge our Backmatter podcast interviews into our other podcast, Frontmatter, and going forward, we&#39;re going to publish a...","slug":"backmatter-len-epp-07-09-19","spotify_url":null,"subtitle":"The Future of the Backmatter Podcast","title":"A Note About the Backmatter Podcast","updated_at":"2020-12-18T03:26:19.000Z","user_id":17244,"youtube_url":null,"id":161,"user":[{"id":17244,"type":"User"}],"podcast":[{"id":1,"type":"Podcast"}]},"331":{"type":"PodcastEpisode","audio_file_url":"https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3","avatar_url":"missing_avatar.jpg","blog_link":"","blurb_html":"\u003Cp\u003E\u003Cstrong\u003ENicolas Brown\u003C\u002Fstrong\u003E - Agility expert Nicolas Brown, author of \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility\u003C\u002Fa\u003E, joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.\u003C\u002Fp\u003E\n","created_at":"2025-04-03T02:34:48.000Z","description_html":"\u003Cp\u003EIn this Leanpub Podcast episode, Len Epp interviews Nicolas Brown, author of \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility: Backed by evidence, built for results\u003C\u002Fa\u003E\u003C\u002Fem\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003ENicolas shares his unique path from the Royal Mail to working in e-commerce, financial services, and eventually as a sought-after agility and product consultant. He explains his evidence-based approach to agile coaching, and why focusing on flow, value, and culture leads to meaningful results. The conversation covers metrics, agile dogma, writing a book, and how leaders can create truly adaptive organizations.\u003C\u002Fp\u003E\n\n\u003Cp\u003E📘 Learn more about the book: \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility\u003C\u002Fa\u003E\u003Cbr \u002F\u003E\n🎙️ Listen to more episodes: \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002F@leanpub\"\u003EThe Leanpub YouTube Channel\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on April 1, 2025.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is here: \u003Ca href=\"https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3\"\u003Ehttps:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3\u003C\u002Fa\u003E. The Frontmatter podcast is available on our YouTube channel at \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fleanpub\"\u003Ehttps:\u002F\u002Fwww.youtube.com\u002Fleanpub\u003C\u002Fa\u003E, in Apple Podcasts here \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E, and almost everywhere else people listen to podcasts.\u003C\u002Fp\u003E\n","duration":"01:02:20","episode_number":311,"featured":true,"interview_date":null,"interviewee_urls":[],"interviewer_name":"Len Epp","keywords":"books, writing, agile, management, technology","name":"Nicolas Brown","is_newest":true,"podcast_type":"frontmatter","related_links_html":"\n","release_date":"2025-04-03T02:33:00.000Z","short_description_html":"In this Leanpub Podcast episode, Len Epp interviews Nicolas Brown, author of Real World Agility: Backed by evidence, built for results.\n\n...","slug":"nicolas-brown-03-04-25","spotify_url":null,"subtitle":"A Leanpub Frontmatter Podcast Interview with Nicolas Brown, Author of Real World Agility: Backed by evidence, built for results","title":"Nicolas Brown, Author of Real World Agility","updated_at":"2025-04-06T22:59:59.000Z","user_id":1021109,"youtube_url":"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=SV0T6ro-jUg","id":331,"user":[{"id":1021109,"type":"User"}],"podcast":[{"id":2,"type":"Podcast"}]}},"errors":{},"indexes":{"{\"featured\":true}":[161,331]},"loading":{"{\"featured\":true}":false}},"PossibleReader":{"all":{},"errors":{},"indexes":{},"loading":{},"showForm":true},"Publisher":{"all":{"1":{"links":{"self":"\u002Fp\u002Fleanpub"},"type":"Publisher","created_at":"2012-10-20T04:42:39.000Z","can_use_books_tab":true,"can_use_bundles_tab":true,"can_use_courses_tab":true,"can_use_course_sets_tab":true,"publisher_blurb":"\u003Cp\u003ELeanpub empowers authors to self-publish in-progress ebooks.\u003C\u002Fp\u003E","reversed_logo_url":"missing_avatar.jpg","logo_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fpublisherlogos.leanpub.com\u002Flogos\u002F1\u002Fverso_page\u002Fleanpub_logo.png?1501739906","name":"Leanpub","slug":"leanpub","university":false,"about_university":null,"cover_url":"missing_avatar.jpg","cover_uploaded":false,"updated_at":"2017-08-03T05:58:28.000Z","has_subscription":true,"id":1}},"errors":null,"indexes":{},"loading":{},"index":{},"slugValidity":null,"userValidity":null,"creating":false},"Purchase":{"all":{},"errors":{},"indexes":{},"loading":{},"markingAsPinged":{}},"PurchasedPackage":{"all":{},"errors":{},"indexes":{},"loading":{}},"Question":{"all":{},"errors":{},"indexes":{},"loading":{}},"QuestionAttempt":{"all":{},"errors":{},"indexes":{},"loading":{}},"QuestionWithHint":{"all":{},"errors":{},"indexes":{},"loading":{}},"Quiz":{"all":{},"errors":{},"indexes":{},"loading":{}},"QuizAttempt":{"all":{},"errors":{},"indexes":{},"loading":{}},"RetiredQuiz":{"all":{},"errors":{},"indexes":{},"loading":{}},"ServicePurchase":{"all":{},"errors":{},"indexes":{},"loading":{}},"ShelfBook":{"all":{},"errors":{},"indexes":{},"loading":{}},"ShelfSpot":{"all":{"741":{"type":"ShelfSpot","created_at":"2025-03-13T14:04:06.000Z","book_id":90279,"shelf_spot_purchase_id":671,"service_purchase_id":null,"id":741,"book":[{"id":90279,"type":"Book"}]},"742":{"type":"ShelfSpot","created_at":"2025-03-14T04:18:39.000Z","book_id":87360,"shelf_spot_purchase_id":672,"service_purchase_id":null,"id":742,"book":[{"id":87360,"type":"Book"}]},"743":{"type":"ShelfSpot","created_at":"2025-03-20T13:40:31.000Z","book_id":90921,"shelf_spot_purchase_id":673,"service_purchase_id":null,"id":743,"book":[{"id":90921,"type":"Book"}]},"744":{"type":"ShelfSpot","created_at":"2025-04-08T21:57:10.000Z","book_id":78373,"shelf_spot_purchase_id":null,"service_purchase_id":5540427,"id":744,"book":[{"id":78373,"type":"Book"}]},"745":{"type":"ShelfSpot","created_at":"2025-04-09T09:45:49.000Z","book_id":86270,"shelf_spot_purchase_id":674,"service_purchase_id":null,"id":745,"book":[{"id":86270,"type":"Book"}]}},"errors":{},"indexes":{"{\"landing\":true,\"page\":1}":[742,743,741,744,745]},"loading":{"{\"landing\":true,\"page\":1}":false},"shelfBooks":{},"full":[{"id":742,"book_id":87360,"created_at":"2025-03-14T04:18:39.000Z","slug":"thedscv3handbook","title":"The DSC V3 Handbook","subtitle":"","tagline":"Learn about the beginning journey of the DSC Version 3 open-source project on GitHub in this extensive handbook, which started from the early alpha releases.","authors":"Gijs Reijn","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_mini?1722314672","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_mini2x?1722314672","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_list?1722314672","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_list2x?1722314672","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_shelf?1722314672","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_shelf2x?1722314672","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_featured?1722314672","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_featured2x?1722314672","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_hero?1722314672","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthedscv3handbook\u002Fs_hero2x?1722314672"},{"id":743,"book_id":90921,"created_at":"2025-03-20T13:40:31.000Z","slug":"wholehearted-mike-burrows","title":"Wholehearted","subtitle":"Engaging with Complexity in the Deliberately Adaptive Organisation","tagline":"New ways to understand your organisation, and new ways to engage with its challenges. The Deliberately Adaptive Organisation is a fresh, ground-up reconstruction of the classic Viable System Model, approached humanely and with a 21st-century appreciation for complexity.","authors":"Mike Burrows","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_mini?1742108781","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_mini2x?1742108781","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_list?1742108781","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_list2x?1742108781","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_shelf?1742108781","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_shelf2x?1742108781","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_featured?1742108781","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_featured2x?1742108781","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_hero?1742108781","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwholehearted-mike-burrows\u002Fs_hero2x?1742108781"},{"id":741,"book_id":90279,"created_at":"2025-03-13T14:04:06.000Z","slug":"be-a-learning-machine","title":"Be a Learning Machine","subtitle":"","tagline":"You’ll just need the Five Essential Elements of Learning Through five essential elements, you’ll gain the ability to learn anything deeply—no matter how complex the subject. These five pillars of effective learning will become lifelong tools, guiding you every time you set out to truly master new knowledge and retain it permanently. If you're ready to stop passively consuming information and start truly mastering it, this book is for you.","authors":"Alberto Souza","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_mini?1738244214","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_mini2x?1738244214","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_list?1738244214","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_list2x?1738244214","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_shelf?1738244214","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_shelf2x?1738244214","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_featured?1738244214","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_featured2x?1738244214","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_hero?1738244214","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fbe-a-learning-machine\u002Fs_hero2x?1738244214"},{"id":744,"book_id":78373,"created_at":"2025-04-08T21:57:10.000Z","slug":"TheArtOfLeadership","title":"THE ART OF LEADERSHIP","subtitle":"Purpose and Integrity for Sustainable Success in Turbulent Times","tagline":"“Purpose is a surer path to productivity than pressure. Pressure keeps knocking you off the path. Purpose keeps bringing you back onto the path.”  Kent Beck THE ART OF LEADERSHIP is a modern interpretation of Lao Tzu’s Tao Te Ching — a guide for sustainable success in turbulent times using purpose and integrity instead of pressure and control.","authors":"Erik Schön","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_mini?1649026963","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_mini2x?1649026963","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_list?1649026963","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_list2x?1649026963","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_shelf?1649026963","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_shelf2x?1649026963","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_featured?1649026963","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_featured2x?1649026963","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_hero?1649026963","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FTheArtOfLeadership\u002Fs_hero2x?1649026963"},{"id":745,"book_id":86270,"created_at":"2025-04-09T09:45:49.000Z","slug":"cleancodeprinciplesandpatterns2ndedition","title":"Clean Code Principles and Patterns, 2nd Edition","subtitle":"A Software Practitioner's Handbook","tagline":"One of the most comprehensive no-fluff guides for software developers to help them write clean code every day. The book is packed with principles and patterns that help developers, from novices and juniors to seniors and experts, to write cleaner code. ","authors":"Petri Silen","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_mini?1712998004","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_mini2x?1712998004","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_list?1712998004","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_list2x?1712998004","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_shelf?1712998004","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_shelf2x?1712998004","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_featured?1712998004","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_featured2x?1712998004","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_hero?1712998004","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcleancodeprinciplesandpatterns2ndedition\u002Fs_hero2x?1712998004"}],"taxData":null,"options":null},"ShelfSpotOption":{"indexes":{},"globalAuthorPlansLoading":false,"all":{},"globalInstructodPlansErrors":null,"globalInstructodPlansLoading":false,"pricing":null,"globalAuthorPlansErrors":null,"errors":{},"pricingErrors":null,"pricingLoading":false,"globalInstructodPlans":null,"loading":{},"globalAuthorPlans":null},"ShoppingCart":{"cart":null,"errors":null,"loading":false},"SimpleAuthor":{"all":{"30196":{"type":"SimpleAuthor","created_at":"2015-07-18T21:19:59.000Z","name":"OpenIntro","position":4,"username":"openintro","user_id":528236,"book_id":29031,"cause_id":null,"id":30196,"user":[{"id":528236,"type":"User"}],"book":[{"id":29031,"type":"Book"}]},"30320":{"type":"SimpleAuthor","created_at":"2015-07-24T04:31:19.000Z","name":"Christopher Barr","position":3,"username":"cdbarr","user_id":530676,"book_id":29031,"cause_id":null,"id":30320,"user":[{"id":530676,"type":"User"}],"book":[{"id":29031,"type":"Book"}]},"30321":{"type":"SimpleAuthor","created_at":"2015-07-24T04:31:41.000Z","name":"Mine Cetinkaya-Rundel","position":2,"username":"mine-cetinkaya-rundel","user_id":528698,"book_id":29031,"cause_id":null,"id":30321,"user":[{"id":528698,"type":"User"}],"book":[{"id":29031,"type":"Book"}]},"31218":{"type":"SimpleAuthor","created_at":"2015-08-29T10:08:41.000Z","name":"Simon Brown","position":null,"username":"simonbrown","user_id":4771,"book_id":29983,"cause_id":null,"id":31218,"user":[{"id":4771,"type":"User"}],"book":[{"id":29983,"type":"Book"}]},"53257":{"type":"SimpleAuthor","created_at":"2018-12-29T21:38:55.000Z","name":"Andriy Burkov","position":1,"username":"burkov","user_id":1475540,"book_id":51006,"cause_id":null,"id":53257,"user":[{"id":1475540,"type":"User"}],"book":[{"id":51006,"type":"Book"}]},"69550":{"type":"SimpleAuthor","created_at":"2020-07-28T23:56:01.000Z","name":"David Diez","position":1,"username":"diez","user_id":2074093,"book_id":29031,"cause_id":null,"id":69550,"user":[{"id":2074093,"type":"User"}],"book":[{"id":29031,"type":"Book"}]},"82221":{"type":"SimpleAuthor","created_at":"2022-03-27T17:50:55.000Z","name":"Rafael Rivera","position":2,"username":"withinrafael","user_id":531327,"book_id":78282,"cause_id":null,"id":82221,"user":[{"id":531327,"type":"User"}],"book":[{"id":78282,"type":"Book"}]},"82222":{"type":"SimpleAuthor","created_at":"2022-03-27T17:56:30.000Z","name":"Paul Thurrott","position":1,"username":"thurrott","user_id":494665,"book_id":78282,"cause_id":null,"id":82222,"user":[{"id":494665,"type":"User"}],"book":[{"id":78282,"type":"Book"}]},"89701":{"type":"SimpleAuthor","created_at":"2024-02-03T14:53:24.000Z","name":"Pete Zerger","position":1,"username":"peterzergerrM1JxfrZxybkj_E3vaN7qQ","user_id":1224807,"book_id":85447,"cause_id":null,"id":89701,"user":[{"id":1224807,"type":"User"}],"book":[{"id":85447,"type":"Book"}]},"92996":{"type":"SimpleAuthor","created_at":"2024-09-07T18:06:56.000Z","name":"Afshine Amidi","position":1,"username":"afshine","user_id":3329850,"book_id":88209,"cause_id":null,"id":92996,"user":[{"id":3329850,"type":"User"}],"book":[{"id":88209,"type":"Book"}]},"92997":{"type":"SimpleAuthor","created_at":"2024-09-07T18:11:29.000Z","name":"Shervine Amidi","position":2,"username":"shervine","user_id":3349811,"book_id":88209,"cause_id":null,"id":92997,"user":[{"id":3349811,"type":"User"}],"book":[{"id":88209,"type":"Book"}]},"94729":{"type":"SimpleAuthor","created_at":"2025-01-04T02:01:06.000Z","name":"Barry O’Reilly","position":1,"username":"barrymoreilly","user_id":3248157,"book_id":89860,"cause_id":null,"id":94729,"user":[{"id":3248157,"type":"User"}],"book":[{"id":89860,"type":"Book"}]},"95248":{"type":"SimpleAuthor","created_at":"2025-01-15T06:50:29.000Z","name":"Andriy Burkov","position":1,"username":"burkov","user_id":1475540,"book_id":90276,"cause_id":null,"id":95248,"user":[{"id":1475540,"type":"User"}],"book":[{"id":90276,"type":"Book"}]},"96096":{"type":"SimpleAuthor","created_at":"2025-02-09T01:40:57.000Z","name":"Afshine Amidi","position":1,"username":"afshine","user_id":3329850,"book_id":90871,"cause_id":null,"id":96096,"user":[{"id":3329850,"type":"User"}],"book":[{"id":90871,"type":"Book"}]},"96097":{"type":"SimpleAuthor","created_at":"2025-02-09T02:16:28.000Z","name":"Shervine Amidi","position":2,"username":"shervine","user_id":3349811,"book_id":90871,"cause_id":null,"id":96097,"user":[{"id":3349811,"type":"User"}],"book":[{"id":90871,"type":"Book"}]},"96098":{"type":"SimpleAuthor","created_at":"2025-02-09T02:23:54.000Z","name":"Yoshiyuki Nakai","position":3,"username":"yoshiyukinakai","user_id":3453457,"book_id":90871,"cause_id":null,"id":96098,"user":[{"id":3453457,"type":"User"}],"book":[{"id":90871,"type":"Book"}]},"96819":{"type":"SimpleAuthor","created_at":"2025-03-27T18:19:47.000Z","name":"Dave Cross","position":1,"username":"davorg","user_id":1159505,"book_id":91534,"cause_id":null,"id":96819,"user":[{"id":1159505,"type":"User"}],"book":[{"id":91534,"type":"Book"}]}},"errors":{},"indexes":{},"loading":{}},"SimpleBook":{"all":{"1310":{"type":"SimpleBook","title":"Software Architecture for Developers","slug":"software-architecture-for-developers","tagline":"\u003Cp\u003EA developer-friendly, practical and pragmatic guide to lightweight software architecture, technical leadership and the balance with agility.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_mini?1653735155","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_mini2x?1653735155","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_list?1653735155","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_list2x?1653735155","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_shelf?1653735155","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_shelf2x?1653735155","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_featured?1653735155","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_featured2x?1653735155","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_hero?1653735155","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fsoftware-architecture-for-developers\u002Fs_hero2x?1653735155","id":1310,"accepted_authors":[{"id":1279,"type":"SimpleAuthor"}]},"29031":{"type":"SimpleBook","title":"OpenIntro Statistics","slug":"os","tagline":"\u003Cp\u003EA complete foundation for Statistics, also serving as a foundation for Data Science.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ELeanpub revenue supports OpenIntro (US-based nonprofit) so we can provide free desk copies to teachers interested in using OpenIntro Statistics in the classroom and expand the project to support free textbooks in other subjects.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EMore resources: \u003Ca href=\"http:\u002F\u002Fwww.openintro.org\" target=\"_blank\"\u003Eopenintro.org\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_mini?1620484636","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_mini2x?1620484636","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_list?1620484636","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_list2x?1620484636","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_shelf?1620484636","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_shelf2x?1620484636","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_featured?1620484636","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_featured2x?1620484636","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_hero?1620484636","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fos\u002Fs_hero2x?1620484636","id":29031,"accepted_authors":[{"id":30196,"type":"SimpleAuthor"},{"id":30320,"type":"SimpleAuthor"},{"id":30321,"type":"SimpleAuthor"},{"id":69550,"type":"SimpleAuthor"}]},"29983":{"type":"SimpleBook","title":"The C4 model for visualising software architecture","slug":"visualising-software-architecture","tagline":"\u003Cp\u003EA guide to visualising your software architecture with the C4 model.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_mini?1653735204","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_mini2x?1653735204","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_list?1653735204","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_list2x?1653735204","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_shelf?1653735204","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_shelf2x?1653735204","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_featured?1653735204","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_featured2x?1653735204","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_hero?1653735204","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fvisualising-software-architecture\u002Fs_hero2x?1653735204","id":29983,"accepted_authors":[{"id":31218,"type":"SimpleAuthor"}]},"37165":{"type":"SimpleBook","title":"CCIE Service Provider Version 4 Written and Lab Exam Comprehensive Guide","slug":"ccie-spv4-comp-guide","tagline":"\u003Cp\u003EThe service provider landscape has changed rapidly over the past several years. Networking vendors are continuing to propose new standards, techniques, and procedures for overcoming new challenges while concurrently reducing costs and delivering new services. Cisco has recently updated the CCIE Service Provider track to reflect these changes; this book represents the author's personal journey in achieving that certification.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_mini?1620536027","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_mini2x?1620536027","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_list?1620536027","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_list2x?1620536027","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_shelf?1620536027","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_shelf2x?1620536027","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_featured?1620536027","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_featured2x?1620536027","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_hero?1620536027","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fccie-spv4-comp-guide\u002Fs_hero2x?1620536027","id":37165,"accepted_authors":[{"id":38739,"type":"SimpleAuthor"}]},"43007":{"type":"SimpleBook","title":"Mastering Core Data With Swift","slug":"mastering-core-data-with-swift","tagline":"\u003Cp\u003E\"I want to learn Core Data, but I don't know where to start.\" - Every Swift Developer\u003C\u002Fp\u003E\u003Cp\u003E\"I was frustrated with Core Data until I took the time to learn the fundamentals.\" - Yours Truly\u003C\u002Fp\u003E\u003Cp\u003E\"Core Data is difficult to use.\" - I Prefer to Stay Anonymous\u003C\u002Fp\u003E\u003Cp\u003EDoes this sound like you? It's time to take Core Data serious and learn the ins and outs of the framework.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_mini?1620559081","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_mini2x?1620559081","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_list?1620559081","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_list2x?1620559081","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_shelf?1620559081","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_shelf2x?1620559081","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_featured?1620559081","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_featured2x?1620559081","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_hero?1620559081","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-core-data-with-swift\u002Fs_hero2x?1620559081","id":43007,"accepted_authors":[{"id":44880,"type":"SimpleAuthor"}]},"43071":{"type":"SimpleBook","title":"Mastering MVVM With Swift","slug":"mastering-mvvm-with-swift","tagline":"\u003Cp\u003E“I don’t feel in control of my project’s architecture.” - You\u003C\u002Fp\u003E\u003Cp\u003E“MVC simply doesn’t cut it. There must be a better solution.” - Yours Truly\u003C\u002Fp\u003E\u003Cp\u003EDespite its widespread, the Model-View-Controller pattern just doesn't cut it for most Swift projects. Take control of your Swift projects with the Model-View-ViewModel pattern.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_mini?1620559199","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_mini2x?1620559199","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_list?1620559199","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_list2x?1620559199","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_shelf?1620559199","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_shelf2x?1620559199","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_featured?1620559199","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_featured2x?1620559199","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_hero?1620559199","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmastering-mvvm-with-swift\u002Fs_hero2x?1620559199","id":43071,"accepted_authors":[{"id":44945,"type":"SimpleAuthor"}]},"43183":{"type":"SimpleBook","title":"The Missing Manual for Swift Development","slug":"the-missing-manual-for-swift-development","tagline":"\u003Cp\u003EWriting a few lines of Swift is surprisingly easy. Once you start to dig deeper, though, you discover that building an application for Apple's platforms is more challenging than it seems. This book outlines the challenges you face along your journey and how to overcome them.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_mini?1620559515","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_mini2x?1620559515","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_list?1620559515","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_list2x?1620559515","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_shelf?1620559515","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_shelf2x?1620559515","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_featured?1620559515","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_featured2x?1620559515","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_hero?1620559515","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthe-missing-manual-for-swift-development\u002Fs_hero2x?1620559515","id":43183,"accepted_authors":[{"id":45062,"type":"SimpleAuthor"}]},"44290":{"type":"SimpleBook","title":"A Guide to Artificial Intelligence in Healthcare","slug":"ArtificialIntelligenceinHealthcare","tagline":"\u003Cp\u003ECan we stay human in the age of AI?  To go even further, can we grow in humanity, can we shape a more humane, more equitable and sustainable healthcare? This e-book aims to prepare healthcare and medical professionals for the era of human-machine collaboration. Read our guide to understanding, anticipating and controlling artificial intelligence.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_mini?1717018490","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_mini2x?1717018490","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_list?1717018490","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_list2x?1717018490","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_shelf?1717018490","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_shelf2x?1717018490","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_featured?1717018490","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_featured2x?1717018490","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_hero?1717018490","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FArtificialIntelligenceinHealthcare\u002Fs_hero2x?1717018490","id":44290,"accepted_authors":[{"id":46214,"type":"SimpleAuthor"}]},"45268":{"type":"SimpleBook","title":"Technologies Shaping the Future of Pharma","slug":"thefutureofpharma","tagline":"\u003Cp\u003EThis book explains how disruptive technologies and emerging trends such as robotics, artificial intelligence, 3D printing, precision medicine or patient design will impact the manufacturing and distribution of pharmaceuticals in order to prepare successfully for a better future of healthcare.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_mini?1719471435","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_mini2x?1719471435","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_list?1719471435","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_list2x?1719471435","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_shelf?1719471435","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_shelf2x?1719471435","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_featured?1719471435","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_featured2x?1719471435","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_hero?1719471435","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fthefutureofpharma\u002Fs_hero2x?1719471435","id":45268,"accepted_authors":[{"id":47248,"type":"SimpleAuthor"}]},"45844":{"type":"SimpleBook","title":"Effective Kotlin","slug":"effectivekotlin","tagline":"\u003Cp\u003EEffective Kotlin summarizes the best practices and experiences of the Kotlin community, together with a deep explanation of some lesser-known Kotlin functionalities. All of the best practices are presented as simple rules with detailed explanations.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_mini?1694006150","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_mini2x?1694006150","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_list?1694006150","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_list2x?1694006150","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_shelf?1694006150","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_shelf2x?1694006150","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_featured?1694006150","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_featured2x?1694006150","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_hero?1694006150","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Feffectivekotlin\u002Fs_hero2x?1694006150","id":45844,"accepted_authors":[{"id":47858,"type":"SimpleAuthor"}]},"48739":{"type":"SimpleBook","title":"Tech Giants in Healthcare","slug":"tech-giants-in-healthcare","tagline":"\u003Cp\u003EThis comprehensive guide, Tech Giants in Healthcare, clarifies how and why big tech companies step into healthcare, and breaks it down from one market player to the other in what direction they are going, what tools they are using and what horizons they have in front of them. \u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_mini?1709214304","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_mini2x?1709214304","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_list?1709214304","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_list2x?1709214304","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_shelf?1709214304","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_shelf2x?1709214304","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_featured?1709214304","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_featured2x?1709214304","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_hero?1709214304","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftech-giants-in-healthcare\u002Fs_hero2x?1709214304","id":48739,"accepted_authors":[{"id":50872,"type":"SimpleAuthor"}]},"51006":{"type":"SimpleBook","title":"The Hundred-Page Machine Learning Book","slug":"theMLbook","tagline":"\u003Cp\u003E\u003Cstrong\u003EEverything you really need to know in Machine Learning in a hundred pages.\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_mini?1620586520","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_mini2x?1620586520","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_list?1620586520","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_list2x?1620586520","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_shelf?1620586520","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_shelf2x?1620586520","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_featured?1620586520","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_featured2x?1620586520","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_hero?1620586520","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheMLbook\u002Fs_hero2x?1620586520","id":51006,"accepted_authors":[{"id":53257,"type":"SimpleAuthor"}]},"53637":{"type":"SimpleBook","title":"The Technological Future of Medical Specialties","slug":"future-of-medical-specialties","tagline":"\u003Cp\u003EHow will the appearance of AI, sensors, wearables, VR\u002FAR or robots affect each medical specialty? How can physicians of the various professions successfully prepare for the sweeping changes coming with the waves of technology? Read the eBook to find out\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003E45-day Money-back guarantee: If you're not satisfied, simply return the book &amp; get a full refund\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_mini?1671019820","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_mini2x?1671019820","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_list?1671019820","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_list2x?1671019820","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_shelf?1671019820","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_shelf2x?1671019820","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_featured?1671019820","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_featured2x?1671019820","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_hero?1671019820","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-medical-specialties\u002Fs_hero2x?1671019820","id":53637,"accepted_authors":[{"id":55948,"type":"SimpleAuthor"}]},"57520":{"type":"SimpleBook","title":"CCIE SP v5.0","slug":"cciespv50","tagline":"\u003Cp\u003EAre you striving to prepare to and pass CCIE SP lab exam? Take the opportunity and get this workbook! With the attached initial cfg files you will prepare yourself for the CCIE SP exam as well as learn SP technologies applicable to all kinds of today modern networks! This workbook covers blueprint topics and provides challenging examples.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_mini?1670361340","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_mini2x?1670361340","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_list?1670361340","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_list2x?1670361340","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_shelf?1670361340","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_shelf2x?1670361340","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_featured?1670361340","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_featured2x?1670361340","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_hero?1670361340","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcciespv50\u002Fs_hero2x?1670361340","id":57520,"accepted_authors":[{"id":59920,"type":"SimpleAuthor"},{"id":59948,"type":"SimpleAuthor"},{"id":67187,"type":"SimpleAuthor"}]},"60688":{"type":"SimpleBook","title":"Testing in Python","slug":"testinginpython","tagline":"\u003Cp\u003ENoah and Alfredo have decades of experience testing with Python in major production environments. Learn from the best on how to get started and advance your automation with easy examples and code to follow up.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_mini?1620620609","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_mini2x?1620620609","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_list?1620620609","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_list2x?1620620609","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_shelf?1620620609","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_shelf2x?1620620609","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_featured?1620620609","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_featured2x?1620620609","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_hero?1620620609","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftestinginpython\u002Fs_hero2x?1620620609","id":60688,"accepted_authors":[{"id":63127,"type":"SimpleAuthor"},{"id":63128,"type":"SimpleAuthor"}]},"60991":{"type":"SimpleBook","title":"Cloud Computing for Data Analysis","slug":"cloud4data","tagline":"\u003Cp\u003EThis book is designed to give you a comprehensive view of cloud computing including Big Data and Machine Learning. Many resources will be used including interactive labs on Cloud Platforms (Google, AWS, Azure) using Python. This is a project-based book with extensive hands-on assignments. Based on material taught at leading universities.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_mini?1620621247","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_mini2x?1620621247","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_list?1620621247","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_list2x?1620621247","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_shelf?1620621247","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_shelf2x?1620621247","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_featured?1620621247","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_featured2x?1620621247","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_hero?1620621247","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcloud4data\u002Fs_hero2x?1620621247","id":60991,"accepted_authors":[{"id":63443,"type":"SimpleAuthor"}]},"61406":{"type":"SimpleBook","title":"Python Command Line Tools","slug":"pythoncli","tagline":"\u003Cp\u003E Learn the ultimate interface...the command-line.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_mini?1620622508","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_mini2x?1620622508","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_list?1620622508","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_list2x?1620622508","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_shelf?1620622508","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_shelf2x?1620622508","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_featured?1620622508","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_featured2x?1620622508","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_hero?1620622508","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fpythoncli\u002Fs_hero2x?1620622508","id":61406,"accepted_authors":[{"id":63861,"type":"SimpleAuthor"},{"id":63862,"type":"SimpleAuthor"}]},"62813":{"type":"SimpleBook","title":"Minimal Python","slug":"minimalpython","tagline":"\u003Cp\u003EEven books that have \"learn\" in the title introduce readers to hopelessly complex topics like object-oriented programming or concurrency. It turns out YAGNI (You Ain't Gonna Need It). Why teach students topics they won't use either ever, or not for a few years?\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_mini?1620625867","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_mini2x?1620625867","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_list?1620625867","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_list2x?1620625867","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_shelf?1620625867","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_shelf2x?1620625867","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_featured?1620625867","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_featured2x?1620625867","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_hero?1620625867","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fminimalpython\u002Fs_hero2x?1620625867","id":62813,"accepted_authors":[{"id":65317,"type":"SimpleAuthor"},{"id":65323,"type":"SimpleAuthor"}]},"62825":{"type":"SimpleBook","title":"C++ Best Practices","slug":"cppbestpractices","tagline":"\u003Cp\u003ELevel up your C++, get the tools working for you, eliminate common problems, and move on to more exciting things!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_mini?1652721046","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_mini2x?1652721046","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_list?1652721046","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_list2x?1652721046","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_shelf?1652721046","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_shelf2x?1652721046","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_featured?1652721046","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_featured2x?1652721046","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_hero?1652721046","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcppbestpractices\u002Fs_hero2x?1652721046","id":62825,"accepted_authors":[{"id":65330,"type":"SimpleAuthor"}]},"68437":{"type":"SimpleBook","title":"Hackers, Breaches and the Value of Health Data","slug":"privacy-in-digital-health","tagline":"\u003Cp\u003EAt The Medical Futurist, we firmly believe that patients or users of advanced technologies must be in a position where they can decide how much of their privacy they are willing to give up in exchange for a chance for a healthier life. Read The Medical Futurist's guide to understand, anticipate and control your privacy in the era of digital health.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_mini?1660160580","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_mini2x?1660160580","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_list?1660160580","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_list2x?1660160580","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_shelf?1660160580","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_shelf2x?1660160580","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_featured?1660160580","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_featured2x?1660160580","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_hero?1660160580","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fprivacy-in-digital-health\u002Fs_hero2x?1660160580","id":68437,"accepted_authors":[{"id":71140,"type":"SimpleAuthor"}]},"69406":{"type":"SimpleBook","title":"Taming Thymeleaf","slug":"taming-thymeleaf","tagline":"\u003Cp\u003ELearn to build a production-grade web application with Spring Boot and Thymeleaf with this book.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_mini?1620653739","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_mini2x?1620653739","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_list?1620653739","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_list2x?1620653739","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_shelf?1620653739","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_shelf2x?1620653739","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_featured?1620653739","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_featured2x?1620653739","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_hero?1620653739","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftaming-thymeleaf\u002Fs_hero2x?1620653739","id":69406,"accepted_authors":[{"id":72115,"type":"SimpleAuthor"}]},"70933":{"type":"SimpleBook","title":"Invest In Digital Health - The Medical Futurist's Guide","slug":"digital-health-investments","tagline":"\u003Cp\u003EArtificial Intelligence and Digital Health are booming. In this book, we explain why now it's a good time to invest in Digital Health and give recommendations on where to invest by looking at the top 24 technological trends we find the most promising.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_mini?1702537426","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_mini2x?1702537426","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_list?1702537426","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_list2x?1702537426","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_shelf?1702537426","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_shelf2x?1702537426","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_featured?1702537426","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_featured2x?1702537426","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_hero?1702537426","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdigital-health-investments\u002Fs_hero2x?1702537426","id":70933,"accepted_authors":[{"id":73703,"type":"SimpleAuthor"}]},"72494":{"type":"SimpleBook","title":"Kotlin Coroutines","slug":"coroutines","tagline":"\u003Cp\u003EKotlin coroutines have revolutionized JVM development, especially on Android and the backend, as they let us easily implement efficient and reliable multithreading. Their cutting-edge design and features are ideally suited to modern use cases. In this book, we will explore how Kotlin coroutines work and how we can use them to improve our code.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_mini?1715367508","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_mini2x?1715367508","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_list?1715367508","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_list2x?1715367508","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_shelf?1715367508","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_shelf2x?1715367508","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_featured?1715367508","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_featured2x?1715367508","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_hero?1715367508","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcoroutines\u002Fs_hero2x?1715367508","id":72494,"accepted_authors":[{"id":75387,"type":"SimpleAuthor"}]},"73092":{"type":"SimpleBook","title":"Top 20 Digital Health Trends For The Near Future","slug":"top-20-digital-health-trends","tagline":"\u003Cp\u003EDigital technology could help transform unsustainable healthcare systems, provide cheaper, faster, and more effective solutions for diseases – and could lead to healthier individuals living in healthier communities.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EIn this book, we analyze the top 20 trends shaping the future of healthcare, and what they all look like in practice.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_mini?1725535616","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_mini2x?1725535616","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_list?1725535616","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_list2x?1725535616","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_shelf?1725535616","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_shelf2x?1725535616","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_featured?1725535616","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_featured2x?1725535616","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_hero?1725535616","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftop-20-digital-health-trends\u002Fs_hero2x?1725535616","id":73092,"accepted_authors":[{"id":76029,"type":"SimpleAuthor"}]},"74924":{"type":"SimpleBook","title":"Practical Guide About Digital Health For Medical Professionals","slug":"guide-to-digital-health","tagline":"\u003Cp\u003E Do you as a medical professional have sometimes trouble to respond to the digital health-related questions of your patients? Have you ever wished there was somebody to create a handbook that responds to the questions your patients have? The Medical Futurist team created the Guide To Digital Health For Doctors – to download for free. \u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_mini?1633931892","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_mini2x?1633931892","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_list?1633931892","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_list2x?1633931892","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_shelf?1633931892","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_shelf2x?1633931892","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_featured?1633931892","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_featured2x?1633931892","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_hero?1633931892","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fguide-to-digital-health\u002Fs_hero2x?1633931892","id":74924,"accepted_authors":[{"id":77979,"type":"SimpleAuthor"}]},"75854":{"type":"SimpleBook","title":"Object Lifetime Puzzlers Book 1","slug":"objectlifetimepuzzlers_book1","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_mini?1638899049","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_mini2x?1638899049","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_list?1638899049","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_list2x?1638899049","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_shelf?1638899049","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_shelf2x?1638899049","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_featured?1638899049","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_featured2x?1638899049","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_hero?1638899049","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book1\u002Fs_hero2x?1638899049","id":75854,"accepted_authors":[{"id":79725,"type":"SimpleAuthor"}]},"76936":{"type":"SimpleBook","title":"Copy and Reference Puzzlers Book 1","slug":"copyandreferencepuzzlers_book1","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_mini?1641258159","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_mini2x?1641258159","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_list?1641258159","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_list2x?1641258159","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_shelf?1641258159","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_shelf2x?1641258159","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_featured?1641258159","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_featured2x?1641258159","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_hero?1641258159","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book1\u002Fs_hero2x?1641258159","id":76936,"accepted_authors":[{"id":80825,"type":"SimpleAuthor"}]},"77949":{"type":"SimpleBook","title":"Opcode Puzzlers Book 1","slug":"opcodepuzzlers_book1","tagline":"\u003Cp\u003E128 Puzzles to get you thinking more like a CPU\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_mini?1649716269","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_mini2x?1649716269","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_list?1649716269","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_list2x?1649716269","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_shelf?1649716269","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_shelf2x?1649716269","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_featured?1649716269","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_featured2x?1649716269","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_hero?1649716269","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fopcodepuzzlers_book1\u002Fs_hero2x?1649716269","id":77949,"accepted_authors":[{"id":81869,"type":"SimpleAuthor"}]},"78282":{"type":"SimpleBook","title":"Windows 11 Field Guide","slug":"windows11fieldguide","tagline":"\u003Cp\u003EThe \u003Cem\u003EWindows 11 Field Guide\u003C\u002Fem\u003E is a full-length e-book about the latest version of Microsoft Windows, aimed at those users who will upgrade from Windows 10 or acquire Windows 11 with a new PC.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_mini?1730851675","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_mini2x?1730851675","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_list?1730851675","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_list2x?1730851675","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_shelf?1730851675","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_shelf2x?1730851675","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_featured?1730851675","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_featured2x?1730851675","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_hero?1730851675","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fwindows11fieldguide\u002Fs_hero2x?1730851675","id":78282,"accepted_authors":[{"id":82221,"type":"SimpleAuthor"},{"id":82222,"type":"SimpleAuthor"}]},"78480":{"type":"SimpleBook","title":"Functional Kotlin","slug":"kotlin_functional","tagline":"\u003Cp\u003EThis book is about functional programming features in Kotlin. It first covers the essentials and then builds on them: it presents important and practical topics like collection processing, scope functions, and DSL usage and creation, context receivers.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_mini?1700149092","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_mini2x?1700149092","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_list?1700149092","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_list2x?1700149092","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_shelf?1700149092","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_shelf2x?1700149092","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_featured?1700149092","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_featured2x?1700149092","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_hero?1700149092","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_functional\u002Fs_hero2x?1700149092","id":78480,"accepted_authors":[{"id":82433,"type":"SimpleAuthor"}]},"78565":{"type":"SimpleBook","title":"Creating a career in enterprise-architecture","slug":"tp-career","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_mini?1651636986","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_mini2x?1651636986","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_list?1651636986","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_list2x?1651636986","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_shelf?1651636986","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_shelf2x?1651636986","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_featured?1651636986","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_featured2x?1651636986","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_hero?1651636986","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-career\u002Fs_hero2x?1651636986","id":78565,"accepted_authors":[{"id":82521,"type":"SimpleAuthor"}]},"78651":{"type":"SimpleBook","title":"Object Lifetime Puzzlers Book 2","slug":"objectlifetimepuzzlers_book2","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_mini?1651601446","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_mini2x?1651601446","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_list?1651601446","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_list2x?1651601446","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_shelf?1651601446","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_shelf2x?1651601446","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_featured?1651601446","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_featured2x?1651601446","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_hero?1651601446","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book2\u002Fs_hero2x?1651601446","id":78651,"accepted_authors":[{"id":82617,"type":"SimpleAuthor"}]},"78652":{"type":"SimpleBook","title":"Object Lifetime Puzzlers Book 3","slug":"objectlifetimepuzzlers_book3","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_mini?1651601454","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_mini2x?1651601454","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_list?1651601454","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_list2x?1651601454","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_shelf?1651601454","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_shelf2x?1651601454","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_featured?1651601454","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_featured2x?1651601454","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_hero?1651601454","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fobjectlifetimepuzzlers_book3\u002Fs_hero2x?1651601454","id":78652,"accepted_authors":[{"id":82618,"type":"SimpleAuthor"}]},"78653":{"type":"SimpleBook","title":"Copy and Reference Puzzlers Book 2","slug":"copyandreferencepuzzlers_book2","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_mini?1651601472","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_mini2x?1651601472","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_list?1651601472","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_list2x?1651601472","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_shelf?1651601472","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_shelf2x?1651601472","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_featured?1651601472","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_featured2x?1651601472","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_hero?1651601472","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book2\u002Fs_hero2x?1651601472","id":78653,"accepted_authors":[{"id":82619,"type":"SimpleAuthor"}]},"78654":{"type":"SimpleBook","title":"Copy and Reference Puzzlers Book 3","slug":"copyandreferencepuzzlers_book3","tagline":"\u003Cp\u003EFUN C++ related programming puzzles!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_mini?1651601487","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_mini2x?1651601487","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_list?1651601487","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_list2x?1651601487","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_shelf?1651601487","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_shelf2x?1651601487","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_featured?1651601487","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_featured2x?1651601487","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_hero?1651601487","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcopyandreferencepuzzlers_book3\u002Fs_hero2x?1651601487","id":78654,"accepted_authors":[{"id":82620,"type":"SimpleAuthor"}]},"78674":{"type":"SimpleBook","title":"Kotlin Essentials","slug":"kotlin_developers","tagline":"\u003Cp\u003EThis book covers the essentials of Kotlin so you can start developing with this amazing programming language. We show nearly everything you need to know in clear and executable code examples.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_mini?1694632605","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_mini2x?1694632605","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_list?1694632605","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_list2x?1694632605","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_shelf?1694632605","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_shelf2x?1694632605","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_featured?1694632605","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_featured2x?1694632605","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_hero?1694632605","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fkotlin_developers\u002Fs_hero2x?1694632605","id":78674,"accepted_authors":[{"id":82641,"type":"SimpleAuthor"}]},"78815":{"type":"SimpleBook","title":"Story and Enterprise Architecture","slug":"tp-eastory","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_mini?1652995045","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_mini2x?1652995045","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_list?1652995045","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_list2x?1652995045","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_shelf?1652995045","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_shelf2x?1652995045","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_featured?1652995045","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_featured2x?1652995045","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_hero?1652995045","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eastory\u002Fs_hero2x?1652995045","id":78815,"accepted_authors":[{"id":82789,"type":"SimpleAuthor"}]},"78840":{"type":"SimpleBook","title":"Making Sense of Services in EA","slug":"tp-easervices","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_mini?1654140446","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_mini2x?1654140446","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_list?1654140446","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_list2x?1654140446","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_shelf?1654140446","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_shelf2x?1654140446","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_featured?1654140446","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_featured2x?1654140446","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_hero?1654140446","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easervices\u002Fs_hero2x?1654140446","id":78840,"accepted_authors":[{"id":82814,"type":"SimpleAuthor"}]},"78846":{"type":"SimpleBook","title":"Worked-Examples for EA Practice","slug":"tp-eaexamples","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_mini?1654140945","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_mini2x?1654140945","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_list?1654140945","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_list2x?1654140945","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_shelf?1654140945","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_shelf2x?1654140945","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_featured?1654140945","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_featured2x?1654140945","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_hero?1654140945","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaexamples\u002Fs_hero2x?1654140945","id":78846,"accepted_authors":[{"id":82821,"type":"SimpleAuthor"}]},"78862":{"type":"SimpleBook","title":"From theory to practice in enterprise-architecture","slug":"tp-theorypractice","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_mini?1653680629","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_mini2x?1653680629","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_list?1653680629","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_list2x?1653680629","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_shelf?1653680629","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_shelf2x?1653680629","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_featured?1653680629","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_featured2x?1653680629","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_hero?1653680629","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-theorypractice\u002Fs_hero2x?1653680629","id":78862,"accepted_authors":[{"id":82837,"type":"SimpleAuthor"}]},"78895":{"type":"SimpleBook","title":"Business Architecture Basics","slug":"tp-bizarch","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_mini?1653686200","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_mini2x?1653686200","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_list?1653686200","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_list2x?1653686200","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_shelf?1653686200","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_shelf2x?1653686200","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_featured?1653686200","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_featured2x?1653686200","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_hero?1653686200","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizarch\u002Fs_hero2x?1653686200","id":78895,"accepted_authors":[{"id":82871,"type":"SimpleAuthor"}]},"78899":{"type":"SimpleBook","title":"Business Architecture Challenges","slug":"tp-bizchallenge","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_mini?1653703648","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_mini2x?1653703648","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_list?1653703648","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_list2x?1653703648","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_shelf?1653703648","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_shelf2x?1653703648","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_featured?1653703648","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_featured2x?1653703648","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_hero?1653703648","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bizchallenge\u002Fs_hero2x?1653703648","id":78899,"accepted_authors":[{"id":82876,"type":"SimpleAuthor"}]},"78952":{"type":"SimpleBook","title":"On People and Enterprise Architecture","slug":"tp-eapeople","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_mini?1655347545","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_mini2x?1655347545","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_list?1655347545","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_list2x?1655347545","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_shelf?1655347545","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_shelf2x?1655347545","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_featured?1655347545","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_featured2x?1655347545","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_hero?1655347545","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapeople\u002Fs_hero2x?1655347545","id":78952,"accepted_authors":[{"id":82932,"type":"SimpleAuthor"}]},"79069":{"type":"SimpleBook","title":"The Big Picture for Enterprise Architecture","slug":"tp-bigpicture","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_mini?1655349995","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_mini2x?1655349995","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_list?1655349995","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_list2x?1655349995","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_shelf?1655349995","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_shelf2x?1655349995","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_featured?1655349995","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_featured2x?1655349995","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_hero?1655349995","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bigpicture\u002Fs_hero2x?1655349995","id":79069,"accepted_authors":[{"id":83050,"type":"SimpleAuthor"}]},"79070":{"type":"SimpleBook","title":"On Economics and Enterprise Architecture","slug":"tp-economics","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_mini?1655354163","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_mini2x?1655354163","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_list?1655354163","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_list2x?1655354163","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_shelf?1655354163","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_shelf2x?1655354163","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_featured?1655354163","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_featured2x?1655354163","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_hero?1655354163","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-economics\u002Fs_hero2x?1655354163","id":79070,"accepted_authors":[{"id":83051,"type":"SimpleAuthor"}]},"79071":{"type":"SimpleBook","title":"On futures and Enterprise Architecture","slug":"tp-eafutures","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_mini?1655358290","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_mini2x?1655358290","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_list?1655358290","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_list2x?1655358290","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_shelf?1655358290","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_shelf2x?1655358290","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_featured?1655358290","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_featured2x?1655358290","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_hero?1655358290","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eafutures\u002Fs_hero2x?1655358290","id":79071,"accepted_authors":[{"id":83052,"type":"SimpleAuthor"}]},"79503":{"type":"SimpleBook","title":"On Theory And Enterprise Architecture","slug":"tp-eatheory","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_mini?1659778781","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_mini2x?1659778781","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_list?1659778781","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_list2x?1659778781","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_shelf?1659778781","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_shelf2x?1659778781","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_featured?1659778781","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_featured2x?1659778781","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_hero?1659778781","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatheory\u002Fs_hero2x?1659778781","id":79503,"accepted_authors":[{"id":83500,"type":"SimpleAuthor"}]},"79575":{"type":"SimpleBook","title":"On enterprise-architecture practice","slug":"tp-eapractice","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_mini?1660385982","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_mini2x?1660385982","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_list?1660385982","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_list2x?1660385982","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_shelf?1660385982","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_shelf2x?1660385982","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_featured?1660385982","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_featured2x?1660385982","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_hero?1660385982","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapractice\u002Fs_hero2x?1660385982","id":79575,"accepted_authors":[{"id":83575,"type":"SimpleAuthor"}]},"79640":{"type":"SimpleBook","title":"SCAN for sensemaking and decision-making","slug":"tp-scancore","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_mini?1660963333","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_mini2x?1660963333","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_list?1660963333","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_list2x?1660963333","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_shelf?1660963333","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_shelf2x?1660963333","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_featured?1660963333","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_featured2x?1660963333","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_hero?1660963333","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scancore\u002Fs_hero2x?1660963333","id":79640,"accepted_authors":[{"id":83640,"type":"SimpleAuthor"}]},"79695":{"type":"SimpleBook","title":"Updates on SCAN sensemaking","slug":"tp-scanextra","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_mini?1661502539","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_mini2x?1661502539","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_list?1661502539","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_list2x?1661502539","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_shelf?1661502539","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_shelf2x?1661502539","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_featured?1661502539","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_featured2x?1661502539","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_hero?1661502539","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-scanextra\u002Fs_hero2x?1661502539","id":79695,"accepted_authors":[{"id":83695,"type":"SimpleAuthor"}]},"79718":{"type":"SimpleBook","title":"On power and enterprise architecture","slug":"tp-eapower","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_mini?1661809747","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_mini2x?1661809747","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_list?1661809747","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_list2x?1661809747","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_shelf?1661809747","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_shelf2x?1661809747","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_featured?1661809747","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_featured2x?1661809747","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_hero?1661809747","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eapower\u002Fs_hero2x?1661809747","id":79718,"accepted_authors":[{"id":83719,"type":"SimpleAuthor"}]},"79813":{"type":"SimpleBook","title":"Why whole-enterprise architecture?","slug":"tp-whywholeea","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_mini?1662873194","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_mini2x?1662873194","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_list?1662873194","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_list2x?1662873194","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_shelf?1662873194","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_shelf2x?1662873194","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_featured?1662873194","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_featured2x?1662873194","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_hero?1662873194","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-whywholeea\u002Fs_hero2x?1662873194","id":79813,"accepted_authors":[{"id":83817,"type":"SimpleAuthor"}]},"79826":{"type":"SimpleBook","title":"On whole-enterprise architecture","slug":"tp-onwholeea","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_mini?1662977634","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_mini2x?1662977634","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_list?1662977634","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_list2x?1662977634","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_shelf?1662977634","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_shelf2x?1662977634","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_featured?1662977634","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_featured2x?1662977634","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_hero?1662977634","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-onwholeea\u002Fs_hero2x?1662977634","id":79826,"accepted_authors":[{"id":83830,"type":"SimpleAuthor"}]},"79904":{"type":"SimpleBook","title":"How not to fail in enterprise architecture","slug":"tp-notfail","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_mini?1664011507","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_mini2x?1664011507","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_list?1664011507","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_list2x?1664011507","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_shelf?1664011507","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_shelf2x?1664011507","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_featured?1664011507","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_featured2x?1664011507","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_hero?1664011507","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-notfail\u002Fs_hero2x?1664011507","id":79904,"accepted_authors":[{"id":83911,"type":"SimpleAuthor"}]},"79960":{"type":"SimpleBook","title":"A Guide To The Future Of Hospitals","slug":"future-of-hospitals","tagline":"\u003Cp\u003EFor centuries, scientists have been trying to envision the future of hospitals. Following the recent shift towards digital health technologies, in part precipitated by COVID-19, it is natural for one to wonder how these developments will impact hospitals. What can we expect from them in the future? Will there be hospitals at all in a decade’s time?\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_mini?1664391849","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_mini2x?1664391849","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_list?1664391849","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_list2x?1664391849","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_shelf?1664391849","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_shelf2x?1664391849","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_featured?1664391849","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_featured2x?1664391849","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_hero?1664391849","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ffuture-of-hospitals\u002Fs_hero2x?1664391849","id":79960,"accepted_authors":[{"id":83967,"type":"SimpleAuthor"}]},"79967":{"type":"SimpleBook","title":"More key concepts for enterprise architecture","slug":"tp-ea-concepts","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_mini?1664497040","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_mini2x?1664497040","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_list?1664497040","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_list2x?1664497040","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_shelf?1664497040","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_shelf2x?1664497040","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_featured?1664497040","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_featured2x?1664497040","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_hero?1664497040","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-concepts\u002Fs_hero2x?1664497040","id":79967,"accepted_authors":[{"id":83974,"type":"SimpleAuthor"}]},"79972":{"type":"SimpleBook","title":"Enterprise Canvas and service-design","slug":"tp-ecanvas-core","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_mini?1664522803","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_mini2x?1664522803","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_list?1664522803","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_list2x?1664522803","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_shelf?1664522803","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_shelf2x?1664522803","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_featured?1664522803","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_featured2x?1664522803","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_hero?1664522803","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-core\u002Fs_hero2x?1664522803","id":79972,"accepted_authors":[{"id":83979,"type":"SimpleAuthor"}]},"79974":{"type":"SimpleBook","title":"On Complexity and Enterprise Architecture","slug":"tp-ea-complexity","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_mini?1664534986","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_mini2x?1664534986","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_list?1664534986","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_list2x?1664534986","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_shelf?1664534986","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_shelf2x?1664534986","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_featured?1664534986","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_featured2x?1664534986","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_hero?1664534986","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-complexity\u002Fs_hero2x?1664534986","id":79974,"accepted_authors":[{"id":83981,"type":"SimpleAuthor"}]},"79976":{"type":"SimpleBook","title":"Reframing enterprise architecture","slug":"tp-eareframe","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_mini?1664585431","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_mini2x?1664585431","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_list?1664585431","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_list2x?1664585431","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_shelf?1664585431","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_shelf2x?1664585431","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_featured?1664585431","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_featured2x?1664585431","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_hero?1664585431","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eareframe\u002Fs_hero2x?1664585431","id":79976,"accepted_authors":[{"id":83983,"type":"SimpleAuthor"}]},"79977":{"type":"SimpleBook","title":"Methods and Challenges in Enterprise Architecture","slug":"tp-method-challenge","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_mini?1664599829","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_mini2x?1664599829","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_list?1664599829","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_list2x?1664599829","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_shelf?1664599829","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_shelf2x?1664599829","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_featured?1664599829","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_featured2x?1664599829","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_hero?1664599829","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-method-challenge\u002Fs_hero2x?1664599829","id":79977,"accepted_authors":[{"id":83984,"type":"SimpleAuthor"}]},"79979":{"type":"SimpleBook","title":"Business-models, concepts and frameworks","slug":"tp-ea-bizmodel","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_mini?1664620290","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_mini2x?1664620290","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_list?1664620290","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_list2x?1664620290","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_shelf?1664620290","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_shelf2x?1664620290","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_featured?1664620290","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_featured2x?1664620290","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_hero?1664620290","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-bizmodel\u002Fs_hero2x?1664620290","id":79979,"accepted_authors":[{"id":83986,"type":"SimpleAuthor"}]},"80269":{"type":"SimpleBook","title":"Updates on Enterprise Canvas","slug":"tp-ecanvas-extra","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_mini?1667858170","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_mini2x?1667858170","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_list?1667858170","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_list2x?1667858170","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_shelf?1667858170","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_shelf2x?1667858170","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_featured?1667858170","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_featured2x?1667858170","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_hero?1667858170","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ecanvas-extra\u002Fs_hero2x?1667858170","id":80269,"accepted_authors":[{"id":84294,"type":"SimpleAuthor"}]},"80330":{"type":"SimpleBook","title":"Business-generalist and business-anarchist","slug":"tp-eageneralist","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_mini?1668816441","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_mini2x?1668816441","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_list?1668816441","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_list2x?1668816441","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_shelf?1668816441","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_shelf2x?1668816441","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_featured?1668816441","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_featured2x?1668816441","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_hero?1668816441","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eageneralist\u002Fs_hero2x?1668816441","id":80330,"accepted_authors":[{"id":84366,"type":"SimpleAuthor"}]},"80355":{"type":"SimpleBook","title":"Value, values and effectiveness","slug":"tp-ea-values","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_mini?1669323000","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_mini2x?1669323000","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_list?1669323000","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_list2x?1669323000","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_shelf?1669323000","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_shelf2x?1669323000","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_featured?1669323000","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_featured2x?1669323000","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_hero?1669323000","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-values\u002Fs_hero2x?1669323000","id":80355,"accepted_authors":[{"id":84391,"type":"SimpleAuthor"}]},"80619":{"type":"SimpleBook","title":"Sensemaking in enterprise architecture","slug":"tp-easensemaking","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_mini?1670127514","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_mini2x?1670127514","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_list?1670127514","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_list2x?1670127514","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_shelf?1670127514","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_shelf2x?1670127514","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_featured?1670127514","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_featured2x?1670127514","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_hero?1670127514","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-easensemaking\u002Fs_hero2x?1670127514","id":80619,"accepted_authors":[{"id":84656,"type":"SimpleAuthor"}]},"80651":{"type":"SimpleBook","title":"Advanced Kotlin","slug":"advanced_kotlin","tagline":"\u003Cp\u003EThe book about advanced Kotlin features most of us use, but nearly nobody understands, like variance modifiers, property delegation, interface delegation, contracts, multiplatform development, annotation processing, KSP, compiler plugins, and static analyzers. \u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_mini?1693299705","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_mini2x?1693299705","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_list?1693299705","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_list2x?1693299705","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_shelf?1693299705","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_shelf2x?1693299705","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_featured?1693299705","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_featured2x?1693299705","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_hero?1693299705","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fadvanced_kotlin\u002Fs_hero2x?1693299705","id":80651,"accepted_authors":[{"id":84688,"type":"SimpleAuthor"}]},"80676":{"type":"SimpleBook","title":"More on practice for Enterprise Architecture","slug":"tp-more-eapractice","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_mini?1670612939","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_mini2x?1670612939","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_list?1670612939","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_list2x?1670612939","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_shelf?1670612939","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_shelf2x?1670612939","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_featured?1670612939","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_featured2x?1670612939","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_hero?1670612939","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eapractice\u002Fs_hero2x?1670612939","id":80676,"accepted_authors":[{"id":84726,"type":"SimpleAuthor"}]},"80774":{"type":"SimpleBook","title":"Tools and toolsets for enterprise architecture","slug":"tp-eatoolsets","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_mini?1671222365","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_mini2x?1671222365","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_list?1671222365","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_list2x?1671222365","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_shelf?1671222365","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_shelf2x?1671222365","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_featured?1671222365","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_featured2x?1671222365","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_hero?1671222365","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eatoolsets\u002Fs_hero2x?1671222365","id":80774,"accepted_authors":[{"id":84828,"type":"SimpleAuthor"}]},"80841":{"type":"SimpleBook","title":"More basics for enterprise architecture","slug":"tp-more-eabasics","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_mini?1671679468","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_mini2x?1671679468","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_list?1671679468","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_list2x?1671679468","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_shelf?1671679468","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_shelf2x?1671679468","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_featured?1671679468","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_featured2x?1671679468","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_hero?1671679468","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-more-eabasics\u002Fs_hero2x?1671679468","id":80841,"accepted_authors":[{"id":84895,"type":"SimpleAuthor"}]},"80984":{"type":"SimpleBook","title":"Enterprise architecture frameworks: IT-oriented","slug":"tp-eaframeworks-it","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_mini?1672456083","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_mini2x?1672456083","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_list?1672456083","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_list2x?1672456083","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_shelf?1672456083","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_shelf2x?1672456083","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_featured?1672456083","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_featured2x?1672456083","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_hero?1672456083","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-it\u002Fs_hero2x?1672456083","id":80984,"accepted_authors":[{"id":85041,"type":"SimpleAuthor"}]},"81055":{"type":"SimpleBook","title":"Enterprise Architecture frameworks: Beyond IT","slug":"tp-eaframeworks-more","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_mini?1672969363","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_mini2x?1672969363","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_list?1672969363","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_list2x?1672969363","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_shelf?1672969363","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_shelf2x?1672969363","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_featured?1672969363","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_featured2x?1672969363","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_hero?1672969363","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaframeworks-more\u002Fs_hero2x?1672969363","id":81055,"accepted_authors":[{"id":85114,"type":"SimpleAuthor"}]},"81071":{"type":"SimpleBook","title":"Enterprise Architecture: The 'loose ends'","slug":"tp-ea-looseends","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_mini?1673074434","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_mini2x?1673074434","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_list?1673074434","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_list2x?1673074434","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_shelf?1673074434","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_shelf2x?1673074434","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_featured?1673074434","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_featured2x?1673074434","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_hero?1673074434","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-ea-looseends\u002Fs_hero2x?1673074434","id":81071,"accepted_authors":[{"id":85130,"type":"SimpleAuthor"}]},"81080":{"type":"SimpleBook","title":"Enterprise Architecture conferences","slug":"tp-eaconferences","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_mini?1673137381","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_mini2x?1673137381","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_list?1673137381","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_list2x?1673137381","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_shelf?1673137381","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_shelf2x?1673137381","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_featured?1673137381","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_featured2x?1673137381","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_hero?1673137381","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-eaconferences\u002Fs_hero2x?1673137381","id":81080,"accepted_authors":[{"id":85139,"type":"SimpleAuthor"}]},"81081":{"type":"SimpleBook","title":"Other writing: Travel and fiction","slug":"tp-travelfiction","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_mini?1673145963","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_mini2x?1673145963","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_list?1673145963","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_list2x?1673145963","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_shelf?1673145963","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_shelf2x?1673145963","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_featured?1673145963","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_featured2x?1673145963","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_hero?1673145963","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-travelfiction\u002Fs_hero2x?1673145963","id":81081,"accepted_authors":[{"id":85140,"type":"SimpleAuthor"}]},"81085":{"type":"SimpleBook","title":"Other writing: Experiences","slug":"tp-wr-experiences","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_mini?1673157518","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_mini2x?1673157518","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_list?1673157518","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_list2x?1673157518","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_shelf?1673157518","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_shelf2x?1673157518","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_featured?1673157518","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_featured2x?1673157518","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_hero?1673157518","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-wr-experiences\u002Fs_hero2x?1673157518","id":81085,"accepted_authors":[{"id":85144,"type":"SimpleAuthor"}]},"81086":{"type":"SimpleBook","title":"Big-picture: The hard challenges","slug":"tp-bp-challenges","tagline":"","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_mini?1673162158","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_mini2x?1673162158","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_list?1673162158","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_list2x?1673162158","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_shelf?1673162158","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_shelf2x?1673162158","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_featured?1673162158","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_featured2x?1673162158","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_hero?1673162158","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftp-bp-challenges\u002Fs_hero2x?1673162158","id":81086,"accepted_authors":[{"id":85145,"type":"SimpleAuthor"}]},"83809":{"type":"SimpleBook","title":"Generative AI in Healthcare - The ChatGPT Revolution","slug":"generative-ai-in-healthcare","tagline":"\u003Cp\u003EDive into the world of generative AI with \"The ChatGPT Revolution\" ebook. Understand the impact of ChatGPT, explore the vast potential of Large Language Models, and anticipate a multimodal AI-driven healthcare future. A must-read for those keen on the next medical revolution.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_mini?1692863506","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_mini2x?1692863506","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_list?1692863506","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_list2x?1692863506","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_shelf?1692863506","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_shelf2x?1692863506","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_featured?1692863506","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_featured2x?1692863506","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_hero?1692863506","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fgenerative-ai-in-healthcare\u002Fs_hero2x?1692863506","id":83809,"accepted_authors":[{"id":87995,"type":"SimpleAuthor"}]},"84001":{"type":"SimpleBook","title":"The Medical Futurist's Survey On Generative AI In Healthcare","slug":"ai-in-healthcare-survey","tagline":"\u003Cp\u003EUncover perspectives on Generative AI from physicians (36.9%), non-healthcare professionals (25.4%), company leaders (22.8%), healthcare administrators (11.3%), and nurses (3.7%).\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_mini?1694667617","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_mini2x?1694667617","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_list?1694667617","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_list2x?1694667617","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_shelf?1694667617","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_shelf2x?1694667617","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_featured?1694667617","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_featured2x?1694667617","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_hero?1694667617","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fai-in-healthcare-survey\u002Fs_hero2x?1694667617","id":84001,"accepted_authors":[{"id":88191,"type":"SimpleAuthor"}]},"84644":{"type":"SimpleBook","title":"Modern frontends with htmx","slug":"modern-frontends-with-htmx","tagline":"\u003Cp\u003EImagine creating dynamic, interactive web applications with minimal JavaScript. That’s the revolutionary promise of \u003Ca href=\"https:\u002F\u002Fhtmx.org\u002F\" target=\"_blank\"\u003Ehtmx\u003C\u002Fa\u003E, a technology that redefines frontend development. This book is your gateway to mastering htmx alongside Java, \u003Ca href=\"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot\" target=\"_blank\"\u003ESpring Boot\u003C\u002Fa\u003E, and \u003Ca href=\"https:\u002F\u002Fwww.thymeleaf.org\u002F\" target=\"_blank\"\u003EThymeleaf\u003C\u002Fa\u003E, transforming the way you build web interfaces.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_mini?1700854457","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_mini2x?1700854457","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_list?1700854457","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_list2x?1700854457","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_shelf?1700854457","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_shelf2x?1700854457","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_featured?1700854457","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_featured2x?1700854457","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_hero?1700854457","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fmodern-frontends-with-htmx\u002Fs_hero2x?1700854457","id":84644,"accepted_authors":[{"id":88852,"type":"SimpleAuthor"}]},"85447":{"type":"SimpleBook","title":"CISSP: The Last Mile","slug":"cissplastmile","tagline":"\u003Cp\u003EThe book covers every topic in the latest CISSP exam syllabus, organized in a format that makes it easy to drill down on specific exam domains and concepts at-a-glance, making it an essential exam resource for anyone who aims to prepare for the exam without wasting time or money.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_mini?1728527714","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_mini2x?1728527714","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_list?1728527714","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_list2x?1728527714","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_shelf?1728527714","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_shelf2x?1728527714","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_featured?1728527714","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_featured2x?1728527714","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_hero?1728527714","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fcissplastmile\u002Fs_hero2x?1728527714","id":85447,"accepted_authors":[{"id":89701,"type":"SimpleAuthor"}]},"86158":{"type":"SimpleBook","title":"Residues: Time, Change, and Uncertainty in Software Architecture.","slug":"residuality","tagline":"\u003Cp\u003EResiduality Theory is a new way to think about the design of software systems that explains why we experience design the way we do, why certain things seem to work only sporadically, and why certain architects get it right so often regardless of which tools they use. A new, scientific approach is defined that fuses Software Engineering, Complexity Science, and Philosophy to produce an entirely new way to think about how to design software. The result is a theoretical base that allows architecture to finally become its own discipline. \u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_mini?1713352758","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_mini2x?1713352758","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_list?1713352758","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_list2x?1713352758","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_shelf?1713352758","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_shelf2x?1713352758","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_featured?1713352758","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_featured2x?1713352758","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_hero?1713352758","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fresiduality\u002Fs_hero2x?1713352758","id":86158,"accepted_authors":[{"id":90512,"type":"SimpleAuthor"}]},"86183":{"type":"SimpleBook","title":"100 Questions and Answers about AI in Healthcare","slug":"100-questions-about-ai-in-healthcare","tagline":"\u003Cp\u003EUncover the top \"100 Questions &amp; Answers About AI in Healthcare\" - your essential guide through AI's transformation of medicine. Explore diagnostics, ethics, and the evolving healthcare landscape.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_mini?1711969459","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_mini2x?1711969459","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_list?1711969459","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_list2x?1711969459","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_shelf?1711969459","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_shelf2x?1711969459","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_featured?1711969459","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_featured2x?1711969459","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_hero?1711969459","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002F100-questions-about-ai-in-healthcare\u002Fs_hero2x?1711969459","id":86183,"accepted_authors":[{"id":90538,"type":"SimpleAuthor"}]},"88209":{"type":"SimpleBook","title":"Super Study Guide: Transformers & Large Language Models","slug":"transformers-large-language-models","tagline":"\u003Cp\u003EA clear, illustrated guide to large language models, covering key concepts and practical applications. Ideal for projects, interviews, or personal learning.\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_mini?1725733082","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_mini2x?1725733082","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_list?1725733082","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_list2x?1725733082","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_shelf?1725733082","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_shelf2x?1725733082","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_featured?1725733082","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_featured2x?1725733082","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_hero?1725733082","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformers-large-language-models\u002Fs_hero2x?1725733082","id":88209,"accepted_authors":[{"id":92996,"type":"SimpleAuthor"},{"id":92997,"type":"SimpleAuthor"}]},"89860":{"type":"SimpleBook","title":"The Architect’s Paradox","slug":"architectsparadox","tagline":"\u003Cp\u003EAn introduction to philosophy for software engineers and architects that will help them understand their design process. This book helps to answer the question “Why are we like this?”. \u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_mini?1736315804","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_mini2x?1736315804","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_list?1736315804","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_list2x?1736315804","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_shelf?1736315804","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_shelf2x?1736315804","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_featured?1736315804","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_featured2x?1736315804","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_hero?1736315804","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Farchitectsparadox\u002Fs_hero2x?1736315804","id":89860,"accepted_authors":[{"id":94729,"type":"SimpleAuthor"}]},"90276":{"type":"SimpleBook","title":"The Hundred-Page Language Models Book","slug":"theLMbook","tagline":"\u003Cp\u003EMaster language models through mathematics, illustrations, and code―and build your own from scratch!\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_mini?1736924192","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_mini2x?1736924192","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_list?1736924192","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_list2x?1736924192","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_shelf?1736924192","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_shelf2x?1736924192","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_featured?1736924192","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_featured2x?1736924192","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_hero?1736924192","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002FtheLMbook\u002Fs_hero2x?1736924192","id":90276,"accepted_authors":[{"id":95248,"type":"SimpleAuthor"}]},"90871":{"type":"SimpleBook","title":"Super Study Guide: Transformer と大規模言語モデル","slug":"transformer-daikibo-gengo-moderu","tagline":"\u003Cp\u003E大規模言語モデル (LLM) の主要な概念から実践的な応用例まで、簡潔に図解されている学習ガイドです。プロジェクトでの利用、面接対策、個人的な学習にも最適です。\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_mini?1739067305","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_mini2x?1739067305","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_list?1739067305","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_list2x?1739067305","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_shelf?1739067305","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_shelf2x?1739067305","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_featured?1739067305","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_featured2x?1739067305","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_hero?1739067305","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Ftransformer-daikibo-gengo-moderu\u002Fs_hero2x?1739067305","id":90871,"accepted_authors":[{"id":96096,"type":"SimpleAuthor"},{"id":96097,"type":"SimpleAuthor"},{"id":96098,"type":"SimpleAuthor"}]},"91534":{"type":"SimpleBook","title":"Data Munging With Perl [2ed]","slug":"datamungingwithperl","tagline":"\u003Cp\u003E\"Work in Progress\" - Updated with the latest syntax, new CPAN modules and new file formats\u003C\u002Fp\u003E","title_page_url_s_mini":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_mini?1743100272","title_page_url_s_mini2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_mini2x?1743100272","title_page_url_s_list":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_list?1743100272","title_page_url_s_list2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_list2x?1743100272","title_page_url_s_shelf":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_shelf?1743100272","title_page_url_s_shelf2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_shelf2x?1743100272","title_page_url_s_featured":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_featured?1743100272","title_page_url_s_featured2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_featured2x?1743100272","title_page_url_s_hero":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_hero?1743100272","title_page_url_s_hero2x":"https:\u002F\u002Fd2sofvawe08yqg.cloudfront.net\u002Fdatamungingwithperl\u002Fs_hero2x?1743100272","id":91534,"accepted_authors":[{"id":96819,"type":"SimpleAuthor"}]}},"errors":{},"indexes":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"book\"}":[90276,90871,88209,29031,85447,29983,91534,78282,51006,89860]},"loading":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"book\"}":false}},"SimpleBundle":{"all":{"399":{"type":"SimpleBundle","slug":"software-architecture","name":"Software Architecture","description":"\"Software Architecture for Developers\" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before...","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_list\u002Fbundle-cover.png?1736243111","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_list2x\u002Fbundle-cover.png?1736243111","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_featured\u002Fbundle-cover.png?1736243111","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_featured2x\u002Fbundle-cover.png?1736243111","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_hero\u002Fbundle-cover.png?1736243111","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fsoftware-architecture\u002Fs_hero2x\u002Fbundle-cover.png?1736243111","id":399,"books":[{"id":1310,"type":"SimpleBook"},{"id":29983,"type":"SimpleBook"}]},"706":{"type":"SimpleBundle","slug":"cocoacasts-bundle-plus","name":"Cocoacasts Bundle Plus","description":"This bundle includes:Mastering MVVM With SwiftMastering Core Data With SwiftThe Missing Manual for Swift Development","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_list\u002Fbundle-cover.png?1621298495","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_list2x\u002Fbundle-cover.png?1621298495","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_featured\u002Fbundle-cover.png?1621298495","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_featured2x\u002Fbundle-cover.png?1621298495","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_hero\u002Fbundle-cover.png?1621298495","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcocoacasts-bundle-plus\u002Fs_hero2x\u002Fbundle-cover.png?1621298495","id":706,"books":[{"id":43007,"type":"SimpleBook"},{"id":43071,"type":"SimpleBook"},{"id":43183,"type":"SimpleBook"}]},"913":{"type":"SimpleBundle","slug":"masterpython","name":"Master Python","description":"Learn to master Python with this bundle. Be part of the #onemillion2021 project where one million people get trained on Cloud Computing, Data and Python globally by 2021.","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_list\u002Fbundle-cover.png?1625782438","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_list2x\u002Fbundle-cover.png?1625782438","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_featured\u002Fbundle-cover.png?1625782438","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_featured2x\u002Fbundle-cover.png?1625782438","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_hero\u002Fbundle-cover.png?1625782438","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmasterpython\u002Fs_hero2x\u002Fbundle-cover.png?1625782438","id":913,"books":[{"id":60688,"type":"SimpleBook"},{"id":60991,"type":"SimpleBook"},{"id":61406,"type":"SimpleBook"},{"id":62813,"type":"SimpleBook"}]},"930":{"type":"SimpleBundle","slug":"cciespultimate","name":"CCIE Service Provider Ultimate Study Bundle","description":"Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification...","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_list\u002Fbundle-cover.png?1622996293","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_list2x\u002Fbundle-cover.png?1622996293","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_featured\u002Fbundle-cover.png?1622996293","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_featured2x\u002Fbundle-cover.png?1622996293","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_hero\u002Fbundle-cover.png?1622996293","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcciespultimate\u002Fs_hero2x\u002Fbundle-cover.png?1622996293","id":930,"books":[{"id":37165,"type":"SimpleBook"},{"id":57520,"type":"SimpleBook"}]},"1311":{"type":"SimpleBundle","slug":"cppbestpractices_7_puzzler_books","name":"C++ Best Practices + 7 Puzzler Books","description":"","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_list\u002Fbundle-cover.png?1680726485","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_list2x\u002Fbundle-cover.png?1680726485","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_featured\u002Fbundle-cover.png?1680726485","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_featured2x\u002Fbundle-cover.png?1680726485","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_hero\u002Fbundle-cover.png?1680726485","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fcppbestpractices_7_puzzler_books\u002Fs_hero2x\u002Fbundle-cover.png?1680726485","id":1311,"books":[{"id":62825,"type":"SimpleBook"},{"id":75854,"type":"SimpleBook"},{"id":76936,"type":"SimpleBook"},{"id":77949,"type":"SimpleBook"},{"id":78651,"type":"SimpleBook"},{"id":78652,"type":"SimpleBook"},{"id":78653,"type":"SimpleBook"},{"id":78654,"type":"SimpleBook"}]},"1343":{"type":"SimpleBundle","slug":"kotlin_mm","name":"Big Kotlin pack","description":"","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_list\u002Fbundle-cover.png?1734355071","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_list2x\u002Fbundle-cover.png?1734355071","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_featured\u002Fbundle-cover.png?1734355071","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_featured2x\u002Fbundle-cover.png?1734355071","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_hero\u002Fbundle-cover.png?1734355071","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fkotlin_mm\u002Fs_hero2x\u002Fbundle-cover.png?1734355071","id":1343,"books":[{"id":45844,"type":"SimpleBook"},{"id":72494,"type":"SimpleBook"},{"id":78480,"type":"SimpleBook"},{"id":78674,"type":"SimpleBook"},{"id":80651,"type":"SimpleBook"}]},"1372":{"type":"SimpleBundle","slug":"ts-everything","name":"The 'Everything EA' bundle","description":"The ‘Everything EA’ bundle: A comprehensive library of articles about enterprise architecture to help you navigate your way through change. Want to know more about enterprise architecture, and how to use it to create real value in business and beyond? This huge curated collection of articles will help you to explore key concepts, methods, tools...","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_list\u002Fbundle-cover.jpg?1682564687","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_list2x\u002Fbundle-cover.jpg?1682564687","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_featured\u002Fbundle-cover.jpg?1682564687","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_featured2x\u002Fbundle-cover.jpg?1682564687","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_hero\u002Fbundle-cover.jpg?1682564687","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fts-everything\u002Fs_hero2x\u002Fbundle-cover.jpg?1682564687","id":1372,"books":[{"id":78565,"type":"SimpleBook"},{"id":78815,"type":"SimpleBook"},{"id":78840,"type":"SimpleBook"},{"id":78846,"type":"SimpleBook"},{"id":78862,"type":"SimpleBook"},{"id":78895,"type":"SimpleBook"},{"id":78899,"type":"SimpleBook"},{"id":78952,"type":"SimpleBook"},{"id":79069,"type":"SimpleBook"},{"id":79070,"type":"SimpleBook"},{"id":79071,"type":"SimpleBook"},{"id":79503,"type":"SimpleBook"},{"id":79575,"type":"SimpleBook"},{"id":79640,"type":"SimpleBook"},{"id":79695,"type":"SimpleBook"},{"id":79718,"type":"SimpleBook"},{"id":79813,"type":"SimpleBook"},{"id":79826,"type":"SimpleBook"},{"id":79904,"type":"SimpleBook"},{"id":79967,"type":"SimpleBook"},{"id":79972,"type":"SimpleBook"},{"id":79974,"type":"SimpleBook"},{"id":79976,"type":"SimpleBook"},{"id":79977,"type":"SimpleBook"},{"id":79979,"type":"SimpleBook"},{"id":80269,"type":"SimpleBook"},{"id":80330,"type":"SimpleBook"},{"id":80355,"type":"SimpleBook"},{"id":80619,"type":"SimpleBook"},{"id":80676,"type":"SimpleBook"},{"id":80774,"type":"SimpleBook"},{"id":80841,"type":"SimpleBook"},{"id":80984,"type":"SimpleBook"},{"id":81055,"type":"SimpleBook"},{"id":81071,"type":"SimpleBook"},{"id":81080,"type":"SimpleBook"},{"id":81081,"type":"SimpleBook"},{"id":81085,"type":"SimpleBook"},{"id":81086,"type":"SimpleBook"}]},"1483":{"type":"SimpleBundle","slug":"modern-thymeleaf-bundle","name":"Modern Thymeleaf Bundle","description":" Exclusive Offer: Master Spring Boot &amp; Thymeleaf Like a Pro! Dive into the world of modern web development with our special bundle, featuring two essential guides: Taming Thymeleaf and Modern frontends with htmx. Why This Bundle?Comprehensive Learning: Start with Taming Thymeleaf to build a solid foundation in Spring Boot and Thymeleaf,...","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_list\u002Fbundle-cover.png?1701595582","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_list2x\u002Fbundle-cover.png?1701595582","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_featured\u002Fbundle-cover.png?1701595582","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_featured2x\u002Fbundle-cover.png?1701595582","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_hero\u002Fbundle-cover.png?1701595582","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fmodern-thymeleaf-bundle\u002Fs_hero2x\u002Fbundle-cover.png?1701595582","id":1483,"books":[{"id":69406,"type":"SimpleBook"},{"id":84644,"type":"SimpleBook"}]},"1671":{"type":"SimpleBundle","slug":"residues","name":"Residues and The Philosophy of Software Architecture","description":"This bundle includes the books “Residues: Time, Change and Uncertainty in Software Architecture” and “The Architect’s Paradox: Uncertainty and the Philosophy of Software Architecture” by Barry M O’Reilly. The books complement each other, with Residues giving a practical description of how to apply residuality theory and The Architect’s Paradox...","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_list\u002Fbundle-cover.png?1738242654","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_list2x\u002Fbundle-cover.png?1738242654","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_featured\u002Fbundle-cover.png?1738242654","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_featured2x\u002Fbundle-cover.png?1738242654","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_hero\u002Fbundle-cover.png?1738242654","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Fresidues\u002Fs_hero2x\u002Fbundle-cover.png?1738242654","id":1671,"books":[{"id":86158,"type":"SimpleBook"},{"id":89860,"type":"SimpleBook"}]},"1682":{"type":"SimpleBundle","slug":"tmf-books","name":"All Books from The Medical Futurist","description":"","cover_url_s_list":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_list\u002Fbundle-cover.png?1740372251","cover_url_s_list2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_list2x\u002Fbundle-cover.png?1740372251","cover_url_s_featured":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_featured\u002Fbundle-cover.png?1740372251","cover_url_s_featured2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_featured2x\u002Fbundle-cover.png?1740372251","cover_url_s_hero":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_hero\u002Fbundle-cover.png?1740372251","cover_url_s_hero2x":"https:\u002F\u002Fs3.amazonaws.com\u002Fbundles.leanpub.com\u002Ftmf-books\u002Fs_hero2x\u002Fbundle-cover.png?1740372251","id":1682,"books":[{"id":44290,"type":"SimpleBook"},{"id":45268,"type":"SimpleBook"},{"id":48739,"type":"SimpleBook"},{"id":53637,"type":"SimpleBook"},{"id":68437,"type":"SimpleBook"},{"id":70933,"type":"SimpleBook"},{"id":73092,"type":"SimpleBook"},{"id":74924,"type":"SimpleBook"},{"id":79960,"type":"SimpleBook"},{"id":83809,"type":"SimpleBook"},{"id":84001,"type":"SimpleBook"},{"id":86183,"type":"SimpleBook"}]}},"errors":{},"indexes":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"bundle\"}":[1671,930,1682,1372,913,399,1483,1311,1343,706]},"loading":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"bundle\"}":false}},"SimpleCourse":{"all":{"988":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fselectedpythonexercises"},"type":"SimpleCourse","title":"Python Exercises Collection","slug":"selectedpythonexercises","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_list?1621305142","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_list2x?1621305142","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_featured?1621305142","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_featured2x?1621305142","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_hero?1621305142","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F988\u002Fs_hero2x?1621305142","id":988,"accepted_course_authors":[{"id":1040,"type":"SimpleCourseAuthor"},{"id":1043,"type":"SimpleCourseAuthor"}]},"1025":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Freverseengineeringmalwarepracticalexamples2"},"type":"SimpleCourse","title":"Reverse Engineering Malware, Practical Examples 2","slug":"reverseengineeringmalwarepracticalexamples2","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"generic_course_cover.png","title_page_url_s_list2x":"generic_course_cover.png","title_page_url_s_featured":"generic_course_cover.png","title_page_url_s_featured2x":"generic_course_cover.png","title_page_url_s_hero":"generic_course_cover.png","title_page_url_s_hero2x":"generic_course_cover.png","id":1025,"accepted_course_authors":[{"id":1079,"type":"SimpleCourseAuthor"}]},"1289":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fcommunication-basics"},"type":"SimpleCourse","title":"Communication Super power - The Foundations of Effective Communication","slug":"communication-basics","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_list?1738935127","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_list2x?1738935127","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_featured?1738935127","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_featured2x?1738935127","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_hero?1738935127","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1289\u002Fs_hero2x?1738935127","id":1289,"accepted_course_authors":[{"id":1350,"type":"SimpleCourseAuthor"}]},"1410":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fjava-course"},"type":"SimpleCourse","title":"Getting Proficient in Java","slug":"java-course","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_list?1668664904","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_list2x?1668664904","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_featured?1668664904","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_featured2x?1668664904","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_hero?1668664904","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F1410\u002Fs_hero2x?1668664904","id":1410,"accepted_course_authors":[{"id":1471,"type":"SimpleCourseAuthor"}]},"2118":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fthecompleteguidetopycharm"},"type":"SimpleCourse","title":"The Complete Guide to PyCharm","slug":"thecompleteguidetopycharm","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_list?1621305767","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_list2x?1621305767","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_featured?1621305767","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_featured2x?1621305767","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_hero?1621305767","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F2118\u002Fs_hero2x?1621305767","id":2118,"accepted_course_authors":[{"id":2181,"type":"SimpleCourseAuthor"},{"id":2182,"type":"SimpleCourseAuthor"},{"id":2185,"type":"SimpleCourseAuthor"}]},"3039":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fchatgpt-to-speech"},"type":"SimpleCourse","title":"ChatGPT-to-Speech: Build an AI-Powered Podcast With Python","slug":"chatgpt-to-speech","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_list?1682349223","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_list2x?1682349223","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_featured?1682349223","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_featured2x?1682349223","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_hero?1682349223","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3039\u002Fs_hero2x?1682349223","id":3039,"accepted_course_authors":[{"id":3170,"type":"SimpleCourseAuthor"}]},"3221":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fmacos-apps-with-swiftui"},"type":"SimpleCourse","title":"Getting Started: macOS Apps with SwiftUI","slug":"macos-apps-with-swiftui","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_list?1706479634","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_list2x?1706479634","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_featured?1706479634","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_featured2x?1706479634","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_hero?1706479634","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3221\u002Fs_hero2x?1706479634","id":3221,"accepted_course_authors":[{"id":3381,"type":"SimpleCourseAuthor"}]},"3225":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fkotlin_coroutines"},"type":"SimpleCourse","title":"Kotlin Coroutines","slug":"kotlin_coroutines","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_list?1708515804","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_list2x?1708515804","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_featured?1708515804","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_featured2x?1708515804","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_hero?1708515804","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3225\u002Fs_hero2x?1708515804","id":3225,"accepted_course_authors":[{"id":3385,"type":"SimpleCourseAuthor"}]},"3401":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fterraform-associate"},"type":"SimpleCourse","title":"HashiCorp Certified: Terraform Associate (003)","slug":"terraform-associate","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_list?1738161803","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_list2x?1738161803","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_featured?1738161803","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_featured2x?1738161803","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_hero?1738161803","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3401\u002Fs_hero2x?1738161803","id":3401,"accepted_course_authors":[{"id":3567,"type":"SimpleCourseAuthor"}]},"3468":{"links":{"self":"\u002Fcourses\u002Fleanpub\u002Fpatterns-of-application-development-using-ai"},"type":"SimpleCourse","title":"Patterns of Application Development Using AI (The Course)","slug":"patterns-of-application-development-using-ai","tagline":"","publisher_slug":"leanpub","title_page_url_s_list":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_list?1738288077","title_page_url_s_list2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_list2x?1738288077","title_page_url_s_featured":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_featured?1738288077","title_page_url_s_featured2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_featured2x?1738288077","title_page_url_s_hero":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_hero?1738288077","title_page_url_s_hero2x":"https:\u002F\u002Fdclrlzd4gl55u.cloudfront.net\u002F3468\u002Fs_hero2x?1738288077","id":3468,"accepted_course_authors":[{"id":3635,"type":"SimpleCourseAuthor"}]}},"errors":{},"indexes":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"course\"}":[3468,1025,3221,2118,3225,988,3401,3039,1289,1410]},"loading":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"course\"}":false}},"SimpleCourseAuthor":{"all":{"1040":{"type":"SimpleCourseAuthor","created_at":"2020-05-29T10:29:39.000Z","name":"Lukas Rieger","username":"lukasrieger","user_id":1598845,"course_id":988,"cause_id":null,"id":1040,"user":[{"id":1598845,"type":"User"}],"course":[{"id":988,"type":"Course"}]},"1043":{"type":"SimpleCourseAuthor","created_at":"2020-06-02T10:08:09.000Z","name":"Christian Mayer","username":"mayercn","user_id":1496902,"course_id":988,"cause_id":null,"id":1043,"user":[{"id":1496902,"type":"User"}],"course":[{"id":988,"type":"Course"}]},"1079":{"type":"SimpleCourseAuthor","created_at":"2020-06-25T18:40:01.000Z","name":"Jason Reaves","username":"sysopfb","user_id":1984346,"course_id":1025,"cause_id":null,"id":1079,"user":[{"id":1984346,"type":"User"}],"course":[{"id":1025,"type":"Course"}]},"1350":{"type":"SimpleCourseAuthor","created_at":"2020-09-30T05:13:31.000Z","name":"Rob Lambert","username":"roblambert121","user_id":4303,"course_id":1289,"cause_id":null,"id":1350,"user":[{"id":4303,"type":"User"}],"course":[{"id":1289,"type":"Course"}]},"1471":{"type":"SimpleCourseAuthor","created_at":"2020-10-04T01:47:56.000Z","name":"Tarun Telang","username":"taruntelang","user_id":222713,"course_id":1410,"cause_id":null,"id":1471,"user":[{"id":222713,"type":"User"}],"course":[{"id":1410,"type":"Course"}]},"2181":{"type":"SimpleCourseAuthor","created_at":"2020-11-17T17:53:02.000Z","name":"Lukas Rieger","username":"lukasrieger","user_id":1598845,"course_id":2118,"cause_id":null,"id":2181,"user":[{"id":1598845,"type":"User"}],"course":[{"id":2118,"type":"Course"}]},"2182":{"type":"SimpleCourseAuthor","created_at":"2020-11-17T19:06:21.000Z","name":"Christian Mayer","username":"mayercn","user_id":1496902,"course_id":2118,"cause_id":null,"id":2182,"user":[{"id":1496902,"type":"User"}],"course":[{"id":2118,"type":"Course"}]},"2185":{"type":"SimpleCourseAuthor","created_at":"2020-11-19T11:11:27.000Z","name":"Shubham Sayon","username":"shubhamsayon","user_id":2221224,"course_id":2118,"cause_id":null,"id":2185,"user":[{"id":2221224,"type":"User"}],"course":[{"id":2118,"type":"Course"}]},"3170":{"type":"SimpleCourseAuthor","created_at":"2023-04-24T00:03:13.000Z","name":"Daniel Davis","username":"danieldavis","user_id":15443,"course_id":3039,"cause_id":null,"id":3170,"user":[{"id":15443,"type":"User"}],"course":[{"id":3039,"type":"Course"}]},"3381":{"type":"SimpleCourseAuthor","created_at":"2024-01-17T16:22:08.000Z","name":"Grace Huang","username":"gracehuang","user_id":2711332,"course_id":3221,"cause_id":null,"id":3381,"user":[{"id":2711332,"type":"User"}],"course":[{"id":3221,"type":"Course"}]},"3385":{"type":"SimpleCourseAuthor","created_at":"2024-01-20T13:38:54.000Z","name":"Marcin Moskała","username":"mmoskala","user_id":1251350,"course_id":3225,"cause_id":null,"id":3385,"user":[{"id":1251350,"type":"User"}],"course":[{"id":3225,"type":"Course"}]},"3567":{"type":"SimpleCourseAuthor","created_at":"2024-11-08T15:35:35.000Z","name":"Mattias Fjellström","username":"mattias-fjellstrom","user_id":3314330,"course_id":3401,"cause_id":null,"id":3567,"user":[{"id":3314330,"type":"User"}],"course":[{"id":3401,"type":"Course"}]},"3635":{"type":"SimpleCourseAuthor","created_at":"2025-01-25T21:56:08.000Z","name":"Obie Fernandez","username":"obiefernandez","user_id":72367,"course_id":3468,"cause_id":null,"id":3635,"user":[{"id":72367,"type":"User"}],"course":[{"id":3468,"type":"Course"}]}},"errors":{},"indexes":{},"loading":{}},"SimpleCourseSet":{"all":{"11":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fugsskitc"},"type":"SimpleCourseSet","title":"Game Studio Starter Kit (6 Game Collection)","slug":"ugsskitc","short_description":"This is the perfect Game Studio starter kit for launching your online dream business. This kit contains 6 tutorials books to help you create 9 different online game mechanics. You could have all 9 games ready in a day for each game. Start your Game Studio today.","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F11\u002Fs_list\u002F6-gameGSSK-3.jpg?1621306406","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F11\u002Fs_list2x\u002F6-gameGSSK-3.jpg?1621306406","id":11},"15":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fwpfmvvm"},"type":"SimpleCourseSet","title":"WPF + MVVM","slug":"wpfmvvm","short_description":"Learn both WPF and MVVM to build fully functional UI-applications with the modern UI-building framework, Windows Presentation Foundation (WPF).MVVM will help you to build WPF apps in a correct way from the software design perspective.","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F15\u002Fs_list\u002F300316_4409_6.jpg?1621306422","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F15\u002Fs_list2x\u002F300316_4409_6.jpg?1621306422","id":15},"21":{"links":{"self":"\u002Fset\u002Fleanpub\u002Frealworldpython"},"type":"SimpleCourseSet","title":"Real World Python","slug":"realworldpython","short_description":"Learn Python the Practical Way - In this course you learn all the basics of the Python programming language. It contains exercises, explanatory videos, an example solution and a quiz. This will enable you to apply your skills to a wide range of real world problems.A collection of more Python exercises - Exercises with solutions to continue...","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F21\u002Fs_list\u002Fcovercoruse.001.png?1621306430","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F21\u002Fs_list2x\u002Fcovercoruse.001.png?1621306430","id":21},"23":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fprogrammingskills"},"type":"SimpleCourseSet","title":"How to Thrive in 2030 | Master These 3 Programming Skills","slug":"programmingskills","short_description":"Don't want to miss out on emerging technologies and new markets in the programming space? Consider these three mega trends:Python is the fastest-growing major programming language on the planet.Machine Learning Engineers earn more money than ever before.Text Processing is a highly sought-after skill considering the exponentially growing supply...","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F23\u002Fs_list\u002Fphoto-of-woman-wearing-turtleneck-top-2777898.jpg?1621306449","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F23\u002Fs_list2x\u002Fphoto-of-woman-wearing-turtleneck-top-2777898.jpg?1621306449","id":23},"28":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fasimplepathtopythonsuccess"},"type":"SimpleCourseSet","title":"A Simple Path to Python Success","slug":"asimplepathtopythonsuccess","short_description":"Python is the fastest-growing major programming language on the planet. This practical course set will teach you Python in a hands-on, highly practical way that guarantees your success. All you need to go from zero to completing your own Python projects in a relaxed, student-centric, and fun environment. Create yourself a new skill that'll bring...","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F28\u002Fs_list\u002Fpython-logo-generic-reddit.jpg?1621306498","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F28\u002Fs_list2x\u002Fpython-logo-generic-reddit.jpg?1621306498","id":28},"30":{"links":{"self":"\u002Fset\u002Fleanpub\u002F7courses"},"type":"SimpleCourseSet","title":"7 Course-Bundle: Shut Up and Code Python + PyCharm + Coding Interview + Machine Learning + One-Liners + Regex + Lambdas","slug":"7courses","short_description":"\"Shut up and code.\" Laughter in the audience. The hacker had just plugged in his notebook and started sharing his screen to present his super-smart Python script. \"Shut up and code\" The letters written in a white literal coding font on black background was the hackers' home screen background mantra. At the time, I was a first-year computer...","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F30\u002Fs_list\u002Fshutupandcode.jpg?1621306505","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F30\u002Fs_list2x\u002Fshutupandcode.jpg?1621306505","id":30},"34":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fcsharp-architect"},"type":"SimpleCourseSet","title":"Design and Architecture Fundamentals in C#","slug":"csharp-architect","short_description":"Taking this course bundle, you'll learn:SOLID principles (SRP, OCP, ISP, LSP, DIP) in-depthMeta principles: DRY, KISS, YAGNI, SoC, CQS, Law of Demeter, PoLADependency Injection in Depth: IoC or DI containers, best practices, and anti-patternsFunctional Programming in C#: purity and side effects, functional C# features, immutability,...","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_list\u002FControl-Statements-Loops.jpg?1621306529","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F34\u002Fs_list2x\u002FControl-Statements-Loops.jpg?1621306529","id":34},"73":{"links":{"self":"\u002Fset\u002Fleanpub\u002Fkotlin_for_developers"},"type":"SimpleCourseSet","title":"Kotlin for developers","slug":"kotlin_for_developers","short_description":"This is the complete track to learn about essential Kotlin features and get ready for working in Kotlin in daily basis. It starts from essentials, and on the way reaches advanced topics like efficient collection processing or DSL creation. ","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F73\u002Fs_list\u002F16.jpg?1695196701","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F73\u002Fs_list2x\u002F16.jpg?1695196701","id":73},"83":{"links":{"self":"\u002Fset\u002Fleanpub\u002Facethetechnicalinterview"},"type":"SimpleCourseSet","title":"Ace the technical interview","slug":"acethetechnicalinterview","short_description":"A topic by topic breakdown of the hardest technical interview questions","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F83\u002Fs_list\u002Fcode-unsplash.jpg?1718034547","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F83\u002Fs_list2x\u002Fcode-unsplash.jpg?1718034547","id":83},"95":{"links":{"self":"\u002Fset\u002Fleanpub\u002Ftradingcomounprofesional"},"type":"SimpleCourseSet","title":"Trading como un Profesional a tu ritmo","slug":"tradingcomounprofesional","short_description":"","publisher_slug":"leanpub","s_list_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F95\u002Fs_list\u002FTCUP.PNG?1723925484","s_list2x_cover_url":"https:\u002F\u002Fd2o9wnd5wywfpj.cloudfront.net\u002Fcovers\u002F95\u002Fs_list2x\u002FTCUP.PNG?1723925484","id":95}},"errors":{},"indexes":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"track\"}":[11,83,15,21,23,28,30,95,73,34]},"loading":{"{\"bookstore\":true,\"filter_erotica\":true,\"page\":1,\"page_size\":10,\"searchable\":true,\"sellable\":true,\"sort\":\"bestsellers_last_week\",\"type\":\"track\"}":false}},"SocialPost":{"all":{},"errors":{},"indexes":{},"loading":{}},"StepFunctionExecution":{"all":{},"errors":{},"indexes":{},"loading":{}},"StoreBook":{"all":{},"errors":{},"indexes":{},"loading":{}},"Subscription":{"all":{},"errors":{},"loading":{},"taxData":{}},"TaxInfo":{"all":{},"errors":{},"indexes":{},"loading":{}},"Testimonial":{"all":{},"errors":{},"indexes":{},"loading":{}},"Theme":{"all":{},"errors":{},"indexes":{},"loading":{}},"Transcript":{"all":{},"errors":{},"indexes":{},"loading":{}},"User":{"all":{"4303":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4303\u002Ffull\u002FBIO1.jpg?1577115332","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4303\u002Fmedium\u002FBIO1.jpg?1577115332","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4303\u002Fsmall\u002FBIO1.jpg?1577115332","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4303\u002Ftiny\u002FBIO1.jpg?1577115332","created_at":"2012-01-10T10:37:00.000Z","facebook_url":null,"family_name_pp":"Lambert","githubname":"","given_names_pp":"Rob","instagramname":"simplylambert","latest_podcast_episode":{"id":205,"user_id":4303,"featured":false,"name":"Rob Lambert","description_markdown":"*[This Frontmatter Podcast episode was originally published on 2018-03-01...]*\r\n\r\n[Rob Lambert](https:\u002F\u002Fleanpub.com\u002Fu\u002Froblambert121) is the author of the Leanpub book *[10 Behaviours Of Effective Employees](https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees)*. In this interview, Leanpub co-founder [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp) talks with Rob about his background, his book, how big changes in your personal life can lead to changes in your professional life, a surprising approach to managing millenials, and at the end, they talk a little bit about his experience as a self-published author.\r\n\r\nThis interview was recorded on December 6, 2017.\r\n\r\nThe full audio for the interview is [here](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM075-Rob-Lambert-2017-12-06.mp3). You can [subscribe to the Frontmatter podcast in iTunes](https:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137) or [add the podcast URL directly](https:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137).\r\n\r\n*This interview has been edited for conciseness and clarity.*","blog_link":"","avatar_file_name":null,"avatar_content_type":null,"avatar_file_size":null,"avatar_updated_at":null,"created_at":"2020-10-14T22:33:05.000Z","updated_at":"2022-03-10T01:26:22.000Z","release_date":"2020-10-14T22:32:00.000Z","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM075-Rob-Lambert-2017-12-06.mp3","audio_file_size_in_bytes":29488588,"description_html":"\u003Cp\u003E\u003Cem\u003E[This Frontmatter Podcast episode was originally published on 2018-03-01...]\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Froblambert121\"\u003ERob Lambert\u003C\u002Fa\u003E is the author of the Leanpub book \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees\"\u003E10 Behaviours Of Effective Employees\u003C\u002Fa\u003E\u003C\u002Fem\u003E. In this interview, Leanpub co-founder \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E talks with Rob about his background, his book, how big changes in your personal life can lead to changes in your professional life, a surprising approach to managing millenials, and at the end, they talk a little bit about his experience as a self-published author.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on December 6, 2017.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM075-Rob-Lambert-2017-12-06.mp3\"\u003Ehere\u003C\u002Fa\u003E. You can \u003Ca href=\"https:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137\"\u003Esubscribe to the Frontmatter podcast in iTunes\u003C\u002Fa\u003E or \u003Ca href=\"https:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137\"\u003Eadd the podcast URL directly\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EThis interview has been edited for conciseness and clarity.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n","duration":"01:01:25","interview_date":"2017-12-06","interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":false,"keywords":"self-publishing, books, software, technology","podcast_type":"frontmatter","related_links_markdown":"","related_links_html":"\n","slug":"rob-lambert-01-03-18-republished-on-10-14-20","subtitle":"[From the Archives] A Leanpub Frontmatter Podcast Interview with Rob Lambert, Author of 10 Behaviours Of Effective Employees","title":"[From the Archives] Rob Lambert, Author of 10 Behaviours Of Effective Employees","transcript_markdown":"**Len:** Hi, I'm Len Epp from Leanpub, and in this Leanpub Frontmatter Podcast, I'll be interviewing Rob Lambert. Based in Winchester, Rob is [formerly - eds.] Vice President of Engagement and Enablement at NewVoiceMedia, a customer contact platform with offices around the world. He also blogs about how to remain a productive manager at [cultivatedmanagement.com](http:\u002F\u002Fcultivatedmanagement.com), and blogs elsewhere on Social Tester and at [parentbrain.com](http:\u002F\u002Fparentbrain.com), and you can follow him on Twitter [@rob_lambert](https:\u002F\u002Ftwitter.com\u002Frob_lambert).\r\n\r\n\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees\" target=\"_blank\"\u003E\u003Cimg src=\"https:\u002F\u002Fs3.amazonaws.com\u002Ftitlepages.leanpub.com\u002F10behavioursofeffectiveemployees\u002Fhero?1494943348\" alt=\"10 Behaviours Of Effective Employees by Rob Lambert\" style=\"float: left; margin: 0px 25px 15px 0px; height:270px; border:1px solid black\"\u003E\u003C\u002Fa\u003E\r\n\r\nRob is the author of a number of Leanpub books, including *[The Social Tester: 8 years worth of thoughts on Software Testing and hiring Testers](https:\u002F\u002Fleanpub.com\u002Fthesocialtester)* and *[10 Behaviours Of Effective Employees](https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees)*. He's also co-author of *[So You Want To Be A Scrum Master? A collection of ideas, thoughts and learnings from the agile community at [NewVoiceMedia](https:\u002F\u002Fleanpub.com\u002Fbeascrummaster).\r\n\r\nIn this interview, we're going to talk about Rob's background and career, professional interests, his books, and at the end we'll talk a little bit about his experience as a self-published author and blogger.\r\n\r\nSo thank you, Rob, for being on the Leanpub Podcast.\r\n\r\n**Rob:** Thank you for having me. It's a pleasure to be here.\r\n\r\n**Len:** I always like to start these interviews by asking people for what I jokingly call their \"origin story.\" I know you do have one. I was wondering if you could talk a little bit about where you grew up, and how you first became interested in software and testing?\r\n\r\n**Rob:** I'm from Sheffield in the north of England - that's where I was born. I think very early on, I was exposed to computers. My dad was a computer engineer, going around the UK fixing them. So from a very early age I was doing desktop publishing on old DOS machines and all sorts of stuff. That was my origin story with computing.\r\n\r\nGrowing up in Sheffield - \"Steel City\" is where we used to do all the manufacturing of steel in the UK. A very industrial city, lots of sort of working class origins. It kind of led into documentaries, writing, university and college. I studied comms and all that sort of stuff. Really, it's always been about publishing. It's always been about taking a message and communicating it - that's what I studied in college and university.\r\n\r\nAnd then from there, I entered the workplace straight after university. I fell into software testing, like most software testers actually do. From there, I had a very illustrious career - hopefully.\r\n\r\nI'm proud of what I've achieved in the software testing world. But I think at one point, I wanted to sort of escape from it. I wanted to do something different.\r\n\r\nThe companies I worked for were good, but we weren't shipping software very often. And the publishing and the blogging side of it was what kept me engaged. It kept me there in the industry, because it allowed me to use that creativity stuff - the origin-story foundations of publishing using computers, and blogging. That's how it all kicked off and started that side.\r\n\r\n**Len:** I wasn't planning on asking this question, but I remember when I was living in the UK, hearing stories about out-of-work steel workers. In particular, I remember speaking to someone from there, and I was asking, somewhat deliberately naively, \"Why don't they just move on and do something else?\" And this guy looked at me like I was the biggest idiot. He said, \"Len, they're steel workers.\" I was wondering if you could talk a little bit about that aspect of life there, and maybe how things look in Sheffield now?\r\n\r\n**Rob:** I've not been back to Sheffield for a while. I moved down south to Winchester, probably about 10 years ago now.\r\n\r\nBut certainly when I was growing up, it was during the whole miner strikes, so there was very grim sort of feel to the city. Lots of people unemployed, the sort of air of, I guess, desperation, a little bit. Like, \"What are we going to do next? How are things going happen?\"\r\n\r\nThere's a very famous film called *The Full Monty*, which you may have seen, about four out-of-work miners, or steel workers, who decide to go and actually strip in strip clubs for a living to try and make some money. It's a very good film and it kind of captures, the essence of Sheffield at the time. Lots of unemployment, lots of people wondering what to do next. A city trying to regenerate itself.\r\n\r\nAnd actually, it's done a really good job. I'm heading back to Sheffield next year for the first time in probably 10, 15 years, and I'm looking forward to seeing how much has changed just as much as being able to describe it.\r\n\r\n**Len:** When I moved to England, the memories of Thatcher and grimness were kind of ending because it was 1999 and Tony Blair was coming in, and all that stuff. But there was a kind of legendary past that people still walked around with.\r\n\r\n**Rob:** I think in the 90s - obviously Tony Blair in the UK was kind of a great time, really - everybody was positive, optimistic, there was a lot of prosperity. And you kind of felt like you could do anything. The future was there for the taking. Mobile phones had just come out, the internet was kicking off. It was a wonderful time to be at university, a wonderful time to be learning about technology and web - which is what I was studying at the time. You just felt like you were unstoppable almost, like, \"This is it. We can do anything we want to.\"\r\n\r\n**Len:** I remember the excitement around the millennium as well. Being on the Banks of the Thames, right under the London Eye - which didn't work.\r\n\r\n**Rob:** Yes, absolutely.\r\n\r\n**Len:** But it was an exciting time. Did you study programming in university? Or formally in another setting?\r\n\r\n**Rob:** No, not at all. At university I did a degree that's called Media Science. In a nutshell, it was a science degree. It's all about anything scientific really - making microprocessors at the time. We studied a lot of biology, we studied chaos theory, high-level scientific theories. The goal of the degree was really to take something extremely complicated, and communicate it to a number of different audiences.\r\n\r\nAt the time, I didn't necessarily see the value of the degree. I wanted to be a film director. I wanted to be the Spielberg from Sheffield kind of thing. That didn't pan out. But the degree actually, when I look back at it, was all of the tools that you needed to get into publishing on the internet.\r\n\r\nWe would take something incredibly scientific, like launching a spaceship into space, and we'd be able to write an article for the *New Scientist*, which was a big scientific journal. You could use as much jargon as you wish. You could be as elaborate in the way that you described it as you wanted to be. But then we would also take that same concept, that same topic, and have to write that for a tabloid newspaper, where you have to use simpler languages, you have to use more visuals to explain things.\r\n\r\nWe did word processing, we did desktop publishing. It was the early rise of the CD-ROM, so we were in Microsoft Dreamweaver, and all those sorts of tools, building websites. \"What you see is what you get\" publishing. It was taking something very scientific and communicating it through video, through podcasts, through audio, through all sorts of different stuff - well before it was trendy to do that.\r\n\r\nI think that was what was interesting - the science side of it, but actually we did sociology, communications, and all the other things that have helped me to no end in writing books, blogging, speaking at conferences. Stuff that I just thought, \"You know, this is not going to be very useful in my career,\" actually it turned out to be fabulous.\r\n\r\n**Len:** You mentioned that you \"fell into\" testing, as testers often do, and I was wondering if you could talk about what your experience was? I've spoken to some other testers on this podcast and heard their stories, and I'd like to hear yours too.\r\n\r\n**Rob:** When I finished university, I had no idea what I wanted to do. I wanted to be a film director, I wanted to get into media. But unfortunately, the media industry as a whole wasn't very big up north - Sheffield and Leeds. And there weren't a great deal of jobs. The jobs that it did have weren't very well paid at all. I had a student loan, I had things I needed to pay down.\r\n\r\nSo I moved with my girlfriend up to Leeds, and we rented a little property up there, and there was a job down the road for a software tester. I had no idea what it was, but I went ahead and took it. It turned out to be a really good job working for a very large IT company that produced school software. I was testing timetable software, school planning software - a very, very good company. Lots of good products.\r\n\r\nAnd that's how I fell into software testing. It just felt like a good job to take. Previous to that I was delivering snacks around Lincolnshire in a van, so this was a very big move, and it was a very positive one. I stuck with software testing for probably about three or four years, before I started to really think that there's a better way of building software than this.\r\n\r\n**Len:** The education software, was it for children?\r\n\r\n**Rob:** It was for schools. This was for school administrators and teachers. For example, a teacher's putting together your end-of-year report. They can use boilerplate text, and we can fill in your name - and they can drag sentences around to create a school report. Or the teachers would be timetabling students for the next year. So there would be a timetabling system, to make sure there's no clashes, get all the students studying the right topics, etc. It was really more for school administrators, heads, and teachers.\r\n\r\n**Len:** I was just curious because I'd never thought about what the difference might be between testing something for adults and testing something for children. And in fact, how that might have changed over the past, let's say 10 years or so, as children get introduced to more sophisticated products at a younger and younger age than they may have in the past.\r\n\r\n**Rob:** I think the products now are obviously clearly more intuitive. Back then, these were all desktop clients, with not a lot of networking going on - or what networking there was, was a little bit shady and maybe not quite as secure as it should have been.\r\n\r\nI think nowadays with kids - I've got three boys, and they just pick up tablets and go for it. They pick up their laptop and everything just seems a lot more intuitive. I think kids nowadays are becoming a lot more tech-savvy.\r\n\r\nIn fact, I'll never forget the time I took my middle kid down to the local supermarket, and there was an advert outside - one of these big advertisement boards, a digital one - and it was rolling around, it was kind of like a scrolling screen. And he went up to it and put his hand on it, and swiped up - just at the same time as the picture changed, and he thought he'd done it. He thought this was just some sort of giant iPad, and everything was just touchscreen. He's touching every screen, everything. And some stuff worked, some stuff didn't. And that's just intuitive; it's just the way that they're wired, really.\r\n\r\n**Len:** Speaking of children and parenting, you have a project called [Parent Brain](http:\u002F\u002Fparentbrain.com), and [a book](https:\u002F\u002Fwww.amazon.co.uk\u002Fdp\u002FB06XDNVMC5\u002Fref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=adapt-iterate-21&linkId=63a349e1ea91cefbd595db2c7857c170). I wanted to ask you about that, because you frame the inspiration for the book with a story about a transformation that happened to you when you became a parent.\r\n\r\n**Rob:** It's called \"The Baby Effect.\" Most people, I think at some point when they have children, go through this. It's this realization that this small bundle of joy is relying on you. For me it manifested itself in this: \"Stop playing video games. Stop burning your evenings doing pointless things on the internet, and actually start creating something. Start making yourself employable.\"\r\n\r\nI think what this harks back to is Sheffield, and growing up and seeing the raft of unemployment and redundancies in the family left, right, and center. I've always had this thing where I didn't want that to happen to me. I think when my first son, Ollie, was born, it was kind of, \"Wow, I need to sort of grow up a little bit here. I need to start earning a bit more money, doing something more with my career,\" and making myself basically hire-able. Remaining relevant and constantly employable.\r\n\r\nSince then, that's been the theme that's gone through everything. The Parent Brain book, *The Employable Parent Brain*, is really that same thing. It's about, take that Baby Effect and drive it - use that energy and that enthusiasm to make yourself more employable.\r\n\r\nI think really, the catalyst for Parent Brain was, I was on one of the parent forums. And there were highly qualified, super talented parents, with great education, great experience, great skills - and they couldn't get jobs. They just could not get back into the job market. And it got me thinking about why. Why is that? There's some problem with companies not embracing flexible working and all the other stuff.\r\n\r\nBut there's also this inability, I think, for people to articulate where it is that they have value. The world is shifting constantly, and that value is no longer in your job title. It's no longer in your qualifications, it's in how you can create, and the value that you can bring to a business. That needs articulating, and very few people have the skills, or the energy, or actually the realization to think that's the future of work. You have to show you can do good, interesting, valuable stuff.\r\n\r\n**Len:** I noticed that theme in your work when I was preparing for this interview. And one of the things, I think - I'm just putting it together - but one thing that was striking, that I found in your [description of the Parent Brain project](http:\u002F\u002Fparentbrain.com) was, you weren't shy about talking about laziness. You pull it off in your description very well, without sounding just like a grumpy person from an elevated standpoint criticizing people.\r\n\r\nIt was sympathetic, but it was also very straightforward. It was like, one of the problems you can fall into in life - whether you're employed or not, whether you've got children or not - is being unproductive. And unproductive, not necessarily in the sense of wasting time on the internet, which can make you feel like you're doing something, but really just being lazy.\r\n\r\nDo you talk about that in the book? What you can do to kind of get yourself out of that hole if you've fallen into it?\r\n\r\n**Rob:** Getting out of the hole is really - you need the purpose. For me the purpose was the Baby Effect. This was my son relying on me - that was the inspiration, and the drive, and the purpose I needed to stop playing video games and stop messing around. I think it is easier, certainly with the internet like you say, to get stuck in the rabbit holes of reading articles, and thinking, and consuming so much stuff that you don't actually create anything of value.\r\n\r\nI think the link with people being unhappy when they're on social media, and all that sort of stuff, is very real. I've seen it myself first-hand. In the book it's really: you need to find the purpose. Why are you doing what you're doing? If you're super happy spending your evenings playing video games, great. That's awesome. That's your life. Everybody does whatever they want to do, and that's great.\r\n\r\nBut I think if you want to take your career seriously, you have to put in the effort outside of work. I think what a lot of people - certainly when I've been speaking around the world in the tech industry, a lot of people assume that their employers are going to look after them. They assume that the training is going to get given to them. They assume that they're going to have a job for life. That's just not true at all - very few people actually achieve that. I think those that find themselves on the job market, surprisingly, are often woefully unprepared for it.\r\n\r\nReally, that's my mantra: just keep slowly but surely making yourself better and employable every single day.\r\n\r\n**Len:** One thing you talk about that's very concrete is adding skills - keep adding skills to your repertoire, and don't necessarily be concerned with being the very best at something.\r\n\r\nI think it was that talk you gave that I saw [on YouTube](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=RqL4Q3D0a5g), where you talk about the creator of the cartoon Dilbert, who's now become quite famous because - well, of course he was already famous, but he's now famous for [explicitly predicting Donald Trump's victory](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=iLytHh8Za9g).\r\n\r\nIn your talk, you talk about how he says that, \"One path to success is to be the very best at what you're doing.\" And you sort of humorously, with a dry wit, say, \"That's the hardest way to do it.\" But you talk about how there's another way to do it, and you learned about it from this creator of Dilbert. I was wondering if you could talk a little bit about that alternative path to success?\r\n\r\n**Rob:** I have this thing in my head where every so often I wish I was more of a specialist in something. You look at people that have gone down the expert route, and it's the harder route to go down. It's years and years of training and working. And generally, the opportunities just become less and less until you become the best in the world. And then you can set your own price, and you've always got work - and probably a very meaningful career.\r\n\r\nBut for most people, the value comes from having enough skills in enough areas to mash that together to create a very unique value. The challenge with that though is, how do you articulate that value?\r\n\r\nYou started the podcast saying I'm the VP of NewVoiceMedia, but I've since left that. It's been about six weeks now since I've moved on.\r\n\r\nHaving spent the last year and half in HR, and parts of engineering management and testing, it's dawned on me how difficult that is to actually articulate - the value that you have, because you've got all these different skills. I'm not an HR specialist, but I'm also not this and not that. I'm all of these things. And the more you speak to people, the more you realize everybody has a fairly broad set of ideas and enthusiasms and skills.\r\n\r\nIt's just a case of working out which ones they need to work on a bit more, which ones they need to mash together - and bring it together into a very unique package, and then be able to articulate that to somebody who has a problem that you can solve. I think the skill, skill, skill thing is a model that suits the way I work.\r\n\r\nBut I do think you do need to have that core specialism. Are you familiar with this is from Ideo - the T-shaped employee?\r\n\r\n**Len:** Thanks to watching your talk on YouTube.\r\n\r\n**Rob:** There's various different shapes, but essentially, you're talking about having a core skill, which is something that you are extremely good at, extremely skilled at. You've spent years honing this craft. And that's the center of the T, it's like the tall bit, the bit that goes vertical.\r\n\r\nAnd then the horizontal T across the top - they're the series of different skills that you acquire that allow you to be able to talk to people in marketing, or actually do bits of teaching.\r\n\r\nIf you think about it, from my perspective - I was a tester, engineering manager at Graham Bigg's scaled Agile teams [?]. That's my core skill. The bit across the top is HR, public speaking, writing, blogging - all the different things. And when you mash all that together, you become a very unique and hopefully valuable employee.\r\n\r\nBut also, you have a lot of fun, because you're learning lots of different things, and you're bringing it all together, and seeing how you can resonate and get those things to gel - and forming something and creating something that's never existed before.\r\n\r\nIt suits me, but I know for a lot of people it terrifies them and they just want to be the best at one thing. And that's fabulous as well. Whatever works for you.\r\n\r\n**Len:** I was just going to say, when I first heard about it in your talk, about the T-shaped person, that what it invoked for me was the Christian cross and crucifixion. And so when you say that for some people it's torture, I'm sort of sympathetic to that, because that was just the first thing that occurred to me, that that was where you were you going to go.\r\n\r\nAs you've mentioned a couple of times, you moved into HR. How did you make that transition?\r\n\r\n**Rob:** Tt was one of these fortuitous moments, where everything sort of came together. When I joined NewVoiceMedia about nine years ago, there was nine people in the engineering team, and I was the only software tester. Together with the engineering manager, and obviously the people in the dev team, we built a very high-performing Agile function, and scaled it to about 120-odd different people across the UK and Poland.\r\n\r\nWe went through the engineering manager, and I was starting to get really bored. Things were going fairly well, obviously there's always things to improve, and I wasn't doing that dynamic, chaotic sort of team-building stuff - the stuff that I thrive on, the chaos of getting people aligned around missions and stuff. What we had also achieved, is we'd achieved a very interesting set of numbers.\r\n\r\nAll engagement numbers were very positive for the DevOps team. People were very happy, people felt engaged, they had meaningful work. They didn't leave very often, which is great. And we had a very smooth hiring process, our recruitment costs were rock bottom.\r\n\r\nBasically we were getting more referrals than we were paying for agencies, which was great. So all of those numbers are very positive.\r\n\r\nAnd so the opportunity arose to try and do some of those same things across the bigger business. That was engagement and enablement, which was really about training, it was about getting people the opportunities to progress their career, and getting the information flowing around the business, and making sure those departments were talking to each other.\r\n\r\nI did that for probably about a year, year and a half. I took a plunge about five or six weeks ago to go off on my own and set up my own consultancy. So there we go.\r\n\r\n**Len:** I'd definitely like to ask you about that in a little bit.\r\n\r\nI had a couple of specific things about your experience with HR that I wanted to ask you about, one of which is about the interview process, which is something that I just find fascinating.\r\n\r\nI was wondering if you could talk a little bit about where you've landed on what a good interview process is. Let's scope it to - you're building an agile team of developers and testers and such to deliver products within a big company. How would you go about recruiting and interviewing people?\r\n\r\n**Rob:** It's funny you should say that, because I do actually have another book coming out soon, maybe on the Leanpub platform, we'll talk about that.\r\n\r\nI think for me, there's a few things to consider here. There's quite a few assumptions with hiring, and some of the assumptions that I have, these are the values and principles I hold dear.\r\n\r\nIt's all about a two-way conversation. It's not us looking for them, and we get to choose. It's not them deciding where they want to go. It's both of those things.\r\n\r\nI think what you find in some recruitment processes is the businesses don't care about the candidates at all. It's all about, \"Er, you'll do what we want, and we'll make it as difficult as we need to. We won't get back in touch with you.\" It's not a very nice experience.\r\n\r\nI also believe in hiring very, very slowly. I believe in hiring for good cultural fit and good technical fit. Both of them are super important, along with all the other stuff that sits around it - determine how does it affect employees, is essentially what we're looking for here.\r\n\r\nBut then, we also believe in making sure the experience is unbelievable, as positive as we could make it, so people would welcome going through the process, they would come out the other side going, \"Wow, that was really hard, but I enjoyed it.\"\r\n\r\nInterestingly, in doing those things, what we found is people that went through the process and didn't make it, would go off and tell their friends and colleagues about how awesome it was and that you should apply for that. That was just bizarre. We were not expecting that at all.\r\n\r\nWhat does it look like? In a nutshell, we want to go from first contacts to you, to making a decision in about two to three weeks maximum.\r\n\r\nThere's only every going to be the one interview face-to-face - but before that, probably a good phone screen, technical exercise for coders. And then when you come in, if you've done the technical exercise, we'd probably ask you to extend it, and change our requirements, just to make sure that you wrote it and it wasn't a friend of yours.\r\n\r\nThen what we'll do is work out why you're doing it. Why are you writing the tests, why are you coding in that way?\r\n\r\nThe phone interview at the start is really just about, are you going to be a good fit? This is a society, it's a culture. Everybody that comes to it needs to add to that culture. One of the things I learned as a manager for five or six years of managing engineers and managing HR - anybody really - is that it's much easier to hire people who live and breathe a similar set of values to your business, than it is to hire somebody who's awesome, but doesn't agree with your values, and then try and change them.\r\n\r\nYou can't change people, so it's much easier to try and get the right people coming through the door at the first point.\r\n\r\nMoving all the way through that process is really - from our first phone call, all the way through to making a decision, as quick as possible. The interview process is hard. It's going to be maybe three or four different sections - an hour, an hour and a half each. So you're looking at maybe three, four, five - not five but probably about four's the maximum we've ever done an interview for. It's pretty tough. You get to meet all those different people, and all of those people get together after the interview and make a decision.\r\n\r\nIf somebody says, \"No,\" then everybody else can try and persuade them and say, \"Really, let's look at the facts and the details.\" But fundamentally any one of those interviewers has the ability to veto that candidate. We've probably not hired some great people because of that. We've lost some good candidates - because one person didn't enjoy it, didn't resonate. But it keeps the bar really, really high. And it makes it incredibly hard to join.\r\n\r\nIn doing so, you actually attract people that want to work with really great people.\r\n\r\nIn a nutshell, always be designing that service, it's a service like anything else. Just like onboarding a customer, it's exactly the same.\r\n\r\nSo you look at - what is the bare essentials you have to have? What is everyone else doing? And then what can you do differently that adds a wow factor to it?\r\n\r\n**Len:** I've heard that particular tactic, of giving everyone on the team an absolute veto, from people before. It resonated with me, with something else you said, about the theme of, through the recruitment process, making your workplace an attractive place for high-performing people to be.\r\n\r\nBecause as frustrating as it can be when you're applying for a job, and arbitrarily someone who doesn't like the cut of your jib can prevent you from getting it, if you're applying to places like that, and you do get into one - that's an ideal outcome, not just because you're going to know that you went through that. But you'll know that everyone there thought about it and chose you. And again, as difficult as looking for work can be in so many different ways, that kind of process really can, as you say, make you optimistic about what your next opportunities are.\r\n\r\nAnd as you go through it, you get better and better at the process yourself. Difficult interview processes are good for you. People are doing you a favour by putting you through them as well.\r\n\r\n**Rob:** One of things that we always focus on - this is the kind of management style that I've sort of adopted, and is the basis of [Cultivated Management](http:\u002F\u002Fcultivatedmanagement.com) really - is, it's all about behaviours. The interview process is very much about behaviours.\r\n\r\nOne of the things we found early on, is people would put all sorts of stuff on their CV. They sounded awesome, and then you'd meet them and it was like, \"Really? Have you done any of this stuff?\"\r\n\r\nIt's very easy to recite books, to recite other people's opinions. It's very difficult during an interview process to explain why things didn't work. Why didn't Scrum work? Why didn't Kanban work? Why did that approach not work?\r\n\r\nWhat we always try to do through the whole exercise, is tie it to behaviours. And those behaviours - if you think about the culture of a business, a culture of a business is nothing more than group habit, it's what people do every day. So if everybody's late for meetings, that's your culture. You have a culture of being late for meetings.\r\n\r\nWe worked early on, and this is where the 10 behaviours came from, to look at our top performers and go, \"Well what did they do? What behaviours do they have?\" Not what languages do they use. Not how good they think they are at coding or testing or Scrum Master, but, what do they actually do? What behaviours do they do? And they the behaviours that we try to weave into the job adverts, into the phone interview, into the whole interview process, to try and work out whether this person, by default, demonstrates the behaviours that we think will contribute to a positive culture?\r\n\r\nThat doesn't mean to say that we don't seek at all diversity and the conflict of ideas, and people that think differently, of course. They must do that in a way that demonstrates positive behaviours, not confrontational. None of this hero worship, hero-grade developers that nobody likes. None of that sort of stuff, that's not how you build a good team.\r\n\r\nSo that's the whole process, when we look at, do you make it or not, it's whether you have demonstrated those behaviours.\r\n\r\n**Len:** Speaking about managing - I came across, on yourcultivatedmanagement.com website, a post called [How Do You Manage Millennials?](http:\u002F\u002Fcultivatedmanagement.com\u002Fhow-do-you-manage-millenials).\r\n\r\nI confess the very split second that I saw the title, I was like, \"Oh no, I'm familiar with this genre.\" And I was very pleased when I looked into it and saw what your answer was, which is, I think, the best answer I've seen to that question provided by anyone. I mean that genuinely.\r\n\r\nI was wondering if you could answer that question here. How do you manage millennials?\r\n\r\n**Rob:** Exactly the same way you manage anyone else.\r\n\r\nI mean, it doesn't make sense, just assuming that this catch-all term for millennials is obviously a certain age group. Generation X, babies of boomers - they're all individuals. And you manage individuals, you don't manage a team. You manage individuals. And each one of those people is different.\r\n\r\nI can find people from Generation Y or Generation X that have the same mindset and the same mentality as millennials do. But I could also find millennials who probably have the same attitude and outlook as baby boomers.\r\n\r\nIt's this sort of catch-all term that's been used for a certain age bracket. And it doesn't matter. It's all about behaviours and mindset and outlook. Seeking people from different generations is a very positive thing to do for a business. It's been proven in research that mixing those different generations together actually creates a very positive culture, very productive as well.\r\n\r\nSo in terms of managing, you manage based on behaviours. And those behaviours are behaviours such as - are you a good communicator, do you listen? Are you articulate in the way that you talk? Do you demonstrate good, safe programming? Are you a good Scrum Master because of these behaviours?\r\n\r\nIt doesn't matter what generation you come from, it doesn't matter how old you are. It has nothing to do with that, it's all about managing individuals. And everybody's an individual, and everyone's got positives, and everyone's got negatives.\r\n\r\nAs a manager, you're just trying to get that right blend of people working together, mostly on their strengths, developing their strengths, minimizing weaknesses, but also getting the right blend, so that people can conflict and confront, but in a safe, positive way so we can move forward and improve things.\r\n\r\n**Len:** One thing I really liked about the post was how you sort of threw the question back at the questioner, and said, if you're asking this question, what you really need to do is ask yourself another question. Which is, why am I dividing people up into generations like this in the first place? What is it about me that wants to think that way?\r\n\r\nThere's an implication of - are you being self-indulgent, is there something that you just haven't really thought through in your relationship to the people that you work with in a very fundamental way?\r\n\r\n**Rob:** I think so. Particularly, this question often comes from managers: \"I've got a millennial, they're always on the internet, they're doing this.\" But it's nonsense. What they're actually saying is, \"I have to change, but I don't know how to change.\" And the culture has to change. The culture will always change when you have people - no matter what generation they're from, no matter what - you're adding people to the mix, it's going to be different.\r\n\r\nThe question is, how different do you want it? Where do you want that culture to go to? You can never be certain. Don't get me wrong, I'm not saying you can define a culture and then go for it. But you can try, and you can add the right people who are going to add to that.\r\n\r\nI think what most managers are afraid of is, there's this new group of people coming into the workforce that demand more of a work\u002Flife balance. They demand certain things. If you go by the stereotypes and what the research seems to show.\r\n\r\nBut if you're building a very strong, positive culture anyway, then you've probably already got people that think that way. Why would you not want more of a work\u002Flife balance, or attention [to be focused] the right way? Why would you not want to adopt new technology if it makes you more productive? Why would you not want to challenge some of the nonsense that happens in some businesses?\r\n\r\nUnfortunately the management are seeing this new group of people coming in who aren't afraid to ask the questions. Who are happy to go to another job if there's another one better down the road. They probably don't have the families and the mortgages that keep some of the older generations in the workplace. And they're just scared, I think. They're scared of how it's going to change, how they're going to change. And they're just saying it's the millennials' fault. No, it's just the mixture of people in a business.\r\n\r\n**Len:** That was the part of the answer that I liked the most - a lot of the things that the stereotypical millennial is asking for, are entirely reasonable suggestions for improvements.\r\n\r\n**Rob:** Absolutely.\r\n\r\n**Len:** When you talk about nonsense, for example - I spent some time in the \"be at work at nine\" world, commuting often on the Northern Line in London. Which, for anyone listening who knows about that....\r\n\r\nThe whole thing just struck me as absolutely ridiculous. I remember one time - I come from one of the few places in the world that has no daylight savings time. And so when I moved to London, I just had no inbuilt instincts. I didn't know about \"fall back\" and \"spring forward\" or anything like that.\r\n\r\nSo one day, I went to the tube, and the platform was absolutely empty. I was like, \"Oh shit, something profoundly wrong has happened here.\" And of course, I immediately looked at the clock, and it's like, \"Oh crap, I'm an hour late.\"\r\n\r\nI went to work, and there was nothing crucial going on. There was no meeting, there was nothing like that. But I remember being fearful of the consequences of my mistake - which were, of course, nothing more than a manager mildly indulging in some recrimination. But my commute that morning was fantastic.\r\n\r\nAnd if my boss, who was a pretty smart guy, had just thought, \"Oh, I'll just let my team come in an hour later and leave an hour later at the end of the day, then they're all going to be much happier and much more productive. And they're going to appreciate the decision that I've made.\" Not just because it's better for them, but because it's actually more reasonable to do things that way.\r\n\r\nI've often wondered if one of the reasons that a certain type of person finds suggestions for improvements like that so painful, is that their own following of the convention was unexamined in the first place. It's a reminder that they hadn't actually examined this very important principle that they've carried out in their whole working life. There's something kind of humiliating about that. And that's where the bitterness comes from.\r\n\r\n**Rob:** Very probable and very possible. I think also, the conventions and the norms - people just adopt the norms of the teams they move into, unless they're a very strong character that's happy to create a bit of a ruckus and throw some suggestions out there without fear of people shouting at them, telling them off. They are just going to go and do what everyone else has done. And if the whole organization's been around for 10, 20, 30 years - they're in the nine-to-five mentality as it is.\r\n\r\nWhat's interesting for me is, I've always viewed productivity as: there must be a better way of doing this. So instead of working more hours, which is what most managers assume productivity is - just work extra hours - my view's very much, well, if you work better between six and ten in the morning, then work between six and ten in the morning. And then take a couple of hours out, and then do some work.\r\n\r\nIt's not always easy to implement those things, because of HR and executives and other managers that might not think that's a good idea. But there's always a better way of doing something. And often it's just a smarter way than just throwing more hours at it or going to the office nine to five.\r\n\r\nIn fact, what we found usually when we did process improvement - is there a better way of doing it? - there's usually always a very, very smart way of doing it. Or we just don't do the thing we're doing.\r\n\r\nSurprisingly, most managers are fearful of that as well. Just stopping doing stuff, just do something different. It's the culture, it's the fear, it's all of that. It's a complicated topic.\r\n\r\n**Len:** When you talk about that, that reminds me of a couple of the 10 behaviours that you talk about in your book, *10 Behaviours of Effective Employees*.\r\n\r\nOne of those is being open minded. And I was going to ask you if you could talk a little bit about what you mean by that? It sounds like you were touching on that in your response just now.\r\n\r\n**Rob:** There's a quote from Paul Graham, that sort of legendary investor, IT software guru. He said, be aggressively open minded. Because actually, if you're trying to plan and predict everything, you're going to be hugely disappointed. Because you actually have probably no idea what's going to happen in the next two, three, four, five years.\r\n\r\nSo being open minded is super important. Now, that doesn't mean that you're open to anything and will just waste time on ridiculous ideas. Being open minded is about saying, \"Is there a better way of doing this, and what are the options that we have? Have we thought enough about these?\"\r\n\r\nWhat people confuse open mindedness with is, let's just go and do this new Agile stuff. \"I'm open minded, we're going to go and do it.\" But nobody's questioned whether that's the right thing to do.\r\n\r\nSo you have to get that balance of saying, \"Here's a new way of working, there's some new ideas. There's some people doing some really cool stuff over here. Maybe that would work for us? Let's try it. But let's experiment, let's make sure that we are doing it for the benefit of the customer.\"\r\n\r\nAnother one of the behaviours is always thinking about a customer. Again, far too many people improve things, change things for their own benefit, and it has a detrimental effect for the purpose of the business.\r\n\r\nYou have to always get that balance right. I think being open minded is one of the things that we always look for, always have done, as you know. \"What new technology are you using? What new ways of working are you doing? What books are you reading? What are you doing in your personal life that's challenging and opening up new directions for you?\" Because it is one of those. There's nothing worse than being sat in a meeting room with somebody who's totally and utterly closed minded.\r\n\r\nI found a phase on the internet. I found a quote. I can't remember who said it, but, \"You can spot the closed-minded people, because their mouth's always open.\" I just thought, that summed it up quite nicely. Closed-minded, we know the answers. We don't need to do anything differently.\r\n\r\n**Len:** That's funny, it took me a moment to put it together, that you meant when their mouths are always open, that they're always talking, because I was immediately thinking about a [mouthbreather](https:\u002F\u002Fwww.urbandictionary.com\u002Fdefine.php?term=mouthbreather), as they're called. That's a really good line.\r\n\r\nWhat you were talking about there reminded me of a line on your Cultivated Management website about how, before, let's say, you make the switch in your team or your company to Agile, you should actually have an understanding of your foundations, and the foundations that are in place first. I was curious - I wanted to talk to you a little bit about that. What are those foundations, and how would you suggest someone go about examining them?\r\n\r\n**Rob:** This is really the focus of mine, my new business and the way that I'm approaching stuff.\r\n\r\nI think moving to HR was one of those moments where I closed the loop on the Agile transition. When I first joined NewVoiceMedia nine years ago, we would release software every 14 months. It was huge waterfall projects, with massive testing phases.\r\n\r\nAftr about two years, we got it to monthly, fortnightly. And then another couple of years later, we were doing weekly releases consistently. That was all the business really needed. The customers didn't necessarily need anything more rapid than that.\r\n\r\nAnd the journey. If you've heard me talking about that three or four years on the speaking circuit, it was all about the test techniques, it was about agile, it was about tester and development, it was about CI, it was about DevOps. It was about all those buzz words. And there's loads of people still confused, thinking that that's actually Agility.\r\n\r\nBut when I moved out of DevOps, and I moved to HR, we achieved the same sort of principles. We were shipping stuff, we were working in small increments. We were doing Agile by most definitions.\r\n\r\nI had a 360 review of that, and I was able to close it out and go, \"Well actually, what did we do?\" and reflect on it. The core thing is, we released Agility. We didn't buy it, we didn't force it. We released it. Week and month after month, after month, learning new things, opening more ways, removing more friction, constantly releasing more and more Agility for those in the business.\r\n\r\nAnd how did we do that? The answer's in two parts. The first part is absolute clarity for the employee, so the employee knows how they contribute to that success. They know what's expected of them. They know how they're measured. Their manager has given them feedback based on behaviours, positive behaviours - and sometimes negative feedback.\r\n\r\nThe other half of that belongs to management. My view is management should be spending probably 70%, 80% of their time fixing the system. This is solving problems, fixing processes, dealing with communication issues, requirements - whatever, just stuff that unblocks the team.\r\n\r\nSo you've got two halves. One is, the employees need to know what's expected, and what the vision, what the mission is. The other half is the managers need to own a system. They need to fix the problems. They need to do process improvement. And then they spend a small amount of their time managing people, if there's ever such a thing.\r\n\r\nMost people have it the wrong way around. Most managers don't set clear visions. Their staff have absolutely no idea how they're measured, until the annual performance review. And the managers spend all their time managing people, rather than fixing processes.\r\n\r\nAgility can never really thrive in that environment. You might find the odd example where it does, but genuinely speaking, Agility is about removing the friction towards your purpose. If you don't have a purpose, you're not removing the friction. You're never really going to achieve agility.\r\n\r\nSo that's what my sort of focus is, those two parts of that. One's people, one's management. The two combined together with a good, strong purpose - you can achieve anything.\r\n\r\n**Len:** I found a chapter, which was originally a blog post in [The Social Tester](http:\u002F\u002Fthesocialtester.co.uk), about how a preoccupation with processes still needs to be directed towards the right processes. You have a striking title for this chapter, called, \"Planning For When Cows Attack.\" I was wondering if you could talk a little bit about what you're getting at with that hilarious -\r\n\r\n**Rob:** I'm trying to think back. That was a long time ago, that post.\r\n\r\nI think in a nutshell, it's about this deep-rooted belief that if we just plan everything, if we spend our entire time planning with Gantt charts - whatever is your tool of choice for planning and documenting everything and thinking about all the risks - that stuff's important. Agile isn't about throwing that stuff out.\r\n\r\nBut what's important is to realize that as you go down the journey of releasing agility, or releasing revenue and growing a company, you're going to encounter things that you've never planned for.\r\n\r\nActually, if you have the right approach with the staff - knowing exactly what's involved, how to measure - [everything] we just talked about - and the manager's fixing the processes, what you actually release is stuff that you would never have dreamt of planning.\r\n\r\nWould we have ever put into a plan that we want people to go away after being rejected for a job, and saying how amazing that process was? No, we would never have put that into a plan. Would we have put into a plan that we could be releasing software and scaling Agile in a fairly seamless way, onboarding 100% year-on-year?\r\n\r\nWe probably wouldn't have been able to plan what that looked like. But when you focus on the right processes, from the perspective of your customers or your candidates or your employees - and you improve the process that's causing the most friction, the one that's slowing people down - you get gains that you would never put into a plan.\r\n\r\nThat post's really about - you can plan for all of this stuff, but then when the cows attack and push that poor gentleman into the Thames, did he plan for that? No, not at all.\r\n\r\nThat was a true story by the way. There was a herd of cows that surrounded a man and forced him to jump into the Thames.\r\n\r\n**Len:** Actually that story doesn't surprise me. I grew up in a rural place. In my life, I've encountered cows, and when a group of them starts moving towards you, it can actually be difficult to get out of the way.\r\n\r\n**Rob:** Run away.\r\n\r\n**Len:** By coincidence, the last question I was going to ask you about, your book *10 Behaviours of Effective Employees*, was about what you meant when you talked about behaving bravely.\r\n\r\nI say it's a coincidence, because you've obviously just done something brave. I was wondering if you could talk a little bit about that, about why you've decided to make this change, and move out on your own.\r\n\r\n**Rob:** For me, moving out on my own, I think it was one of those decisions where I've been at the company for nine years. I've achieved the things that I personally wanted to achieve in my career. And I've learned - I mean, it was a great place to work. Tons and tons of learning, growing, scaling Agile, building a team in Poland - all this sort of stuff. It's got all the buzzwords associated with it. It's just been one of those really, really fun journeys.\r\n\r\nBut I think you get to a point with any career, where you start to think, \"If I don't leave now, then I will be here for the next ten years.\" Because you get stable, and you get comfortable. And the bills are getting paid, and everything's going the way it should do.\r\n\r\nSo about six months ago, I thought, \"You know what? This is something I have to do. I have to go and see if I can build my own business. If I can help other people achieve greatness in what they are trying to do.\"\r\n\r\nI've always had this dream of running my own business. And if I don't do it now, I'm mid-life aged, it's one of those times where I got this opportunity. We squirreled away some money to give us a runway, and this is an opportunity to try and do something different.\r\n\r\nInterestingly, I think what happened when I pulled the cord, as I call it - I just, one day - that was it. I'm announcing I'm off - that's it, I'm out.\r\n\r\nThe phone lit up, and lots of opportunities have popped up. Again, it's that, sort of, being brave in what you're trying to do. Do you just go and get another job, or do you stick to what you're trying to achieve, and run the risk that actually, come March next year, I might have to go back and get another job, because this won't have worked?\r\n\r\nIt's one of those things. But I think I didn't want to get to the point in my life where I was unable to try and do these things without having had a go. I think that's the iterative - try, fail, see what happens, learn from it, and just keep moving forwards.\r\n\r\n**Len:** Best of luck with this move.\r\n\r\nI guess it's kind of anti-climactic, but at the end of these interviews, I always like to ask a couple of questions about self-publishing for the benefit of those listening, who are interested in self-publishing themselves.\r\n\r\nObviously you've done a lot of the right things by conference-speaking and blogging a lot and stuff like that. But you've also decided to write books. I was wondering - was there anything in particular that got you started doing books? I believe your first one was *The Educated Parent Brain Book*. Was there something specific, or strategic, about, \"Now I should get into books.\" Or was it just something you fell into, because you're always writing and being productive?\r\n\r\n**Rob:** Writing for me is a very important aspect of my day. Even when I wasn't really blogging, I'd sit down and try and write 1,000 words a day. Just one of those things. First thing in the morning. Just before everyone else is up, and write.\r\n\r\nI think one interesting thing happened, which was, the more you blog and the more you get an audience, the harder it actually becomes to blog. Because you get more eyes on it, you've got more criticisms, you've got more opportunities to completely make a mess of it.\r\n\r\nAnd so for me, blogging became this very fearful - kind of like, \"Oh, I'm going to hit publish. What kind of fallout is going to happen from this?\" Not that there was ever really anything controversial. But people tend to get quite angry about various different things, particularly around Agile. I lost that enthusiasm for it. It was like, \"Oh really?\" But I was still writing, I was still generating a ton of content. And from there, it just felt like the right time.\r\n\r\nI think tools like Leanpub, for example, have given self-publishers a breaking down of the barriers that they needed to write a book. Before, you had to basically either create a PDF and sell it on your own website, or try and sell it through somewhere else, or give it away for free. Amazon's still a little bit daunting for a lot of people, publishing straight onto the Amazon platform.\r\n\r\nBut things like Leanpub came along and said, \"Well here you go - work in Dropbox, work in text files, spin it up, publish it. You don't even have to say it's 100% complete. You've got an opportunity to go and change it, and then try and get feedback. It broke down the barriers.\r\n\r\nFor me, Leanpub was one of those exciting - the new tool to use in the whole self-publishing world. And I've been publishing for years, all sorts of different stuff.\r\n\r\nBut really the books came about because there was now a platform that I could use, without having to get a publishing deal. It's been brilliant. [I'm] enjoying the process of it.\r\n\r\nI've got a couple of books up on Amazon as well, that aren't on Leanpub and [?] and a couple of other platforms, and what have you. But really Leanpub took that barrier away.\r\n\r\nOne of the books, *[So You Want To Be A Scrum Master?](https:\u002F\u002Fleanpub.com\u002Fbeascrummaster)* was actually written during a Hackathon.\r\n\r\nSo while the devs were hacking away with code and [?] - Scrum Masters, testers and a couple of other people that didn't really spend their time coding, came together to create that book.\r\n\r\nAnd we did it in Leanpub. We had a Trello board with all the articles going through. And then a shared Dropbox folder, and we were contributing in. Literally it was a day and a half, and we'd managed to write a book.\r\n\r\nThat's the power, I think, of self-publishing. That's what appeals to me. And I think it's great for anyone that wants to write books. Now is the time to get doing that stuff.\r\n\r\n**Len:** Thanks for the kind words, but also thanks for that great description of how things have changed just in the last few years, as self-publishing tools have evolved, and attitudes towards it have evolved as well.\r\n\r\nMy last question is - if there were one thing about Leanpub that we could build for you, or if there were one thing that we could fix for you, what would that thing be?\r\n\r\n**Rob:** That's a really tough question. I think at the moment, having a free option. I noticed that now to create a book, there seems to be a price. I think it was $58 when I looked the other day. I think it varies upon how many books you've published with [Leanpub].\r\n\r\nBut sometimes I want to publish a book on Leanpub that I don't want to sell. And so I think, unless I may have missed an option, and you can correct me, feel free to do so - I think a lite version, where, here's one version when you publish, and you actually want to sell the book.\r\n\r\nI think if the free model came back in some way, shape or form - in maybe a limited production, limited publications - you might start to attract people that are outside of the technology world. Because Leanpub's a great platform, and you've got parents, you've got food bloggers, you've got all these people - but they're not publishing books very often on Leanpub.\r\n\r\nI think that barrier of that price could be something that would attract me to publish a lot more free books. Smaller books, short pamphlet-type stuff. Maybe some zines, maybe that kind of stuff? That for me would be back to how it was a few years ago, and keep that paid model if you want to generate some revenue from it.\r\n\r\n**Len:** Thanks very much for that. That's really excellent feedback.\r\n\r\nThe decision we made about just over a year ago now, to start charging people to create Leanpub books, was one of the top three decisions we've ever made. It's something we thought about a great deal. There's a [very long post about it](https:\u002F\u002Fleanpub.com\u002Fpricing) that you can read, if you're interested, on how we made that decision.\r\n\r\nThe way it works is that currently, if you want to create a new Leanpub book, it's $99 US. I believe if you've earned more than $1,000 in royalties as an author, then that price goes down to $49 per book. And if you've earned more than $10,000 in royalties, it goes down to zero per book.\r\n\r\nWe're going to be introducing more options, one of which is, we're going to be introducing free trials. Which is a pretty standard thing to have when you're doing what we do, or offering a product like we offer. That's been a long time coming.\r\n\r\nWe're very open minded about pricing, and we're definitely going to be iterating over time.\r\n\r\nIt's possible, for example that - so for people who are listening, Leanpub has a variable pricing model, so any Leanpub book can actually be set with a minimum price of \"free,\" and then people can actually still pay for it if they want to, which sort of complicates the example you're describing a little.\r\n\r\nIf you contact us, there's a setting we have that says, \"No payments,\" which is, I think what you're describing. Like an exclusively free book, which we actually developed because someone who had had funding from an American government agency to do scientific research, and who wanted to publish the results on Leanpub. And they're like, \"Well we can't accept payment for it.\" So we're familiar with one version of that case. What you suggested is definitely something I'll bring up.\r\n\r\n**Rob:** I just think, if this is your first book, you're almost like, \"I'm not going to make that money back.\" I can imagine a few people landing on the page going, \"Oh, actually, I don't know whether this will sell any copies.\"\r\n\r\n**Len:** One thing I do feel a little bit safe adding at the end of a long interview about the matter of pricing, is that, whatever the level is, as soon as you start charging money for something, there is actually a positive aspect to the way it makes people decide whether or not they really want to do what they are about to do.\r\n\r\nI'm trying to be very diplomatic in the way I'm framing this, but writing a book is a commitment. And by introducing, effectively, a kind of paywall, that actually does change the nature of the relationship that people have towards what they're doing when they're on Leanpub.\r\n\r\n**Rob:** That's true. You get that - that commitment to finish it, yeah.\r\n\r\n**Len:** Exactly. And in particular, it changes the general quality of the books on the bookstore. Which is a very in-the-weeds kind of thing, but if you work really hard on your book - and by the way, we encourage anybody who's interested in writing, to get started, you can publish a Leanpub book when you're two or three chapters in, give it a try - but what I was about to say was, if you work really hard on your book, like maybe for years, and maybe it reflects a lifetime of experience in some area that you really care about, you start to care abut what book yours is presented next to in a book store. Not necessarily, but you might start doing that.\r\n\r\nThat's just one facet of the complex gem of our decision to introduce a price, to making a Leanpub book.\r\n\r\n**Rob:** I, for one, that's a price I am happy to pay, based on obviously what you've just said.\r\n\r\nBut there are those books that I don't really want to charge for, and like, \"This is a free book.\"\r\n\r\nI wrote one the other day about the improvement of the recruitment process, and it ended up being 19,000 words, which is technically a book. It started off as a blog post. I don't know whether that's enough to charge people for it. But at the same time, I want to try and get it distributed as a book. So yeah, there's those interesting dilemmas, it's always a challenge, isn't it? Always a challenge.\r\n\r\n**Len:** Yeah. I remember, just before we go, there was one person in particular who was creating dozens of books of Japanese fairy tales, I believe. And when we introduced our pricing, I think it was that person who had a tweet with a crying face emoji in it. \r\n\r\nWhen we made that decision, there are definitely types of projects that are totally awesome, that are now incompatible with our pricing model. And that is definitely something that we'll be iterating on and thinking about as we go forward. I mean, that decision is not set in stone the precise way we've done it to begin with.\r\n\r\n**Rob:** That's what I like about your organization. Iterate through it and see what works, see what happens - and build new features. It's spot on.\r\n\r\nI notice also you've got [Jerry Weinberg's collection of books](https:\u002F\u002Fleanpub.com\u002Fu\u002Fjerryweinberg) on there now, which is very positive. So that's good.\r\n\r\n**Len:** We're pretty happy about that.\r\n\r\nOkay, Rob - thank you very much for taking the time in the evening to do this. I really appreciate it.\r\n\r\n**Rob:** Thank you for having me on the show.\r\n\r\n**Len:** And thanks for being a Leanpub author.\r\n\r\n**Rob:** Thank you, and thanks for your platform.","transcript_html":"\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Hi, I'm Len Epp from Leanpub, and in this Leanpub Frontmatter Podcast, I'll be interviewing Rob Lambert. Based in Winchester, Rob is [formerly - eds.] Vice President of Engagement and Enablement at NewVoiceMedia, a customer contact platform with offices around the world. He also blogs about how to remain a productive manager at \u003Ca href=\"http:\u002F\u002Fcultivatedmanagement.com\"\u003Ecultivatedmanagement.com\u003C\u002Fa\u003E, and blogs elsewhere on Social Tester and at \u003Ca href=\"http:\u002F\u002Fparentbrain.com\"\u003Eparentbrain.com\u003C\u002Fa\u003E, and you can follow him on Twitter \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Frob_lambert\"\u003E@rob_lambert\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees\" target=\"_blank\"\u003E\u003Cimg src=\"https:\u002F\u002Fs3.amazonaws.com\u002Ftitlepages.leanpub.com\u002F10behavioursofeffectiveemployees\u002Fhero?1494943348\" alt=\"10 Behaviours Of Effective Employees by Rob Lambert\" style=\"float: left; margin: 0px 25px 15px 0px; height:270px; border:1px solid black\"\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003ERob is the author of a number of Leanpub books, including \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fthesocialtester\"\u003EThe Social Tester: 8 years worth of thoughts on Software Testing and hiring Testers\u003C\u002Fa\u003E\u003C\u002Fem\u003E and \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees\"\u003E10 Behaviours Of Effective Employees\u003C\u002Fa\u003E\u003C\u002Fem\u003E. He's also co-author of *[So You Want To Be A Scrum Master? A collection of ideas, thoughts and learnings from the agile community at \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fbeascrummaster\"\u003ENewVoiceMedia\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn this interview, we're going to talk about Rob's background and career, professional interests, his books, and at the end we'll talk a little bit about his experience as a self-published author and blogger.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo thank you, Rob, for being on the Leanpub Podcast.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Thank you for having me. It's a pleasure to be here.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I always like to start these interviews by asking people for what I jokingly call their \"origin story.\" I know you do have one. I was wondering if you could talk a little bit about where you grew up, and how you first became interested in software and testing?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I'm from Sheffield in the north of England - that's where I was born. I think very early on, I was exposed to computers. My dad was a computer engineer, going around the UK fixing them. So from a very early age I was doing desktop publishing on old DOS machines and all sorts of stuff. That was my origin story with computing.\u003C\u002Fp\u003E\n\n\u003Cp\u003EGrowing up in Sheffield - \"Steel City\" is where we used to do all the manufacturing of steel in the UK. A very industrial city, lots of sort of working class origins. It kind of led into documentaries, writing, university and college. I studied comms and all that sort of stuff. Really, it's always been about publishing. It's always been about taking a message and communicating it - that's what I studied in college and university.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd then from there, I entered the workplace straight after university. I fell into software testing, like most software testers actually do. From there, I had a very illustrious career - hopefully.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI'm proud of what I've achieved in the software testing world. But I think at one point, I wanted to sort of escape from it. I wanted to do something different.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe companies I worked for were good, but we weren't shipping software very often. And the publishing and the blogging side of it was what kept me engaged. It kept me there in the industry, because it allowed me to use that creativity stuff - the origin-story foundations of publishing using computers, and blogging. That's how it all kicked off and started that side.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I wasn't planning on asking this question, but I remember when I was living in the UK, hearing stories about out-of-work steel workers. In particular, I remember speaking to someone from there, and I was asking, somewhat deliberately naively, \"Why don't they just move on and do something else?\" And this guy looked at me like I was the biggest idiot. He said, \"Len, they're steel workers.\" I was wondering if you could talk a little bit about that aspect of life there, and maybe how things look in Sheffield now?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I've not been back to Sheffield for a while. I moved down south to Winchester, probably about 10 years ago now.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut certainly when I was growing up, it was during the whole miner strikes, so there was very grim sort of feel to the city. Lots of people unemployed, the sort of air of, I guess, desperation, a little bit. Like, \"What are we going to do next? How are things going happen?\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EThere's a very famous film called \u003Cem\u003EThe Full Monty\u003C\u002Fem\u003E, which you may have seen, about four out-of-work miners, or steel workers, who decide to go and actually strip in strip clubs for a living to try and make some money. It's a very good film and it kind of captures, the essence of Sheffield at the time. Lots of unemployment, lots of people wondering what to do next. A city trying to regenerate itself.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd actually, it's done a really good job. I'm heading back to Sheffield next year for the first time in probably 10, 15 years, and I'm looking forward to seeing how much has changed just as much as being able to describe it.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E When I moved to England, the memories of Thatcher and grimness were kind of ending because it was 1999 and Tony Blair was coming in, and all that stuff. But there was a kind of legendary past that people still walked around with.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I think in the 90s - obviously Tony Blair in the UK was kind of a great time, really - everybody was positive, optimistic, there was a lot of prosperity. And you kind of felt like you could do anything. The future was there for the taking. Mobile phones had just come out, the internet was kicking off. It was a wonderful time to be at university, a wonderful time to be learning about technology and web - which is what I was studying at the time. You just felt like you were unstoppable almost, like, \"This is it. We can do anything we want to.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I remember the excitement around the millennium as well. Being on the Banks of the Thames, right under the London Eye - which didn't work.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Yes, absolutely.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E But it was an exciting time. Did you study programming in university? Or formally in another setting?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E No, not at all. At university I did a degree that's called Media Science. In a nutshell, it was a science degree. It's all about anything scientific really - making microprocessors at the time. We studied a lot of biology, we studied chaos theory, high-level scientific theories. The goal of the degree was really to take something extremely complicated, and communicate it to a number of different audiences.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAt the time, I didn't necessarily see the value of the degree. I wanted to be a film director. I wanted to be the Spielberg from Sheffield kind of thing. That didn't pan out. But the degree actually, when I look back at it, was all of the tools that you needed to get into publishing on the internet.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe would take something incredibly scientific, like launching a spaceship into space, and we'd be able to write an article for the \u003Cem\u003ENew Scientist\u003C\u002Fem\u003E, which was a big scientific journal. You could use as much jargon as you wish. You could be as elaborate in the way that you described it as you wanted to be. But then we would also take that same concept, that same topic, and have to write that for a tabloid newspaper, where you have to use simpler languages, you have to use more visuals to explain things.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe did word processing, we did desktop publishing. It was the early rise of the CD-ROM, so we were in Microsoft Dreamweaver, and all those sorts of tools, building websites. \"What you see is what you get\" publishing. It was taking something very scientific and communicating it through video, through podcasts, through audio, through all sorts of different stuff - well before it was trendy to do that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think that was what was interesting - the science side of it, but actually we did sociology, communications, and all the other things that have helped me to no end in writing books, blogging, speaking at conferences. Stuff that I just thought, \"You know, this is not going to be very useful in my career,\" actually it turned out to be fabulous.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E You mentioned that you \"fell into\" testing, as testers often do, and I was wondering if you could talk about what your experience was? I've spoken to some other testers on this podcast and heard their stories, and I'd like to hear yours too.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E When I finished university, I had no idea what I wanted to do. I wanted to be a film director, I wanted to get into media. But unfortunately, the media industry as a whole wasn't very big up north - Sheffield and Leeds. And there weren't a great deal of jobs. The jobs that it did have weren't very well paid at all. I had a student loan, I had things I needed to pay down.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo I moved with my girlfriend up to Leeds, and we rented a little property up there, and there was a job down the road for a software tester. I had no idea what it was, but I went ahead and took it. It turned out to be a really good job working for a very large IT company that produced school software. I was testing timetable software, school planning software - a very, very good company. Lots of good products.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd that's how I fell into software testing. It just felt like a good job to take. Previous to that I was delivering snacks around Lincolnshire in a van, so this was a very big move, and it was a very positive one. I stuck with software testing for probably about three or four years, before I started to really think that there's a better way of building software than this.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E The education software, was it for children?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E It was for schools. This was for school administrators and teachers. For example, a teacher's putting together your end-of-year report. They can use boilerplate text, and we can fill in your name - and they can drag sentences around to create a school report. Or the teachers would be timetabling students for the next year. So there would be a timetabling system, to make sure there's no clashes, get all the students studying the right topics, etc. It was really more for school administrators, heads, and teachers.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I was just curious because I'd never thought about what the difference might be between testing something for adults and testing something for children. And in fact, how that might have changed over the past, let's say 10 years or so, as children get introduced to more sophisticated products at a younger and younger age than they may have in the past.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I think the products now are obviously clearly more intuitive. Back then, these were all desktop clients, with not a lot of networking going on - or what networking there was, was a little bit shady and maybe not quite as secure as it should have been.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think nowadays with kids - I've got three boys, and they just pick up tablets and go for it. They pick up their laptop and everything just seems a lot more intuitive. I think kids nowadays are becoming a lot more tech-savvy.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn fact, I'll never forget the time I took my middle kid down to the local supermarket, and there was an advert outside - one of these big advertisement boards, a digital one - and it was rolling around, it was kind of like a scrolling screen. And he went up to it and put his hand on it, and swiped up - just at the same time as the picture changed, and he thought he'd done it. He thought this was just some sort of giant iPad, and everything was just touchscreen. He's touching every screen, everything. And some stuff worked, some stuff didn't. And that's just intuitive; it's just the way that they're wired, really.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Speaking of children and parenting, you have a project called \u003Ca href=\"http:\u002F\u002Fparentbrain.com\"\u003EParent Brain\u003C\u002Fa\u003E, and \u003Ca href=\"https:\u002F\u002Fwww.amazon.co.uk\u002Fdp\u002FB06XDNVMC5\u002Fref=as_li_ss_tl?ie=UTF8&amp;linkCode=sl1&amp;tag=adapt-iterate-21&amp;linkId=63a349e1ea91cefbd595db2c7857c170\"\u003Ea book\u003C\u002Fa\u003E. I wanted to ask you about that, because you frame the inspiration for the book with a story about a transformation that happened to you when you became a parent.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E It's called \"The Baby Effect.\" Most people, I think at some point when they have children, go through this. It's this realization that this small bundle of joy is relying on you. For me it manifested itself in this: \"Stop playing video games. Stop burning your evenings doing pointless things on the internet, and actually start creating something. Start making yourself employable.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think what this harks back to is Sheffield, and growing up and seeing the raft of unemployment and redundancies in the family left, right, and center. I've always had this thing where I didn't want that to happen to me. I think when my first son, Ollie, was born, it was kind of, \"Wow, I need to sort of grow up a little bit here. I need to start earning a bit more money, doing something more with my career,\" and making myself basically hire-able. Remaining relevant and constantly employable.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESince then, that's been the theme that's gone through everything. The Parent Brain book, \u003Cem\u003EThe Employable Parent Brain\u003C\u002Fem\u003E, is really that same thing. It's about, take that Baby Effect and drive it - use that energy and that enthusiasm to make yourself more employable.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think really, the catalyst for Parent Brain was, I was on one of the parent forums. And there were highly qualified, super talented parents, with great education, great experience, great skills - and they couldn't get jobs. They just could not get back into the job market. And it got me thinking about why. Why is that? There's some problem with companies not embracing flexible working and all the other stuff.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut there's also this inability, I think, for people to articulate where it is that they have value. The world is shifting constantly, and that value is no longer in your job title. It's no longer in your qualifications, it's in how you can create, and the value that you can bring to a business. That needs articulating, and very few people have the skills, or the energy, or actually the realization to think that's the future of work. You have to show you can do good, interesting, valuable stuff.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I noticed that theme in your work when I was preparing for this interview. And one of the things, I think - I'm just putting it together - but one thing that was striking, that I found in your \u003Ca href=\"http:\u002F\u002Fparentbrain.com\"\u003Edescription of the Parent Brain project\u003C\u002Fa\u003E was, you weren't shy about talking about laziness. You pull it off in your description very well, without sounding just like a grumpy person from an elevated standpoint criticizing people.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt was sympathetic, but it was also very straightforward. It was like, one of the problems you can fall into in life - whether you're employed or not, whether you've got children or not - is being unproductive. And unproductive, not necessarily in the sense of wasting time on the internet, which can make you feel like you're doing something, but really just being lazy.\u003C\u002Fp\u003E\n\n\u003Cp\u003EDo you talk about that in the book? What you can do to kind of get yourself out of that hole if you've fallen into it?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Getting out of the hole is really - you need the purpose. For me the purpose was the Baby Effect. This was my son relying on me - that was the inspiration, and the drive, and the purpose I needed to stop playing video games and stop messing around. I think it is easier, certainly with the internet like you say, to get stuck in the rabbit holes of reading articles, and thinking, and consuming so much stuff that you don't actually create anything of value.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think the link with people being unhappy when they're on social media, and all that sort of stuff, is very real. I've seen it myself first-hand. In the book it's really: you need to find the purpose. Why are you doing what you're doing? If you're super happy spending your evenings playing video games, great. That's awesome. That's your life. Everybody does whatever they want to do, and that's great.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut I think if you want to take your career seriously, you have to put in the effort outside of work. I think what a lot of people - certainly when I've been speaking around the world in the tech industry, a lot of people assume that their employers are going to look after them. They assume that the training is going to get given to them. They assume that they're going to have a job for life. That's just not true at all - very few people actually achieve that. I think those that find themselves on the job market, surprisingly, are often woefully unprepared for it.\u003C\u002Fp\u003E\n\n\u003Cp\u003EReally, that's my mantra: just keep slowly but surely making yourself better and employable every single day.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E One thing you talk about that's very concrete is adding skills - keep adding skills to your repertoire, and don't necessarily be concerned with being the very best at something.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think it was that talk you gave that I saw \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=RqL4Q3D0a5g\"\u003Eon YouTube\u003C\u002Fa\u003E, where you talk about the creator of the cartoon Dilbert, who's now become quite famous because - well, of course he was already famous, but he's now famous for \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=iLytHh8Za9g\"\u003Eexplicitly predicting Donald Trump's victory\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn your talk, you talk about how he says that, \"One path to success is to be the very best at what you're doing.\" And you sort of humorously, with a dry wit, say, \"That's the hardest way to do it.\" But you talk about how there's another way to do it, and you learned about it from this creator of Dilbert. I was wondering if you could talk a little bit about that alternative path to success?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I have this thing in my head where every so often I wish I was more of a specialist in something. You look at people that have gone down the expert route, and it's the harder route to go down. It's years and years of training and working. And generally, the opportunities just become less and less until you become the best in the world. And then you can set your own price, and you've always got work - and probably a very meaningful career.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut for most people, the value comes from having enough skills in enough areas to mash that together to create a very unique value. The challenge with that though is, how do you articulate that value?\u003C\u002Fp\u003E\n\n\u003Cp\u003EYou started the podcast saying I'm the VP of NewVoiceMedia, but I've since left that. It's been about six weeks now since I've moved on.\u003C\u002Fp\u003E\n\n\u003Cp\u003EHaving spent the last year and half in HR, and parts of engineering management and testing, it's dawned on me how difficult that is to actually articulate - the value that you have, because you've got all these different skills. I'm not an HR specialist, but I'm also not this and not that. I'm all of these things. And the more you speak to people, the more you realize everybody has a fairly broad set of ideas and enthusiasms and skills.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's just a case of working out which ones they need to work on a bit more, which ones they need to mash together - and bring it together into a very unique package, and then be able to articulate that to somebody who has a problem that you can solve. I think the skill, skill, skill thing is a model that suits the way I work.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut I do think you do need to have that core specialism. Are you familiar with this is from Ideo - the T-shaped employee?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Thanks to watching your talk on YouTube.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E There's various different shapes, but essentially, you're talking about having a core skill, which is something that you are extremely good at, extremely skilled at. You've spent years honing this craft. And that's the center of the T, it's like the tall bit, the bit that goes vertical.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd then the horizontal T across the top - they're the series of different skills that you acquire that allow you to be able to talk to people in marketing, or actually do bits of teaching.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIf you think about it, from my perspective - I was a tester, engineering manager at Graham Bigg's scaled Agile teams [?]. That's my core skill. The bit across the top is HR, public speaking, writing, blogging - all the different things. And when you mash all that together, you become a very unique and hopefully valuable employee.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut also, you have a lot of fun, because you're learning lots of different things, and you're bringing it all together, and seeing how you can resonate and get those things to gel - and forming something and creating something that's never existed before.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt suits me, but I know for a lot of people it terrifies them and they just want to be the best at one thing. And that's fabulous as well. Whatever works for you.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I was just going to say, when I first heard about it in your talk, about the T-shaped person, that what it invoked for me was the Christian cross and crucifixion. And so when you say that for some people it's torture, I'm sort of sympathetic to that, because that was just the first thing that occurred to me, that that was where you were you going to go.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAs you've mentioned a couple of times, you moved into HR. How did you make that transition?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Tt was one of these fortuitous moments, where everything sort of came together. When I joined NewVoiceMedia about nine years ago, there was nine people in the engineering team, and I was the only software tester. Together with the engineering manager, and obviously the people in the dev team, we built a very high-performing Agile function, and scaled it to about 120-odd different people across the UK and Poland.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe went through the engineering manager, and I was starting to get really bored. Things were going fairly well, obviously there's always things to improve, and I wasn't doing that dynamic, chaotic sort of team-building stuff - the stuff that I thrive on, the chaos of getting people aligned around missions and stuff. What we had also achieved, is we'd achieved a very interesting set of numbers.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAll engagement numbers were very positive for the DevOps team. People were very happy, people felt engaged, they had meaningful work. They didn't leave very often, which is great. And we had a very smooth hiring process, our recruitment costs were rock bottom.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBasically we were getting more referrals than we were paying for agencies, which was great. So all of those numbers are very positive.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd so the opportunity arose to try and do some of those same things across the bigger business. That was engagement and enablement, which was really about training, it was about getting people the opportunities to progress their career, and getting the information flowing around the business, and making sure those departments were talking to each other.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI did that for probably about a year, year and a half. I took a plunge about five or six weeks ago to go off on my own and set up my own consultancy. So there we go.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I'd definitely like to ask you about that in a little bit.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI had a couple of specific things about your experience with HR that I wanted to ask you about, one of which is about the interview process, which is something that I just find fascinating.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI was wondering if you could talk a little bit about where you've landed on what a good interview process is. Let's scope it to - you're building an agile team of developers and testers and such to deliver products within a big company. How would you go about recruiting and interviewing people?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E It's funny you should say that, because I do actually have another book coming out soon, maybe on the Leanpub platform, we'll talk about that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think for me, there's a few things to consider here. There's quite a few assumptions with hiring, and some of the assumptions that I have, these are the values and principles I hold dear.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's all about a two-way conversation. It's not us looking for them, and we get to choose. It's not them deciding where they want to go. It's both of those things.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think what you find in some recruitment processes is the businesses don't care about the candidates at all. It's all about, \"Er, you'll do what we want, and we'll make it as difficult as we need to. We won't get back in touch with you.\" It's not a very nice experience.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI also believe in hiring very, very slowly. I believe in hiring for good cultural fit and good technical fit. Both of them are super important, along with all the other stuff that sits around it - determine how does it affect employees, is essentially what we're looking for here.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut then, we also believe in making sure the experience is unbelievable, as positive as we could make it, so people would welcome going through the process, they would come out the other side going, \"Wow, that was really hard, but I enjoyed it.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EInterestingly, in doing those things, what we found is people that went through the process and didn't make it, would go off and tell their friends and colleagues about how awesome it was and that you should apply for that. That was just bizarre. We were not expecting that at all.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat does it look like? In a nutshell, we want to go from first contacts to you, to making a decision in about two to three weeks maximum.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThere's only every going to be the one interview face-to-face - but before that, probably a good phone screen, technical exercise for coders. And then when you come in, if you've done the technical exercise, we'd probably ask you to extend it, and change our requirements, just to make sure that you wrote it and it wasn't a friend of yours.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThen what we'll do is work out why you're doing it. Why are you writing the tests, why are you coding in that way?\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe phone interview at the start is really just about, are you going to be a good fit? This is a society, it's a culture. Everybody that comes to it needs to add to that culture. One of the things I learned as a manager for five or six years of managing engineers and managing HR - anybody really - is that it's much easier to hire people who live and breathe a similar set of values to your business, than it is to hire somebody who's awesome, but doesn't agree with your values, and then try and change them.\u003C\u002Fp\u003E\n\n\u003Cp\u003EYou can't change people, so it's much easier to try and get the right people coming through the door at the first point.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMoving all the way through that process is really - from our first phone call, all the way through to making a decision, as quick as possible. The interview process is hard. It's going to be maybe three or four different sections - an hour, an hour and a half each. So you're looking at maybe three, four, five - not five but probably about four's the maximum we've ever done an interview for. It's pretty tough. You get to meet all those different people, and all of those people get together after the interview and make a decision.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIf somebody says, \"No,\" then everybody else can try and persuade them and say, \"Really, let's look at the facts and the details.\" But fundamentally any one of those interviewers has the ability to veto that candidate. We've probably not hired some great people because of that. We've lost some good candidates - because one person didn't enjoy it, didn't resonate. But it keeps the bar really, really high. And it makes it incredibly hard to join.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn doing so, you actually attract people that want to work with really great people.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn a nutshell, always be designing that service, it's a service like anything else. Just like onboarding a customer, it's exactly the same.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo you look at - what is the bare essentials you have to have? What is everyone else doing? And then what can you do differently that adds a wow factor to it?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I've heard that particular tactic, of giving everyone on the team an absolute veto, from people before. It resonated with me, with something else you said, about the theme of, through the recruitment process, making your workplace an attractive place for high-performing people to be.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBecause as frustrating as it can be when you're applying for a job, and arbitrarily someone who doesn't like the cut of your jib can prevent you from getting it, if you're applying to places like that, and you do get into one - that's an ideal outcome, not just because you're going to know that you went through that. But you'll know that everyone there thought about it and chose you. And again, as difficult as looking for work can be in so many different ways, that kind of process really can, as you say, make you optimistic about what your next opportunities are.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd as you go through it, you get better and better at the process yourself. Difficult interview processes are good for you. People are doing you a favour by putting you through them as well.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E One of things that we always focus on - this is the kind of management style that I've sort of adopted, and is the basis of \u003Ca href=\"http:\u002F\u002Fcultivatedmanagement.com\"\u003ECultivated Management\u003C\u002Fa\u003E really - is, it's all about behaviours. The interview process is very much about behaviours.\u003C\u002Fp\u003E\n\n\u003Cp\u003EOne of the things we found early on, is people would put all sorts of stuff on their CV. They sounded awesome, and then you'd meet them and it was like, \"Really? Have you done any of this stuff?\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's very easy to recite books, to recite other people's opinions. It's very difficult during an interview process to explain why things didn't work. Why didn't Scrum work? Why didn't Kanban work? Why did that approach not work?\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat we always try to do through the whole exercise, is tie it to behaviours. And those behaviours - if you think about the culture of a business, a culture of a business is nothing more than group habit, it's what people do every day. So if everybody's late for meetings, that's your culture. You have a culture of being late for meetings.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe worked early on, and this is where the 10 behaviours came from, to look at our top performers and go, \"Well what did they do? What behaviours do they have?\" Not what languages do they use. Not how good they think they are at coding or testing or Scrum Master, but, what do they actually do? What behaviours do they do? And they the behaviours that we try to weave into the job adverts, into the phone interview, into the whole interview process, to try and work out whether this person, by default, demonstrates the behaviours that we think will contribute to a positive culture?\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat doesn't mean to say that we don't seek at all diversity and the conflict of ideas, and people that think differently, of course. They must do that in a way that demonstrates positive behaviours, not confrontational. None of this hero worship, hero-grade developers that nobody likes. None of that sort of stuff, that's not how you build a good team.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo that's the whole process, when we look at, do you make it or not, it's whether you have demonstrated those behaviours.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Speaking about managing - I came across, on yourcultivatedmanagement.com website, a post called \u003Ca href=\"http:\u002F\u002Fcultivatedmanagement.com\u002Fhow-do-you-manage-millenials\"\u003EHow Do You Manage Millennials?\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI confess the very split second that I saw the title, I was like, \"Oh no, I'm familiar with this genre.\" And I was very pleased when I looked into it and saw what your answer was, which is, I think, the best answer I've seen to that question provided by anyone. I mean that genuinely.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI was wondering if you could answer that question here. How do you manage millennials?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Exactly the same way you manage anyone else.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI mean, it doesn't make sense, just assuming that this catch-all term for millennials is obviously a certain age group. Generation X, babies of boomers - they're all individuals. And you manage individuals, you don't manage a team. You manage individuals. And each one of those people is different.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI can find people from Generation Y or Generation X that have the same mindset and the same mentality as millennials do. But I could also find millennials who probably have the same attitude and outlook as baby boomers.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's this sort of catch-all term that's been used for a certain age bracket. And it doesn't matter. It's all about behaviours and mindset and outlook. Seeking people from different generations is a very positive thing to do for a business. It's been proven in research that mixing those different generations together actually creates a very positive culture, very productive as well.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo in terms of managing, you manage based on behaviours. And those behaviours are behaviours such as - are you a good communicator, do you listen? Are you articulate in the way that you talk? Do you demonstrate good, safe programming? Are you a good Scrum Master because of these behaviours?\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt doesn't matter what generation you come from, it doesn't matter how old you are. It has nothing to do with that, it's all about managing individuals. And everybody's an individual, and everyone's got positives, and everyone's got negatives.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAs a manager, you're just trying to get that right blend of people working together, mostly on their strengths, developing their strengths, minimizing weaknesses, but also getting the right blend, so that people can conflict and confront, but in a safe, positive way so we can move forward and improve things.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E One thing I really liked about the post was how you sort of threw the question back at the questioner, and said, if you're asking this question, what you really need to do is ask yourself another question. Which is, why am I dividing people up into generations like this in the first place? What is it about me that wants to think that way?\u003C\u002Fp\u003E\n\n\u003Cp\u003EThere's an implication of - are you being self-indulgent, is there something that you just haven't really thought through in your relationship to the people that you work with in a very fundamental way?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I think so. Particularly, this question often comes from managers: \"I've got a millennial, they're always on the internet, they're doing this.\" But it's nonsense. What they're actually saying is, \"I have to change, but I don't know how to change.\" And the culture has to change. The culture will always change when you have people - no matter what generation they're from, no matter what - you're adding people to the mix, it's going to be different.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe question is, how different do you want it? Where do you want that culture to go to? You can never be certain. Don't get me wrong, I'm not saying you can define a culture and then go for it. But you can try, and you can add the right people who are going to add to that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think what most managers are afraid of is, there's this new group of people coming into the workforce that demand more of a work\u002Flife balance. They demand certain things. If you go by the stereotypes and what the research seems to show.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut if you're building a very strong, positive culture anyway, then you've probably already got people that think that way. Why would you not want more of a work\u002Flife balance, or attention [to be focused] the right way? Why would you not want to adopt new technology if it makes you more productive? Why would you not want to challenge some of the nonsense that happens in some businesses?\u003C\u002Fp\u003E\n\n\u003Cp\u003EUnfortunately the management are seeing this new group of people coming in who aren't afraid to ask the questions. Who are happy to go to another job if there's another one better down the road. They probably don't have the families and the mortgages that keep some of the older generations in the workplace. And they're just scared, I think. They're scared of how it's going to change, how they're going to change. And they're just saying it's the millennials' fault. No, it's just the mixture of people in a business.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E That was the part of the answer that I liked the most - a lot of the things that the stereotypical millennial is asking for, are entirely reasonable suggestions for improvements.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Absolutely.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E When you talk about nonsense, for example - I spent some time in the \"be at work at nine\" world, commuting often on the Northern Line in London. Which, for anyone listening who knows about that....\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe whole thing just struck me as absolutely ridiculous. I remember one time - I come from one of the few places in the world that has no daylight savings time. And so when I moved to London, I just had no inbuilt instincts. I didn't know about \"fall back\" and \"spring forward\" or anything like that.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo one day, I went to the tube, and the platform was absolutely empty. I was like, \"Oh shit, something profoundly wrong has happened here.\" And of course, I immediately looked at the clock, and it's like, \"Oh crap, I'm an hour late.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EI went to work, and there was nothing crucial going on. There was no meeting, there was nothing like that. But I remember being fearful of the consequences of my mistake - which were, of course, nothing more than a manager mildly indulging in some recrimination. But my commute that morning was fantastic.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd if my boss, who was a pretty smart guy, had just thought, \"Oh, I'll just let my team come in an hour later and leave an hour later at the end of the day, then they're all going to be much happier and much more productive. And they're going to appreciate the decision that I've made.\" Not just because it's better for them, but because it's actually more reasonable to do things that way.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI've often wondered if one of the reasons that a certain type of person finds suggestions for improvements like that so painful, is that their own following of the convention was unexamined in the first place. It's a reminder that they hadn't actually examined this very important principle that they've carried out in their whole working life. There's something kind of humiliating about that. And that's where the bitterness comes from.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Very probable and very possible. I think also, the conventions and the norms - people just adopt the norms of the teams they move into, unless they're a very strong character that's happy to create a bit of a ruckus and throw some suggestions out there without fear of people shouting at them, telling them off. They are just going to go and do what everyone else has done. And if the whole organization's been around for 10, 20, 30 years - they're in the nine-to-five mentality as it is.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat's interesting for me is, I've always viewed productivity as: there must be a better way of doing this. So instead of working more hours, which is what most managers assume productivity is - just work extra hours - my view's very much, well, if you work better between six and ten in the morning, then work between six and ten in the morning. And then take a couple of hours out, and then do some work.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's not always easy to implement those things, because of HR and executives and other managers that might not think that's a good idea. But there's always a better way of doing something. And often it's just a smarter way than just throwing more hours at it or going to the office nine to five.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn fact, what we found usually when we did process improvement - is there a better way of doing it? - there's usually always a very, very smart way of doing it. Or we just don't do the thing we're doing.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESurprisingly, most managers are fearful of that as well. Just stopping doing stuff, just do something different. It's the culture, it's the fear, it's all of that. It's a complicated topic.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E When you talk about that, that reminds me of a couple of the 10 behaviours that you talk about in your book, \u003Cem\u003E10 Behaviours of Effective Employees\u003C\u002Fem\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EOne of those is being open minded. And I was going to ask you if you could talk a little bit about what you mean by that? It sounds like you were touching on that in your response just now.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E There's a quote from Paul Graham, that sort of legendary investor, IT software guru. He said, be aggressively open minded. Because actually, if you're trying to plan and predict everything, you're going to be hugely disappointed. Because you actually have probably no idea what's going to happen in the next two, three, four, five years.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo being open minded is super important. Now, that doesn't mean that you're open to anything and will just waste time on ridiculous ideas. Being open minded is about saying, \"Is there a better way of doing this, and what are the options that we have? Have we thought enough about these?\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat people confuse open mindedness with is, let's just go and do this new Agile stuff. \"I'm open minded, we're going to go and do it.\" But nobody's questioned whether that's the right thing to do.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo you have to get that balance of saying, \"Here's a new way of working, there's some new ideas. There's some people doing some really cool stuff over here. Maybe that would work for us? Let's try it. But let's experiment, let's make sure that we are doing it for the benefit of the customer.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnother one of the behaviours is always thinking about a customer. Again, far too many people improve things, change things for their own benefit, and it has a detrimental effect for the purpose of the business.\u003C\u002Fp\u003E\n\n\u003Cp\u003EYou have to always get that balance right. I think being open minded is one of the things that we always look for, always have done, as you know. \"What new technology are you using? What new ways of working are you doing? What books are you reading? What are you doing in your personal life that's challenging and opening up new directions for you?\" Because it is one of those. There's nothing worse than being sat in a meeting room with somebody who's totally and utterly closed minded.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI found a phase on the internet. I found a quote. I can't remember who said it, but, \"You can spot the closed-minded people, because their mouth's always open.\" I just thought, that summed it up quite nicely. Closed-minded, we know the answers. We don't need to do anything differently.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E That's funny, it took me a moment to put it together, that you meant when their mouths are always open, that they're always talking, because I was immediately thinking about a \u003Ca href=\"https:\u002F\u002Fwww.urbandictionary.com\u002Fdefine.php?term=mouthbreather\"\u003Emouthbreather\u003C\u002Fa\u003E, as they're called. That's a really good line.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat you were talking about there reminded me of a line on your Cultivated Management website about how, before, let's say, you make the switch in your team or your company to Agile, you should actually have an understanding of your foundations, and the foundations that are in place first. I was curious - I wanted to talk to you a little bit about that. What are those foundations, and how would you suggest someone go about examining them?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E This is really the focus of mine, my new business and the way that I'm approaching stuff.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think moving to HR was one of those moments where I closed the loop on the Agile transition. When I first joined NewVoiceMedia nine years ago, we would release software every 14 months. It was huge waterfall projects, with massive testing phases.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAftr about two years, we got it to monthly, fortnightly. And then another couple of years later, we were doing weekly releases consistently. That was all the business really needed. The customers didn't necessarily need anything more rapid than that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd the journey. If you've heard me talking about that three or four years on the speaking circuit, it was all about the test techniques, it was about agile, it was about tester and development, it was about CI, it was about DevOps. It was about all those buzz words. And there's loads of people still confused, thinking that that's actually Agility.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut when I moved out of DevOps, and I moved to HR, we achieved the same sort of principles. We were shipping stuff, we were working in small increments. We were doing Agile by most definitions.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI had a 360 review of that, and I was able to close it out and go, \"Well actually, what did we do?\" and reflect on it. The core thing is, we released Agility. We didn't buy it, we didn't force it. We released it. Week and month after month, after month, learning new things, opening more ways, removing more friction, constantly releasing more and more Agility for those in the business.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd how did we do that? The answer's in two parts. The first part is absolute clarity for the employee, so the employee knows how they contribute to that success. They know what's expected of them. They know how they're measured. Their manager has given them feedback based on behaviours, positive behaviours - and sometimes negative feedback.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe other half of that belongs to management. My view is management should be spending probably 70%, 80% of their time fixing the system. This is solving problems, fixing processes, dealing with communication issues, requirements - whatever, just stuff that unblocks the team.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo you've got two halves. One is, the employees need to know what's expected, and what the vision, what the mission is. The other half is the managers need to own a system. They need to fix the problems. They need to do process improvement. And then they spend a small amount of their time managing people, if there's ever such a thing.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMost people have it the wrong way around. Most managers don't set clear visions. Their staff have absolutely no idea how they're measured, until the annual performance review. And the managers spend all their time managing people, rather than fixing processes.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAgility can never really thrive in that environment. You might find the odd example where it does, but genuinely speaking, Agility is about removing the friction towards your purpose. If you don't have a purpose, you're not removing the friction. You're never really going to achieve agility.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo that's what my sort of focus is, those two parts of that. One's people, one's management. The two combined together with a good, strong purpose - you can achieve anything.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I found a chapter, which was originally a blog post in \u003Ca href=\"http:\u002F\u002Fthesocialtester.co.uk\"\u003EThe Social Tester\u003C\u002Fa\u003E, about how a preoccupation with processes still needs to be directed towards the right processes. You have a striking title for this chapter, called, \"Planning For When Cows Attack.\" I was wondering if you could talk a little bit about what you're getting at with that hilarious -\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I'm trying to think back. That was a long time ago, that post.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think in a nutshell, it's about this deep-rooted belief that if we just plan everything, if we spend our entire time planning with Gantt charts - whatever is your tool of choice for planning and documenting everything and thinking about all the risks - that stuff's important. Agile isn't about throwing that stuff out.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut what's important is to realize that as you go down the journey of releasing agility, or releasing revenue and growing a company, you're going to encounter things that you've never planned for.\u003C\u002Fp\u003E\n\n\u003Cp\u003EActually, if you have the right approach with the staff - knowing exactly what's involved, how to measure - [everything] we just talked about - and the manager's fixing the processes, what you actually release is stuff that you would never have dreamt of planning.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWould we have ever put into a plan that we want people to go away after being rejected for a job, and saying how amazing that process was? No, we would never have put that into a plan. Would we have put into a plan that we could be releasing software and scaling Agile in a fairly seamless way, onboarding 100% year-on-year?\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe probably wouldn't have been able to plan what that looked like. But when you focus on the right processes, from the perspective of your customers or your candidates or your employees - and you improve the process that's causing the most friction, the one that's slowing people down - you get gains that you would never put into a plan.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat post's really about - you can plan for all of this stuff, but then when the cows attack and push that poor gentleman into the Thames, did he plan for that? No, not at all.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat was a true story by the way. There was a herd of cows that surrounded a man and forced him to jump into the Thames.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Actually that story doesn't surprise me. I grew up in a rural place. In my life, I've encountered cows, and when a group of them starts moving towards you, it can actually be difficult to get out of the way.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Run away.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E By coincidence, the last question I was going to ask you about, your book \u003Cem\u003E10 Behaviours of Effective Employees\u003C\u002Fem\u003E, was about what you meant when you talked about behaving bravely.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI say it's a coincidence, because you've obviously just done something brave. I was wondering if you could talk a little bit about that, about why you've decided to make this change, and move out on your own.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E For me, moving out on my own, I think it was one of those decisions where I've been at the company for nine years. I've achieved the things that I personally wanted to achieve in my career. And I've learned - I mean, it was a great place to work. Tons and tons of learning, growing, scaling Agile, building a team in Poland - all this sort of stuff. It's got all the buzzwords associated with it. It's just been one of those really, really fun journeys.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut I think you get to a point with any career, where you start to think, \"If I don't leave now, then I will be here for the next ten years.\" Because you get stable, and you get comfortable. And the bills are getting paid, and everything's going the way it should do.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo about six months ago, I thought, \"You know what? This is something I have to do. I have to go and see if I can build my own business. If I can help other people achieve greatness in what they are trying to do.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EI've always had this dream of running my own business. And if I don't do it now, I'm mid-life aged, it's one of those times where I got this opportunity. We squirreled away some money to give us a runway, and this is an opportunity to try and do something different.\u003C\u002Fp\u003E\n\n\u003Cp\u003EInterestingly, I think what happened when I pulled the cord, as I call it - I just, one day - that was it. I'm announcing I'm off - that's it, I'm out.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe phone lit up, and lots of opportunities have popped up. Again, it's that, sort of, being brave in what you're trying to do. Do you just go and get another job, or do you stick to what you're trying to achieve, and run the risk that actually, come March next year, I might have to go back and get another job, because this won't have worked?\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's one of those things. But I think I didn't want to get to the point in my life where I was unable to try and do these things without having had a go. I think that's the iterative - try, fail, see what happens, learn from it, and just keep moving forwards.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Best of luck with this move.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI guess it's kind of anti-climactic, but at the end of these interviews, I always like to ask a couple of questions about self-publishing for the benefit of those listening, who are interested in self-publishing themselves.\u003C\u002Fp\u003E\n\n\u003Cp\u003EObviously you've done a lot of the right things by conference-speaking and blogging a lot and stuff like that. But you've also decided to write books. I was wondering - was there anything in particular that got you started doing books? I believe your first one was \u003Cem\u003EThe Educated Parent Brain Book\u003C\u002Fem\u003E. Was there something specific, or strategic, about, \"Now I should get into books.\" Or was it just something you fell into, because you're always writing and being productive?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Writing for me is a very important aspect of my day. Even when I wasn't really blogging, I'd sit down and try and write 1,000 words a day. Just one of those things. First thing in the morning. Just before everyone else is up, and write.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think one interesting thing happened, which was, the more you blog and the more you get an audience, the harder it actually becomes to blog. Because you get more eyes on it, you've got more criticisms, you've got more opportunities to completely make a mess of it.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd so for me, blogging became this very fearful - kind of like, \"Oh, I'm going to hit publish. What kind of fallout is going to happen from this?\" Not that there was ever really anything controversial. But people tend to get quite angry about various different things, particularly around Agile. I lost that enthusiasm for it. It was like, \"Oh really?\" But I was still writing, I was still generating a ton of content. And from there, it just felt like the right time.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think tools like Leanpub, for example, have given self-publishers a breaking down of the barriers that they needed to write a book. Before, you had to basically either create a PDF and sell it on your own website, or try and sell it through somewhere else, or give it away for free. Amazon's still a little bit daunting for a lot of people, publishing straight onto the Amazon platform.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut things like Leanpub came along and said, \"Well here you go - work in Dropbox, work in text files, spin it up, publish it. You don't even have to say it's 100% complete. You've got an opportunity to go and change it, and then try and get feedback. It broke down the barriers.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor me, Leanpub was one of those exciting - the new tool to use in the whole self-publishing world. And I've been publishing for years, all sorts of different stuff.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut really the books came about because there was now a platform that I could use, without having to get a publishing deal. It's been brilliant. [I'm] enjoying the process of it.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI've got a couple of books up on Amazon as well, that aren't on Leanpub and [?] and a couple of other platforms, and what have you. But really Leanpub took that barrier away.\u003C\u002Fp\u003E\n\n\u003Cp\u003EOne of the books, \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fbeascrummaster\"\u003ESo You Want To Be A Scrum Master?\u003C\u002Fa\u003E\u003C\u002Fem\u003E was actually written during a Hackathon.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo while the devs were hacking away with code and [?] - Scrum Masters, testers and a couple of other people that didn't really spend their time coding, came together to create that book.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd we did it in Leanpub. We had a Trello board with all the articles going through. And then a shared Dropbox folder, and we were contributing in. Literally it was a day and a half, and we'd managed to write a book.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat's the power, I think, of self-publishing. That's what appeals to me. And I think it's great for anyone that wants to write books. Now is the time to get doing that stuff.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Thanks for the kind words, but also thanks for that great description of how things have changed just in the last few years, as self-publishing tools have evolved, and attitudes towards it have evolved as well.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMy last question is - if there were one thing about Leanpub that we could build for you, or if there were one thing that we could fix for you, what would that thing be?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E That's a really tough question. I think at the moment, having a free option. I noticed that now to create a book, there seems to be a price. I think it was $58 when I looked the other day. I think it varies upon how many books you've published with [Leanpub].\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut sometimes I want to publish a book on Leanpub that I don't want to sell. And so I think, unless I may have missed an option, and you can correct me, feel free to do so - I think a lite version, where, here's one version when you publish, and you actually want to sell the book.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think if the free model came back in some way, shape or form - in maybe a limited production, limited publications - you might start to attract people that are outside of the technology world. Because Leanpub's a great platform, and you've got parents, you've got food bloggers, you've got all these people - but they're not publishing books very often on Leanpub.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think that barrier of that price could be something that would attract me to publish a lot more free books. Smaller books, short pamphlet-type stuff. Maybe some zines, maybe that kind of stuff? That for me would be back to how it was a few years ago, and keep that paid model if you want to generate some revenue from it.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Thanks very much for that. That's really excellent feedback.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe decision we made about just over a year ago now, to start charging people to create Leanpub books, was one of the top three decisions we've ever made. It's something we thought about a great deal. There's a \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpricing\"\u003Every long post about it\u003C\u002Fa\u003E that you can read, if you're interested, on how we made that decision.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe way it works is that currently, if you want to create a new Leanpub book, it's $99 US. I believe if you've earned more than $1,000 in royalties as an author, then that price goes down to $49 per book. And if you've earned more than $10,000 in royalties, it goes down to zero per book.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe're going to be introducing more options, one of which is, we're going to be introducing free trials. Which is a pretty standard thing to have when you're doing what we do, or offering a product like we offer. That's been a long time coming.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe're very open minded about pricing, and we're definitely going to be iterating over time.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIt's possible, for example that - so for people who are listening, Leanpub has a variable pricing model, so any Leanpub book can actually be set with a minimum price of \"free,\" and then people can actually still pay for it if they want to, which sort of complicates the example you're describing a little.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIf you contact us, there's a setting we have that says, \"No payments,\" which is, I think what you're describing. Like an exclusively free book, which we actually developed because someone who had had funding from an American government agency to do scientific research, and who wanted to publish the results on Leanpub. And they're like, \"Well we can't accept payment for it.\" So we're familiar with one version of that case. What you suggested is definitely something I'll bring up.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I just think, if this is your first book, you're almost like, \"I'm not going to make that money back.\" I can imagine a few people landing on the page going, \"Oh, actually, I don't know whether this will sell any copies.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E One thing I do feel a little bit safe adding at the end of a long interview about the matter of pricing, is that, whatever the level is, as soon as you start charging money for something, there is actually a positive aspect to the way it makes people decide whether or not they really want to do what they are about to do.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI'm trying to be very diplomatic in the way I'm framing this, but writing a book is a commitment. And by introducing, effectively, a kind of paywall, that actually does change the nature of the relationship that people have towards what they're doing when they're on Leanpub.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E That's true. You get that - that commitment to finish it, yeah.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Exactly. And in particular, it changes the general quality of the books on the bookstore. Which is a very in-the-weeds kind of thing, but if you work really hard on your book - and by the way, we encourage anybody who's interested in writing, to get started, you can publish a Leanpub book when you're two or three chapters in, give it a try - but what I was about to say was, if you work really hard on your book, like maybe for years, and maybe it reflects a lifetime of experience in some area that you really care about, you start to care abut what book yours is presented next to in a book store. Not necessarily, but you might start doing that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat's just one facet of the complex gem of our decision to introduce a price, to making a Leanpub book.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E I, for one, that's a price I am happy to pay, based on obviously what you've just said.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut there are those books that I don't really want to charge for, and like, \"This is a free book.\"\u003C\u002Fp\u003E\n\n\u003Cp\u003EI wrote one the other day about the improvement of the recruitment process, and it ended up being 19,000 words, which is technically a book. It started off as a blog post. I don't know whether that's enough to charge people for it. But at the same time, I want to try and get it distributed as a book. So yeah, there's those interesting dilemmas, it's always a challenge, isn't it? Always a challenge.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah. I remember, just before we go, there was one person in particular who was creating dozens of books of Japanese fairy tales, I believe. And when we introduced our pricing, I think it was that person who had a tweet with a crying face emoji in it.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhen we made that decision, there are definitely types of projects that are totally awesome, that are now incompatible with our pricing model. And that is definitely something that we'll be iterating on and thinking about as we go forward. I mean, that decision is not set in stone the precise way we've done it to begin with.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E That's what I like about your organization. Iterate through it and see what works, see what happens - and build new features. It's spot on.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI notice also you've got \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fjerryweinberg\"\u003EJerry Weinberg's collection of books\u003C\u002Fa\u003E on there now, which is very positive. So that's good.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E We're pretty happy about that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EOkay, Rob - thank you very much for taking the time in the evening to do this. I really appreciate it.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Thank you for having me on the show.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E And thanks for being a Leanpub author.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ERob:\u003C\u002Fstrong\u003E Thank you, and thanks for your platform.\u003C\u002Fp\u003E\n","podcast_id":2,"short_description_markdown":"[Rob Lambert](https:\u002F\u002Fleanpub.com\u002Fu\u002Froblambert121) is the author of the Leanpub book *[10 Behaviours Of Effective Employees](https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees)*. In this interview, Leanpub co-founder [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp) talks with Rob about his background, his book, how big changes in your personal life can lead to changes in your professional life, a surprising approach to managing millenials, and at the end, they talk a little bit about his experience as a self-published author.","original_episode_id":86,"blurb_html":"\u003Cp\u003E\u003Cem\u003E[This Frontmatter Podcast episode was originally published on 2018-03-01...]\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Froblambert121\"\u003ERob Lambert\u003C\u002Fa\u003E is the author of the Leanpub book \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees\"\u003E10 Behaviours Of Effective Employees\u003C\u002Fa\u003E\u003C\u002Fem\u003E. In this interview, Leanpub co-founder \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E talks with Rob about his background, his book, how big changes in your personal life can lead to changes in your professional life, a surprising ap...\u003C\u002Fp\u003E","blurb_markdown":"*\n[Rob Lambert](https:\u002F\u002Fleanpub.com\u002Fu\u002Froblambert121) is the author of the Leanpub book *[10 Behaviours Of Effective Employees](https:\u002F\u002Fleanpub.com\u002F10behavioursofeffectiveemployees)*. In this interview, Leanpub co-founder [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp) talks with Rob about his background, his book, how big changes in your personal life can lead to changes in your professional life, a surprising approach to managing millenials, and at the end, they tal","avatar_meta":null,"episode_number":185,"youtube_slug":null,"spotify_slug":null},"linkedinname":"","mastodon_name":null,"mastodon_url":"","name":"Rob Lambert","profile_blurb":"\u003Cp\u003ERob Lambert has been lucky enough to be part of some amazingly forward thinking companies. It lead to a rich understanding of how businesses succeed, but more importantly for Rob's life, a deep understanding of how to remain relevant and employable in ever changing markets. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ERob teaches communication skills, how to be an amazing manager and how to remain employable in our changing world. He loves to teach and engage audiences through writing, podcasting and public presentations. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHe's a family man with three kids which keep him busy, but when he's not working, he's writing content. The thread that runs through it all is about constant change and personal growth. You'll see this in his books. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ERob lives in Winchester, England with his family. He's also a keen photographer, podcaster and car enthusiast.  \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHe owns the \u003Ca href=\"https:\u002F\u002Fcultivatedmanagement.com\u002F\" target=\"_blank\"\u003ECultivated Management\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fparentbrain.com\u002F\" target=\"_blank\"\u003EParent Brain\u003C\u002Fa\u003E brands.\u003C\u002Fp\u003E","twittername":"","unpaid_royalties":113.45,"updated_at":"2025-03-17T12:24:14.000Z","username":"roblambert121","wishlist_count":0,"wishlist_id":1738669,"youtube_name":null,"id":4303},"4496":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4496\u002Ffull\u002FHenrik-AI-face-2.jpeg?1737670994","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4496\u002Fmedium\u002FHenrik-AI-face-2.jpeg?1737670994","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4496\u002Fsmall\u002FHenrik-AI-face-2.jpeg?1737670994","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F4496\u002Ftiny\u002FHenrik-AI-face-2.jpeg?1737670994","created_at":"2012-01-14T03:44:20.000Z","facebook_url":"","family_name_pp":"Kniberg","githubname":"hkniberg","given_names_pp":"Henrik","instagramname":"","latest_podcast_episode":null,"linkedinname":"hkniberg","mastodon_name":"","mastodon_url":"","name":"Henrik Kniberg","profile_blurb":"\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fwww.crisp.se\u002Fen\u002Fconsultants\u002Fhenrik-kniberg\" target=\"_blank\"\u003EHenrik Kniberg\u003C\u002Fa\u003E is Chief Scientist and cofounder of \u003Ca href=\"http:\u002F\u002Fymnig.ai\u002F\" target=\"_blank\"\u003EYmnig.ai\u003C\u002Fa\u003E. Henrik’s focus is the practical application of Generative AI in product development and other areas. He explores the frontiers of this technology, builds AI agents and AI-powered products, and teaches \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fainutshell\" target=\"_blank\"\u003Ecourses\u003C\u002Fa\u003E and workshops on how to use this technology effectively. He created the viral video ”\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=2IK3DFHRFfw\" target=\"_blank\"\u003EGenerative AI in a Nutshell\u003C\u002Fa\u003E” and the \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fainutshell\" target=\"_blank\"\u003Ebook\u003C\u002Fa\u003E with the same name, and created AI agents for the Swedish TV documentary series \u003Ca href=\"https:\u002F\u002Fwww.svtplay.se\u002Fvideo\u002FKMy3AoZ\u002Fgeneration-ai\u002F6-avatar?info=visa\" target=\"_blank\"\u003EGeneration AI\u003C\u002Fa\u003E. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHenrik’s background is Minecraft gameplay design &amp; development at \u003Ca href=\"https:\u002F\u002Fwww.minecraft.net\u002F\" target=\"_blank\"\u003EMojang\u003C\u002Fa\u003E, and agile\u002Flean coaching at \u003Ca href=\"http:\u002F\u002Fwww.lego.com\u002F\" target=\"_blank\"\u003ELEGO\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Flabs.spotify.com\u002F2014\u002F03\u002F27\u002Fspotify-engineering-culture-part-1\u002F\" target=\"_blank\"\u003ESpotify\u003C\u002Fa\u003E and other product companies. He is also co-founder of Hups.com.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHenrik is well-known for his books ”\u003Ca href=\"http:\u002F\u002Fwww.infoq.com\u002Fminibooks\u002Fscrum-xp-from-the-trenches-2\" target=\"_blank\"\u003EScrum and XP from the Trenches\u003C\u002Fa\u003E” and ”\u003Ca href=\"http:\u002F\u002Fwww.infoq.com\u002Fminibooks\u002Fkanban-scrum-minibook\" target=\"_blank\"\u003EKanban and Scrum, making the most of both\u003C\u002Fa\u003E” and ”\u003Ca href=\"http:\u002F\u002Fpragprog.com\u002Fbook\u002Fhklean\u002Flean-from-the-trenches\" target=\"_blank\"\u003ELean from the Trenches\u003C\u002Fa\u003E”, his viral videos ”\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=502ILHjX9EE\" target=\"_blank\"\u003EAgile Product Ownership in a Nutshell\u003C\u002Fa\u003E” and ”\u003Ca href=\"https:\u002F\u002Fblog.crisp.se\u002F2014\u002F03\u002F27\u002Fhenrikkniberg\u002Fspotify-engineering-culture-part-1\" target=\"_blank\"\u003ESpotify Engineering Culture\u003C\u002Fa\u003E” (commonly referred to as the Spotify Model), and silly metaphors like the \u003Ca href=\"https:\u002F\u002Fblog.crisp.se\u002F2016\u002F01\u002F25\u002Fhenrikkniberg\u002Fmaking-sense-of-mvp\" target=\"_blank\"\u003Eskateboard metaphor\u003C\u002Fa\u003E for product development, and \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=CostXs2p6r0\" target=\"_blank\"\u003Eping pong balls\u003C\u002Fa\u003E to demonstrate the concept of flow. Henrik has also been engaged in climate change – he created the video \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3CM_KkDuzGQ\" target=\"_blank\"\u003EFriendly Guide to Climate Change\u003C\u002Fa\u003E and cofounded \u003Ca href=\"http:\u002F\u002Fgoclimate.com\u002F\" target=\"_blank\"\u003EGoClimate.com\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EHe lives in Stockholm with his wife and four kids and a bunch of random music instruments.\u003C\u002Fp\u003E","twittername":"henrikkniberg","unpaid_royalties":6945.49,"updated_at":"2025-02-06T23:18:25.000Z","username":"hkniberg","wishlist_count":0,"wishlist_id":1001210,"youtube_name":"henrikkniberg","id":4496},"15443":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F15443\u002Ffull\u002Fdaddy.jpg?1458649683","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F15443\u002Fmedium\u002Fdaddy.jpg?1458649683","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F15443\u002Fsmall\u002Fdaddy.jpg?1458649683","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F15443\u002Ftiny\u002Fdaddy.jpg?1458649683","created_at":"2012-03-19T20:23:32.000Z","facebook_url":null,"family_name_pp":"Davis","githubname":"tagawa","given_names_pp":"Daniel","instagramname":"","latest_podcast_episode":null,"linkedinname":"","mastodon_name":null,"mastodon_url":"","name":"Daniel Davis","profile_blurb":"\u003Cp\u003EDaniel Davis. A geek in Japan with a ukulele.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ELaunched a privacy-first job board:\u003C\u002Fp\u003E\u003Cp\u003Ehttps:\u002F\u002Fprivacyfirstjobs.com\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EAlso made Japan Daily News, an AI-generated podcast:\u003C\u002Fp\u003E\u003Cp\u003Ehttps:\u002F\u002Fjapandailynews.com\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EFormerly DuckDuckGo, W3C, Opera Software.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EBlog: https:\u002F\u002Fblog.daniemon.com\u003C\u002Fp\u003E","twittername":"ourmaninjapan","unpaid_royalties":76.86,"updated_at":"2023-04-27T01:01:37.000Z","username":"danieldavis","wishlist_count":0,"wishlist_id":819993,"youtube_name":null,"id":15443},"17244":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F17244\u002Ffull\u002FLen-Epp-2020.png?1597446443","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F17244\u002Fmedium\u002FLen-Epp-2020.png?1597446443","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F17244\u002Fsmall\u002FLen-Epp-2020.png?1597446443","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F17244\u002Ftiny\u002FLen-Epp-2020.png?1597446443","created_at":"2012-04-02T15:29:38.000Z","facebook_url":"","family_name_pp":"Epp","githubname":"lenepp","given_names_pp":"Len","instagramname":"thelenepp","latest_podcast_episode":{"id":161,"user_id":17244,"featured":true,"name":"Len Epp","description_markdown":"We've decided to merge our Backmatter podcast interviews into our other podcast, [Frontmatter](https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter), and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\r\n\r\nFor an explanation of why we're doing this (it's good news!), please listen to [this short recording](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3) wherever you've found it, or read this post on our blog: [https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc](https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc).\r\n\r\nMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.","blog_link":"https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc","avatar_file_name":null,"avatar_content_type":null,"avatar_file_size":null,"avatar_updated_at":null,"created_at":"2019-09-07T01:41:21.000Z","updated_at":"2020-12-18T03:26:19.000Z","release_date":"2019-09-07T01:38:00.000Z","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3","audio_file_size_in_bytes":1198633,"description_html":"\u003Cp\u003EWe've decided to merge our Backmatter podcast interviews into our other podcast, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter\"\u003EFrontmatter\u003C\u002Fa\u003E, and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor an explanation of why we're doing this (it's good news!), please listen to \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3\"\u003Ethis short recording\u003C\u002Fa\u003E wherever you've found it, or read this post on our blog: \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\"\u003Ehttps:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.\u003C\u002Fp\u003E\n","duration":"02:29","interview_date":"2019-09-07","interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":false,"keywords":"","podcast_type":"backmatter","related_links_markdown":"","related_links_html":"\n","slug":"backmatter-len-epp-07-09-19","subtitle":"The Future of the Backmatter Podcast","title":"A Note About the Backmatter Podcast","transcript_markdown":"We've decided to merge our Backmatter podcast interviews into our other podcast, [Frontmatter](https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter), and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\r\n\r\nFor an explanation of why we're doing this (it's good news!), please listen to [this short recording](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3) wherever you've found it, or read this post on our blog: [https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc](https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc).\r\n\r\nMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.","transcript_html":"\u003Cp\u003EWe've decided to merge our Backmatter podcast interviews into our other podcast, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter\"\u003EFrontmatter\u003C\u002Fa\u003E, and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor an explanation of why we're doing this (it's good news!), please listen to \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3\"\u003Ethis short recording\u003C\u002Fa\u003E wherever you've found it, or read this post on our blog: \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\"\u003Ehttps:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.\u003C\u002Fp\u003E\n","podcast_id":1,"short_description_markdown":"We've decided to merge our Backmatter podcast interviews into our other podcast, [Frontmatter](https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter), and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\r\n\r\nFor an explanation of why we're doing this (it's good news!), please listen to this short recording wherever you've found it, or read this post on our blog: [https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc](https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-two-podcasts-ddb442a91ddc).\r\n\r\nMany thanks to all our listeners and guests! We're looking forward to many more years of highly-researched, in-depth interviews with publishing industry experts and bestselling authors alike.","original_episode_id":null,"blurb_html":"\u003Cp\u003EWe've decided to merge our Backmatter podcast interviews into our other podcast, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter\"\u003EFrontmatter\u003C\u002Fa\u003E, and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\u003C\u002Fp\u003E\n\n\u003Cp\u003EFor an explanation of why we're doing this (it's good news!), please listen to \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3\"\u003Ethis short recording\u003C\u002Fa\u003E wherever you've found it, or read this post on our blog: ...\u003C\u002Fp\u003E","blurb_markdown":"We've decided to merge our Backmatter podcast interviews into our other podcast, [Frontmatter](https:\u002F\u002Fleanpub.com\u002Fpodcasts\u002Ffrontmatter), and going forward, we're going to publish all our in-depth publishing industry expert interviews there.\r\n\r\nFor an explanation of why we're doing this (it's good news!), please listen to [this short recording](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FA-Note-About-the-Backmatter-Podcast-2019-09-06_01.mp3) wherever you've found it, or read this post on our blog: [https:\u002F\u002Fmedium.com\u002F@leanpub\u002Fa-tale-of-t","avatar_meta":null,"episode_number":null,"youtube_slug":null,"spotify_slug":null},"linkedinname":"lenepp","mastodon_name":"","mastodon_url":"","name":"Len Epp","profile_blurb":"\u003Cp\u003ELen is co-founder of Leanpub. He is the host of the Leanpub \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLUeW7hrYTk8yxF6XuKpwKPsVe5iiGHmKn\" target=\"_blank\"\u003EFrontmatter\u003C\u002Fa\u003E pocdast.\u003C\u002Fp\u003E","twittername":"lenepp","unpaid_royalties":8.51,"updated_at":"2025-02-04T05:14:20.000Z","username":"lenepp","wishlist_count":1,"wishlist_id":1660964,"youtube_name":"","id":17244},"29360":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F29360\u002Ffull\u002FErikScho%CC%88n.jpg?1586437689","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F29360\u002Fmedium\u002FErikScho%CC%88n.jpg?1586437689","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F29360\u002Fsmall\u002FErikScho%CC%88n.jpg?1586437689","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F29360\u002Ftiny\u002FErikScho%CC%88n.jpg?1586437689","created_at":"2012-07-11T09:27:25.000Z","facebook_url":"","family_name_pp":"Schön","githubname":"erik-schon","given_names_pp":"Erik","instagramname":"","latest_podcast_episode":null,"linkedinname":"erikschon","mastodon_name":"","mastodon_url":"","name":"Erik Schön","profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EERIK SCHÖN \u003C\u002Fstrong\u003Eis a change catalyst who has successfully led global organizations for 25 years. Hacker, software researcher and system engineer turned leader, executive and strategist, Erik is the author of the widely acclaimed trilogy \u003Cem\u003EThe Art of Change\u003C\u002Fem\u003E, \u003Cem\u003EThe Art of Leadership\u003C\u002Fem\u003E and \u003Cem\u003EThe Art of Strategy\u003C\u002Fem\u003E.\u003C\u002Fp\u003E","twittername":"erik_schon","unpaid_royalties":118.9,"updated_at":"2025-01-11T14:45:29.000Z","username":"erik_schon","wishlist_count":0,"wishlist_id":645141,"youtube_name":"erikschon5751","id":29360},"72367":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F72367\u002Ffull\u002Fobie-profile.jpg?1450196753","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F72367\u002Fmedium\u002Fobie-profile.jpg?1450196753","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F72367\u002Fsmall\u002Fobie-profile.jpg?1450196753","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F72367\u002Ftiny\u002Fobie-profile.jpg?1450196753","created_at":"2012-12-12T15:26:06.000Z","facebook_url":"obiefernandez.public","family_name_pp":"Fernandez","githubname":"obie","given_names_pp":"Obie","instagramname":"obiefernandez","latest_podcast_episode":{"id":31,"user_id":72367,"featured":false,"name":"Obie Fernandez","description_markdown":"In this interview Leanpub cofounder Len Epp interviews Obie Fernandez, an author, consultant, and current Senior Vice President of Engineering at 2U. We talk about Obie's career and his latest book, Serverless: Patterns of Modern Application Design Using Microservices.","blog_link":"https:\u002F\u002Fleanpub.com\u002Fblog\u002F2016\u002F01\u002Fobie-fernandez","avatar_file_name":"Obie.jpg","avatar_content_type":"image\u002Fjpeg","avatar_file_size":28389,"avatar_updated_at":"2017-07-13T01:18:30.000Z","created_at":"2017-01-28T21:38:52.000Z","updated_at":"2022-10-21T01:27:18.000Z","release_date":"2016-01-06T18:00:00.000Z","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FLPP024_Obie_Fernandez_2015_12_28.mp3","audio_file_size_in_bytes":27784959,"description_html":"\u003Cp\u003EIn this interview Leanpub cofounder Len Epp interviews Obie Fernandez, an author, consultant, and current Senior Vice President of Engineering at 2U. We talk about Obie's career and his latest book, Serverless: Patterns of Modern Application Design Using Microservices.\u003C\u002Fp\u003E\n","duration":"57:52","interview_date":null,"interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":false,"keywords":"leanpub, servers, programming, startups","podcast_type":"frontmatter","related_links_markdown":null,"related_links_html":null,"slug":"obie-fernandez-06-01-16","subtitle":"An Interview with Obie Fernandez, author of Serverless: Patterns of Modern Application Design Using Microservices","title":"Obie Fernandez, author of Serverless: Patterns of Modern Application Design Using Microservices","transcript_markdown":"\n[Obie Fernandez](https:\u002F\u002Ftwitter.com\u002Fobie) is an author, consultant, traveler and photographer. Currently the Senior Vice President of Engineering at [2U](http:\u002F\u002F2u.com), Obie is the bestselling author of Ruby on Rails books, and he has been involved in a number of successful startups and other projects. He recently launched his latest book, *[Serverless: Patterns of Modern Application Design Using Microservices (Amazon Web Services Edition)](https:\u002F\u002Fleanpub.com\u002Fserverless)*, on Leanpub. In this interview, Leanpub co-founder Len Epp talks with Obie about his career, his books, and the inspiration behind *Serverless*.\n\nThis interview was recorded on December 28, 2015.\n\nThe full audio for the interview is [here](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FLPP024_Obie_Fernandez_2015_12_28.mp3). You can [subscribe to this podcast in iTunes](http:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137) or add the following podcast URL directly: [http:\u002F\u002Fleanpub.com\u002Fpodcast.xml](http:\u002F\u002Fleanpub.com\u002Fpodcast.xml).\n\nThe audio for this podcast has some blips in it and you'll see these reflected in the occasional \"...\" in the transcription.\n\n# Obie Fernandez\n\n[Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp): Hi, I'm Len Epp from Leanpub, and in this Leanpub podcast, I'll be interviewing Obie Fernandez. Obie is a New York City and Atlanta, Georgia-based author, consultant, traveler and photographer. He has been involved in professional software development and consulting for over 20 years, and most recently he's been involved in the startup world with a variety of projects. Obie is currently Senior Vice President of Engineering at [2U](http:\u002F\u002F2u.com), a New York City-based platform for delivering quality online degree programs. Obie is a serial entrepreneur, and in the past he has been the CTO and co-founder of a number of companies, including [Andela](http:\u002F\u002Fwww.andela.com) and Lean Startup Machine. He's also Series Editor for Addison-Wesley's professional Ruby series and an avid EDM DJ.\n\nObie is probably most famous as the bestselling author of Ruby on Rails books. He's also the author of a number of books that have been published in various states of completion on Leanpub, including *[The Rails 4 Way](https:\u002F\u002Fleanpub.com\u002Ftr4w)*, *[The Lean Enterprise](https:\u002F\u002Fleanpub.com\u002Ftheleanenterprise)*, and *[How to Eat Nachos and Influence People](https:\u002F\u002Fleanpub.com\u002Fnachos)*. He's also currently working on a new book called *[Serverless. Patterns of Modern Application Design Using Amazon Web Services](https:\u002F\u002Fleanpub.com\u002Fserverless)*, which will be launching very soon, and which we'll be talking about later in the interview.\n\nIn this interview, we're going to talk about Obie's professional interests, his books, his experiences using Leanpub, and ways we can improve Leanpub for him and other authors. So, thank you Obie for being on the Leanpub podcast.\n\n[Obie Fernandez](https:\u002F\u002Ftwitter.com\u002Fobie): Thank you Len.\n\n**Len:** I usually like to start these interviews by asking people for their origin story. I was wondering if you could tell us how you first became interested in software development, writing, and eventually in consulting in startups?\n\n**Obie:** Sure. Well, I think I've been really lucky, like a lot of technologists of my generation. I'm 41, almost 42, and grew up in an era where it was cool to tinker with electronics and take things apart. At school, we got taught programming as early as third grade. So I was working on an Apple 2E and learned [BASIC](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBASIC) and learned [Logo](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLogo_(programming_language)), and I think that that's a real advantage, because the concepts of programming at such a young age, it just - I think has an amazing effect. Because - I don't know, it just feels like I can't even remember when I started programming, right? It's like something that's been with me for a long time.\n\nI did eventually start getting into commercial software development with my friend Nate. He is my same age, he's been my best friend my whole life. He started a TV and VCR repair business at a young age - always entrepreneurial - and he had a storefront selling beepers, which were like the pager things that people wore on their belts and whatnot which are not really used anymore, but at the time they were all the rage. Being responsible for the billing, and since we were both kind of hackers and whatnot, we wrote a software package that ran on his PC and used his modem to page his customers when it was time for them to pay their bill. They'd call back and they'd hit a message that said that their account was due and whatnot. We expanded that into kind of an account management system for beepers, called Beeper Pro. Unfortunately never went anywhere. We could have been like software magnates of the beeper world, or whatever.\n\nBut the little startup that we put together with a friend of his kind of leveraged that. It didn't pan out, mostly because I think we didn't have the attention for it. We ended up doing some early web hosting, and I learned some [Smalltalk](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSmalltalk) and I learned Java. We got involved in a whole bunch of other things. I was DJ'ing at the time, so I was having friends from New York come over and record sets for me to stream in 22K WAVs at danceradio.com. A lot of interesting little projects.\n\nEventually, I was able to get a job at a professional business. This was back in 1995. I claimed expertise with Java, which I'll admit now was a little more fake than the interviewer [would have gathered]. But I had basically read, *Java in 21 Days*, which had just come out, or something like that. I think it was my first lucky break. It was a professional job doing programming when I didn't have a computer science degree and I didn't really have any sort of formal credentials to get a job doing so. But I was able to turn that into a series of jobs in professional consulting and over the years have had a number of lucky breaks which - together with hard work, got me to where I am today.\n\nConsulting in general, I think is a great place if you really want to keep your skills from stagnating. Especially if you're good and ambitious. I did a lot of consulting, then I was at a startup for 4 years in the early 2000's, that was good, because I rode out the dotcom bust, the original dotcom bust. And then I ended up at [ThoughtWorks](https:\u002F\u002Fwww.thoughtworks.com). ThoughtWorks, during the early to mid-2000's was the place to be. I got to work with [Martin Fowler](http:\u002F\u002Fwww.martinfowler.com\u002FaboutMe.html), [Neal Ford](http:\u002F\u002Fnealford.com\u002Fbio) and a bunch of other notable people - [Fred George](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ffred-george-5965b5), who has influenced me a lot on microservices. It's amazing what you can do.\n\nActually one of the common themes throughout, especially since the early 2000's, has been kind of constant self-promotion and blogging and that sort of thing. Maybe it's common with some of the other Leanpub authors. But in the things that I point to when I'm coaching people or advising my friends. Like, \"Hey, if you really want to get ahead, pay attention to the way that you present yourself. Pay attention to the way that you credentialize yourself online. And I've done that. I've had a [blog](http:\u002F\u002Fblog.obiefernandez.com) since the early 2000's. First I was talking about Java.\n\nI had some, a little bit of notoriety in open source Java. I worked on some dependency injection framework stuff in open source. That was kind of my first real dip into open source. And it just set me up to be in a position to talk about Ruby on Rails in a significant way in 2005, and I was one of the loudmouths that was saying, \"Hey, this gives 10x productivity gains over Java. Java sucks.\" and all this stuff, and being really controversial and brash and attracting attention.\n\nThat got me my first book deal with Addison-Wesley, to write, *The Rails Way*. Later on that led to getting the series editorship, and then being involved in all the other great books in that series. So it all points back to always being active about wanting to share the knowledge that I've got. Wanting to credentialize, wanting to blog, wanting to write. I mean, the first book was mostly due to something that a lot of us had or have, which is, \"I'd like to write a book someday. It'd be nice to see my name on the cover of a book.\" And then afterwards it turned into like, \"Wow this can be a really important fuel for building your career. Because the more that you credentialize, the more that people view you as an authority, and the easier it is to get the kinds of jobs that you want, To work with the kind of people that you want. To attract other people who are also very talented and ambitious and going places.\n\n**Len:** That's a really great story. Especially the way you emphasize your own activity when it comes to gaining notoriety and getting attention. I was wondering, did Addison-Wesley approach you, or did you approach them with the idea for your first book?\n\n**Obie:** Deborah approached [Curt Hibbs](https:\u002F\u002Fcurthibbs.wordpress.com\u002Fabout) who was an early figure in the Ruby blogging community, and who I think wrote some of the early ... that were popular. He worked at Boeing and I haven't heard from him in years, I hope he's okay. But Deborah Willings is an editor at Addison-Wesley, who I adore. I owe her a lot. She approached him, and then he recommended me, because he just knew me from my blog. So she walked up to me and just cold-presented me with an offer to get involved in writing a book at a conference in San Diego.\n\n**Len:** I'm curious, it's something you mentioned about starting to learn programming when you were in grade three. I think this is something we'll probably return to later, because I know that education is something that's been an important part of many of the projects that you've been involved in. I'm wondering, I think there are probably people listening who wish they'd had the opportunity to start learning programming at school at grade three. Were you at a special kind of school in some way, or was it just a kind of unique circumstance?\n\n**Obie:** I don't think it was that unique for its era. I mean it was elementary school in New Jersey in Hackensack, which is the county seat of Bergen County, which is a somewhat well-to-do county - I guess. I mean, I didn't grow up in a well to do area, I was in a working class neighborhood and working class parents. I once saw that, that particular era, there was a population dip. I guess it was kind of like an after-the-boomers sort of thing. The schools were relatively well funded in relation to the amount [of students], because the population dips, which kind of gives you a little bit of insight into how macro trends kind of play out in people's lives. It's kind of amazing to think about.\n\n**Len:** Yeah, yeah, that's really interesting. One of the companies you've been involved with is [Andela](http:\u002F\u002Fwww.andela.com) - am I pronouncing that correctly?\n\n**Obie:** Yeah, Andela.\n\n**Len:** Yeah, Andela. I was looking at it, and on its website it says it \"[integrates full time genius level remote software developers into your team](http:\u002F\u002Fwww.andela.com\u002Fabout-us\u002Fhome)\". And I remember, I read a little bit about your involvement. It says it works with Fortune 500 companies to find untapped talent from around the world. I was wondering if you could explain a little bit about what your contribution was to the company when you got there? Beause I read that you sort of changed things a little bit.\n\n**Obie:** For sure, happily. I joined very early on as CTO, and brought kind of that real-world experience in running a consultancy. The business model is to find very, very intelligent - I don't know about genius level, but certainly top five to ten percentile in terms of problem solving capability, in Africa. So we operate in Kenya and Nigeria. I'm still involved as an adviser, I'm very close to the CEO Jeremy Johnson. What we did there was to find a way to put some of these young Nigerians, and now Kenyans to work, giving them opportunities that they clearly do not have on their own. It's very hard without access to stable power, stable internet.\n\nAnd then I think, one of my significant contributions there that I'm most proud of is that we realized early on that it was wasn't just the structure concerns, right? It's not just safety and electricity and internet. Once you have the access it's easy to figure out the technology on your own, there's so much wealth of information online that you can get. I mean it's a dirty word to authors and media in general, but I mean, with piracy and whatever, where I can get a complete library of pretty much any classic book that you want to get in the field - it might be an outdated version or what not, but the access is there if you have the internet.\n\nWhat you don't have, and this is what I started figuring out about six months in, in a very vivid way, is a lot of \"common sense\", what we would consider common sense - about business environment, how to deal with Western clients. What expectations are around creativity and problem solving? What kind of push back you can give if someone's telling you to do something that you think is not the right thing? Or if you are not capable of doing what they're asking you to do.\n\nSo that changed my whole pedagogical approach. I pretty much flipped it on it's head, where we were putting a lot of emphasis on basic technology training and basic computer science concepts in the beginning. I started realizing now we need to really put a lot of emphasis on \"soft skills\" - communication skills, how to build trust, how to keep trust. How to learn, how to function on a team. How to apply creative problem solving. How to trust your own intellect when it's appropriate, or lean on others. That sort of thing.\n\nThe mechanism for doing so was a very, very heavy curriculum of improv training, actually. A lot of people are familiar with comedic improv - the show, *[Whose Line Is It Anyway?](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhose_Line_Is_It_Anyway%3F_(U.S._TV_series))* with Drew Carey was very popular in the United States, and whatnot. What less people know about is a field called applied improv - implied, applied improvisation probably has a couple of thousand practitioners around the world. Consultants who come, a lot of times from the comedic improv background, but they do business consulting, and they go to companies and they do these improv kinds of activities, improv games. Some are very basic, but the idea is to get people to open up, come out of their shells.\n\nIn Nigeria, that was especially important, because the young people, and in particular young women, are just kind of culturally trained to be very quiet and shy, especially around any sort of authority figure or anyone that they look up to. It's very hard to get them to come out of their shell. So we did a lot of work - five to six hours a day for 30 days, a program called \"Month One\", where we went over, everything starting with the basic \"yes, and\" principle of improv. Which is that you - being constructive. So finding a way to build on what someone else is adding, trusting their intentions and then finding a way to build on the tearing down. All the way through these opening up exercises that I'm talking about, all the way towards things that we kind of learn naturally here in the States, even around some tough topics like sexual harassment and what's appropriate and what's not, things like that. And just basically not taking anything for granted.\n\nThe results have been remarkable. I think that the - our Andelan consultants that are now remote team members to about 50 companies here in the States and in Europe, they fit in very naturally. The way that other remote team members would fit in. It's not the experience that people may be used to with working with offshore teams.\n\n**Len:** And how does Andela find people?\n\n**Obie:** Actually, the population dynamics are such that it's not hard to find people. They have less than a 1% acceptance rate. So it's just the combination of social marketing and whatnot. And now there's a lot of word of mouth, because the opportunity is so awesome. You don't have to have any sort of formal education in computing. You don't have to have any particular family connections. You don't have to have money. You don't have to have anything. If you pass a battery of tests, then there's an interview process. That knocks the pool down significantly. And then those people are invited to come to one of our facilities and do a two week workshop, where they get very intensive and fast-paced training in JavaScript or Ruby or now Python.\n\nThe idea there is not so much training, as to see what their grit and determination is. Because you push them really, really hard, and the vast majority of them don't have real programming experience that they're bringing to the table. So you push them really hard, and then you see who comes out the end. So out of a class of 20 in the boot camp, we may hire five to ten. But at that point, we give you a four-year contract. And you have a job paying a middle-class salary. You get subsidized food, subsidized housing. A lot of them get to live on our campus. The audacious goal is within ten years to train 100,000 of these young Africans and inject them into the global workforce. If we achieve that, or even a fraction of that, it would make a pretty big social impact in Africa. So it's really one of those startup situations that was very exciting and rewarding, personally, not just in a monetary sense, but also in terms of purpose, that's what we're doing.\n\n**Len:** That's fantastic, I didn't know that the goals were so ambitious and positive. That's great. And that leads me to ask you about 2U where you're Senior Vice President of Engineering now. I was wondering if you could tell me a little bit about what 2U is doing, and what your role is there?\n\n**Obie:** Yeah sure. So, as I was starting to get kind of exhausted with the travel and the intensity of working with Andela, I needed to take a little bit of a break. And I got married, I moved to New York from Atlanta. I had a bunch of life changes. My daughter Taylor went to college. So 2U is kind of a sister company to Andela, a lot of the same early investors. The CEO, Jeremy Johnson, was one of the founders of 2U. So the CTO of 2U made me an offer I couldn't refuse. To come, help, really take their engineering department to the next level over there.\n\n2U's a successful startup. It's a successful New York startup story. IPO'd I think about 18 months ago. So about 8 years old. Lots of market traction, a lot of credibility. A lot of really good brands associated with us - Yale, NYU, UNC. We have a good thing going on. We have a platform, along with the services that we provide to these schools so that they can get their graduate programs online. And what's amazing about what's happening there, is that ... of graduate education. The best graduate program is one that has some real world experience, that one has gone out and gotten some maturity and ... their career and their life to the next level.\n\nBut at that point, a lot of them have lives already. They have budding careers, or maybe established careers for a lot of the executives and professionals. They may have kids. They may not be able to move and do school full time in a particular geographic region. So what we give them is the ability to just work on it from home, remotely - while still getting the full experience, in a lot of cases, with better outcomes that they would get in person, on campus.\n\nWe now have programs that have been going on for over five years, and we can start to track the outcomes, and we see people actually having better outcomes. So the challenge there for me personally, what keeps it interesting is that it is a startup that went big and has done well. And we now have a technology department with over 100 people. The vast majority of whom are really great, really talented, really energetic. And then it's just a question, how do you harness that talent to take us to the next level? We have a certain amount of partnership programs now, but how do we increase that by multiples?\n\nAnd that - scaling technology is always kind of a fun challenge. And for me, coming back to an environment where there's bigger teams, there's bigger coordination and orchestration of effort, where there's more room for applying enterprise technology or if you're looking at the big picture, looking at strategy around it - that kind of takes me back to my days at ThoughtWorks, working with bigger Fortune 100 companies and CIO's offices and CTOs, doing some pretty interesting large scale work.\n\nSo, it's been amazing. I wouldn't have necessarily predicted that it's something that I would have been super interested in. Like especially like, let's say five, six years ago when I was running around and doing mostly kind of smaller start up stuff. But life is more interesting when you move to different kind of areas of interest, of pursuit. And in this case, these larger scale systems are starting to become really, really interesting to me.\n\n**Len:** Before I move on, asking you about some of your book projects, I'd just like to go back a little bit to what you were saying about piracy. You know that at Leanpub we're very - we have strong opinions about things like DRM, Digital Rights Management.\n\n**Obie:** Yeah.\n\n**Len:** Around ebooks. And I was just wondering if you could - because I have no idea, but what's your opinion about DRM and ebooks?\n\n**Obie:** I think that one of the beautiful things about Leanpub is that it makes it real easy to get the material into people's hands. And if the author wants to put it at an affordable price point, that puts it into even more people's hands. But having firsthand experience with developing markets, it's not the fact that a young person in Nigeria can go to one of these piracy websites and download the latest book on JavaScript or whatever - that's not taking money out of the author’s hands. Because they don't have the money to pay for it anyway. And there's no one to pay for it for them.\n\nSo in terms of just kind of the bigger picture of global equality - I mean, the fact that a lot of people - I mean there's not - you don't necessarily have to go to Africa to see this, you know. I know that a lot of us, when we were younger, pirated things like Photoshop. Because it was too frickin' expensive to actually pay for it... But you know what? Now, if you use it, you pay for it. It sure helps that they created a subscription model, where you can pay ten bucks a month or something like that.\n\nI'm generally not a fan of DRM at all. I was involved in the hacking scene, BBSs and things like that early on. So I come from a hacker background. Never really been that super concerned about it. Because the market is out there. I went with a traditional publisher with Addison-Wesley, because it was just the thing that you did. And then I continued going with traditional publishers after that; *Lean Enterprise* is on Wiley. There's a big professional market out there that pays for it. Safari's great, subscription income from Safari's great. Stuff like that. If you're trying to credentialize, if you're trying to get started, it's great to go with traditional publishers. They'll do whatever they're going to do. I default to getting the material in people's hands, helping them out and basically looking at it as, if people are not paying for your material, it's probably because they can't afford to pay for it. Or they're just checking it out, and you'll get it back to you somehow later.\n\n**Len:** Yeah, that's great. I mean, that's very - I've got to say, that's very consistent with our experience as well. Especially over the last year, where [some of our most successful books](https:\u002F\u002Fleanpub.com\u002Fblog\u002F2015\u002F12\u002Ftop-ten-bestselling-books-2015.html) have been by people who are providing courses online, in particular through [Coursera](https:\u002F\u002Fwww.coursera.org) actually. And for them, the variable pricing that you can do on Leanpub was a necessary condition, because they had a lot of students who couldn't necessarily afford to pay for books, and they did not want to exclude them from participating. But they also had a lot of people who wanted to pay. And so, allowing the reader the choice to pay when and whether they can or not, was really crucial. That seems to be an interesting thing that people are kind of coming to terms with, with the globalized marketplace that the internet offers, and especially in education.\n\n**Obie:** I think it's a really smart move, and I can tell the listeners from experience with variable pricing. Just because you set something at a low price, doesn't mean that people won't pay the higher price.\n\n**Len:** Moving onto your books, some of your books on Leanpub have had interesting histories, and in some ways, they're the ideal Leanpub books. I'd like to ask you first about, *[The Lean Enterprise: How Corporations Can Innovate Like Startups](https:\u002F\u002Fleanpub.com\u002Ftheleanenterprise)*. First, I'd just like to ask you what the book's about and why you chose to write it?\n\n**Obie:** Yeah, so my partner, [Trevor Owens](https:\u002F\u002Fleanpub.com\u002Fu\u002Fowenstrevor) and I - we have a company called Javelin. I'm not actively involved with it anymore, but before that it was called [The Lean Startup Machine](https:\u002F\u002Fwww.leanstartupmachine.com). Tens of thousands of people did the Lean Startup Machine experience over the weekend, over the course of the last five years, and have gotten a taste of what lean startup is about. Eric Ries of course wrote the best-selling book, *[The Lean Startup](http:\u002F\u002Fwww.amazon.com\u002Fdp\u002F0307887898\u002F?tag=googhydr-20&hvadid=35073137124&hvpos=1t1&hvexid=&hvnetw=g&hvrand=18072684110051029846&hvpone=14.96&hvptwo=&hvqmt=b&hvdev=c&ref=pd_sl_9jp67e3rbs_b)*. If you look at the way that he launches his books - everyone has a lot to learn. All of us have a lot to learn about that sort of thing, he's certainly one of the biggest success stories for doing that sort of thing specifically with books. Seriously, [look at his latest book](https:\u002F\u002Fwww.kickstarter.com\u002Fprojects\u002F881308232\u002Fonly-on-kickstarter-the-leaders-guide-by-eric-ries).\n\nWe started a whole business on applying lean startup and helping entrepreneurs and want-to-be entrepreneurs to figure out how to not waste their hard-earned savings and years of their life pursuing ideas that didn't make sense. And then over the course of the years of doing that and getting involved in building some enterprise software around it, like basically trying to set up the go-to kind of web application for running your lean startup experiments, we talked to a lot of corporations like Nordstrom, GE, etc. that do lean startup at a large scale. And we started learning a lot about how to apply lean startup. One thing led to another, and we pitched this book idea to Wiley to basically talk about how to apply lean startup, with the target audience being senior management and the C-suite. Basically, how to establish what we call \"innovation colonies\", essentially taking the experience that you would get at like, let's say a Techstars accelerator - but doing it within the context of a corporation.\n\nSo it's a very business-heavy topic. It's not for the average consumer or the average technology programmers, they're not necessarily going to get a lot out of that book, other than, maybe, things that they can pass along up the chain? But we do see it as our contribution to trying to create friendlier environments in corporations for innovation and for entrepreneurship in general.\n\n**Len:** On that note, how does one get around the bureaucracy in large companies where it is not necessarily explicitly, but sort of systemically hostile to lean startup philosophies? I mean, I know Nordstrom, for example, is just fantastic. I've had some experience with people from Nordstrom, and they're just great about innovating and looking for new things. But we've all had encounters with companies that aren't like that. And so how does one - for example if I were say in the C-suite in a company that had a foot-dragging bureaucracy, how would I go about introducing lean startup technology?\n\n**Obie:** It really has to be introduced. I mean you can do it - so there's two answers to that. You can apply lean startup as a product manager or as a general manager. Someone who's responsible for describing the parameters of success, the more objective that you get, the more that you rely on, build-measure-learn cycles within your business - that's how you introduce it at the grassroots. And that's generally successful. That's generally viewed as a good thing, and it's something that managers and middle executives can play up as doing things the right way, let's say. And it can have concrete business benefits.\n\nAs far as doing an end run around bureaucracy, I mean that really has to come from the C-suite executive level. The bigger corporations are all tuned into it to some degree or another. I have a friend named Alan who's the CTO at Coca Cola. He's been heavily, heavily involved in innovation kind of activities. And you've got to realize, these sorts of things take different forms. Sometimes it's kind of - it's skunkworks, sometimes it's ... sort of things. But where it really starts getting, I think, super interesting and what we talk about is when those companies start sharing a significant amount of equity. So when they hook ... in, they stay hooked in at the level that a VC would be hooked into early stage startups. The idea is to give people the actual freedom.\n\nThe reason we call it an \"innovation colony\" is because we think it's a throwback to people leaving motherlands and going on long and dangerous journeys out to the colonies to strike their fortune. Did the colonial empires benefit from that? Sure, yeah. They would occasionally get ship loads of goods and gold coins and shit going back home. Was it dangerous and they'd occasionally lose people? Yeah sure. All the time. But it's the whole risk\u002Freward thing. We think that big innovation cannot happen in the bosom of a big enterprise where you really can't fail. You have that big safety net like, \"Hey you tried. Move onto something else.\" You really have to go out and take the kind of risks that startup entrepreneurs take.\n\n**Len:** You've taken some of these principles, I think, and applied them to your books. You mentioned Eric Ries before. The [first Leanpub book was an Eric Ries book that was from his blog](https:\u002F\u002Fleanpub.com\u002Fstartuplessonslearned), and was sort of the - in a sense, a kind of predecessor to *The Lean Startup*. And I know that your books in particular - so you said, *The Lean Enterprise*, obviously it's a Wiley book, you said you pitched it to Wiley. But if I'm not mistaken, it was published in-progress on Leanpub before it was completed?\n\n**Obie:** It absolutely was, and I've blogged to prospective authors saying, \"Hey do that. That's the way to do it.\" Because the traditional publishers don't see it as cannibalizing their sales. So it provides a way to get a significant amount of income. I mean if you are already a known entity and you have the ability to market your Leanpub book - as you well know, you see the actual numbers, right? You can make tens of thousands more before the book is even anywhere near a formal publisher. And then you put it in the hands of the publisher, and they put it through their own marketing channels and whatnot. You make a substantially less percentage on a royalty basis, but I think you reach a bigger audience, so it kind of equals out.\n\n**Len:** So did you have the deal with Wiley for *The Lean Enterprise* before you started publishing it in-progress on Leanpub?\n\n**Obie:** Yes. I mean we went through a very compressed cycle. The whole thing started and was in print in six months. Maybe not in print, but kind of finished in six months. So yeah, I believe we did. I mean, I already had *The Rails 4 Way* on Leanpub at that point. I had already negotiated that with - at least I was kind of familiar with how to do that.\n\n**Len:** I'm just really curious. Obviously we were so excited to see it when *The Rails 4 Way* popped up on Leanpub, and when you came on board. And of course, *The Lean Enterprise* as well. Was that a difficult argument that you - or case that you had to make for this process? Because it's something that we think all books should do. Publish in-progress on something like Leanpub before the book gets taken up into the machine of the large publisher. Was that--?\n\n**Obie:** It didn't, but I'm going to try to be humble and admit that I'm probably a little bit of an outlier. I mean I have a very good relationship with them. They trust me, I trust them. So I don't know what that experience would be like for someone who didn't already have a track record and relationships in place.\n\n**Len:** Yeah, that totally makes sense. Our hope is that it becomes somewhat conventional and an understood thing, especially for someone who's starting out and doesn't have a profile yet. To publish, to start publishing their book in progress, and hopefully get taken up by a publisher - if the book gets traction, and if they can demonstrate that they're a good writer.\n\n**Obie:** Yeah, the biggest challenge I think is getting that traction, and actually attracting... Like if you engage with a traditional publisher, at least in the technical world... Well first of all, actually it's not that hard to get signed to a traditional publisher these days. I feel like a lot of the editors out there are actually following blogs and things and reaching out. And, myself, I got a lot of traction on the first blog posts I did on *Serverless*. On Medium I had like 15,000 reads. I got a couple of different cold emails from publishers saying, \"Hey, would you like to put this on our...\" You know, I got reached out from No Starch and from Apress. People who I didn't have relationships with already. And it's like, \"No, it's okay, I'm good.\" So I can't be the only one that's happening with. I'm guessing that they're going out and reaching out. Because it doesn't really cost them very much to develop an author, to sign someone.\n\nI think that increasingly you don't need them as much. Because there's this great eco system of blogs, and Leanpub is certainly part of it. That can credentialize you, you can succeed and reach a wide audience without needing them. So I think that traditional publishers are going to be increasingly, in that somewhat of a difficult situation, moving forward. The same as the case of record labels and any sort of traditional content curators.\n\n**Len:** On the subject of *Serverless*, so you're going to be launching it within the next week or so.\n\n**Obie:** Yeah.\n\n**Len:** I was wondering if you could tell us about what it's about?\n\n**Obie:** Yes, of course. So this is rapidly becoming one of my favorite subjects. I love catching new technology waves while there's still a chance to get really good momentum out of it. And this is certainly the case of a movement, that being microservices, which is very rapidly ascending the Gartner hype cycle. It's just kind of starting to be on everyone's minds. I've been a fan of the concept for years now. It's certainly not something totally new. In the earlier stages of my career, I was involved with distributed computing and SOA. And one of my earliest applications that I worked on used [Forte](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FForte_4GL), which at the time was one of the most advanced object oriented distributed application environments. You wrote your objects and then they had this whole UI for distributing over different nodes in your network and things like that.\n\nSo I know a lot about stuff over the years, and what I see is that it's really kind of coming together in a way that is enabled by current technology that we haven't seen before. Lambda is really kind of at the heart of it. It's a new product from [Amazon Web Services](http:\u002F\u002Faws.amazon.com) that lets you upload functions and run them in the fabric of Amazon's cloud computing platform, without needing to provision servers. And that is - for someone like me, that's very, very powerful.\n\nOver the years I've gotten involved in kind of countless ventures, the whole lean startup thing, like wanting to put things out there. But you want to know that they're capable of scaling without having to scramble and lose whatever... But you don't want to invest a whole bunch either. And there's this notion of T approximating, with the T variable representing development time or cost. And what happens as it approaches zero. So with technology and everything going the way that it is, you're able to throw together software in a postmodern way, cobble together third party SAS services and APIs and libraries and open source and things very rapidly. But the final missing piece is - how do you pay for it if you want something that's capable of scaling? And I think this answers that effectively. And this applies both to startups and also at a place like 2U, where I want to build systems that scale.\n\nBut I also want to build them in a maximally modular and maintainable way. And I want my developers to have a lot of power over those environments, and being able to really leverage all the tools at their disposal. And maintaining big, monstrous monolithic applications that have been in service for years - now, you don't know that you're not going to break them. You know pretty much any time you touch them, no matter how good your test coverage is and whatnot, things become very brittle after they've been in production for a while.\n\nMicroservices supports that; what we're advocating with the book, is just an amazing new world, right? The microservices are basically disposable. You don't really modify them - once they're in service, they have a long lifetime. They're kind of a cell, until they become obsolete. When they become obsolete, because you need them to do something differently - in the best cases, you just deploy the new version alongside it. And then you can go about in a very methodical way, testing whether it does what you need it to. Whether it doesn't introduce regressions. Whether it performs. You can start shifting traffic over to it. You can leave the legacy microserver in production to service old clients. I mean it's just a - it's a very, very different world than the one we're used to.\n\n**Len:** For people listening who might not be all that familiar with microservices, can you give me maybe an example that you've had in your experience with something like that, where it made a big difference?\n\n**Obie:** Yeah. At 2U, we do a lot of transformation of files from - basically we integrate with these legacy systems at schools. Without getting into too much details, you can think about it as 20 different partners that all have their - it's all a very similar process, but each slightly different. So do you develop a monolithic application and clone it 20 times, and then tweak each one? I mean that's one way of going about it. Or do you spend the time engineering that monolithic application to have all the different adaptors and configurations and strategies and all the things that you need it to have in order to be configurable for each case? But then every time you deploy it you've got to worry that - you've got to test every single integration. Or do you decompose the problem into a set of microservices, each of which does what it does really, really well? And collaborate with each other over a messaging bus, which is my favorite approach.\n\nSo that one can add - one can take it, read the format, and go, \"Oh yeah, I know this format.\" So it translates it, puts it back on the bus. Another service goes, \"Oh here's a translated - here's my transcript.\" And it can know what to do with this. So it grabs it and it dissects it and identifies, who is the student involved? That sort of thing.\n\nThat's sort of decomposition without getting into too much detail. The example I use in the book is this venture called Food Button, which is the easiest way to get a meal. Some of you can probably imagine being at your desk, and you're working and you're in the middle of something. The last thing you want to do is stop and think about what you're going to eat. But you need to have lunch. So I've dreamed about this ideal time of just being able to hit a button on an app or a physical button on the desk or whatever, on my Apple Watch, and 30 to 60 minutes later, magically food appears - cool. I'm not a picky eater. If you're a picky eater, you will not like this idea. But if you're not a picky eater, like me, you will love this idea. Which is press a button, 36 minutes later, magically food appears. It's like, I don't have to pay for it, it automatically gets charged like that.\n\n**Len:** That's a really fantastic idea. I was wondering actually when you were describing some of the issues with say dealing with 20 different systems, that reminded me of a friend of mine who works in government healthcare startup land. And it reminds me of a lot of - and I know you've had some of these sort of scandals in the States as well, where people trying to deal with legacy government systems find it's very, very difficult often to change things. Because there are so many legacy systems with technology from different decades. Is microservices the kind of thing that people engaged to those kinds of very, very large projects could use to solve some of those problems?\n\n**Obie:** Yeah well, I think decomposition is a trend that predates microservices. And generally speaking, that's part of the life cycle of a large project anyway, is that eventually you start breaking pieces off of it into smaller bits and pieces. It might be new versions, a functionality, or it might just be things that make sense to partition logically. If you read *[Microservices](http:\u002F\u002Fwww.amazon.com\u002FBuilding-Microservices-Sam-Newman\u002Fdp\u002F1491950358)* by Sam Newman, it's like, basically he makes the case for never - or maybe not never - but not starting with a microservices approach from day one. Basically, starting normally with a monolith and then breaking it off. Just really have to do not so much with the approach overall, but like the details of what's involved.\n\nSo, for instance, when you go microservices, you decentralize your data. You no longer have kind of a one repository to rule them all. One relational store behind everything. Each microservice has it's own repository. You get into these so-called polyglot persistence situations where one microservice is backed by MySQL, another one's backed by Mongo. Another one's backed by Cassandra. You've got your user sessions, is backed by Redis, and whatnot. And you start having this data that's fractured over different kinds of stores in different ways, different schemas. It's no longer clear how you do a transaction. And the truth is, you probably don't. Which means that your developers have to be familiar with the CAP theorem. You now have to understand how these new breed systems like Dynamo favor partitioned data and cluster over consistency. So it means your systems have to accommodate eventual consistency.\n\nThese are heady topics for your average developer. This starts to take them beyond their comfort. Imagine kind of like your average Rails developer going, \"But I just want to write a controller and some active record\". Whatever. And I've had some pushback already from friends who are kind of Agile fanatics and default to [YAGNI](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FYou_aren%27t_gonna_need_it). You ain't going to need that, right? You ain't going to need it. And like, \"What are you doing, kind of over-complicating everything?\" Well yeah, I agree, I mean you can definitely start with that approach, but there are some problems that, by their very nature, right off the bat, you know that you're going to need to scale. You know that you're going to be able to decompose. There's just a talent to be able to execute that. And I think that the mix of skills that you have to pick up, like the mix of skills that we discuss in the book, basically - planning for this book to be a general reference and also a really solid primer into microservices.\n\nI called it \"patterns of modern application architecture\", because I see that this is kind of the way that the future is going to be built. Your application is no longer just a simple three layer beast with a front end and it talks to a database on the other side. We've got the internet of things, where you got RESTful APIs for everything. You've got mobile clients. You got web clients. You've got teams that are actually smart and want to test their shit. So you have to be able to mock things. There's a whole modern realization of what [Alistair Cockburn called hexagonal architecture](http:\u002F\u002Falistair.cockburn.us\u002FHexagonal+architecture), and making sure that your application has ports.\n\nAnd that was in a way in that I really haven't seen before with this serverless microservice approach for you at the functional level. You deploy them independently. You pay for them in a metered way. More and more, I just think that in the future, people are going to look back at what we did with servers. And they're going to think it's like contacting the electric company because you need service. And they arrange with you to set up a little power plant on their premises. It's ridiculous, right? Like you wouldn't think it that way. But it's very similar to what we do now. The abstraction of a server is not part of my domain. Why do I need to think about it?\n\n**Len:** So is the target audience for this - I mean, is it - is it everybody who works in software?\n\n**Obie:** Everyone.\n\n**Len:** Yeah, okay. That was one of my questions.\n\n**Obie:** My favorite kind of book.\n\n**Len:** It sounds like it's making an argument as well. Which is fascinating, and those are the best books, right?\n\n**Obie:** Yeah, and I'm also trying to write it in an evergreen way. So my biggest agitator so far has been whether to make it specific to Amazon Web Services. But they have a million customers, they're dominant. I'm not too afraid to go that route. And they're really killing it when it comes to the pace of innovation there, like Lambda, [API Gateway](http:\u002F\u002Fdocs.aws.amazon.com\u002Fapigateway\u002Flatest\u002Fdeveloperguide\u002Fwelcome.html), [Dynamo](https:\u002F\u002Faws.amazon.com\u002Fdynamodb). The whole story that they're putting together and the way it ties together, I think it's an amazing platform, and it's not one I mind aligning with.\n\n**Len:** Just for any authors listening, or potential authors. I was wondering what your plans are around the launch?\n\n**Obie:** Yeah, so I've been - I have my personal mailing list, which is in the thousands. I have a Twitter following, stuff like that. I've been heads down working on the book, so I honestly haven't thought too much about the launch. Other than to reach certain people, yourself included. I'm also going to have friends and allies that are aligned with the book tweet about it. [Tim Bray](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTim_Bray) is high up over at Amazon Web Services. He's a figure that a lot of us know and love. So I'm sure he's going to support the book. Other people that I can call upon.\n\nSo in all, just kind of leverage my network. Get the word out. And then we'll continue to work heavily on it. It's strategic for me in various senses. I'm also writing it for my team at 2U, because I expect that it's going to increasingly be a part of our future there. So it helps to have your different - your work and play interests aligned in that way. It's kind of the optimal way to do it I think. If I was trying to do this well running Hashrocket or doing a monolithic Rails app, it just wouldn't happen. Leverage your strengths, that's my advice to the authors.\n\n**Len:** Fantastic. Thanks for that. It's funny, when one's already done things a few times, it can often be easy to underestimate one's strengths and what one's learned, and advice like that is actually really, really helpful for people who are just figuring things out.\n\n**Obie:** I think if you're struggling with your first book, realize that it does get easier. That much already I can tell. This book, I kind of launched into it, and yeah I had a lot of energy, but like just knowning the workflow, knowing how to assemble a team. Have a small team of collaborators. And I'm probably going to build it. Realize that books are generally team efforts. You need competent reviewers and collaborators to give you feedback.\n\nIf you want to write a quality book, I guess that's the disclaimer. And I'm generally very happy with the books that I personally bought on Leanpub. But there is differing levels of quality I suppose. If you go into some of the Kindle books, like I checked out some of the Kindle books on microservices, and they were terrible. Kind of the low budget books. If you want to build a quality product, you can't just do it on your own, you need people to review it and you need people to check your - to do the editing and stuff like that. You need a cover designer. It's definitely a team effort to get the best result.\n\n**Len:** I just have one more question. Customer development is very important for us at Leanpub. If there's one thing or maybe even more than one thing that we could do to improve Leanpub or add to it, that occurred to you in the production of this book, what would that be?\n\n**Obie:** I sent a note over to Peter. The - and I think it's coming in [Markua](http:\u002F\u002Fmarkua.com), am I saying that right? The ability to pull in source code from a URL would be awesome. Because in this book, I'm co-developing the Food Button source code together with the book. And at first I was like, \"Oh wow, if I could only do like a Git submodule\". Beause I developed a book in Leanpub Flavored Markdown with Git - if I could pull in a submodule, it'd be great, because then I could have the source code up to date. But then that's complicated even from a personal workflow standpoint. So I was like, \"Hey what actually would be good would being able to reference a GitHub URL.\" Looking forward to seeing that.\n\n**Len:** Great, cool. Alright, well thanks a lot for a really great talk, and thanks for being on the Leanpub podcast and for being a Leanpub author, Obie. This was great.\n\n**Obie:** Thank you guys, I love you guys for real.\n\n*This interview has been edited for conciseness and clarity.*\n\n-- Posted by [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp)","transcript_html":"\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fobie\"\u003EObie Fernandez\u003C\u002Fa\u003E is an author, consultant, traveler and photographer. Currently the Senior Vice President of Engineering at \u003Ca href=\"http:\u002F\u002F2u.com\"\u003E2U\u003C\u002Fa\u003E, Obie is the bestselling author of Ruby on Rails books, and he has been involved in a number of successful startups and other projects. He recently launched his latest book, \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fserverless\"\u003EServerless: Patterns of Modern Application Design Using Microservices (Amazon Web Services Edition)\u003C\u002Fa\u003E\u003C\u002Fem\u003E, on Leanpub. In this interview, Leanpub co-founder Len Epp talks with Obie about his career, his books, and the inspiration behind \u003Cem\u003EServerless\u003C\u002Fem\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on December 28, 2015.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FLPP024_Obie_Fernandez_2015_12_28.mp3\"\u003Ehere\u003C\u002Fa\u003E. You can \u003Ca href=\"http:\u002F\u002Fitunes.apple.com\u002Fca\u002Fpodcast\u002Fleanpub-podcast\u002Fid517117137\"\u003Esubscribe to this podcast in iTunes\u003C\u002Fa\u003E or add the following podcast URL directly: \u003Ca href=\"http:\u002F\u002Fleanpub.com\u002Fpodcast.xml\"\u003Ehttp:\u002F\u002Fleanpub.com\u002Fpodcast.xml\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe audio for this podcast has some blips in it and you'll see these reflected in the occasional \"...\" in the transcription.\u003C\u002Fp\u003E\n\n\u003Ch1\u003EObie Fernandez\u003C\u002Fh1\u003E\n\n\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E: Hi, I'm Len Epp from Leanpub, and in this Leanpub podcast, I'll be interviewing Obie Fernandez. Obie is a New York City and Atlanta, Georgia-based author, consultant, traveler and photographer. He has been involved in professional software development and consulting for over 20 years, and most recently he's been involved in the startup world with a variety of projects. Obie is currently Senior Vice President of Engineering at \u003Ca href=\"http:\u002F\u002F2u.com\"\u003E2U\u003C\u002Fa\u003E, a New York City-based platform for delivering quality online degree programs. Obie is a serial entrepreneur, and in the past he has been the CTO and co-founder of a number of companies, including \u003Ca href=\"http:\u002F\u002Fwww.andela.com\"\u003EAndela\u003C\u002Fa\u003E and Lean Startup Machine. He's also Series Editor for Addison-Wesley's professional Ruby series and an avid EDM DJ.\u003C\u002Fp\u003E\n\n\u003Cp\u003EObie is probably most famous as the bestselling author of Ruby on Rails books. He's also the author of a number of books that have been published in various states of completion on Leanpub, including \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Ftr4w\"\u003EThe Rails 4 Way\u003C\u002Fa\u003E\u003C\u002Fem\u003E, \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Ftheleanenterprise\"\u003EThe Lean Enterprise\u003C\u002Fa\u003E\u003C\u002Fem\u003E, and \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fnachos\"\u003EHow to Eat Nachos and Influence People\u003C\u002Fa\u003E\u003C\u002Fem\u003E. He's also currently working on a new book called \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fserverless\"\u003EServerless. Patterns of Modern Application Design Using Amazon Web Services\u003C\u002Fa\u003E\u003C\u002Fem\u003E, which will be launching very soon, and which we'll be talking about later in the interview.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn this interview, we're going to talk about Obie's professional interests, his books, his experiences using Leanpub, and ways we can improve Leanpub for him and other authors. So, thank you Obie for being on the Leanpub podcast.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fobie\"\u003EObie Fernandez\u003C\u002Fa\u003E: Thank you Len.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I usually like to start these interviews by asking people for their origin story. I was wondering if you could tell us how you first became interested in software development, writing, and eventually in consulting in startups?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Sure. Well, I think I've been really lucky, like a lot of technologists of my generation. I'm 41, almost 42, and grew up in an era where it was cool to tinker with electronics and take things apart. At school, we got taught programming as early as third grade. So I was working on an Apple 2E and learned \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBASIC\"\u003EBASIC\u003C\u002Fa\u003E and learned \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLogo_(programming_language\"\u003ELogo\u003C\u002Fa\u003E), and I think that that's a real advantage, because the concepts of programming at such a young age, it just - I think has an amazing effect. Because - I don't know, it just feels like I can't even remember when I started programming, right? It's like something that's been with me for a long time.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI did eventually start getting into commercial software development with my friend Nate. He is my same age, he's been my best friend my whole life. He started a TV and VCR repair business at a young age - always entrepreneurial - and he had a storefront selling beepers, which were like the pager things that people wore on their belts and whatnot which are not really used anymore, but at the time they were all the rage. Being responsible for the billing, and since we were both kind of hackers and whatnot, we wrote a software package that ran on his PC and used his modem to page his customers when it was time for them to pay their bill. They'd call back and they'd hit a message that said that their account was due and whatnot. We expanded that into kind of an account management system for beepers, called Beeper Pro. Unfortunately never went anywhere. We could have been like software magnates of the beeper world, or whatever.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut the little startup that we put together with a friend of his kind of leveraged that. It didn't pan out, mostly because I think we didn't have the attention for it. We ended up doing some early web hosting, and I learned some \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSmalltalk\"\u003ESmalltalk\u003C\u002Fa\u003E and I learned Java. We got involved in a whole bunch of other things. I was DJ'ing at the time, so I was having friends from New York come over and record sets for me to stream in 22K WAVs at danceradio.com. A lot of interesting little projects.\u003C\u002Fp\u003E\n\n\u003Cp\u003EEventually, I was able to get a job at a professional business. This was back in 1995. I claimed expertise with Java, which I'll admit now was a little more fake than the interviewer [would have gathered]. But I had basically read, \u003Cem\u003EJava in 21 Days\u003C\u002Fem\u003E, which had just come out, or something like that. I think it was my first lucky break. It was a professional job doing programming when I didn't have a computer science degree and I didn't really have any sort of formal credentials to get a job doing so. But I was able to turn that into a series of jobs in professional consulting and over the years have had a number of lucky breaks which - together with hard work, got me to where I am today.\u003C\u002Fp\u003E\n\n\u003Cp\u003EConsulting in general, I think is a great place if you really want to keep your skills from stagnating. Especially if you're good and ambitious. I did a lot of consulting, then I was at a startup for 4 years in the early 2000's, that was good, because I rode out the dotcom bust, the original dotcom bust. And then I ended up at \u003Ca href=\"https:\u002F\u002Fwww.thoughtworks.com\"\u003EThoughtWorks\u003C\u002Fa\u003E. ThoughtWorks, during the early to mid-2000's was the place to be. I got to work with \u003Ca href=\"http:\u002F\u002Fwww.martinfowler.com\u002FaboutMe.html\"\u003EMartin Fowler\u003C\u002Fa\u003E, \u003Ca href=\"http:\u002F\u002Fnealford.com\u002Fbio\"\u003ENeal Ford\u003C\u002Fa\u003E and a bunch of other notable people - \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ffred-george-5965b5\"\u003EFred George\u003C\u002Fa\u003E, who has influenced me a lot on microservices. It's amazing what you can do.\u003C\u002Fp\u003E\n\n\u003Cp\u003EActually one of the common themes throughout, especially since the early 2000's, has been kind of constant self-promotion and blogging and that sort of thing. Maybe it's common with some of the other Leanpub authors. But in the things that I point to when I'm coaching people or advising my friends. Like, \"Hey, if you really want to get ahead, pay attention to the way that you present yourself. Pay attention to the way that you credentialize yourself online. And I've done that. I've had a \u003Ca href=\"http:\u002F\u002Fblog.obiefernandez.com\"\u003Eblog\u003C\u002Fa\u003E since the early 2000's. First I was talking about Java.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI had some, a little bit of notoriety in open source Java. I worked on some dependency injection framework stuff in open source. That was kind of my first real dip into open source. And it just set me up to be in a position to talk about Ruby on Rails in a significant way in 2005, and I was one of the loudmouths that was saying, \"Hey, this gives 10x productivity gains over Java. Java sucks.\" and all this stuff, and being really controversial and brash and attracting attention.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat got me my first book deal with Addison-Wesley, to write, \u003Cem\u003EThe Rails Way\u003C\u002Fem\u003E. Later on that led to getting the series editorship, and then being involved in all the other great books in that series. So it all points back to always being active about wanting to share the knowledge that I've got. Wanting to credentialize, wanting to blog, wanting to write. I mean, the first book was mostly due to something that a lot of us had or have, which is, \"I'd like to write a book someday. It'd be nice to see my name on the cover of a book.\" And then afterwards it turned into like, \"Wow this can be a really important fuel for building your career. Because the more that you credentialize, the more that people view you as an authority, and the easier it is to get the kinds of jobs that you want, To work with the kind of people that you want. To attract other people who are also very talented and ambitious and going places.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E That's a really great story. Especially the way you emphasize your own activity when it comes to gaining notoriety and getting attention. I was wondering, did Addison-Wesley approach you, or did you approach them with the idea for your first book?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Deborah approached \u003Ca href=\"https:\u002F\u002Fcurthibbs.wordpress.com\u002Fabout\"\u003ECurt Hibbs\u003C\u002Fa\u003E who was an early figure in the Ruby blogging community, and who I think wrote some of the early ... that were popular. He worked at Boeing and I haven't heard from him in years, I hope he's okay. But Deborah Willings is an editor at Addison-Wesley, who I adore. I owe her a lot. She approached him, and then he recommended me, because he just knew me from my blog. So she walked up to me and just cold-presented me with an offer to get involved in writing a book at a conference in San Diego.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I'm curious, it's something you mentioned about starting to learn programming when you were in grade three. I think this is something we'll probably return to later, because I know that education is something that's been an important part of many of the projects that you've been involved in. I'm wondering, I think there are probably people listening who wish they'd had the opportunity to start learning programming at school at grade three. Were you at a special kind of school in some way, or was it just a kind of unique circumstance?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E I don't think it was that unique for its era. I mean it was elementary school in New Jersey in Hackensack, which is the county seat of Bergen County, which is a somewhat well-to-do county - I guess. I mean, I didn't grow up in a well to do area, I was in a working class neighborhood and working class parents. I once saw that, that particular era, there was a population dip. I guess it was kind of like an after-the-boomers sort of thing. The schools were relatively well funded in relation to the amount [of students], because the population dips, which kind of gives you a little bit of insight into how macro trends kind of play out in people's lives. It's kind of amazing to think about.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah, yeah, that's really interesting. One of the companies you've been involved with is \u003Ca href=\"http:\u002F\u002Fwww.andela.com\"\u003EAndela\u003C\u002Fa\u003E - am I pronouncing that correctly?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah, Andela.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah, Andela. I was looking at it, and on its website it says it \"\u003Ca href=\"http:\u002F\u002Fwww.andela.com\u002Fabout-us\u002Fhome\"\u003Eintegrates full time genius level remote software developers into your team\u003C\u002Fa\u003E\". And I remember, I read a little bit about your involvement. It says it works with Fortune 500 companies to find untapped talent from around the world. I was wondering if you could explain a little bit about what your contribution was to the company when you got there? Beause I read that you sort of changed things a little bit.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E For sure, happily. I joined very early on as CTO, and brought kind of that real-world experience in running a consultancy. The business model is to find very, very intelligent - I don't know about genius level, but certainly top five to ten percentile in terms of problem solving capability, in Africa. So we operate in Kenya and Nigeria. I'm still involved as an adviser, I'm very close to the CEO Jeremy Johnson. What we did there was to find a way to put some of these young Nigerians, and now Kenyans to work, giving them opportunities that they clearly do not have on their own. It's very hard without access to stable power, stable internet.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd then I think, one of my significant contributions there that I'm most proud of is that we realized early on that it was wasn't just the structure concerns, right? It's not just safety and electricity and internet. Once you have the access it's easy to figure out the technology on your own, there's so much wealth of information online that you can get. I mean it's a dirty word to authors and media in general, but I mean, with piracy and whatever, where I can get a complete library of pretty much any classic book that you want to get in the field - it might be an outdated version or what not, but the access is there if you have the internet.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWhat you don't have, and this is what I started figuring out about six months in, in a very vivid way, is a lot of \"common sense\", what we would consider common sense - about business environment, how to deal with Western clients. What expectations are around creativity and problem solving? What kind of push back you can give if someone's telling you to do something that you think is not the right thing? Or if you are not capable of doing what they're asking you to do.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo that changed my whole pedagogical approach. I pretty much flipped it on it's head, where we were putting a lot of emphasis on basic technology training and basic computer science concepts in the beginning. I started realizing now we need to really put a lot of emphasis on \"soft skills\" - communication skills, how to build trust, how to keep trust. How to learn, how to function on a team. How to apply creative problem solving. How to trust your own intellect when it's appropriate, or lean on others. That sort of thing.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe mechanism for doing so was a very, very heavy curriculum of improv training, actually. A lot of people are familiar with comedic improv - the show, \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhose_Line_Is_It_Anyway%3F_(U.S._TV_series\"\u003EWhose Line Is It Anyway?\u003C\u002Fa\u003E)\u003C\u002Fem\u003E with Drew Carey was very popular in the United States, and whatnot. What less people know about is a field called applied improv - implied, applied improvisation probably has a couple of thousand practitioners around the world. Consultants who come, a lot of times from the comedic improv background, but they do business consulting, and they go to companies and they do these improv kinds of activities, improv games. Some are very basic, but the idea is to get people to open up, come out of their shells.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIn Nigeria, that was especially important, because the young people, and in particular young women, are just kind of culturally trained to be very quiet and shy, especially around any sort of authority figure or anyone that they look up to. It's very hard to get them to come out of their shell. So we did a lot of work - five to six hours a day for 30 days, a program called \"Month One\", where we went over, everything starting with the basic \"yes, and\" principle of improv. Which is that you - being constructive. So finding a way to build on what someone else is adding, trusting their intentions and then finding a way to build on the tearing down. All the way through these opening up exercises that I'm talking about, all the way towards things that we kind of learn naturally here in the States, even around some tough topics like sexual harassment and what's appropriate and what's not, things like that. And just basically not taking anything for granted.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe results have been remarkable. I think that the - our Andelan consultants that are now remote team members to about 50 companies here in the States and in Europe, they fit in very naturally. The way that other remote team members would fit in. It's not the experience that people may be used to with working with offshore teams.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E And how does Andela find people?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Actually, the population dynamics are such that it's not hard to find people. They have less than a 1% acceptance rate. So it's just the combination of social marketing and whatnot. And now there's a lot of word of mouth, because the opportunity is so awesome. You don't have to have any sort of formal education in computing. You don't have to have any particular family connections. You don't have to have money. You don't have to have anything. If you pass a battery of tests, then there's an interview process. That knocks the pool down significantly. And then those people are invited to come to one of our facilities and do a two week workshop, where they get very intensive and fast-paced training in JavaScript or Ruby or now Python.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe idea there is not so much training, as to see what their grit and determination is. Because you push them really, really hard, and the vast majority of them don't have real programming experience that they're bringing to the table. So you push them really hard, and then you see who comes out the end. So out of a class of 20 in the boot camp, we may hire five to ten. But at that point, we give you a four-year contract. And you have a job paying a middle-class salary. You get subsidized food, subsidized housing. A lot of them get to live on our campus. The audacious goal is within ten years to train 100,000 of these young Africans and inject them into the global workforce. If we achieve that, or even a fraction of that, it would make a pretty big social impact in Africa. So it's really one of those startup situations that was very exciting and rewarding, personally, not just in a monetary sense, but also in terms of purpose, that's what we're doing.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E That's fantastic, I didn't know that the goals were so ambitious and positive. That's great. And that leads me to ask you about 2U where you're Senior Vice President of Engineering now. I was wondering if you could tell me a little bit about what 2U is doing, and what your role is there?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah sure. So, as I was starting to get kind of exhausted with the travel and the intensity of working with Andela, I needed to take a little bit of a break. And I got married, I moved to New York from Atlanta. I had a bunch of life changes. My daughter Taylor went to college. So 2U is kind of a sister company to Andela, a lot of the same early investors. The CEO, Jeremy Johnson, was one of the founders of 2U. So the CTO of 2U made me an offer I couldn't refuse. To come, help, really take their engineering department to the next level over there.\u003C\u002Fp\u003E\n\n\u003Cp\u003E2U's a successful startup. It's a successful New York startup story. IPO'd I think about 18 months ago. So about 8 years old. Lots of market traction, a lot of credibility. A lot of really good brands associated with us - Yale, NYU, UNC. We have a good thing going on. We have a platform, along with the services that we provide to these schools so that they can get their graduate programs online. And what's amazing about what's happening there, is that ... of graduate education. The best graduate program is one that has some real world experience, that one has gone out and gotten some maturity and ... their career and their life to the next level.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut at that point, a lot of them have lives already. They have budding careers, or maybe established careers for a lot of the executives and professionals. They may have kids. They may not be able to move and do school full time in a particular geographic region. So what we give them is the ability to just work on it from home, remotely - while still getting the full experience, in a lot of cases, with better outcomes that they would get in person, on campus.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe now have programs that have been going on for over five years, and we can start to track the outcomes, and we see people actually having better outcomes. So the challenge there for me personally, what keeps it interesting is that it is a startup that went big and has done well. And we now have a technology department with over 100 people. The vast majority of whom are really great, really talented, really energetic. And then it's just a question, how do you harness that talent to take us to the next level? We have a certain amount of partnership programs now, but how do we increase that by multiples?\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd that - scaling technology is always kind of a fun challenge. And for me, coming back to an environment where there's bigger teams, there's bigger coordination and orchestration of effort, where there's more room for applying enterprise technology or if you're looking at the big picture, looking at strategy around it - that kind of takes me back to my days at ThoughtWorks, working with bigger Fortune 100 companies and CIO's offices and CTOs, doing some pretty interesting large scale work.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo, it's been amazing. I wouldn't have necessarily predicted that it's something that I would have been super interested in. Like especially like, let's say five, six years ago when I was running around and doing mostly kind of smaller start up stuff. But life is more interesting when you move to different kind of areas of interest, of pursuit. And in this case, these larger scale systems are starting to become really, really interesting to me.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Before I move on, asking you about some of your book projects, I'd just like to go back a little bit to what you were saying about piracy. You know that at Leanpub we're very - we have strong opinions about things like DRM, Digital Rights Management.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Around ebooks. And I was just wondering if you could - because I have no idea, but what's your opinion about DRM and ebooks?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E I think that one of the beautiful things about Leanpub is that it makes it real easy to get the material into people's hands. And if the author wants to put it at an affordable price point, that puts it into even more people's hands. But having firsthand experience with developing markets, it's not the fact that a young person in Nigeria can go to one of these piracy websites and download the latest book on JavaScript or whatever - that's not taking money out of the author’s hands. Because they don't have the money to pay for it anyway. And there's no one to pay for it for them.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo in terms of just kind of the bigger picture of global equality - I mean, the fact that a lot of people - I mean there's not - you don't necessarily have to go to Africa to see this, you know. I know that a lot of us, when we were younger, pirated things like Photoshop. Because it was too frickin' expensive to actually pay for it... But you know what? Now, if you use it, you pay for it. It sure helps that they created a subscription model, where you can pay ten bucks a month or something like that.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI'm generally not a fan of DRM at all. I was involved in the hacking scene, BBSs and things like that early on. So I come from a hacker background. Never really been that super concerned about it. Because the market is out there. I went with a traditional publisher with Addison-Wesley, because it was just the thing that you did. And then I continued going with traditional publishers after that; \u003Cem\u003ELean Enterprise\u003C\u002Fem\u003E is on Wiley. There's a big professional market out there that pays for it. Safari's great, subscription income from Safari's great. Stuff like that. If you're trying to credentialize, if you're trying to get started, it's great to go with traditional publishers. They'll do whatever they're going to do. I default to getting the material in people's hands, helping them out and basically looking at it as, if people are not paying for your material, it's probably because they can't afford to pay for it. Or they're just checking it out, and you'll get it back to you somehow later.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah, that's great. I mean, that's very - I've got to say, that's very consistent with our experience as well. Especially over the last year, where \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fblog\u002F2015\u002F12\u002Ftop-ten-bestselling-books-2015.html\"\u003Esome of our most successful books\u003C\u002Fa\u003E have been by people who are providing courses online, in particular through \u003Ca href=\"https:\u002F\u002Fwww.coursera.org\"\u003ECoursera\u003C\u002Fa\u003E actually. And for them, the variable pricing that you can do on Leanpub was a necessary condition, because they had a lot of students who couldn't necessarily afford to pay for books, and they did not want to exclude them from participating. But they also had a lot of people who wanted to pay. And so, allowing the reader the choice to pay when and whether they can or not, was really crucial. That seems to be an interesting thing that people are kind of coming to terms with, with the globalized marketplace that the internet offers, and especially in education.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E I think it's a really smart move, and I can tell the listeners from experience with variable pricing. Just because you set something at a low price, doesn't mean that people won't pay the higher price.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Moving onto your books, some of your books on Leanpub have had interesting histories, and in some ways, they're the ideal Leanpub books. I'd like to ask you first about, \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Ftheleanenterprise\"\u003EThe Lean Enterprise: How Corporations Can Innovate Like Startups\u003C\u002Fa\u003E\u003C\u002Fem\u003E. First, I'd just like to ask you what the book's about and why you chose to write it?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah, so my partner, \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fowenstrevor\"\u003ETrevor Owens\u003C\u002Fa\u003E and I - we have a company called Javelin. I'm not actively involved with it anymore, but before that it was called \u003Ca href=\"https:\u002F\u002Fwww.leanstartupmachine.com\"\u003EThe Lean Startup Machine\u003C\u002Fa\u003E. Tens of thousands of people did the Lean Startup Machine experience over the weekend, over the course of the last five years, and have gotten a taste of what lean startup is about. Eric Ries of course wrote the best-selling book, \u003Cem\u003E\u003Ca href=\"http:\u002F\u002Fwww.amazon.com\u002Fdp\u002F0307887898\u002F?tag=googhydr-20&amp;hvadid=35073137124&amp;hvpos=1t1&amp;hvexid=&amp;hvnetw=g&amp;hvrand=18072684110051029846&amp;hvpone=14.96&amp;hvptwo=&amp;hvqmt=b&amp;hvdev=c&amp;ref=pd_sl_9jp67e3rbs_b\"\u003EThe Lean Startup\u003C\u002Fa\u003E\u003C\u002Fem\u003E. If you look at the way that he launches his books - everyone has a lot to learn. All of us have a lot to learn about that sort of thing, he's certainly one of the biggest success stories for doing that sort of thing specifically with books. Seriously, \u003Ca href=\"https:\u002F\u002Fwww.kickstarter.com\u002Fprojects\u002F881308232\u002Fonly-on-kickstarter-the-leaders-guide-by-eric-ries\"\u003Elook at his latest book\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003EWe started a whole business on applying lean startup and helping entrepreneurs and want-to-be entrepreneurs to figure out how to not waste their hard-earned savings and years of their life pursuing ideas that didn't make sense. And then over the course of the years of doing that and getting involved in building some enterprise software around it, like basically trying to set up the go-to kind of web application for running your lean startup experiments, we talked to a lot of corporations like Nordstrom, GE, etc. that do lean startup at a large scale. And we started learning a lot about how to apply lean startup. One thing led to another, and we pitched this book idea to Wiley to basically talk about how to apply lean startup, with the target audience being senior management and the C-suite. Basically, how to establish what we call \"innovation colonies\", essentially taking the experience that you would get at like, let's say a Techstars accelerator - but doing it within the context of a corporation.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo it's a very business-heavy topic. It's not for the average consumer or the average technology programmers, they're not necessarily going to get a lot out of that book, other than, maybe, things that they can pass along up the chain? But we do see it as our contribution to trying to create friendlier environments in corporations for innovation and for entrepreneurship in general.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E On that note, how does one get around the bureaucracy in large companies where it is not necessarily explicitly, but sort of systemically hostile to lean startup philosophies? I mean, I know Nordstrom, for example, is just fantastic. I've had some experience with people from Nordstrom, and they're just great about innovating and looking for new things. But we've all had encounters with companies that aren't like that. And so how does one - for example if I were say in the C-suite in a company that had a foot-dragging bureaucracy, how would I go about introducing lean startup technology?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E It really has to be introduced. I mean you can do it - so there's two answers to that. You can apply lean startup as a product manager or as a general manager. Someone who's responsible for describing the parameters of success, the more objective that you get, the more that you rely on, build-measure-learn cycles within your business - that's how you introduce it at the grassroots. And that's generally successful. That's generally viewed as a good thing, and it's something that managers and middle executives can play up as doing things the right way, let's say. And it can have concrete business benefits.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAs far as doing an end run around bureaucracy, I mean that really has to come from the C-suite executive level. The bigger corporations are all tuned into it to some degree or another. I have a friend named Alan who's the CTO at Coca Cola. He's been heavily, heavily involved in innovation kind of activities. And you've got to realize, these sorts of things take different forms. Sometimes it's kind of - it's skunkworks, sometimes it's ... sort of things. But where it really starts getting, I think, super interesting and what we talk about is when those companies start sharing a significant amount of equity. So when they hook ... in, they stay hooked in at the level that a VC would be hooked into early stage startups. The idea is to give people the actual freedom.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe reason we call it an \"innovation colony\" is because we think it's a throwback to people leaving motherlands and going on long and dangerous journeys out to the colonies to strike their fortune. Did the colonial empires benefit from that? Sure, yeah. They would occasionally get ship loads of goods and gold coins and shit going back home. Was it dangerous and they'd occasionally lose people? Yeah sure. All the time. But it's the whole risk\u002Freward thing. We think that big innovation cannot happen in the bosom of a big enterprise where you really can't fail. You have that big safety net like, \"Hey you tried. Move onto something else.\" You really have to go out and take the kind of risks that startup entrepreneurs take.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E You've taken some of these principles, I think, and applied them to your books. You mentioned Eric Ries before. The \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fstartuplessonslearned\"\u003Efirst Leanpub book was an Eric Ries book that was from his blog\u003C\u002Fa\u003E, and was sort of the - in a sense, a kind of predecessor to \u003Cem\u003EThe Lean Startup\u003C\u002Fem\u003E. And I know that your books in particular - so you said, \u003Cem\u003EThe Lean Enterprise\u003C\u002Fem\u003E, obviously it's a Wiley book, you said you pitched it to Wiley. But if I'm not mistaken, it was published in-progress on Leanpub before it was completed?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E It absolutely was, and I've blogged to prospective authors saying, \"Hey do that. That's the way to do it.\" Because the traditional publishers don't see it as cannibalizing their sales. So it provides a way to get a significant amount of income. I mean if you are already a known entity and you have the ability to market your Leanpub book - as you well know, you see the actual numbers, right? You can make tens of thousands more before the book is even anywhere near a formal publisher. And then you put it in the hands of the publisher, and they put it through their own marketing channels and whatnot. You make a substantially less percentage on a royalty basis, but I think you reach a bigger audience, so it kind of equals out.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E So did you have the deal with Wiley for \u003Cem\u003EThe Lean Enterprise\u003C\u002Fem\u003E before you started publishing it in-progress on Leanpub?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yes. I mean we went through a very compressed cycle. The whole thing started and was in print in six months. Maybe not in print, but kind of finished in six months. So yeah, I believe we did. I mean, I already had \u003Cem\u003EThe Rails 4 Way\u003C\u002Fem\u003E on Leanpub at that point. I had already negotiated that with - at least I was kind of familiar with how to do that.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I'm just really curious. Obviously we were so excited to see it when \u003Cem\u003EThe Rails 4 Way\u003C\u002Fem\u003E popped up on Leanpub, and when you came on board. And of course, \u003Cem\u003EThe Lean Enterprise\u003C\u002Fem\u003E as well. Was that a difficult argument that you - or case that you had to make for this process? Because it's something that we think all books should do. Publish in-progress on something like Leanpub before the book gets taken up into the machine of the large publisher. Was that--?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E It didn't, but I'm going to try to be humble and admit that I'm probably a little bit of an outlier. I mean I have a very good relationship with them. They trust me, I trust them. So I don't know what that experience would be like for someone who didn't already have a track record and relationships in place.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah, that totally makes sense. Our hope is that it becomes somewhat conventional and an understood thing, especially for someone who's starting out and doesn't have a profile yet. To publish, to start publishing their book in progress, and hopefully get taken up by a publisher - if the book gets traction, and if they can demonstrate that they're a good writer.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah, the biggest challenge I think is getting that traction, and actually attracting... Like if you engage with a traditional publisher, at least in the technical world... Well first of all, actually it's not that hard to get signed to a traditional publisher these days. I feel like a lot of the editors out there are actually following blogs and things and reaching out. And, myself, I got a lot of traction on the first blog posts I did on \u003Cem\u003EServerless\u003C\u002Fem\u003E. On Medium I had like 15,000 reads. I got a couple of different cold emails from publishers saying, \"Hey, would you like to put this on our...\" You know, I got reached out from No Starch and from Apress. People who I didn't have relationships with already. And it's like, \"No, it's okay, I'm good.\" So I can't be the only one that's happening with. I'm guessing that they're going out and reaching out. Because it doesn't really cost them very much to develop an author, to sign someone.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI think that increasingly you don't need them as much. Because there's this great eco system of blogs, and Leanpub is certainly part of it. That can credentialize you, you can succeed and reach a wide audience without needing them. So I think that traditional publishers are going to be increasingly, in that somewhat of a difficult situation, moving forward. The same as the case of record labels and any sort of traditional content curators.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E On the subject of \u003Cem\u003EServerless\u003C\u002Fem\u003E, so you're going to be launching it within the next week or so.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I was wondering if you could tell us about what it's about?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yes, of course. So this is rapidly becoming one of my favorite subjects. I love catching new technology waves while there's still a chance to get really good momentum out of it. And this is certainly the case of a movement, that being microservices, which is very rapidly ascending the Gartner hype cycle. It's just kind of starting to be on everyone's minds. I've been a fan of the concept for years now. It's certainly not something totally new. In the earlier stages of my career, I was involved with distributed computing and SOA. And one of my earliest applications that I worked on used \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FForte_4GL\"\u003EForte\u003C\u002Fa\u003E, which at the time was one of the most advanced object oriented distributed application environments. You wrote your objects and then they had this whole UI for distributing over different nodes in your network and things like that.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo I know a lot about stuff over the years, and what I see is that it's really kind of coming together in a way that is enabled by current technology that we haven't seen before. Lambda is really kind of at the heart of it. It's a new product from \u003Ca href=\"http:\u002F\u002Faws.amazon.com\"\u003EAmazon Web Services\u003C\u002Fa\u003E that lets you upload functions and run them in the fabric of Amazon's cloud computing platform, without needing to provision servers. And that is - for someone like me, that's very, very powerful.\u003C\u002Fp\u003E\n\n\u003Cp\u003EOver the years I've gotten involved in kind of countless ventures, the whole lean startup thing, like wanting to put things out there. But you want to know that they're capable of scaling without having to scramble and lose whatever... But you don't want to invest a whole bunch either. And there's this notion of T approximating, with the T variable representing development time or cost. And what happens as it approaches zero. So with technology and everything going the way that it is, you're able to throw together software in a postmodern way, cobble together third party SAS services and APIs and libraries and open source and things very rapidly. But the final missing piece is - how do you pay for it if you want something that's capable of scaling? And I think this answers that effectively. And this applies both to startups and also at a place like 2U, where I want to build systems that scale.\u003C\u002Fp\u003E\n\n\u003Cp\u003EBut I also want to build them in a maximally modular and maintainable way. And I want my developers to have a lot of power over those environments, and being able to really leverage all the tools at their disposal. And maintaining big, monstrous monolithic applications that have been in service for years - now, you don't know that you're not going to break them. You know pretty much any time you touch them, no matter how good your test coverage is and whatnot, things become very brittle after they've been in production for a while.\u003C\u002Fp\u003E\n\n\u003Cp\u003EMicroservices supports that; what we're advocating with the book, is just an amazing new world, right? The microservices are basically disposable. You don't really modify them - once they're in service, they have a long lifetime. They're kind of a cell, until they become obsolete. When they become obsolete, because you need them to do something differently - in the best cases, you just deploy the new version alongside it. And then you can go about in a very methodical way, testing whether it does what you need it to. Whether it doesn't introduce regressions. Whether it performs. You can start shifting traffic over to it. You can leave the legacy microserver in production to service old clients. I mean it's just a - it's a very, very different world than the one we're used to.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E For people listening who might not be all that familiar with microservices, can you give me maybe an example that you've had in your experience with something like that, where it made a big difference?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah. At 2U, we do a lot of transformation of files from - basically we integrate with these legacy systems at schools. Without getting into too much details, you can think about it as 20 different partners that all have their - it's all a very similar process, but each slightly different. So do you develop a monolithic application and clone it 20 times, and then tweak each one? I mean that's one way of going about it. Or do you spend the time engineering that monolithic application to have all the different adaptors and configurations and strategies and all the things that you need it to have in order to be configurable for each case? But then every time you deploy it you've got to worry that - you've got to test every single integration. Or do you decompose the problem into a set of microservices, each of which does what it does really, really well? And collaborate with each other over a messaging bus, which is my favorite approach.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo that one can add - one can take it, read the format, and go, \"Oh yeah, I know this format.\" So it translates it, puts it back on the bus. Another service goes, \"Oh here's a translated - here's my transcript.\" And it can know what to do with this. So it grabs it and it dissects it and identifies, who is the student involved? That sort of thing.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThat's sort of decomposition without getting into too much detail. The example I use in the book is this venture called Food Button, which is the easiest way to get a meal. Some of you can probably imagine being at your desk, and you're working and you're in the middle of something. The last thing you want to do is stop and think about what you're going to eat. But you need to have lunch. So I've dreamed about this ideal time of just being able to hit a button on an app or a physical button on the desk or whatever, on my Apple Watch, and 30 to 60 minutes later, magically food appears - cool. I'm not a picky eater. If you're a picky eater, you will not like this idea. But if you're not a picky eater, like me, you will love this idea. Which is press a button, 36 minutes later, magically food appears. It's like, I don't have to pay for it, it automatically gets charged like that.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E That's a really fantastic idea. I was wondering actually when you were describing some of the issues with say dealing with 20 different systems, that reminded me of a friend of mine who works in government healthcare startup land. And it reminds me of a lot of - and I know you've had some of these sort of scandals in the States as well, where people trying to deal with legacy government systems find it's very, very difficult often to change things. Because there are so many legacy systems with technology from different decades. Is microservices the kind of thing that people engaged to those kinds of very, very large projects could use to solve some of those problems?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah well, I think decomposition is a trend that predates microservices. And generally speaking, that's part of the life cycle of a large project anyway, is that eventually you start breaking pieces off of it into smaller bits and pieces. It might be new versions, a functionality, or it might just be things that make sense to partition logically. If you read \u003Cem\u003E\u003Ca href=\"http:\u002F\u002Fwww.amazon.com\u002FBuilding-Microservices-Sam-Newman\u002Fdp\u002F1491950358\"\u003EMicroservices\u003C\u002Fa\u003E\u003C\u002Fem\u003E by Sam Newman, it's like, basically he makes the case for never - or maybe not never - but not starting with a microservices approach from day one. Basically, starting normally with a monolith and then breaking it off. Just really have to do not so much with the approach overall, but like the details of what's involved.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo, for instance, when you go microservices, you decentralize your data. You no longer have kind of a one repository to rule them all. One relational store behind everything. Each microservice has it's own repository. You get into these so-called polyglot persistence situations where one microservice is backed by MySQL, another one's backed by Mongo. Another one's backed by Cassandra. You've got your user sessions, is backed by Redis, and whatnot. And you start having this data that's fractured over different kinds of stores in different ways, different schemas. It's no longer clear how you do a transaction. And the truth is, you probably don't. Which means that your developers have to be familiar with the CAP theorem. You now have to understand how these new breed systems like Dynamo favor partitioned data and cluster over consistency. So it means your systems have to accommodate eventual consistency.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThese are heady topics for your average developer. This starts to take them beyond their comfort. Imagine kind of like your average Rails developer going, \"But I just want to write a controller and some active record\". Whatever. And I've had some pushback already from friends who are kind of Agile fanatics and default to \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FYou_aren%27t_gonna_need_it\"\u003EYAGNI\u003C\u002Fa\u003E. You ain't going to need that, right? You ain't going to need it. And like, \"What are you doing, kind of over-complicating everything?\" Well yeah, I agree, I mean you can definitely start with that approach, but there are some problems that, by their very nature, right off the bat, you know that you're going to need to scale. You know that you're going to be able to decompose. There's just a talent to be able to execute that. And I think that the mix of skills that you have to pick up, like the mix of skills that we discuss in the book, basically - planning for this book to be a general reference and also a really solid primer into microservices.\u003C\u002Fp\u003E\n\n\u003Cp\u003EI called it \"patterns of modern application architecture\", because I see that this is kind of the way that the future is going to be built. Your application is no longer just a simple three layer beast with a front end and it talks to a database on the other side. We've got the internet of things, where you got RESTful APIs for everything. You've got mobile clients. You got web clients. You've got teams that are actually smart and want to test their shit. So you have to be able to mock things. There's a whole modern realization of what \u003Ca href=\"http:\u002F\u002Falistair.cockburn.us\u002FHexagonal+architecture\"\u003EAlistair Cockburn called hexagonal architecture\u003C\u002Fa\u003E, and making sure that your application has ports.\u003C\u002Fp\u003E\n\n\u003Cp\u003EAnd that was in a way in that I really haven't seen before with this serverless microservice approach for you at the functional level. You deploy them independently. You pay for them in a metered way. More and more, I just think that in the future, people are going to look back at what we did with servers. And they're going to think it's like contacting the electric company because you need service. And they arrange with you to set up a little power plant on their premises. It's ridiculous, right? Like you wouldn't think it that way. But it's very similar to what we do now. The abstraction of a server is not part of my domain. Why do I need to think about it?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E So is the target audience for this - I mean, is it - is it everybody who works in software?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Everyone.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Yeah, okay. That was one of my questions.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E My favorite kind of book.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E It sounds like it's making an argument as well. Which is fascinating, and those are the best books, right?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah, and I'm also trying to write it in an evergreen way. So my biggest agitator so far has been whether to make it specific to Amazon Web Services. But they have a million customers, they're dominant. I'm not too afraid to go that route. And they're really killing it when it comes to the pace of innovation there, like Lambda, \u003Ca href=\"http:\u002F\u002Fdocs.aws.amazon.com\u002Fapigateway\u002Flatest\u002Fdeveloperguide\u002Fwelcome.html\"\u003EAPI Gateway\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Faws.amazon.com\u002Fdynamodb\"\u003EDynamo\u003C\u002Fa\u003E. The whole story that they're putting together and the way it ties together, I think it's an amazing platform, and it's not one I mind aligning with.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Just for any authors listening, or potential authors. I was wondering what your plans are around the launch?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Yeah, so I've been - I have my personal mailing list, which is in the thousands. I have a Twitter following, stuff like that. I've been heads down working on the book, so I honestly haven't thought too much about the launch. Other than to reach certain people, yourself included. I'm also going to have friends and allies that are aligned with the book tweet about it. \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTim_Bray\"\u003ETim Bray\u003C\u002Fa\u003E is high up over at Amazon Web Services. He's a figure that a lot of us know and love. So I'm sure he's going to support the book. Other people that I can call upon.\u003C\u002Fp\u003E\n\n\u003Cp\u003ESo in all, just kind of leverage my network. Get the word out. And then we'll continue to work heavily on it. It's strategic for me in various senses. I'm also writing it for my team at 2U, because I expect that it's going to increasingly be a part of our future there. So it helps to have your different - your work and play interests aligned in that way. It's kind of the optimal way to do it I think. If I was trying to do this well running Hashrocket or doing a monolithic Rails app, it just wouldn't happen. Leverage your strengths, that's my advice to the authors.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Fantastic. Thanks for that. It's funny, when one's already done things a few times, it can often be easy to underestimate one's strengths and what one's learned, and advice like that is actually really, really helpful for people who are just figuring things out.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E I think if you're struggling with your first book, realize that it does get easier. That much already I can tell. This book, I kind of launched into it, and yeah I had a lot of energy, but like just knowning the workflow, knowing how to assemble a team. Have a small team of collaborators. And I'm probably going to build it. Realize that books are generally team efforts. You need competent reviewers and collaborators to give you feedback.\u003C\u002Fp\u003E\n\n\u003Cp\u003EIf you want to write a quality book, I guess that's the disclaimer. And I'm generally very happy with the books that I personally bought on Leanpub. But there is differing levels of quality I suppose. If you go into some of the Kindle books, like I checked out some of the Kindle books on microservices, and they were terrible. Kind of the low budget books. If you want to build a quality product, you can't just do it on your own, you need people to review it and you need people to check your - to do the editing and stuff like that. You need a cover designer. It's definitely a team effort to get the best result.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E I just have one more question. Customer development is very important for us at Leanpub. If there's one thing or maybe even more than one thing that we could do to improve Leanpub or add to it, that occurred to you in the production of this book, what would that be?\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E I sent a note over to Peter. The - and I think it's coming in \u003Ca href=\"http:\u002F\u002Fmarkua.com\"\u003EMarkua\u003C\u002Fa\u003E, am I saying that right? The ability to pull in source code from a URL would be awesome. Because in this book, I'm co-developing the Food Button source code together with the book. And at first I was like, \"Oh wow, if I could only do like a Git submodule\". Beause I developed a book in Leanpub Flavored Markdown with Git - if I could pull in a submodule, it'd be great, because then I could have the source code up to date. But then that's complicated even from a personal workflow standpoint. So I was like, \"Hey what actually would be good would being able to reference a GitHub URL.\" Looking forward to seeing that.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003ELen:\u003C\u002Fstrong\u003E Great, cool. Alright, well thanks a lot for a really great talk, and thanks for being on the Leanpub podcast and for being a Leanpub author, Obie. This was great.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cstrong\u003EObie:\u003C\u002Fstrong\u003E Thank you guys, I love you guys for real.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EThis interview has been edited for conciseness and clarity.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003E-- Posted by \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n","podcast_id":2,"short_description_markdown":"In this interview Leanpub cofounder Len Epp interviews Obie Fernandez, an author, consultant, and current Senior Vice President of Engineering at 2U. We talk about Obie's career and his latest book, Serverless: Patterns of Modern Application Design Using Microservices.","original_episode_id":null,"blurb_html":"\u003Cp\u003EIn this interview Leanpub cofounder Len Epp interviews Obie Fernandez, an author, consultant, and current Senior Vice President of Engineering at 2U. We talk about Obie's career and his latest book, Serverless: Patterns of Modern Application Design Using Microservices.\u003C\u002Fp\u003E\n","blurb_markdown":"In this interview Leanpub cofounder Len Epp interviews Obie Fernandez, an author, consultant, and current Senior Vice President of Engineering at 2U. We talk about Obie's career and his latest book, Serverless: Patterns of Modern Application Design Using Microservices.","avatar_meta":null,"episode_number":24,"youtube_slug":"fQ7g6u38_4c","spotify_slug":"687AJ15AwTJPH0Ybg3J2Vz"},"linkedinname":"obiefernandez","mastodon_name":"","mastodon_url":"","name":"Obie Fernandez","profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EThe \"one and only\" \u003C\u002Fstrong\u003E\u003Ca href=\"http:\u002F\u002Fobiefernandez.com\u002Fabout\" target=\"_self\"\u003E\u003Cstrong\u003EObie Fernandez\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E\u003Cstrong\u003E is an avid writer and technology enthusiast, in addition to achieving worldwide success as an electronic music producer and touring DJ. He is Co-founder and Chief Scientist of AI platform \u003C\u002Fstrong\u003E\u003Ca href=\"https:\u002F\u002Folympia.chat\" target=\"_blank\"\u003E\u003Cstrong\u003EOlympia\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E\u003Cstrong\u003E, and also Partner and Chief Consultant at \u003C\u002Fstrong\u003E\u003Ca href=\"https:\u002F\u002Fmagmalabs.io\" target=\"_blank\"\u003E\u003Cstrong\u003EMagmaLabs\u003C\u002Fstrong\u003E\u003C\u002Fa\u003E\u003Cstrong\u003E, a powerhouse Ruby on Rails consultancy.\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EObie has been CTO and co-founder of many startups including Mark Zuckerberg's beloved \u003Ca href=\"http:\u002F\u002Fandela.com\" target=\"_self\"\u003EAndela\u003C\u002Fa\u003E and Trevor Owen's \u003Ca href=\"http:\u002F\u002Fleanstartupmachine.com\" target=\"_self\"\u003ELean Startup Machine\u003C\u002Fa\u003E. His published books include the acclaimed business title \u003Ca href=\"http:\u002F\u002Fwww.leanenterprisebook.com\u002F\" target=\"_blank\"\u003EThe Lean Enterprise\u003C\u002Fa\u003E. He also founded one of the world's best known Ruby on Rails web design and development agencies, \u003Ca href=\"http:\u002F\u002Fhashrocket.com\" target=\"_self\"\u003EHashrocket\u003C\u002Fa\u003E and is author of the bible of Rails development, The Rails Way and \u003Ca href=\"http:\u002F\u002Fobiefernandez.com\u002Fbooks\" target=\"_self\"\u003Eseries editor for Addison-Wesley's Professional Ruby Series\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EOn the rare occasion when Obie is not busy building products, consulting clients or writing books, you can find him behind the lens of his camera or DJing in the dust at Burning Man.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EFollow \u003Ca href=\"http:\u002F\u002Ftwitter.com\u002Fobie\" target=\"_self\"\u003E@obie\u003C\u002Fa\u003E on Twitter or email him at \u003Ca href=\"mailto:obiefernandez@gmail.com\" target=\"_self\"\u003Eobiefernandez@gmail.com\u003C\u002Fa\u003E \u003C\u002Fp\u003E","twittername":"obie","unpaid_royalties":3983.26,"updated_at":"2025-02-05T19:38:50.000Z","username":"obiefernandez","wishlist_count":2,"wishlist_id":1586791,"youtube_name":"","id":72367},"222713":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F222713\u002Ffull\u002Fprofile_pic.jpg?1603257319","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F222713\u002Fmedium\u002Fprofile_pic.jpg?1603257319","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F222713\u002Fsmall\u002Fprofile_pic.jpg?1603257319","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F222713\u002Ftiny\u002Fprofile_pic.jpg?1603257319","created_at":"2013-12-25T02:12:37.000Z","facebook_url":null,"family_name_pp":"Telang","githubname":"ttelang","given_names_pp":"Tarun","instagramname":"tarun_telang\u002F","latest_podcast_episode":null,"linkedinname":"taruntelang\u002F","mastodon_name":null,"mastodon_url":"","name":"Tarun Telang","profile_blurb":"\u003Cp\u003EHi! My name is Tarun Telang. I am a software engineering leader with over 16 years of experience in the industry. I have been conducting training, presenting in conferences, writing technical articles, and blogs related to software technology for more than 15 years now. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EMy courses: \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fc\u002Fself-compassion\" target=\"_blank\"\u003ESelf Compassion for Remote Workers\u003C\u002Fa\u003E - I am creating this course to enable software engineers to quickly adapt to this new normal due to the current pandemic situation and become more productive while following best practices of remote working in distributed software development teams.\u003C\u002Fli\u003E\u003Cli\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fc\u002Fjava-course\" target=\"_blank\"\u003EGetting Proficient in Java\u003C\u002Fa\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fc\u002Fyaml-course\" target=\"_blank\"\u003EIntroduction to YAML\u003C\u002Fa\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EBooks\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https:\u002F\u002Famzn.to\u002F38ZOmi1\" target=\"_blank\"\u003EIntroduction to YAML\u003C\u002Fa\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fjava14\" target=\"_blank\"\u003EQuick Reference Guide for Java\u003C\u002Fa\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EFor any suggestions and queries, you can reach out to me on my Twitter handle @taruntelang and also include #leanpub in your tweet so that I can notice it fast. Connect with me by visiting my LinkedIn profile page \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ftaruntelang\u002F\" target=\"_blank\"\u003Ehttps:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ftaruntelang\u002F\u003C\u002Fa\u003E \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EFeel free to share your feedback about my courses and books on Twitter or LinkedIn. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EMy Certifications\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EOracle Certified Programmer for Java 5 Platform\u003C\u002Fli\u003E\u003Cli\u003ENASBA Certification on Remote Work\u003C\u002Fli\u003E\u003Cli\u003ESAP Certified Application Management Expert for End to End Root Cause Analysis - Solution Manager 4.0 \u003C\u002Fli\u003E\u003Cli\u003ESAP Certified Development Consultant for NetWeaver 04 Java Web  Application Development.  \u003C\u002Fli\u003E\u003C\u002Ful\u003E","twittername":"taruntelang","unpaid_royalties":31.19,"updated_at":"2023-11-23T02:00:18.000Z","username":"taruntelang","wishlist_count":0,"wishlist_id":432086,"youtube_name":null,"id":222713},"246054":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F246054\u002Ffull\u002Ffoto-capa-2.jpg?1735334266","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F246054\u002Fmedium\u002Ffoto-capa-2.jpg?1735334266","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F246054\u002Fsmall\u002Ffoto-capa-2.jpg?1735334266","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F246054\u002Ftiny\u002Ffoto-capa-2.jpg?1735334266","created_at":"2014-02-11T12:36:08.000Z","facebook_url":"","family_name_pp":"Souza","githubname":"asouza","given_names_pp":"Alberto","instagramname":"deveficiente","latest_podcast_episode":null,"linkedinname":"","mastodon_name":"","mastodon_url":"","name":"Alberto Souza","profile_blurb":"\u003Cp\u003EAlberto Souza works as a Senior Staff Engineer at Nubank, Brazil's leading technology company.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EWhile most of the technology market relies on work experiences as their main development path, Alberto bet on deliberate practice as his primary development factor. He always used work opportunities to evaluate his skill level and identify gaps, rather than as a primary focus for development.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EEducation as a performance driver and software quality are his two main areas of interest.\u003C\u002Fp\u003E","twittername":"alberto_souza","unpaid_royalties":342.56,"updated_at":"2025-01-08T08:00:24.000Z","username":"alberto-souza","wishlist_count":0,"wishlist_id":1756336,"youtube_name":"deveficiente","id":246054},"405678":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F405678\u002Ffull\u002FDaniel_Vacanti.jpg?1425586242","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F405678\u002Fmedium\u002FDaniel_Vacanti.jpg?1425586242","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F405678\u002Fsmall\u002FDaniel_Vacanti.jpg?1425586242","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F405678\u002Ftiny\u002FDaniel_Vacanti.jpg?1425586242","created_at":"2015-01-10T12:19:29.000Z","facebook_url":null,"family_name_pp":"Vacanti","githubname":"","given_names_pp":"Daniel","instagramname":"","latest_podcast_episode":{"id":298,"user_id":405678,"featured":false,"name":"Daniel Vacanti","description_markdown":"[Daniel Vacanti](https:\u002F\u002Fleanpub.com\u002Fu\u002Fdaniel_vacanti) is the author of the Leanpub book *[Actionable Agile Metrics Volume II: Advanced Topics in Predictability](https:\u002F\u002Fleanpub.com\u002Factionableagilemetricsii)*. In this interview, Leanpub co-founder [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp) talks with [Daniel](https:\u002F\u002Ftwitter.com\u002Fdanvacanti) about his book, and how to take action on deliberate analysis of data.\r\n\r\nThis interview was recorded on November 14, 2023.\r\n\r\nThe full audio for the interview is here: [https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM278-Daniel-Vacanti-2023-11-14.mp3](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM278-Daniel-Vacanti-2023-11-14.mp3). The Frontmatter podcast is available on our YouTube channel at [https:\u002F\u002Fwww.youtube.com\u002Fleanpub](https:\u002F\u002Fwww.youtube.com\u002Fleanpub), in Apple Podcasts here [https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137](https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137) or with this direct link [https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137](https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137), on Spotify here [https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz](https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz), and almost everywhere people listen to podcasts.","blog_link":"","avatar_file_name":null,"avatar_content_type":null,"avatar_file_size":null,"avatar_updated_at":null,"created_at":"2023-12-07T00:05:15.000Z","updated_at":"2024-03-19T04:22:21.000Z","release_date":"2023-12-05T23:59:00.000Z","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM278-Daniel-Vacanti-2023-11-14.mp3","audio_file_size_in_bytes":45594582,"description_html":"\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fdaniel_vacanti\"\u003EDaniel Vacanti\u003C\u002Fa\u003E is the author of the Leanpub book \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Factionableagilemetricsii\"\u003EActionable Agile Metrics Volume II: Advanced Topics in Predictability\u003C\u002Fa\u003E\u003C\u002Fem\u003E. In this interview, Leanpub co-founder \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E talks with \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fdanvacanti\"\u003EDaniel\u003C\u002Fa\u003E about his book, and how to take action on deliberate analysis of data.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on November 14, 2023.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is here: \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM278-Daniel-Vacanti-2023-11-14.mp3\"\u003Ehttps:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM278-Daniel-Vacanti-2023-11-14.mp3\u003C\u002Fa\u003E. The Frontmatter podcast is available on our YouTube channel at \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fleanpub\"\u003Ehttps:\u002F\u002Fwww.youtube.com\u002Fleanpub\u003C\u002Fa\u003E, in Apple Podcasts here \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E or with this direct link \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E, on Spotify here \u003Ca href=\"https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz\"\u003Ehttps:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz\u003C\u002Fa\u003E, and almost everywhere people listen to podcasts.\u003C\u002Fp\u003E\n","duration":"31:40","interview_date":"2023-11-14","interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":false,"keywords":"books, Agile, management, data, leadership","podcast_type":"frontmatter","related_links_markdown":"","related_links_html":"\n","slug":"daniel-vacanti-05-12-23","subtitle":"A Leanpub Frontmatter Podcast Interview with Daniel Vacanti, Author of Actionable Agile Metrics Volume II: Advanced Topics in Predictability","title":"Daniel Vacanti, Author of Actionable Agile Metrics Volume II: Advanced Topics in Predictability","transcript_markdown":"There’ll be a full transcript here one day! Note the [YouTube video](https:\u002F\u002Fyoutu.be\u002FAQs6xgmMQXk) has complete subtitles!","transcript_html":"\u003Cp\u003EThere’ll be a full transcript here one day! Note the \u003Ca href=\"https:\u002F\u002Fyoutu.be\u002FAQs6xgmMQXk\"\u003EYouTube video\u003C\u002Fa\u003E has complete subtitles!\u003C\u002Fp\u003E\n","podcast_id":2,"short_description_markdown":"**Daniel Vacanti** - [Daniel](https:\u002F\u002Fleanpub.com\u002Fu\u002Fdaniel_vacanti) is the author of the Leanpub book *[Actionable Agile Metrics Volume II: Advanced Topics in Predictability](https:\u002F\u002Fleanpub.com\u002Factionableagilemetricsii)*. In this interview, Daniel talks about his book, and how to take action on deliberate analysis of data.","original_episode_id":null,"blurb_html":"\u003Cp\u003E\u003Cstrong\u003EDaniel Vacanti\u003C\u002Fstrong\u003E - \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fdaniel_vacanti\"\u003EDaniel\u003C\u002Fa\u003E is the author of the Leanpub book \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Factionableagilemetricsii\"\u003EActionable Agile Metrics Volume II: Advanced Topics in Predictability\u003C\u002Fa\u003E\u003C\u002Fem\u003E. In this interview, Daniel talks about his book, and how to take action on deliberate analysis of data.\u003C\u002Fp\u003E\n","blurb_markdown":"**Daniel Vacanti** - [Daniel](https:\u002F\u002Fleanpub.com\u002Fu\u002Fdaniel_vacanti) is the author of the Leanpub book *[Actionable Agile Metrics Volume II: Advanced Topics in Predictability](https:\u002F\u002Fleanpub.com\u002Factionableagilemetricsii)*. In this interview, Daniel talks about his book, and how to take action on deliberate analysis of data.","avatar_meta":null,"episode_number":278,"youtube_slug":"AQs6xgmMQXk","spotify_slug":""},"linkedinname":"danielvacanti","mastodon_name":null,"mastodon_url":"","name":"Daniel Vacanti","profile_blurb":"\u003Cp\u003EDaniel Vacanti has spent most of the last 20 years focusing on Lean and Agile practices.  In 2007, he helped to develop the Kanban Method for knowledge work.  He managed the world’s first project implementation of Kanban that year, and has been conducting Kanban training, coaching, and consulting ever since.  In 2011 he founded Corporate Kanban, Inc., which provides world-class Lean training and consulting to clients all over the globe—including several Fortune 100 companies.  In 2013 he founded ActionableAgileTM which provides industry leading predictive analytics tools and services to any flow-based process. Daniel holds a Masters in Business Administration and regularly teaches a class on lean principles for software management at the University of California Berkeley.\u003C\u002Fp\u003E","twittername":"danvacanti","unpaid_royalties":1819.65,"updated_at":"2025-02-09T22:18:28.000Z","username":"daniel_vacanti","wishlist_count":0,"wishlist_id":953659,"youtube_name":null,"id":405678},"840643":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F840643\u002Ffull\u002Fmike-burrows-mug-317kb.jpg?1740134459","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F840643\u002Fmedium\u002Fmike-burrows-mug-317kb.jpg?1740134459","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F840643\u002Fsmall\u002Fmike-burrows-mug-317kb.jpg?1740134459","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F840643\u002Ftiny\u002Fmike-burrows-mug-317kb.jpg?1740134459","created_at":"2016-10-05T14:22:23.000Z","facebook_url":"michael.burrows","family_name_pp":"Burrows","githubname":"","given_names_pp":"Mike","instagramname":"","latest_podcast_episode":null,"linkedinname":"asplake","mastodon_name":"","mastodon_url":"","name":"Mike Burrows","profile_blurb":"\u003Cp\u003EAgendashift founder Mike Burrows is author of \u003Cem\u003EWholehearted: Engaging with Complexity in the Deliberately Adaptive Organisation\u003C\u002Fem\u003E (2025)., \u003Cem\u003EOrganizing Conversations\u003C\u002Fem\u003E (2024), \u003Cem\u003EAgendashift\u003C\u002Fem\u003E (2nd edition 2021), \u003Cem\u003ERight to Left\u003C\u002Fem\u003E (2019, audiobook 2020), and the Lean-Agile classic \u003Cem\u003EKanban from the Inside \u003C\u002Fem\u003E(2014), He has been the interim delivery manager for two UK government digital \"exemplar\" projects and consultant to public and private sector organisations at home and abroad. Prior to his consulting career, he was global development manager and Executive Director at a top tier investment bank, and IT Director for an energy risk management startup. A speaker at conferences around the world, he now works as a consultant and trainer.\u003C\u002Fp\u003E","twittername":"asplake","unpaid_royalties":999.82,"updated_at":"2025-03-19T10:56:44.000Z","username":"mikeburrows","wishlist_count":0,"wishlist_id":682412,"youtube_name":"","id":840643},"1021109":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1021109\u002Ffull\u002FIMG_8902.JPG?1742565302","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1021109\u002Fmedium\u002FIMG_8902.JPG?1742565302","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1021109\u002Fsmall\u002FIMG_8902.JPG?1742565302","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1021109\u002Ftiny\u002FIMG_8902.JPG?1742565302","created_at":"2017-03-25T21:42:02.000Z","facebook_url":"","family_name_pp":"","githubname":"nbrown02","given_names_pp":"","instagramname":"n123b","latest_podcast_episode":{"id":331,"user_id":1021109,"featured":true,"name":"Nicolas Brown","description_markdown":"In this Leanpub Podcast episode, Len Epp interviews Nicolas Brown, author of *[Real World Agility: Backed by evidence, built for results](https:\u002F\u002Fleanpub.com\u002Frealworldagility)*.\r\n\r\nNicolas shares his unique path from the Royal Mail to working in e-commerce, financial services, and eventually as a sought-after agility and product consultant. He explains his evidence-based approach to agile coaching, and why focusing on flow, value, and culture leads to meaningful results. The conversation covers metrics, agile dogma, writing a book, and how leaders can create truly adaptive organizations.\r\n\r\n📘 Learn more about the book: [Real World Agility](https:\u002F\u002Fleanpub.com\u002Frealworldagility) \r\n🎙️ Listen to more episodes: [The Leanpub YouTube Channel](https:\u002F\u002Fwww.youtube.com\u002F@leanpub)\r\n\r\nThis interview was recorded on April 1, 2025.\r\n\r\nThe full audio for the interview is here: [https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3](https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3). The Frontmatter podcast is available on our YouTube channel at [https:\u002F\u002Fwww.youtube.com\u002Fleanpub](https:\u002F\u002Fwww.youtube.com\u002Fleanpub), in Apple Podcasts here [https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137](https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137), and almost everywhere else people listen to podcasts.","blog_link":"","avatar_file_name":null,"avatar_content_type":null,"avatar_file_size":null,"avatar_updated_at":null,"created_at":"2025-04-03T02:34:48.000Z","updated_at":"2025-04-06T22:59:59.000Z","release_date":"2025-04-03T02:33:00.000Z","audio_file_url":"https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3","audio_file_size_in_bytes":89776335,"description_html":"\u003Cp\u003EIn this Leanpub Podcast episode, Len Epp interviews Nicolas Brown, author of \u003Cem\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility: Backed by evidence, built for results\u003C\u002Fa\u003E\u003C\u002Fem\u003E.\u003C\u002Fp\u003E\n\n\u003Cp\u003ENicolas shares his unique path from the Royal Mail to working in e-commerce, financial services, and eventually as a sought-after agility and product consultant. He explains his evidence-based approach to agile coaching, and why focusing on flow, value, and culture leads to meaningful results. The conversation covers metrics, agile dogma, writing a book, and how leaders can create truly adaptive organizations.\u003C\u002Fp\u003E\n\n\u003Cp\u003E📘 Learn more about the book: \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility\u003C\u002Fa\u003E\u003Cbr \u002F\u003E\n🎙️ Listen to more episodes: \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002F@leanpub\"\u003EThe Leanpub YouTube Channel\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on April 1, 2025.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is here: \u003Ca href=\"https:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3\"\u003Ehttps:\u002F\u002Fs3.us-east-1.amazonaws.com\u002Fleanpub_podcasts\u002FFM311-Nicolas-Brown-2025-04-01.mp3\u003C\u002Fa\u003E. The Frontmatter podcast is available on our YouTube channel at \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fleanpub\"\u003Ehttps:\u002F\u002Fwww.youtube.com\u002Fleanpub\u003C\u002Fa\u003E, in Apple Podcasts here \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E, and almost everywhere else people listen to podcasts.\u003C\u002Fp\u003E\n","duration":"01:02:20","interview_date":null,"interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":true,"keywords":"books, writing, agile, management, technology","podcast_type":"frontmatter","related_links_markdown":"","related_links_html":"\n","slug":"nicolas-brown-03-04-25","subtitle":"A Leanpub Frontmatter Podcast Interview with Nicolas Brown, Author of Real World Agility: Backed by evidence, built for results","title":"Nicolas Brown, Author of Real World Agility","transcript_markdown":"There’ll be a full transcript here one day! Note the [YouTube video](https:\u002F\u002Fyoutu.be\u002FSV0T6ro-jUg) has complete subtitles!","transcript_html":"\u003Cp\u003EThere’ll be a full transcript here one day! Note the \u003Ca href=\"https:\u002F\u002Fyoutu.be\u002FSV0T6ro-jUg\"\u003EYouTube video\u003C\u002Fa\u003E has complete subtitles!\u003C\u002Fp\u003E\n","podcast_id":2,"short_description_markdown":"**Nicolas Brown** - Agility expert Nicolas Brown, author of [Real World Agility](https:\u002F\u002Fleanpub.com\u002Frealworldagility), joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.","original_episode_id":null,"blurb_html":"\u003Cp\u003E\u003Cstrong\u003ENicolas Brown\u003C\u002Fstrong\u003E - Agility expert Nicolas Brown, author of \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Frealworldagility\"\u003EReal World Agility\u003C\u002Fa\u003E, joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.\u003C\u002Fp\u003E\n","blurb_markdown":"**Nicolas Brown** - Agility expert Nicolas Brown, author of [Real World Agility](https:\u002F\u002Fleanpub.com\u002Frealworldagility), joins Len Epp on the Leanpub Podcast to discuss his career journey from Royal Mail to ASOS, the real-world application of Agile methods, and his passion for data-driven coaching. They dive into flow, value, culture, and the challenges of writing a book that bridges theory and practice with evidence and impact.","avatar_meta":null,"episode_number":311,"youtube_slug":"SV0T6ro-jUg","spotify_slug":""},"linkedinname":"nicolasjmbrown","mastodon_name":"","mastodon_url":"","name":"Nicolas Brown","profile_blurb":"\u003Cp\u003ENick is a seasoned agility and product consultant with a career spanning eCommerce, financial services, and professional services. He’s led on the adoption of agility at companies like PwC, Nationwide, Royal Mail and ASOS, focusing on ways of working, product thinking, and organisational flow. Currently, he works as a Principal Flow Consultant at Thrivve Partners, helping teams build great digital products, fast.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003ENick is incredibly passionate about agility, product, and data, and builds open-source tools that make life easier for teams using Jira and Azure DevOps. \u003C\u002Fp\u003E","twittername":"nbrown02","unpaid_royalties":183.28,"updated_at":"2025-03-21T13:59:53.000Z","username":"anonymous_dBA3BE56M57UqRgAxg5gFA","wishlist_count":0,"wishlist_id":1178780,"youtube_name":"","id":1021109},"1251350":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ffull\u002Fmarcin.jpg?1621330610","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Fmedium\u002Fmarcin.jpg?1621330610","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Fsmall\u002Fmarcin.jpg?1621330610","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1251350\u002Ftiny\u002Fmarcin.jpg?1621330610","created_at":"2018-02-04T00:47:18.000Z","facebook_url":null,"family_name_pp":"Moskała","githubname":"marcinmoskala","given_names_pp":"Marcin","instagramname":"","latest_podcast_episode":{"id":274,"user_id":1251350,"featured":false,"name":"Marcin Moskała","description_markdown":"[Marcin Moskała](https:\u002F\u002Fleanpub.com\u002Fu\u002Fmmoskala) is the author of the Kotlin for Developers Series. In this interview, Leanpub co-founder [Len Epp](https:\u002F\u002Ftwitter.com\u002Flenepp) talks with [Marcin](https:\u002F\u002Ftwitter.com\u002Fmarcinmoskala) about his background, Kotlin, his book series, and at the end, they talk a little bit about his experience as a self-published author.\r\n\r\nThis interview was recorded on January 24, 2023.\r\n\r\nThe full audio for the interview is here: [https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM252-Marcin-Moska%C5%82a-2023-01-24.mp3](https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM252-Marcin-Moska%C5%82a-2023-01-24.mp3). The Frontmatter podcast is available on our YouTube channel at [https:\u002F\u002Fwww.youtube.com\u002Fleanpub](https:\u002F\u002Fwww.youtube.com\u002Fleanpub), in Apple Podcasts here [https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137](https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137) or with this direct link [https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137](https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137), on Spotify here [https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz](https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz), and almost everywhere people listen to podcasts.\r\n\r\n*This interview has been edited for conciseness and clarity.*","blog_link":"","avatar_file_name":null,"avatar_content_type":null,"avatar_file_size":null,"avatar_updated_at":null,"created_at":"2023-03-08T05:18:04.000Z","updated_at":"2023-03-23T04:41:11.000Z","release_date":"2023-03-07T05:14:00.000Z","audio_file_url":"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM252-Marcin-Moska%C5%82a-2023-01-24.mp3","audio_file_size_in_bytes":57929617,"description_html":"\u003Cp\u003E\u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fmmoskala\"\u003EMarcin Moskała\u003C\u002Fa\u003E is the author of the Kotlin for Developers Series. In this interview, Leanpub co-founder \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Flenepp\"\u003ELen Epp\u003C\u002Fa\u003E talks with \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fmarcinmoskala\"\u003EMarcin\u003C\u002Fa\u003E about his background, Kotlin, his book series, and at the end, they talk a little bit about his experience as a self-published author.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThis interview was recorded on January 24, 2023.\u003C\u002Fp\u003E\n\n\u003Cp\u003EThe full audio for the interview is here: \u003Ca href=\"https:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM252-Marcin-Moska%C5%82a-2023-01-24.mp3\"\u003Ehttps:\u002F\u002Fs3.amazonaws.com\u002Fleanpub_podcasts\u002FFM252-Marcin-Moska%C5%82a-2023-01-24.mp3\u003C\u002Fa\u003E. The Frontmatter podcast is available on our YouTube channel at \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fleanpub\"\u003Ehttps:\u002F\u002Fwww.youtube.com\u002Fleanpub\u003C\u002Fa\u003E, in Apple Podcasts here \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E or with this direct link \u003Ca href=\"https:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\"\u003Ehttps:\u002F\u002Fpodcasts.apple.com\u002Fca\u002Fpodcast\u002Ffrontmatter\u002Fid517117137\u003C\u002Fa\u003E, on Spotify here \u003Ca href=\"https:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz\"\u003Ehttps:\u002F\u002Fopen.spotify.com\u002Fshow\u002F00DiOFL9aJPIx8c2ALxUdz\u003C\u002Fa\u003E, and almost everywhere people listen to podcasts.\u003C\u002Fp\u003E\n\n\u003Cp\u003E\u003Cem\u003EThis interview has been edited for conciseness and clarity.\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n","duration":"40:13","interview_date":"2023-01-24","interviewee_urls":[],"interviewer_name":"Len Epp","is_newest":false,"keywords":"programming, software, books, writing, technology","podcast_type":"frontmatter","related_links_markdown":"","related_links_html":"\n","slug":"marcin-moskala-07-03-23","subtitle":"A Leanpub Frontmatter Podcast Interview with Marcin Moskała, Author of the Kotlin for Developers Series","title":"Marcin Moskała, Author of the Kotlin for Developers Series","transcript_markdown":"We'll be publishing a specially-produced transcript of this episode sometime soon!","transcript_html":"\u003Cp\u003EWe’ll be publishing a specially-produced transcript of this episode sometime soon!\u003C\u002Fp\u003E\n","podcast_id":2,"short_description_markdown":"**Marcin Moskała** - [Marcin](https:\u002F\u002Fleanpub.com\u002Fu\u002Fmmoskala) is the author of the Leanpub book *[Effective Kotlin](https:\u002F\u002Fleanpub.com\u002Feffectivekotlin)*. In this interview, Marcin talks about his background, Kotlin, his book series, and at the end, they talk a little bit about his experience as a self-published author.","original_episode_id":null,"blurb_html":"\u003Cp\u003E\u003Cstrong\u003EMarcin Moskała\u003C\u002Fstrong\u003E - \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fmmoskala\"\u003EMarcin\u003C\u002Fa\u003E is the author of the Kotlin for Developers Series. In this interview, Marcin talks about his background, Kotlin, his book series, and at the end, they talk a little bit about his experience as a self-published author.\u003C\u002Fp\u003E\n","blurb_markdown":"**Marcin Moskała** - [Marcin](https:\u002F\u002Fleanpub.com\u002Fu\u002Fmmoskala) is the author of the Kotlin for Developers Series. In this interview, Marcin talks about his background, Kotlin, his book series, and at the end, they talk a little bit about his experience as a self-published author.","avatar_meta":null,"episode_number":254,"youtube_slug":"5VMIWQ7XLYU","spotify_slug":""},"linkedinname":"","mastodon_name":null,"mastodon_url":"","name":"Marcin Moskała","profile_blurb":"\u003Cp\u003EMarcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.\u003C\u002Fp\u003E","twittername":"marcinmoskala","unpaid_royalties":3434.28,"updated_at":"2025-03-01T14:36:56.000Z","username":"mmoskala","wishlist_count":10,"wishlist_id":352374,"youtube_name":null,"id":1251350},"1496902":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1496902\u002Ffull\u002FChristian_Mayer.jpg?1547670301","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1496902\u002Fmedium\u002FChristian_Mayer.jpg?1547670301","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1496902\u002Fsmall\u002FChristian_Mayer.jpg?1547670301","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1496902\u002Ftiny\u002FChristian_Mayer.jpg?1547670301","created_at":"2019-01-16T19:36:25.000Z","facebook_url":null,"family_name_pp":"Mayer","githubname":"","given_names_pp":"Christian","instagramname":"finxterdotcom","latest_podcast_episode":null,"linkedinname":null,"mastodon_name":null,"mastodon_url":"","name":"Christian Mayer","profile_blurb":"\u003Cp\u003EChris is the founder of the programming education company \u003Ca href=\"https:\u002F\u002Ffinxter.com\u002F\" target=\"_blank\"\u003EFINXTER\u003C\u002Fa\u003E, author of the \u003Ca href=\"http:\u002F\u002Fcoffeebreakpython.com\u002F\" target=\"_blank\"\u003ECoffee Break Python\u003C\u002Fa\u003E series of self-published books, the popular programming book\u003Ca href=\"https:\u002F\u002Famzn.to\u002F2WAYeJE\" target=\"_blank\"\u003E Python One-Liners\u003C\u002Fa\u003E (\u003Cstrong\u003E\u003Cem\u003ENoStarch 2020\u003C\u002Fem\u003E\u003C\u002Fstrong\u003E), a doctorate computer scientist, and owner of one of the top 10 \u003Ca href=\"https:\u002F\u002Fblog.finxter.com\u002F\" target=\"_blank\"\u003EPython blogs\u003C\u002Fa\u003E worldwide. \u003C\u002Fp\u003E\u003Cp\u003EHis research interests include graph theory and distributed systems. \u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EYou can \u003Ca href=\"https:\u002F\u002Fblog.finxter.com\u002Fsubscribe\u002F\" target=\"_blank\"\u003Ejoin the FINXTER email academy\u003C\u002Fa\u003E and consume a large body of free email courses about various topics in computer science and programming. \u003C\u002Fp\u003E","twittername":"FinxterDotCom","unpaid_royalties":108.51,"updated_at":"2024-10-07T23:11:01.000Z","username":"mayercn","wishlist_count":0,"wishlist_id":1712140,"youtube_name":null,"id":1496902},"1598845":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1598845\u002Ffull\u002FRIEGLUK.jpg?1569233910","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1598845\u002Fmedium\u002FRIEGLUK.jpg?1569233910","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1598845\u002Fsmall\u002FRIEGLUK.jpg?1569233910","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1598845\u002Ftiny\u002FRIEGLUK.jpg?1569233910","created_at":"2019-05-08T11:08:15.000Z","facebook_url":null,"family_name_pp":"Rieger","githubname":"","given_names_pp":"Lukas","instagramname":"finxterdotcom","latest_podcast_episode":null,"linkedinname":null,"mastodon_name":null,"mastodon_url":"","name":"Lukas Rieger","profile_blurb":"\u003Cp\u003EI love coding and espacially in Python! Python is easy to learn and at the same time it is very powerful. Through the books I would like to help you to discover this! Therefore we designed our puzzle based teaching approach which helps you to learn quickly what you really need and with fun.\u003C\u002Fp\u003E\u003Cp\u003EI have been working as a Software developer for several years. Currently I'm in the field of operations\u002FSRE of cloud applications.\u003C\u002Fp\u003E","twittername":"","unpaid_royalties":58.33,"updated_at":"2024-10-07T23:11:02.000Z","username":"lukasrieger","wishlist_count":0,"wishlist_id":1233176,"youtube_name":null,"id":1598845},"1984346":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1984346\u002Ffull\u002FScreen_Shot_2019-01-30_at_10.53.08_AM.png?1589395177","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1984346\u002Fmedium\u002FScreen_Shot_2019-01-30_at_10.53.08_AM.png?1589395177","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1984346\u002Fsmall\u002FScreen_Shot_2019-01-30_at_10.53.08_AM.png?1589395177","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F1984346\u002Ftiny\u002FScreen_Shot_2019-01-30_at_10.53.08_AM.png?1589395177","created_at":"2020-05-04T15:06:05.000Z","facebook_url":null,"family_name_pp":"Reaves","githubname":"","given_names_pp":"Jason","instagramname":"","latest_podcast_episode":null,"linkedinname":null,"mastodon_name":null,"mastodon_url":"","name":"Jason Reaves","profile_blurb":"\u003Cp\u003EJason Reaves is a Principal Threat Researcher who specializes in malware reverse-engineering. He has spent the majority of his career tracking threats in the Crimeware domain, including reverse-engineering data structures and algorithms found in malware in order to create automated frameworks for harvesting configuration and botnet data. Previously, he worked as a software developer and unix administrator in the financial industry and also spent six years in the U.S. Army. Jason holds multiple certifications related to reverse-engineering and application exploitation and has published numerous papers on topics such as writing malware scripts pretending to be a bot, unpackers, configuration data harvesters and covert channel utilities. He enjoys long walks in IDA and staring at RFCs for hours.\u003C\u002Fp\u003E","twittername":"sysopfb","unpaid_royalties":32,"updated_at":"2024-10-07T23:11:04.000Z","username":"sysopfb","wishlist_count":0,"wishlist_id":244113,"youtube_name":null,"id":1984346},"2205412":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2205412\u002Ffull\u002Fme_2.png?1702878147","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2205412\u002Fmedium\u002Fme_2.png?1702878147","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2205412\u002Fsmall\u002Fme_2.png?1702878147","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2205412\u002Ftiny\u002Fme_2.png?1702878147","created_at":"2020-10-29T07:30:11.000Z","facebook_url":"","family_name_pp":"Reijn","githubname":"gijsreyn","given_names_pp":"Gijs","instagramname":"","latest_podcast_episode":null,"linkedinname":"gijs-reijn-582b81198","mastodon_name":"","mastodon_url":"","name":"Gijs Reijn","profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EGijs Reijn\u003C\u002Fstrong\u003E is a Microsoft MVP with nearly a decade of IT experience. He predominantly works with Azure technologies. He’s currently working in the financial sector. He enjoys sharing his knowledge on his website \u003Ca href=\"https:\u002F\u002Fthelonelyengineer.com\u002F\" target=\"_blank\"\u003EThe Lonely Engineer\u003C\u002Fa\u003E, as well as on \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@gijsreijn\" target=\"_blank\"\u003EMedium\u003C\u002Fa\u003E and the \u003Ca href=\"https:\u002F\u002Frabobank.jobs\u002Fen\u002Ftechblog\u002F\" target=\"_blank\"\u003ERabo Tech Blog\u003C\u002Fa\u003E, where he is currently employed. You can find his books here on \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fu\u002Fgijsr\" target=\"_blank\"\u003ELeanPub\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\u003Cp\u003EFor those looking to reach him, feel free to connect with him on \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fgijs-reijn-582b81198\u002F\" target=\"_blank\"\u003ELinkedIn\u003C\u002Fa\u003E or stay updated by following him on \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fgijsreijn\" target=\"_blank\"\u003ETwitter\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","twittername":"GijsReijn","unpaid_royalties":317.97,"updated_at":"2025-03-14T04:19:48.000Z","username":"gijsr","wishlist_count":1,"wishlist_id":2145870,"youtube_name":"","id":2205412},"2221224":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2221224\u002Ffull\u002FFB_IMG_1656964396195.jpg?1657576751","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2221224\u002Fmedium\u002FFB_IMG_1656964396195.jpg?1657576751","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2221224\u002Fsmall\u002FFB_IMG_1656964396195.jpg?1657576751","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2221224\u002Ftiny\u002FFB_IMG_1656964396195.jpg?1657576751","created_at":"2020-11-18T19:28:05.000Z","facebook_url":null,"family_name_pp":"Sayon","githubname":"","given_names_pp":"Shubham","instagramname":"","latest_podcast_episode":null,"linkedinname":"","mastodon_name":null,"mastodon_url":"","name":"Shubham Sayon","profile_blurb":"","twittername":"","unpaid_royalties":9.37,"updated_at":"2024-10-07T23:11:07.000Z","username":"shubhamsayon","wishlist_count":0,"wishlist_id":2161682,"youtube_name":null,"id":2221224},"2711332":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2711332\u002Ffull\u002FCH7-25-2.JPG?1654664179","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2711332\u002Fmedium\u002FCH7-25-2.JPG?1654664179","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2711332\u002Fsmall\u002FCH7-25-2.JPG?1654664179","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2711332\u002Ftiny\u002FCH7-25-2.JPG?1654664179","created_at":"2022-06-08T04:41:17.000Z","facebook_url":"","family_name_pp":"Huang","githubname":"higracehuang","given_names_pp":"Grace","instagramname":"","latest_podcast_episode":null,"linkedinname":"lghuang","mastodon_name":"","mastodon_url":"","name":"Grace Huang","profile_blurb":"\u003Cp\u003EGrace Huang is an ex-founder with a successful exit. She was a software engineer at several big tech companies, including Amazon and Bloomberg.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EShe writes about startups, entrepreneurship, investing, software and hardware engineering, manufacturing, and lifelong learning. \u003C\u002Fp\u003E","twittername":"imgracehuang","unpaid_royalties":330.14,"updated_at":"2025-04-04T15:07:16.000Z","username":"gracehuang","wishlist_count":0,"wishlist_id":2651626,"youtube_name":"","id":2711332},"2907962":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2907962\u002Ffull\u002Fpksilen.jpg?1675257567","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2907962\u002Fmedium\u002Fpksilen.jpg?1675257567","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2907962\u002Fsmall\u002Fpksilen.jpg?1675257567","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F2907962\u002Ftiny\u002Fpksilen.jpg?1675257567","created_at":"2023-02-01T12:33:25.000Z","facebook_url":null,"family_name_pp":"Silen","githubname":"pksilen","given_names_pp":"Petri","instagramname":"","latest_podcast_episode":null,"linkedinname":"petrisilen","mastodon_name":null,"mastodon_url":"","name":"Petri Silen","profile_blurb":"\u003Cp\u003E\u003Cstrong\u003EPetri Silén\u003C\u002Fstrong\u003E is a seasoned software developer working at Nokia Networks in Finland with industry experience of almost 30 years. He has done both frontend and backend development with a solid competence in multiple programming languages, including C++, Java, Python and JavaScript\u002FTypeScript. He started his career at Nokia Telecommunications in 1995. During his first years, he developed a real-time mobile networks analytics product called \"Traffica\" in C++ for major telecom customers worldwide, including companies like T-Mobile, Orange, Vodafone, and Claro. The initial product was for monitoring a 2G circuit-switched core network and GPRS packet-switched core network. Later, functionality to Traffica was added to cover new network technologies, like 3G circuit-switched and packet core networks, 3G radio networks, and 4G\u002FLTE. He later developed new functionality for Traffica using Java and web technologies, including jQuery and React. During the last few years, he has developed cloud-native containerized microservices with Java and C++ for the next-generation Customer and Networks Insights CNI) product used by major communications service providers like Verizon, AT&amp;T, USCC, and KDDI. The main application areas he has contributed during the last years include KPI-based real-time alerting, anomaly detection for KPIs, and configurable real-time data exporting.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EDuring his free time, he has developed a data visualization application using React, Redux, TypeScript, and Jakarta EE. He has also developed a security-first cloud-native microservice framework for Node.js in TypeScript. He likes to take care of his Kaapo cat, take walks, play tennis and badminton, ski in the winter, and watch soccer and ice hockey on TV.\u003C\u002Fp\u003E","twittername":"silen_petri","unpaid_royalties":527.92,"updated_at":"2024-10-07T23:11:12.000Z","username":"petrisilen","wishlist_count":0,"wishlist_id":2848254,"youtube_name":null,"id":2907962},"3314330":{"type":"User","avatar_url_full":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F3314330\u002Ffull\u002Fmattias.jpeg?1722974515","avatar_url_medium":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F3314330\u002Fmedium\u002Fmattias.jpeg?1722974515","avatar_url_small":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F3314330\u002Fsmall\u002Fmattias.jpeg?1722974515","avatar_url_tiny":"https:\u002F\u002Fd39qdlcrvnra4b.cloudfront.net\u002Favatars\u002F3314330\u002Ftiny\u002Fmattias.jpeg?1722974515","created_at":"2024-07-26T14:33:55.000Z","facebook_url":"","family_name_pp":"Fjellström","githubname":"mattias-fjellstrom","given_names_pp":"Mattias","instagramname":"","latest_podcast_episode":null,"linkedinname":"mattiasfjellstrom","mastodon_name":"","mastodon_url":"","name":"Mattias Fjellström","profile_blurb":"\u003Ch2\u003E\u003Cstrong\u003EDriven, curious, ambitious.\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cp\u003E \u003C\u002Fp\u003E\u003Cp\u003EMattias is a hands-on engineer with a background in particle accelerator physics, computational methods in mathematics, and web design. He is currently a cloud architect and DevOps consultant focusing on helping organizations reach their full potential.\u003C\u002Fp\u003E\u003Cp\u003EMattias is a HashiCorp ambassador and HashiCorp User Group leader in Gothenburg, Sweden. He holds professional-level certifications in both Microsoft Azure and AWS, as well as other certifications including Terraform (associate and professional), Vault, Kubernetes, and GitHub.\u003C\u002Fp\u003E\u003Cp\u003EYou can find out more about Mattias at his blog \u003Ca href=\"https:\u002F\u002Fmattias.engineer\" target=\"_blank\"\u003Emattias.engineer\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","twittername":"","unpaid_royalties":1563.44,"updated_at":"2024-12-26T14:06:04.000Z","username":"mattias-fjellstrom","wishlist_count":0,"wishlist_id":3254592,"youtube_name":"","id":3314330}},"errors":null,"indexes":{},"loading":{},"sessionErrors":null,"errorMap":{},"gdpr_status":null},"UserDropdownData":{"all":{},"errors":{},"indexes":{},"loading":{}},"Wishlist":{"all":{},"errors":{},"indexes":{},"loading":{}},"WishlistItem":{"all":{},"errors":{},"indexes":{},"loading":{}},"WritingPurchase":{"all":{},"errors":null,"loading":{},"slugValidity":null,"userValidity":null,"creating":false},"AuthorRoyalty":{"royalties":null},"AuthorPlan":{"plan":null},"Audio":{"src":null,"isPaused":true,"isMuted":false,"isLoaded":false,"currentTime":0,"duration":0},"CoursePage":{"all":{},"loading":{},"errors":{}},"Flash":{"all":{}},"Geoip":{"country_code":"US"},"Mailchimp":{"errors":{},"loading":{},"subscriptionStatus":{}},"MetricsEntry":{"all":{"total_author_royalties":"14399908.6"},"errors":{},"indexes":{},"loading":{}},"NumReader":{"all":{},"errors":{},"loading":{}},"PublishWord":{"indexes":{},"all":{},"upload":null,"aiUsageOptions":null,"errors":{},"uploadErrors":null,"aiUsageOptionsErrors":null,"aiUsageOptionsLoading":false,"uploadLoading":false,"loading":{}},"Portion":{"all":{},"errors":{},"indexes":{},"loading":{}},"ReadUrl":{"all":{},"loading":{},"errors":{}},"Request":{"requests":{"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fshelf_spots\u002Ffull.json?":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fbundles.json?featured=true&hero=true&include=books%2Cbooks.accepted_authors%2Cbooks.accepted_authors.user":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fsimple_course_sets.json?bookstore=true&filter_erotica=true&include=&page=1&page_size=10&searchable=true&sellable=true&sort=bestsellers_last_week&type=track":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fadmin_flags\u002Fhomepage_essay.json?":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fsimple_courses.json?bookstore=true&filter_erotica=true&include=accepted_course_authors.user&page=1&page_size=10&searchable=true&sellable=true&sort=bestsellers_last_week&type=course":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fcourse_sets.json?featured=true&preset_include=course_set_featured":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fshelf_spots.json?landing=true&page=1&preset_include=shelf_landing":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fmetrics_entries\u002Fstatistic\u002Ftotal_author_royalties.json?":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fcategories.json?list=true&sort=top":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fbooks.json?featured=true&include=default_package%2Caccepted_authors%2Caccepted_authors.user&list=true":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fsimple_bundles.json?bookstore=true&filter_erotica=true&include=books&page=1&page_size=10&searchable=true&sellable=true&sort=bestsellers_last_week&type=bundle":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fsimple_books.json?bookstore=true&filter_erotica=true&include=accepted_authors&page=1&page_size=10&searchable=true&sellable=true&sort=bestsellers_last_week&type=book":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fpodcast_episodes.json?featured=true&include=user":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fadmin_flags\u002Fhomepage_news.json?":false,"https:\u002F\u002Fleanpub.com\u002Fapi\u002Fv1\u002Fcache\u002Fcourses.json?featured=true&preset_include=course_show":false},"wait":0,"statusCode":200},"router":{"location":{"pathname":"\u002F","search":"","hash":"","key":"t7xdx9"},"action":"POP"},"TranslateEpub":{"indexes":{},"all":{},"upload":null,"languageOptions":null,"pricing":null,"errors":{},"uploadErrors":null,"pricingErrors":null,"languageOptionsErrors":null,"languageOptionsLoading":false,"pricingLoading":false,"uploadLoading":false,"loading":{}},"TranslateWord":{"indexes":{},"all":{},"upload":null,"languageOptions":null,"pricing":null,"errors":{},"uploadErrors":null,"pricingErrors":null,"languageOptionsErrors":null,"languageOptionsLoading":false,"pricingLoading":false,"uploadLoading":false,"loading":{}},"Translation":{"loadedTranslations":{},"loadingTranslation":false,"currentLocale":"en","errors":{}},"UI":{"syntax":"color","minimap":false,"showHeader":true,"gutterActionsPosition":{},"settingsOpen":false,"currentBookSlug":null,"courseSidebarClosed":false,"visualEditorFocusMode":false,"currentEditorTab":"manuscript","fontSize":16,"packagableType":null,"gutterActionsMenuVisibility":false,"currentFilenames":{"manuscript":null,"resources":null,"images":null,"code":null},"gutterActionsVisibility":false,"bodyIsLocked":false,"showFooter":true,"headerHTML":"\u003Cspan\u003EEarn \u003Cb\u003E80% Royalties\u003C\u002Fb\u003E publishing \u003Cb\u003Eebooks\u003C\u002Fb\u003E and \u003Cb\u003Ecourses\u003C\u002Fb\u003E on Leanpub\u003C\u002Fspan\u003E","darkMode":false,"focusMode":false}}</script> <script src="https://leanpub.com/assets/polyfill-bundle-5f104fb50a95af5ea5b4.js"></script> <script src="https://leanpub.com/assets/app-bundle-069014128689a97456a1.js"></script> <!-- Twitter universal website tag code --> <script> !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js', a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); // Insert Twitter Pixel ID and Standard Event data below twq('init','nw0pa'); twq('track','PageView'); </script> <!-- End Twitter universal website tag code --> </html>

Pages: 1 2 3 4 5 6 7 8 9 10