<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ash Isaac</title>
    <description>The latest articles on Forem by Ash Isaac (@ashokisaac).</description>
    <link>https://forem.com/ashokisaac</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F33741%2Fbb11063f-982e-461e-8cbf-c845c69033d5.jpg</url>
      <title>Forem: Ash Isaac</title>
      <link>https://forem.com/ashokisaac</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ashokisaac"/>
    <language>en</language>
    <item>
      <title>DevOps is for Humans</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Tue, 09 Mar 2021 01:51:29 +0000</pubDate>
      <link>https://forem.com/ashokisaac/devops-is-for-humans-59pf</link>
      <guid>https://forem.com/ashokisaac/devops-is-for-humans-59pf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hIVRJJbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25rck4yp79twuiziabo3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hIVRJJbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25rck4yp79twuiziabo3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's an question I'd like to present for your consideration:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Should DevOps adoption influence your decision to work at an IT organization?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DevOps has overtaken the software world. Recent surveys show some 80% or more of IT executives already have or expect to adopt DevOps within the next 5 years. The primary driver behind adoption is the awareness of it's positive impact on businesses. Advantages such as reduced time to market and increased quality are often cited.&lt;/p&gt;

&lt;p&gt;But I'd like to come at this topic from a slightly different perspective by making this statement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DevOps is for humans&lt;/strong&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What I mean by this that beyond the &lt;em&gt;business value&lt;/em&gt; that DevOps' provides, DevOps provides &lt;strong&gt;&lt;em&gt;direct positive effects to our experience as humans&lt;/em&gt;&lt;/strong&gt; working with technology. My opinion is that, if evaluating the health of a current or potential workplace, you would be wise in considering DevOps adoption as a positive trait to look for in an IT organization.&lt;/p&gt;

&lt;p&gt;Allow me to present 3 specific areas in which DevOps has direct, positive effects on our experiences as human operators of software systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduced stress and anxiety&lt;/li&gt;
&lt;li&gt;Offloading mind-numbing, repetitive work&lt;/li&gt;
&lt;li&gt;Increasing collaboration and trust&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reduced Stress &amp;amp; Anxiety
&lt;/h3&gt;

&lt;p&gt;One of the universal, shared experiences of folks in IT Development &amp;amp; Operations is the pain of pushing out software to production. The stress around software deployments, the pressure to make the right decisions on the fly, to fix issues in the midst of outages that are costing your company thousands of dollars per hour in lost revenue, is &lt;strong&gt;&lt;em&gt;massive&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This stress is often exacerbated by lack of sleep over deploys that can last days. Once the deploy is complete and the seemingly inevitable issues are exposed, the feelings of frustration and dread as blame is assigned and decisions are cross-examined is truly horrible. Such repeated experiences are a major contributor to engineer burnout. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps addresses this IT pain point.&lt;/strong&gt; DevOps makes software delivery a routine, practiced, controlled event, with robust tests and automation to minimize human involvement -- in contrast to the traditional "big bang" deploys where the expectation of "all hands on deck!" is the norm. &lt;/p&gt;

&lt;p&gt;Of course, DevOps does not eliminate this stress instantly or completely -- but it does provide a path forward that if embraced, can provide substantial relief in this area. The phrase "if it hurts, do it more often" is a DevOps mantra capturing this idea.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps reduces stress by making software delivery a routine, practiced, controlled event.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask any physician if reducing stress is worth it, and you're likely to get a earful. No two ways about it, &lt;em&gt;DevOps reduces work stress!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Offloading Mind-numbing, Repetitive Work
&lt;/h3&gt;

&lt;p&gt;Another central idea behind DevOps is the drive eliminate repetitive, error-prone manual work within the software value stream. Unnecessary human intervention in a software delivery stream is a DevOps anti-pattern. "Automate all the things" is how this concept is captured in the DevOps world. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So why does DevOps favor automation?&lt;/strong&gt; DevOps drives towards codified automation because human intervention is often slow, error-prone, harder to audit, tends to conceal domain knowledge and offers less guarantee of parity across various environments. &lt;/p&gt;

&lt;p&gt;Good software pipelines on the other hand, are fast, self-auditing, expose domain knowledge and provide parity across every environment, all of which automation can provide. &lt;/p&gt;

