<?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: Jason V. Castellano</title>
    <description>The latest articles on DEV Community by Jason V. Castellano (@thegreytangent).</description>
    <link>https://dev.to/thegreytangent</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%2F83109%2Fe3c37d28-56cb-4138-b8d4-c516213171e5.jpg</url>
      <title>DEV Community: Jason V. Castellano</title>
      <link>https://dev.to/thegreytangent</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thegreytangent"/>
    <language>en</language>
    <item>
      <title>How to Pass an Argument in Nodejs Command Line Application</title>
      <dc:creator>Jason V. Castellano</dc:creator>
      <pubDate>Mon, 01 Aug 2022 14:35:00 +0000</pubDate>
      <link>https://dev.to/thegreytangent/pass-an-argument-in-nodejs-command-line-application-5f8m</link>
      <guid>https://dev.to/thegreytangent/pass-an-argument-in-nodejs-command-line-application-5f8m</guid>
      <description>&lt;p&gt;For those software engineers who have a lot of responsibilities the terminal is their home. It's very satisfying to create your own command line by using your favorite programming language. In this post, let me show you how to create a command line application using nodejs.&lt;/p&gt;

&lt;p&gt;But before anything else. You need to install NodeJs. If your NodeJS are not install yet. You can download it &lt;a href="https://nodejs.org/en/download/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, let us start.&lt;/p&gt;

&lt;p&gt;Lets create your &lt;strong&gt;index.js&lt;/strong&gt; file in your folder. Then inside index.js. type this code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4i0w2x8rdc5fqxfzg9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4i0w2x8rdc5fqxfzg9v.png" alt="Image description" width="610" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you can open your terminal and run it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node index FirstArgument // output: FirstArgument
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see the  &lt;code&gt;process.argv[2]&lt;/code&gt; is an array. Let us discuss some of the array of arguments below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;process.argv[0]&lt;/strong&gt;  - is path where nodejs is located. In my case it is &lt;code&gt;/usr/local/bin/node&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;process.argv[1]&lt;/strong&gt; is a path where my index file is located. In my case it is &lt;code&gt;/home/thegreytangent/Desktop/dev.to/index&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;process.argv[2]&lt;/strong&gt; it is first argument on my script: &lt;code&gt;FirstArgument&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;process.argv[3]&lt;/strong&gt; - the second argument and so on.&lt;/p&gt;

&lt;p&gt;What if you need all the arguments? No need to worry just loop it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ea2mms7p8hjpnagpl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ea2mms7p8hjpnagpl7.png" alt="Image description" width="606" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, run it in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;node index FirstArg SecondArg ThirdArg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The expected output should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Argument number: 0: /usr/local/bin/node
Argument number: 1: /home/thegreytangent/Desktop/dev.to/index
Argument number: 2: FirstArg
Argument number: 3: SecondArg
Argument number: 4: ThirdArg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  That's all for today!
&lt;/h3&gt;

