<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Subhankar De</title>
    <description>The latest articles on DEV Community by Subhankar De (@subhankarde).</description>
    <link>https://dev.to/subhankarde</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%2F594687%2F73c2b7f7-41fc-4ab9-b7f0-9deca9f101a5.jpg</url>
      <title>DEV Community: Subhankar De</title>
      <link>https://dev.to/subhankarde</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/subhankarde"/>
    <language>en</language>
    <item>
      <title>Good to Great Designs - Q&amp;A on Software Design</title>
      <dc:creator>Subhankar De</dc:creator>
      <pubDate>Thu, 01 Apr 2021 01:21:43 +0000</pubDate>
      <link>https://dev.to/subhankarde/good-to-great-designs-q-a-on-software-design-4pip</link>
      <guid>https://dev.to/subhankarde/good-to-great-designs-q-a-on-software-design-4pip</guid>
      <description>&lt;h2&gt;
  
  
  Architecture?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Big Picture, What, Where of the software development process&lt;/li&gt;
&lt;li&gt;Architecture Patterns(Microkernel, Microservices, Layered, Event-based, Space-based)&lt;/li&gt;
&lt;li&gt;Trade-offs(Quality, Cost, Portability, Time to market, Longevity, Technical debt, etc.)&lt;/li&gt;
&lt;li&gt;Technology, Storage, Security, Disaster Recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Design?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How of the software development process &lt;/li&gt;
&lt;li&gt;Design Patterns&lt;/li&gt;
&lt;li&gt;Classes, interfaces, functions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is a good design?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Solves a problem&lt;/li&gt;
&lt;li&gt;Easy to understand &lt;/li&gt;
&lt;li&gt;Follows a common design pattern&lt;/li&gt;
&lt;li&gt;Doesn't reinvent the wheel&lt;/li&gt;
&lt;li&gt;Supported by everyone&lt;/li&gt;
&lt;li&gt;Cost of changing the design is affordable&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create high-quality designs?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Applying software design principles is the key to creating high-quality designs&lt;/li&gt;
&lt;li&gt;Flow Charts &amp;amp; User stories with good acceptance criteria&lt;/li&gt;
&lt;li&gt;Manage essential complexity&lt;/li&gt;
&lt;li&gt;Eliminate accidental complexity&lt;/li&gt;
&lt;li&gt;Document the rationales of the design decisions&lt;/li&gt;
&lt;li&gt;Lots of small conversations with a lot of different people to get alignment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to evaluate a design quality?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adherence to Coarse-grained principles like abstraction, encapsulation, modularization, hierarchy, cohesion and coupling&lt;/li&gt;
&lt;li&gt;Subjecting the design to change and then evaluate the cost&lt;/li&gt;
&lt;li&gt;Adherence to Project-specific constraints such as language constraints, platform constraints, framework and library constraints, domain constraints, architectural constraints, hardware constraints, and process constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who is a good designer?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Good designer is a great communicator&lt;/li&gt;
&lt;li&gt;Approach

&lt;ul&gt;
&lt;li&gt;What problem does this solve?&lt;/li&gt;
&lt;li&gt;Select a style that matches the needs of the problem&lt;/li&gt;
&lt;li&gt;How does this affect the user?&lt;/li&gt;
&lt;li&gt;Why this is better than the alternative?&lt;/li&gt;
&lt;li&gt;Designer shouldn't reinvent the wheel&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Understanding

&lt;ul&gt;
&lt;li&gt;See their perspective&lt;/li&gt;
&lt;li&gt;Remove distractions&lt;/li&gt;
&lt;li&gt;Anticipate reactions&lt;/li&gt;
&lt;li&gt;Clarify your assumption&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Listening

&lt;ul&gt;
&lt;li&gt;Let go off the ego&lt;/li&gt;
&lt;li&gt;Let them talk&lt;/li&gt;
&lt;li&gt;Hear what they're not saying&lt;/li&gt;
&lt;li&gt;Uncover the real problem&lt;/li&gt;
&lt;li&gt;Convert "Likes" into "Works"&lt;/li&gt;
&lt;li&gt;Ask for examples&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Responding

&lt;ul&gt;
&lt;li&gt;Give up control&lt;/li&gt;
&lt;li&gt;Lead with a Yes!&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are the tactics designer should use?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Appeal to a nobler motive during negotiations &lt;/li&gt;
&lt;li&gt;Show a comparison&lt;/li&gt;
&lt;li&gt;Propose an alternative &lt;/li&gt;
&lt;li&gt;Give them a choice&lt;/li&gt;
&lt;li&gt;Speak the language of your audience&lt;/li&gt;
&lt;li&gt;Focus on acceptance criteria avoid gold plating&lt;/li&gt;
&lt;li&gt;Postpone the decision, we are smarter tomorrow than today&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>design</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Manage Your Brand Reputation - AWS Comprehend</title>
      <dc:creator>Subhankar De</dc:creator>
      <pubDate>Tue, 23 Mar 2021 02:28:46 +0000</pubDate>
      <link>https://dev.to/subhankarde/customer-feedback-sentiment-analysis-23d3</link>
      <guid>https://dev.to/subhankarde/customer-feedback-sentiment-analysis-23d3</guid>
      <description>&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;In order to genuinely understand customers and increase retention, businesses need to focus a big part of their resources and manpower on customer feedback. The way someone approaches feedback can make or break their business.&lt;/p&gt;