&lt;p&gt;But a valuable side benefit of this practice of automation is that this mind-numbing, repetitive work is offloaded from humans to machines to execute. Isn't following 200+ steps in an operational checklist to configure a software system a terrible waste of human ingenuity, when a machine can execute 10x faster, and flawlessly every time?&lt;/p&gt;

&lt;p&gt;Manual QA testing is another area where this is particularly applicable. Should humans be clicking through thousands of test cases for hours on end, week after week? DevOps answers with a hard "No!"&lt;/p&gt;

&lt;p&gt;Laborious, mind-numbing work is ideal only for machines. QA personnel should be applying their creativity towards building and managing complex &amp;amp; powerful testing frameworks or doing exploratory testing that computers cannot emulate. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The practice of automation offloads mind-numbing, repetitive work from humans to machines to execute, freeing them to apply their ingenuity elsewhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DevOps maximizes human ingenuity and offloads mindless labor to the machines that exist to serve us.&lt;/p&gt;

&lt;h3&gt;
  
  
  Increasing Collaboration and Trust
&lt;/h3&gt;

&lt;p&gt;DevOps only succeeds in a culture of collaboration across the entire software value stream. It is impossible to embrace DevOps without fundamentally changing the traditional team dynamics of operating within silos of "Development", "Operations", "SQA" etc.  &lt;/p&gt;

&lt;p&gt;DevOps views organizational silos as a deterrent to the collaborative mindset essential to rapid, robust software delivery pipelines. &lt;/p&gt;

&lt;p&gt;But what exactly are silos? If you've been a part of Dev team where you are given a narrow set of capabilities and workitems, and once you're done with coding and unit testing you are encouraged to "throw it over the wall" to the Ops Team or the QA team and forget about it, you've been in a siloed organization. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;This is not the DevOps way&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Rather, DevOps promotes adopting "system thinking" where the whole team, no matter their function, cares about the entire software delivery pipeline. It pushes to eliminate slow, manual hand-offs in favor of continuous integration and deployment. Information and power is never hoarded, but democratized and teams are empowered to do more.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps promotes the adoption of "system thinking" where every team member, no matter their function, cares about the entire software delivery pipeline. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While DevOps does not mandate a particular team configuration (such as the &lt;a href="https://itrevolution.com/product-based-software-delivery/"&gt;cross-functional product teams model&lt;/a&gt;), it is practically impossible to be successful without members across the various IT functions banding together to ensure that software moves fast from  development through testing and into production. &lt;/p&gt;

&lt;p&gt;But this has interesting side-effects: it effectively demands increased information sharing, understanding, empathy and trust towards all members of your team. &lt;/p&gt;

&lt;p&gt;So the question becomes "Where would you prefer to work?" -- in a traditional siloed IT organization or in a highly cooperative, collaborative, trust-oriented &amp;amp; empowering environment where information is freely shared across IT functions?&lt;/p&gt;

&lt;h3&gt;
  
  
  DevOps is for Humans
&lt;/h3&gt;

&lt;p&gt;No one wants to work with unhealthy levels of stress or be assigned mind-numbing, frustrating work, or have to navigate a dysfunctional, low-trust work environment. Is anything worth trading on your physical and mental health?&lt;/p&gt;

&lt;p&gt;Interestingly, here is where the magic of DevOps comes into play: &lt;br&gt;
DevOps marries both &lt;em&gt;positive business outcomes&lt;/em&gt; (such as profitability &amp;amp; market share) which are hugely important with &lt;em&gt;positive human outcomes&lt;/em&gt; like lower stress, creative work and empowered collaboration.&lt;/p&gt;

&lt;p&gt;I don't know about you, but I am convinced enough that I always look for DevOps adoption in potential workplaces -- because DevOps is FOR humans, not just for business success.&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Going Serverless with AWS Lambda? Here's what you should know</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Sun, 23 Jun 2019 16:11:14 +0000</pubDate>
      <link>https://forem.com/ashokisaac/going-serverless-with-aws-lambda-here-s-what-you-should-know-7db</link>
      <guid>https://forem.com/ashokisaac/going-serverless-with-aws-lambda-here-s-what-you-should-know-7db</guid>
      <description>&lt;p&gt;Serverless has gone mainstream now: it's the natural next-step in the evolution of cloud-computing. &lt;br&gt;