&lt;p&gt;In this post, we learn to add arguments in our nodejs CLI. Thanks for reading.  You can leave a like or a share if it is helpful and ask any questions in the comments below. (-:&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introduction to Domain Driven Design</title>
      <dc:creator>Jason V. Castellano</dc:creator>
      <pubDate>Mon, 25 Jul 2022 00:14:00 +0000</pubDate>
      <link>https://dev.to/thegreytangent/introduction-to-domain-driven-design-63a</link>
      <guid>https://dev.to/thegreytangent/introduction-to-domain-driven-design-63a</guid>
      <description>&lt;p&gt;It's been more than &lt;a href="https://en.wikipedia.org/wiki/Software_architecture#:~:text=Software%20architecture%20as%20a%20concept,the%20structure%20right%20is%20critical." rel="noopener noreferrer"&gt;50 years&lt;/a&gt; before the software architecture was invented, but still project delayed and mismanagement cannot be solve. Some things inevitable because its a moving target,  trust me that is the reality. It has been experience by all software engineer. In this article let me share you this software architecture approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain Driven Design (DDD)&lt;/strong&gt; is an architectural pattern that will help succeed and to understand the software that we are building by modeling the classes based on the business requirements. Setting aside the technology that you must use and focusing on the problem domain is what you must do. Therefore, all you need is pen and paper.  This design pattern are using strategic and tactical modeling tools to solve business problems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658569092722%2FFzHYveBaC.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658569092722%2FFzHYveBaC.jpeg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DDD is not about technology. Instead, its all about understanding the problem space in the business domain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To understand how the business works, you need to participate some discussion with your team to develop software discovery and knowledge crushing. Before we learn DDD,  let us discuss first the overview of architectural layer. &lt;/p&gt;

&lt;h2&gt;
  
  
  Layered Architecture
&lt;/h2&gt;

&lt;p&gt;Back then, there were only two layers: presentation and data. So, where is the business logic? Traditionally, business logic has been coded in the presentation layer (a.k.a  user interface). This will make development faster - if you are a solo developer.  Eventually, layered architecture emerged, dividing code responsibilities into four layers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658569743871%2FbswvC2rM5.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/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658569743871%2FbswvC2rM5.jpg" alt="istockphoto-1329127423-612x612.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presentation Layer&lt;/strong&gt; -  There is only one job for this layer, and that is to display the data for the user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Layer&lt;/strong&gt; - This layer is thin. It does not contain any business logic. The state of the task is in progress inside of this layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain Layer&lt;/strong&gt;  - This is the heart of the software. All the business logic is inside here. The domain layer is persistent ignorance. The domain layer in DDD is purely a class object. Unlike other patterns, the database and entity are one such as MVC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Layer&lt;/strong&gt; - You can imagine this as a supporting layer. It gives communication between other layers. One of the codes inside the infrastructure layer is an email sender. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Three Pillars of Domain Driven Design
&lt;/h2&gt;

&lt;p&gt;In order to understand the deep topic of this pattern, we need to be familiarize what actually DDD made up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570012325%2FMyETulPBN.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/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570012325%2FMyETulPBN.jpg" alt="pillars.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ubiquitous language
&lt;/h3&gt;

&lt;p&gt;In doing domain driven design, it is important the the software engineers and domain expert should work together. They are no vs us, there will be always us. The result of creating ubiquitous language will benefit all the people who are working in the software because both developers and client speak in the same language. Ubiquitous language  is the language of business, therefore, the engineer who are working the system must understand the business.&lt;/p&gt;

&lt;p&gt;For the mean time, let us consider that the bounded context is the a boundary around the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658504270203%2FzGxuh-2o9.png%3Fheight%3D400" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658504270203%2FzGxuh-2o9.png%3Fheight%3D400" alt="Domain-Driven-Design.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;customer&lt;/em&gt; inside the bounded context is a ubiquitous language. Therefore, customer has a different meaning in each boundaries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategic Design
&lt;/h3&gt;

&lt;p&gt;The main objective of this design is to identify the bounded context, ubiquitous language, and context map inside the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bounded Context&lt;/strong&gt;  - You can imagine this like a boundary of your ubiquitous language. For instance, the customer in delivery context and finance context has a different meaning. In finance context customer is the entity or the main entity of that context, while in delivery context the customer is only a value object of the order. If the discussion does not match in the customer scenario,  it means you’re team is out of context.  We will discuss deeply about entity and value objects later in this article.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570232320%2FXWfFGTaOA.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/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570232320%2FXWfFGTaOA.png" alt="bouded contxt.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context Maps&lt;/strong&gt; - When you are done creating a two or more bounded context, there is a relationship between those boundary. Context mapping is way to model and to connect by visualizing the relationship of those context.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570287899%2FYlYB58RW7.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/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1658570287899%2FYlYB58RW7.png" alt="context mapping.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tactical Design
&lt;/h3&gt;

&lt;p&gt;This design is used when you create your domain model inside of your bounded context. The building blocks are entities, value objects, aggregates, services, and repositories. I will explain only the overview of those building blocks in this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Farchitecture%2Fmicroservices%2Fimages%2Fddd-patterns.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/https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Farchitecture%2Fmicroservices%2Fimages%2Fddd-patterns.png" alt="microsoftmapping.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entities&lt;/strong&gt; - it is a class that has identity and it remains the same thought out your system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value Objects&lt;/strong&gt;- it is also a class but unlike entities it has no identity. Value objects are being used by the entities  to represent the attribute such as age, address, and so on. The attribute is validated inside the value object class. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt;  - every layer has a service. For instance, one of the services inside the application, it is called the application service. The purpose of application service is to handle the flow of use cases in the system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repositories&lt;/strong&gt; - If you are a software engineer, you have heard this already and probably you have an idea of what it is. Repositories are an abstraction of your database (SQL code). You named the abstraction based on the language that the business uses such as &lt;em&gt;getAllSingleStatusUsers()&lt;/em&gt; just like that. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion:
&lt;/h3&gt;

&lt;p&gt;In software development, there are no single solution in every problem. If you have a small application or the requirements is only basic CRUD functions, I think you don't need a DDD. It all depends in the application that your are building. You can try this DDD architecture design if your application will grow and has many functions. I hope you finally understand the basic concept of DDD. In my next article let us discuss deeply about entities and value objects with some sample codes. &lt;/p&gt;

&lt;p&gt;What kind of architectural pattern you are using now? Are you facing some challenges when the application grows? Let me know in the comment and don't forget to share this article. Thanks for reading. (-:&lt;/p&gt;

</description>
      <category>ddd</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Basic Guide in Estimating Project Size by Using Story Points</title>
      <dc:creator>Jason V. Castellano</dc:creator>
      <pubDate>Sun, 01 May 2022 03:31:48 +0000</pubDate>
      <link>https://dev.to/thegreytangent/basic-guide-in-estimating-project-size-by-using-story-points-1k5g</link>
      <guid>https://dev.to/thegreytangent/basic-guide-in-estimating-project-size-by-using-story-points-1k5g</guid>
      <description>&lt;p&gt;As a software engineer, we always underestimate the size and completion of the project. In this article I will discuss some tips on how to estimate a software project.&lt;/p&gt;

&lt;p&gt;Let us give some analogy in order to fully understand the scenario.&lt;/p&gt;

&lt;p&gt;Supposedly, my task is to transfer a bunch of cardboard boxes from the garage into the store room. When I looked at the task, I estimated that it would take a total of seven hours to transfer all the boxes. What I am doing is estimating only the duration avoiding the size estimation of the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowlfdy7q3srbnizmkq11.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowlfdy7q3srbnizmkq11.jpg" alt="Image description" width="490" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For instance, I will try to estimate again , but this time, my estimation is based on computing the pile of cardboard boxes, its weight, and the distance. So, let's estimate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They are 50 boxes. &lt;/li&gt;
&lt;li&gt;Each box has a weight of 30 kg.&lt;/li&gt;
&lt;li&gt;Transfer distance is 15 meters from garage to store room. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, learning that information still is not enough. We need to know the average time of transfer of each box from the said location. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmh348pfylp0hwqmims7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmh348pfylp0hwqmims7.jpg" alt="Image description" width="612" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on my capacity, I can transfer each box 7 meters in one minute then rest for 15 seconds and move again 8 meters in one minute and 15 seconds, the total is 2 minutes and 30 seconds each box. Since we are estimating those numbers, we don’t give the exact number, instead to consider the margin of error. Therefore, the final estimation to transfer each box is 3 minutes. It takes me more or less two and half hours to transfer all 50 boxes from the garage to the store room.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are Story Points?&lt;/strong&gt;&lt;br&gt;
Story points are units of measure for expressing an estimate of the overall effort required to fully implement a software feature or any other piece of work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugnffgnztwqmnyvuo08e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugnffgnztwqmnyvuo08e.jpg" alt="Image description" width="500" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the software engineer gives the points in each feature, don’t expect that those points are the same. This is commonly happening in software development, whereas two back end engineers that have the same skill set will have different story points in the same task. One reason for this is that the two of them have a different perception and process to accomplish those tasks. The goal here as a project manager is to collect all the story point of each engineer to make a future prediction of the accomplishment of their task.&lt;/p&gt;

&lt;p&gt;Let us discuss how to use story points in the software development environment.&lt;/p&gt;

&lt;p&gt;For instance, there are two software engineers named Bob and James.  Bob is a NodeJS Developer that works in the backend and James is a ReactJS developer that works in the frontend. The project manager gives Bob and James the list of features. Set the points in each features and the most complicated feature points rated will be 10.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiarj1ajmxrjmiovi3qhm.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiarj1ajmxrjmiovi3qhm.PNG" alt="Image description" width="625" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let us discuss the points given by the two software engineers.&lt;/p&gt;

&lt;p&gt;Bob rated the login by 5 points. If you ask bob, bob will tell you that is because when the teacher will login:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He needs to filter the username and password.&lt;/li&gt;
&lt;li&gt;Check the username if has spaces in the first and last of the word and trim the words&lt;/li&gt;
&lt;li&gt;Check the username and password if it exists in the databases, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, James’s rate 4  because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He needs to create two input boxes in the form,&lt;/li&gt;
&lt;li&gt;Validate the characters in the input box while the user is typing,&lt;/li&gt;
&lt;li&gt;If error detected it will display in the form interfaces what is something wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those tasks are not so hard for James but a little complicated for bob. &lt;/p&gt;

&lt;p&gt;Let us proceed to the next use case “Teacher can add grades” features. This is more complicated in the backend because when adding grades there was another functionality trigger to it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate if grades are numeric.&lt;/li&gt;
&lt;li&gt;Grades should not be less than 60 and not greater than 100.&lt;/li&gt;
&lt;li&gt;Insert grades to database.&lt;/li&gt;
&lt;li&gt;Notify students of those grades already added.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is some notification involved when adding grades, therefore, bob rate 8 points in the backend. In the frontend, James gives 4 points because it's simple for James to create a form that validates the grades before submitted.&lt;/p&gt;

&lt;p&gt;Now you already understand and see the benefits of story points. When you check other features that have an equal point in the previous, there is a possibility that the time and effort involved are the same.  In the backend, login and add student are the same points rated by Bob. Therefore, you can estimate the time and effort to complete the task of Bob based on his previous story points. That’s how other companies estimate the overall effort and time in order to develop the application.&lt;/p&gt;

&lt;p&gt;If you are a software engineer reading this you can now create an estimation or functionality rating (story points) of the features you are working on. And if you are a project manager I bet you already know this kind of strategy. &lt;/p&gt;

&lt;p&gt;In estimating always remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In a good shoe, I wear size six, but a seven feels so good, I buy a size eight. - by Dolly Parton in &lt;em&gt;Steel Manolias&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hope this article helps you understand the basics of story points. Let me know from the comment below if you have some suggestion or what technique you use to estimate your software project. &lt;/p&gt;

&lt;p&gt;Thank you for reading and happy estimating. (-:&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Sources: *&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Cohn, Mike. Agile Estimating and Planning. Prentice Hall PTR, 2012.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>top</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