&lt;p&gt;The best way we can handle this is through digitization rather waiting for someone to reach the customer and get the feedback. After a customer leaves a feedback ‒ whether it’s to complain or appreciation on Twitter, email or voice there’s always an underlying emotion. With sentiment analysis, you can capture this subjective information to understand your customers better. Address the negative sentiment on priority and leverage the positive feedback for betterment of the business.&lt;/p&gt;

&lt;p&gt;The below solution is a scaled down version of a sentiment analysis where a customer service associate exports customer feedback from Twitter, email or text from a voice call to a CSV file. As soon as this file is uploaded to a S3 bucket, sentiment analysis is done on each input and persisted into a DynamoDB table for further action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;AWS Step Function&lt;/li&gt;
&lt;li&gt;AWS Comprehend&lt;/li&gt;
&lt;li&gt;DynamoDB&lt;/li&gt;
&lt;li&gt;Serverless Framework&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The user uploads a CSV file with the feedback to S3&lt;/li&gt;
&lt;li&gt;Currently supports English(EN) &amp;amp; Spanish(ES) in which the customer had given their feedback&lt;/li&gt;
&lt;li&gt;S3 triggers a Lambda to read the file&lt;/li&gt;
&lt;li&gt;Step Function does batch processing of the feedback by language using AWS Comprehend&lt;/li&gt;
&lt;li&gt;This application inspects a batch of documents and returns an inference of the prevailing sentiment, POSITIVE, NEUTRAL, MIXED, or NEGATIVE, in each one&lt;/li&gt;
&lt;li&gt;The processed files are copied to another S3 bucket&lt;/li&gt;
&lt;li&gt;The number of documents in the request has a limit of 25&lt;/li&gt;
&lt;li&gt;Each document must contain fewer that 5,000 bytes of UTF-8 encoded characters&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sample CSV file
&lt;/h3&gt;

&lt;p&gt;datetime,account_number,language_code,text&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2/12/01,333,en,you are awesome&lt;/li&gt;
&lt;li&gt;2/13/01,375,es,Eres asombroso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6ksWfh0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/14083152/109671867-74a59a00-7b42-11eb-84e0-61890c6c0d8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6ksWfh0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/14083152/109671867-74a59a00-7b42-11eb-84e0-61890c6c0d8a.png" alt="image" width="880" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/subhankarde/customer-feedback-sentiment"&gt;Link to Github!&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Future enhancement
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Move the DynamoDB Put request from computeSentiment Lambda function to Step Functions&lt;/li&gt;
&lt;li&gt;Generate customer sentiment from the call recording with the IVR&lt;/li&gt;
&lt;li&gt;Use AWS Transcribe to convert it into text and then use the above flow&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>ai</category>
      <category>serverless</category>
      <category>node</category>
    </item>
    <item>
      <title>Serverless Framework Template</title>
      <dc:creator>Subhankar De</dc:creator>
      <pubDate>Mon, 22 Mar 2021 17:27:22 +0000</pubDate>
      <link>https://dev.to/subhankarde/serverless-framework-template-1o2e</link>
      <guid>https://dev.to/subhankarde/serverless-framework-template-1o2e</guid>
      <description>&lt;h1&gt;
  
  
  Serverless Framework Template - ES6/ES7 Compatible
&lt;/h1&gt;

&lt;h2&gt;
  
  
  This Github project template will standardize
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Consistent src folder structure across multiple projects.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/serverless-bundle"&gt;serverless-bundle plugin&lt;/a&gt;: Optimally packages your ES6 or TypeScript Node.js Lambda functions with sensible defaults so you don't have to maintain your own Webpack configs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/serverless-pseudo-parameters"&gt;serverless-pseudo-parameters plugin&lt;/a&gt;: Allows you to take advantage of CloudFormation Pseudo Parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sls create --name &amp;lt;YOUR_PROJECT_NAME&amp;gt; --template-url https://github.com/subhankarde/serverless-nodejs-es7-template.git
cd YOUR_PROJECT_NAME
npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The latest version of Webpack is not compatible. Please use the below version. Please be aware that AWS-SDK is in the DEV dependencies. Please move it to dependencies for PROD. AWS Lambda will use the latest SDK for the current template. &lt;/p&gt;

&lt;h2&gt;
  
  
  Latest npm packages
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g npm-check-updates
ncu -u
npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Webpack version
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm uninstall webpack
npm install --save-dev webpack@4.46.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  VS Code command for Mac
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Top serverless plugins
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;serverless-offline&lt;/li&gt;
&lt;li&gt;serverless-step-functions&lt;/li&gt;
&lt;li&gt;serverless-plugin-canary-deployments&lt;/li&gt;
&lt;li&gt;serverless-dynamodb-local&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>node</category>
      <category>github</category>
    </item>
  </channel>
</rss>