The value proposition is that you can:&lt;/p&gt;

&lt;p&gt;1) Focus exclusively on your application code &lt;br&gt;
2) Pay only for actual compute time and resources consumed. &lt;/p&gt;

&lt;p&gt;All infrastructure is completely abstracted away.  Well :) in theory, perhaps... in practice things are a bit different.  &lt;/p&gt;

&lt;p&gt;Here is a very high-level overview of AWS Lambda, Amazon Web Services' implementation of serverless computing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime Context:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda's current implementation runs your code within a Docker container under the hood. Your code has access to the Docker scratch volume for a filesystem.&lt;/li&gt;
&lt;li&gt;Lambda supports &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html"&gt;specific versions of runtimes&lt;/a&gt;. Custom runtimes can be built or shimmed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Execution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda functions can have a "cold start" time when executed after an interval since the container needs to be booted up. It's possible to keep the function "warm" via a ping or health check. &lt;/li&gt;
&lt;li&gt;You can design your function to reuse expensive resources (db connections etc) between immediate invocations.&lt;/li&gt;
&lt;li&gt;Lambdas have built-in retries on failures. Retry is triggered based on exit code or callback error.&lt;/li&gt;
&lt;li&gt;Lambdas can have a DLQ (Dead-letter Queues) to collect failed events for investigation or additional processing.&lt;/li&gt;
&lt;li&gt;Each Lambdas can run for a max of 15mins, after which they will be killed. The available time remaining to execute can be inspected within Lambda.&lt;/li&gt;
&lt;li&gt;The amount of compute and memory allocated to the Lambda determines how fast it will run. Pricing is based on 100ms increments and reserved CPU/Memory (vs. actually used). The first million Lambda invocations per account are free every month. &lt;/li&gt;
&lt;li&gt;AWS Lambda has concurrency limits - max 1000 concurrent lambdas executing at one time. You can reserve concurrency for critical Lambda functions if necessary.&lt;/li&gt;
&lt;li&gt;AWS Step Functions can be used to compose complex workflows using Lambda functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Triggers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambdas are typically invoked in response to  (the ever expanding) &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html#intro-core-components-event-sources"&gt;list of event sources&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Lambdas can be "manually" invoked as well from other code, cli tools or via the AWS Console.&lt;/li&gt;
&lt;li&gt;Invocation can be synchronous (Request/Response) or Asynchronous (Fire and Forget)&lt;/li&gt;
&lt;li&gt;Lambdas permissions are handled via IAM Roles. Event sources may need to be given IAM permissions to invoke Lambda functions.&lt;/li&gt;
&lt;li&gt;Lambda &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https.html"&gt;integrates well&lt;/a&gt; with the AWS API Gateway service.  External APIs can trigger Lambda functions and Lambdas can perform Authentication/Authorization or serve as a proxy for APIs as well.&lt;/li&gt;
&lt;li&gt;Lambdas can be triggered via internal Application Load Balancers, via target groups and on schedule via CloudWatch Scheduled events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VPCs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambdas can execute either outside a VPC (i.e only uses other AWS Services i.e S3, DynamoDB) or within a VPC (can access VPC-specific resources - RDS, EC2 instances etc).&lt;/li&gt;
&lt;li&gt;When executing within a VPC, every function will provision an ENI (elastic network interface) within the VPC in order to access resources, say in a private subnet. One ENI (&amp;amp; IP address) per subnet.&lt;/li&gt;
&lt;li&gt;To make AWS service calls, AWS Lambdas running inside a VPC will need internet access, even inside a private subnet i.e via NAT-ing (NAT Gateway or Instance). You can get around this for some services by using VPC endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Other:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda offers &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html"&gt;encryption&lt;/a&gt; via KMS (Key Management Service) for environment variables during execution.&lt;/li&gt;
&lt;li&gt;AWS X-Ray (tracing) support is available for Lambda functions. Helpful to see where latency is being introduced.&lt;/li&gt;
&lt;li&gt;Lambda logs are automatically sent to CloudWatch LogStreams. The request ID and time billed and memory used are logged per invocation.&lt;/li&gt;
&lt;li&gt;There are many tools to facilitate deployment to AWS Lambda. &lt;a href="http://www.serverless.com"&gt;Serverless.com&lt;/a&gt; is big. AWS has it's own tool called &lt;a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html"&gt;SAM&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a huge fan of serverless computing and find AWS Lambda to be an extremely powerful tool, as long as you understand and use it within it's limitations. &lt;/p&gt;

&lt;p&gt;Questions? Comments? Concerns? Feel free to ping me.&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>awslambda</category>
    </item>
    <item>
      <title>DevOps in 3 Sentences</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Fri, 30 Nov 2018 02:26:02 +0000</pubDate>
      <link>https://forem.com/ashokisaac/devops-in-3-sentences-17c4</link>
      <guid>https://forem.com/ashokisaac/devops-in-3-sentences-17c4</guid>
      <description>&lt;p&gt;DevOps is a hot topic right now, and amidst the marketing hype and buzzword-frenzy it can be hard to get to the essence of the concepts it introduces. &lt;/p&gt;

&lt;p&gt;What really is at the heart of DevOps? Perhaps my 3 sentence summary of the "DevOps mindset" can help...&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F11%2FDevOps.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F11%2FDevOps.jpg" width="800" height="400"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The DevOps Mindset&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make your software-building process into an automated pipeline and optimize it for speed of delivery.&lt;/p&gt;

&lt;p&gt;The software pipeline should ensure security, quality and stability by automating the building and testing of infrastructure and applications and progressively prove their fitness by providing feedback (via tests), and when ready, deploy it to end-users.&lt;/p&gt;

&lt;p&gt;Work to continuously improve the flow (speed) and feedback of the software pipeline&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;​&lt;br&gt;
Okay, so I cheated on that 2nd sentence... it's more of a paragraph :)&lt;/p&gt;

&lt;p&gt;The key elements of the pipeline are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It automates the building of both infrastructure and applications.&lt;/li&gt;
&lt;li&gt;It applies a series of automated tests to both infrastructure and applications (unit, integration, performance etc) to prove they meet their functional and non-functional requirements.&lt;/li&gt;
&lt;li&gt;When proven to be fit to release, it automates the deploy to end-users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Business Value of DevOps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DevOps primarily applies to businesses that build or assemble their own software, versus just using pre-built software.&lt;/li&gt;
&lt;li&gt;DevOps offers the greatest value to businesses where speed of delivery provides a significant competitive advantage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Additional Insights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To increase speed without compromising quality,  limit the size of the changes pushed through the pipeline at any one time.&lt;/li&gt;
&lt;li&gt;Errors should cause the pipeline to fail dramatically, forcefully calling attention to the change that caused the breakage.&lt;/li&gt;
&lt;li&gt;To achieve speed, eliminate slow, repetitive and error-prone human effort. Limit human intervention to decision-making, analysis and other creative effort (ex. exploratory testing).&lt;/li&gt;
&lt;li&gt;Departmental silos (Product/Development/QA/Operations) are antithetical to software pipelines. Taking a software build through the pipeline successfully requires cross-functional expertise and collaboration. Thus DevOps requires changes in org. culture and team structure.&lt;/li&gt;
&lt;li&gt;Build infrastructure and applications via a version-controlled codebase for traceability and repeatability.&lt;/li&gt;
&lt;li&gt;Build security into the product by integrating it into the pipeline.&lt;/li&gt;
&lt;li&gt;Software architecture matters: DevOps is most effective when you can build, test and deploy discrete components of your product.&lt;/li&gt;
&lt;li&gt;To improve the pipeline, make it's health and metrics visible to stakeholders.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DevOps &amp;amp; Happier Teams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Obviously this is a very high-level overview of DevOps concepts and principles -- applying them and building a solid software pipeline is a challenging but worthwhile goal.&lt;/p&gt;

&lt;p&gt;Did you know that peer-reviewed research shows that DevOps reduces the pain/stress involved in releasing software, thus reducing engineer burnout? Adopting DevOps can improve the quality of life for your key engineering teams.&lt;/p&gt;

&lt;p&gt;Did I miss or misstate something? Feel free to let me know your thoughts &amp;amp; comments.&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>An engineering perspective on Tech debt</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Sun, 29 Jul 2018 13:07:48 +0000</pubDate>
      <link>https://forem.com/ashokisaac/an-engineering-perspective-on-tech-debt-1i7a</link>
      <guid>https://forem.com/ashokisaac/an-engineering-perspective-on-tech-debt-1i7a</guid>
      <description>&lt;p&gt;One of the inescapable realities of enterprise software is the necessity of facing down "tech debt". But what exactly is it? Is it always something to avoid? The central issue here, of course, it how you define this term.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2015%2F10%2Fman-pushing-rock-up-hill-ok-to-use.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2015%2F10%2Fman-pushing-rock-up-hill-ok-to-use.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My definition of tech debt is this: it's the &lt;strong&gt;ongoing technical impact of business decisions made in order to secure a market advantage&lt;/strong&gt;. Tech debt functions just like the availability of credit to a growing business, providing it with a much-needed boost during it's rapid-growth stage. Sometimes you've got to take on a calculated "shortcut" to reduce time-to-market and gain a strong market share. It's a business decision, a calculated gamble, so to speak.&lt;/p&gt;

&lt;p&gt;So true tech debt, the "good" kind, is &lt;strong&gt;a compromise knowingly made on the engineering side of product-building in order to gain business advantage&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;What you'll find is that the term "tech debt" is also used when addressing &lt;strong&gt;long-standing issues arising from bad programming practices or brittle &amp;amp; shallow design&lt;/strong&gt;. But those are just a fallout of poor hiring practices, inexperience and/or unprofessional engineering leadership. I believe this to be an incorrect usage of the term that just muddies the waters.&lt;/p&gt;

&lt;p&gt;Here's the kicker: &lt;strong&gt;Can the engineering burden you are facing down be explicitly tied to decisions made in order to gain a business advantage?&lt;/strong&gt; If so, then you are now "paying back" tech debt by setting things right. If not, it's not tech debt at all -- it's just cleaning up a mess you (or someone else) made.&lt;/p&gt;

&lt;p&gt;And here's the final word from &lt;a href="http://c2.com/cgi/wiki?WardExplainsDebtMetaphor" rel="noopener noreferrer"&gt;Ward Cunningham's explanation&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"... the ability to pay back debt, and make the debt metaphor work for your advantage depends upon your writing code that is clean enough to be able to refactor as you come to understand your problem."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, the next time you use the term "tech debt", think it through: Is this the "good" kind of debt? Or is it something else entirely?&lt;/p&gt;

</description>
      <category>techdebt</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Software Architecture "Virtues"</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Mon, 23 Jul 2018 00:14:22 +0000</pubDate>
      <link>https://forem.com/ashokisaac/software-architecture-virtues-22hj</link>
      <guid>https://forem.com/ashokisaac/software-architecture-virtues-22hj</guid>
      <description>&lt;p&gt;Software architecture is all about appropriate compromises. For small projects, having a highly involved software architecture is probably an overkill. For large enterprise applications, it becomes a necessity.&lt;/p&gt;

&lt;p&gt;Finding a suitable software architecture for a project requires both technical and domain knowledge: you need to have a solid grasp on the problem your client needs you to solve AND understand the technical trade-offs involved.&lt;/p&gt;

&lt;p&gt;Here is a shortlist of architectural virtues to think through when evaluating various architectural patterns and frameworks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. System Comprehensibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does this architecture enable developers and business owners explain, understand and collaborate well? Does it hide away less-important implementation details and help accurately frame the problem domain?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Modularity (Separation of Concerns)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does this architecture allow for the problem domain to be broken out into smaller, more easily managed parts? Does it promote the healthy isolation of components? Does this allow component reuse and recombination? Does it reduce unnecessary coupling and make dependencies explicit?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Testability (Mockable Dependencies)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the software architecture facilitate testing at the unit, integration and system level? Does it allow mocking and stubbing of services and infrastructure? Does it allow testing failure modes?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Hexagonality (Infrastructure Agnosticism / Domain Isolation)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this architecture, is possible to isolate the domain (or business) logic from implementation details? Can you segregate and swap out the transport or persistence layer without needing to make major internal changes to the system?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Aspect-orientation (Cross-cutting concerns)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the architecture allow for uniform, centralized handling of cross-cutting concerns? Can logging, caching, authorization, serialization etc be handled independently from the core logic?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Plugin-orientation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the architecture allow decoupled and optional processing? Does it allow for integration with external systems as and when needed? Does it offer hooks into it's internal operations without compromising security?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the architecture framework allow for room for growth at least for the foreseeable future? Does it facilitate the measurement and monitoring of system performance?&lt;/p&gt;

&lt;p&gt;There are, of course, many more issues to think about... but this is a pretty good set of parameters to think through while making architectural choices.&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
    <item>
      <title>The value of technical leadership</title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Sat, 14 Jul 2018 18:21:55 +0000</pubDate>
      <link>https://forem.com/ashokisaac/the-value-of-technical-leadership-18j4</link>
      <guid>https://forem.com/ashokisaac/the-value-of-technical-leadership-18j4</guid>
      <description>&lt;p&gt;I've been in technical leadership roles for over a decade and I have to say, in large measure it is quite unglamorous. What I mean, of course, is that you don't get to re-design or architect large-scale systems every week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical leadership typically involves a daily influence over small decisions&lt;/strong&gt; -- those tiny course corrections that keep things moving in the right direction. &lt;/p&gt;

&lt;p&gt;Perhaps you suggest a more flexible  architectural model for a subsystem or you work to prevent data-coupling between services. Maybe you write a bit of glue code to stitch together parts of your software pipeline or you weigh in on how using a specific Java library can make code cleaner, easier to understand and maintain. &lt;/p&gt;

&lt;p&gt;Of course, your hope is that these small, consistent adjustments, when aggregated over months and years, will promote software excellence on a broad scale. Occasionally though, you do run into situations that are a bit more daunting. &lt;/p&gt;

&lt;p&gt;Here's one scenario to think about:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F07%2FViciousCycle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F07%2FViciousCycle.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A team has gotten stuck -- they are consistently producing poor results.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;When you take a more in-depth look, it's obvious these are due to the adoption of bad software practices. The problem is that these poor results have, over time, caused a lot of pain to all stakeholders involved (Dev, Ops, QA, Product etc and most importantly, your customers). This causes everyone to fear and therefore resist any sort of change. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what does technical leadership offer to this situation?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I believe that &lt;strong&gt;courageous, persuasive technical leadership&lt;/strong&gt; is the only way to get a team unstuck. &lt;/p&gt;

&lt;p&gt;Courage is needed because where fear and suspicion dominate, speaking out could be dangerous to your career.  And you will need all your persuasive skills  to navigate these types of situations and to start, in a reasoned and methodical fashion, to guide the adoption of good software engineering practices.&lt;/p&gt;

&lt;p&gt;The good news is that &lt;strong&gt;the adoption of good software practices has it's own positive feedback loop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F07%2FVirtuousCycle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Faisaac.io%2Fcontent%2Fimages%2F2018%2F07%2FVirtuousCycle.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adopting best practices should result in improved results, and you can start to track and measure these small wins. This in turn will produce gains for stakeholders (or at the very least, reduce pain points) which produces an openness to hearing and adopting more of your suggestions. And so a positive feedback loop starts to kick in.&lt;/p&gt;

&lt;p&gt;So, when you face those daunting and seemingly intractable situations -- stay steady, speak up and get that positive momentum going!&lt;/p&gt;

</description>
      <category>leadership</category>
    </item>
    <item>
      <title>Docker Swarm: An overview </title>
      <dc:creator>Ash Isaac</dc:creator>
      <pubDate>Wed, 06 Dec 2017 14:06:07 +0000</pubDate>
      <link>https://forem.com/ashokisaac/docker-swarm-an-overview--71i</link>
      <guid>https://forem.com/ashokisaac/docker-swarm-an-overview--71i</guid>
      <description>

</description>
      <category>docker</category>
      <category>services</category>
      <category>containers</category>
      <category>orchestration</category>
    </item>
  </channel>
</rss>
