<?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: Jafet Benítez</title>
    <description>The latest articles on DEV Community by Jafet Benítez (@jafetbntz).</description>
    <link>https://dev.to/jafetbntz</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%2F124272%2F1edb8a62-7330-41ae-a6f0-97d6e70c20fe.jpeg</url>
      <title>DEV Community: Jafet Benítez</title>
      <link>https://dev.to/jafetbntz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jafetbntz"/>
    <language>en</language>
    <item>
      <title>The Mentorship</title>
      <dc:creator>Jafet Benítez</dc:creator>
      <pubDate>Wed, 20 Jul 2022 17:37:31 +0000</pubDate>
      <link>https://dev.to/jafetbntz/the-mentorship-1ibm</link>
      <guid>https://dev.to/jafetbntz/the-mentorship-1ibm</guid>
      <description>&lt;p&gt;&lt;a href="https://i.giphy.com/media/Nx0rz3jtxtEre/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/Nx0rz3jtxtEre/giphy.gif" width="480" height="240"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;a href="https://giphy.com/gifs/mrw-top-escalator-Nx0rz3jtxtEre"&gt;GIPHY&lt;/a&gt;&lt;/p&gt;


&lt;/center&gt;

&lt;p&gt;Software development is a really particular industry, I have never seen an area that combines technology and artisanal work like this. What is even funnier is that even developers forget this facet or maybe never notice it.&lt;/p&gt;

&lt;p&gt;We are used to seeing software development and immediately think about cutting-edge technology, industrialization, and all that cleanness and perfection that is often described in some of our science fiction classics. A second look into the area shows us that even in the more industrialized software factory, development keeps being a very artisanal work. &lt;/p&gt;

&lt;p&gt;Artisans are known for creating products with expertise, high attention to detail, and without fearing putting their hands in the dirt. Software developers, or at least the good type, treat every piece of software as a delicate vase that they are giving form while they refine it... But today, I don’t want to dive extremely deep into every similitude and lose myself in the analogy, I want to talk about something that artisans and developers have in common, but sometimes, we forget or take for granted: mentorship.&lt;/p&gt;

&lt;p&gt;I remember my early days studying software development. We used to talk a lot about how easy it is to find resources for learning new technologies for free on the web and how becoming an autodidact was a must for every dev. Some years, several JavaScript frameworks and many bugs later, I can look back and see that we weren’t too far from reality but that was just half true. Yes, we must be able to learn by ourselves. Still, we usually need somebody who points us in the right direction, someone who teaches us not the solution to the problem but a general methodology to solve problems. We have to be able to learn by ourselves, but we need mentors and eventually, when the time is right, we will need to be a mentor for someone else.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why do I need a mentor?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/26uf4pUSKZkDe9t5u/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/26uf4pUSKZkDe9t5u/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;a href="https://giphy.com/gifs/starwars-star-wars-jedi-26uf4pUSKZkDe9t5u"&gt;GIPHY&lt;/a&gt;&lt;/p&gt;


&lt;/center&gt;

&lt;p&gt;While I’m writing this, I have a little more than 6 years of experience in the industry. I have had the honor of knowing great professionals that have served me as mentors in different moments of my life. Some of them were my teachers, other coworkers, university teammates, or even people from my local community of developers. Mentors come in a wide range of packings but they always help you to walk in the right direction.&lt;/p&gt;

&lt;p&gt;Something that I must highlight is that I’m not just talking about receiving a block of code to solve a problem or taking a peek at your code to check how you are implementing things. Those things are great, actually awesome, nevertheless, I talk about having someone to talk about career development, high-level archetypes for some kind of problem, promising technologies, and receiving advice about that. &lt;/p&gt;

&lt;p&gt;I’m talking about having someone who helps you to see the big picture. The problem with any new software developer is that they can be too short-sighted and are often taken by trends. There’s always a new framework, a new technology, or a new language. Trends can get messy, and being guided by trends can get us in a never-ending loop of superficial knowledge about everything without foundations of nothing.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why do I need to be a mentor?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/1oJLpejP9jEvWQlZj4/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/1oJLpejP9jEvWQlZj4/giphy.gif" width="480" height="246"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;a href="https://giphy.com/gifs/1oJLpejP9jEvWQlZj4"&gt;GIPHY&lt;/a&gt;&lt;/p&gt;


&lt;/center&gt;

&lt;p&gt;After understanding why people need mentors in almost every stage of their career, it’s simple to see why the world needs more mentors, but something that can be hard to realize is the reason why I should be the mentor that people around me need; in particular, if I haven't had a mentor. My answer to that thinking is that you have to be a mentor because you need to be a mentor. As dumb and simplistic as it sounds being a mentor is a need because it helps us to grow.&lt;/p&gt;

&lt;p&gt;I’m convinced about the idea that mentoring someone makes both, mentor and apprentice, grow as a professional and maybe even as a person. When you have to mentor someone, your dominion over the topic is put on trial,  so you have to walk the extra mile in order to be able to answer the questions when they arrive. When you have to mentor someone, you become some kind of leader, and not the bossy kind, but the organic one that people enjoy working with. So, why do I need to be a mentor? Because I have to keep growing.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://i.giphy.com/media/kesu1tiePAiGY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/kesu1tiePAiGY/giphy.gif" width="500" height="212"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;a href="https://giphy.com/gifs/star-wars-gif-starwars-kesu1tiePAiGY"&gt;GIPHY&lt;/a&gt;&lt;/p&gt;


&lt;/center&gt;

&lt;p&gt;Finally, I have to present a disclaimer about me and the concept of “developers as artesian” which is not a concept of mine, I’m pretty sure someone said it before, probably the guys from Etsy who have a pretty nice blog that you should check. It's called  &lt;a href="https://www.etsy.com/codeascraft"&gt;Code as craft&lt;/a&gt; and talks about how they arrived at some of the solutions they have implemented. &lt;/p&gt;

&lt;p&gt;Once more, mentoring is a relationship that produces growth in two ways. Mentors and apprentices can grow from that interaction, and that’s something that we should do (and prepare for) more intentionally. Let’s be the mentor we needed when we started. &lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>career</category>
    </item>
    <item>
      <title>Replicating Strava's map snapshot service</title>
      <dc:creator>Jafet Benítez</dc:creator>
      <pubDate>Wed, 20 Jul 2022 17:09:20 +0000</pubDate>
      <link>https://dev.to/jafetbntz/replicating-stravas-map-snapshot-service-2kc8</link>
      <guid>https://dev.to/jafetbntz/replicating-stravas-map-snapshot-service-2kc8</guid>
      <description>&lt;p&gt;I have a while using Strava for my casual runs and something that always called my attention was the main feed of the app, where you can find a nice picture or snapshot of the path run by you or some of your friends. I initially thought that the application loaded a set of Geojsons and made a render for each one of the posts on run time, but after working with mobile maps in my own project I understod that rendering a map was no easy task for any device. I then noticed that every post had a capture of the route over the map and the feed wasn't too different from any social media post, nevertheless, I still had a curiosity about how we could generate those captures.&lt;/p&gt;

&lt;p&gt;I recently found myself with some available time so I could start experimenting with this project and I'm going to walk you through my journey. &lt;/p&gt;

&lt;h2&gt;
  
  
  First things first: How to generate a map snapshot?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/64afibPa7ySzhFAf00/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/64afibPa7ySzhFAf00/giphy.gif" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;br&gt;
&lt;a href="https://giphy.com/gifs/schittscreek-64afibPa7ySzhFAf00"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;/center&gt;

&lt;p&gt;My first step was trying to render a map and make a capture of that map. After browsing the web for a couple of minutes,  I found a great article named &lt;a href="https://towardsdatascience.com/making-artistic-maps-with-python-9d37f5ea8af0"&gt;Making Artistic Maps with Python&lt;/a&gt;, where the author teaches us how we can use Python to generate a high-quality map of any city.&lt;/p&gt;

&lt;p&gt;After following the tutorial and making some tests, I noticed that the script required too much time between fetching information from Open Street Maps and processing the information. Taking into consideration the number of concurrent requests that Strava must receive I said to myself that It had to be an alternative that consumes fewer resources, and then I found Mapbox's statice Images API.&lt;/p&gt;

&lt;p&gt;MapBox has a set of APIs that are sold as software as a service, but they allow you to generate a developer API key and even design your own map styles. The Static Images API, let you generate a completely customizable map. You provide parameters like coordinates, sizes, geographical objects (points, lines, polygons, etc), and others. In return, you get an image with the map you asked for.&lt;/p&gt;

&lt;p&gt;The service works pretty smoothly, and after working with it I noticed that even Strava uses it (you can see MapBox mark in the footnote of every map), that definitely was a signal of being walking in the right direction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;


&lt;span class="n"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://api.mapbox.com/styles/v1/{0}/static/{1}/auto/{2}x{3}?access_token={4}"&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;request_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;style_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# Map Style Ex. 'mapbox/darkv11' 
&lt;/span&gt;    &lt;span class="n"&gt;polyline_hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Polyline is alghoritm for hashing list of coordinates.
&lt;/span&gt;    &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Dimenssions of the image 
&lt;/span&gt;    &lt;span class="n"&gt;token&lt;/span&gt;               &lt;span class="c1"&gt;# Access token provided by MapBox
&lt;/span&gt;    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'map.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'wb'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Let's get serious: Creating the service
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/RIYOQAgHyUbv29UcGI/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/RIYOQAgHyUbv29UcGI/giphy.gif" width="480" height="271"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;&lt;br&gt;
&lt;a href="https://giphy.com/gifs/laff-tv-himym-how-i-met-your-mother-laff-RIYOQAgHyUbv29UcGI"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;/center&gt;

&lt;p&gt;Once I got a pretty basic script for generating the maps with MapBox, I had to start thinking about how our service was going to work. I knew I had to receive a set of coordinates and maybe a couple of styling parameters but there were still two elephants in the room: asynchrony and scalability.&lt;/p&gt;

&lt;p&gt;Since this will be using a call to an external service I couldn't rely on a synchronic execution for every HTTP call that our service is going to receive and the horizon just gets darker when you think about the failure possibilities given the number of requests and the common problems with networks. The answer was, obviously, I had to receive the request, close it immediately and then start processing the map in a new thread or background process, always taking into consideration that we have to be scalable. With that and the strategy of divide and conquer  in mind, I concluded that my solution would need the components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A web server that receives and validates the client's requests.&lt;/li&gt;
&lt;li&gt;A queue manager that lists the validated requests.&lt;/li&gt;
&lt;li&gt;A set of workers that reads from the queue manager and executes the processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For mounting that architecture, I couldn't imagine an easier way than using a Docker Compose (or Docker + Kubernetes) approach. That's how I ended up with a folder tree like the one below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├───service
│   ├───nginx
│   └───src
│       └───map_equests.py
│       └───main.py
│       └───Dokerfile
│       └───requirements.txt
├───worker
│   └───src
│       └───helpers
│       └───worker.py
│       └───Dokerfile
│       └───requirements.txt
│
├───docker-compose.yml
└───.env

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;This solution is far from optimal, and I'm sure is not the only answer to this problem, but trying to figure out how to solve it in a revere engineering exercise has resulted in a pretty illustrating activity that I definitely recommend to any developer. &lt;/p&gt;

&lt;p&gt;I have published the project on &lt;a href="https://github.com/jafetbntz"&gt;my Github account&lt;/a&gt;. You can find the repository &lt;a href="https://github.com/jafetbntz/hermes"&gt;here&lt;/a&gt; so you can dive deep into the code. I'm also living you some resources below that can help you in case you are working on something like this or maybe just looking for information about one of these technologies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/making-artistic-maps-with-python-9d37f5ea8af0"&gt;Making Artistic Maps with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/creating-beautiful-maps-with-python-6e1aae54c55c"&gt;Creating beautiful maps with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.mapbox.com/playground/static/"&gt;MapBox's Static Images API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redis.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-4-task-queues/6-4-1-first-in-first-out-queues/"&gt;First-in, first-out queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/maps/documentation/utilities/polylinealgorithm"&gt;Encoded Polyline Algorithm Format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>toyprojects</category>
      <category>strava</category>
      <category>curiosity</category>
      <category>backend</category>
    </item>
    <item>
      <title>My personal notes about requirement elicitation in unideal situations</title>
      <dc:creator>Jafet Benítez</dc:creator>
      <pubDate>Sun, 27 Jun 2021 02:13:41 +0000</pubDate>
      <link>https://dev.to/jafetbntz/my-personal-notes-about-requirement-elicitation-in-unideal-situations-5fj5</link>
      <guid>https://dev.to/jafetbntz/my-personal-notes-about-requirement-elicitation-in-unideal-situations-5fj5</guid>
      <description>&lt;p&gt;&lt;a href="https://i.giphy.com/media/3oz8xTUmZABI3PGwDe/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3oz8xTUmZABI3PGwDe/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://giphy.com/gifs/cute-craft-hand-made-3oz8xTUmZABI3PGwDe"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A common mistake in the development industry is not paying attention to the requirements (functional and non-functional). Requirement elicitation and analysis are the very first step in software development but sometimes, in a bad implementation of agile methodologies, we can lose focus of that and end up building the wrong software.&lt;/p&gt;

&lt;p&gt;In an ideal case, you would have someone to talk with users and customers, observe them and later write down what the business is requiring. Then, that person would sit down with the technical team to analyze requirements, business rules and make a plan for the implementation and validation. But, as I said before that is “ideally” and in countries where software engineering and requirement engineering are still growing as is mine,  sometimes you have to elucidate the requirements by yourself, analyze them and implement them with a very short deadline.&lt;/p&gt;

&lt;p&gt;I remember my first job. I was a 19 years old junior developer in a government organization working in ERP for the financial direction. We were a small team with lots of work, so our manager decided to assign us to different modules and do the elicitation of requirements by ourselves; later, we would check out our notes in one of our daily meetings. Initially, I didn’t feel in an ideal situation because of my lack of experience and maybe I wasn’t, but we had to make it work. &lt;/p&gt;

&lt;p&gt;I realized pretty soon that elicitation wasn’t as simple as I had thought during my classes in college. We had to deal with the short time of the actors, the ambiguity of the process, the actors with a tree-view mindset, and the resistance to change. Again, it wasn’t an ideal situation but had to make it work.&lt;/p&gt;

&lt;p&gt;With time, I realized that rarely we can make an elicitation without troubles and that is ok, because, if the company hadn't problems they wouldn't have hired you to build the software in the first place. Through some time doing this kind of work, I have learned some lessons that I will leave you below. Anyway, if you want to go deeper into this topic, I highly recommend you to look at &lt;em&gt;The Guide to the Software Engineering Body of Knowledge (SWEBOK Guide)&lt;/em&gt;. Said that, let’s go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the same process with more than one actor.
&lt;/h2&gt;

&lt;p&gt;The user or actor usually knows how to do his work, but does not always know how the company works or even what his partner is doing on the desk that is by his side. Actors may ignore what happens with the process after they deliver the record and that’s why you have to listen to the process from the mouths of as many people as you can find.&lt;/p&gt;

&lt;p&gt;You may find some power users that know the company pretty well or employees that were there when the process started working in that way. They are pretty helpful and you should pay attention to them, but to find them, you have to talk to several actors and put the ideas together.&lt;/p&gt;

&lt;h2&gt;
  
  
  People may not be technical, so try to speak his language and don’t try to make him learn yours.
&lt;/h2&gt;

&lt;p&gt;As a noob in the field, I made the mistake of talking technically to the actors. As an analyst, you have to avoid getting too technical about the implementation instead of talking with the actors in terms of the business or even better, in terms the actor can understand easily.&lt;/p&gt;

&lt;p&gt;Better communication will get you more clarity. More clarity will lead you to better requirements and that will avoid having extra iterations or sprints because you already are making the right software from the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identify priorities.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/DpSoj00vkPpswwZU9o/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/DpSoj00vkPpswwZU9o/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://giphy.com/gifs/theoffice-gphyoffice726-DpSoj00vkPpswwZU9o"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During elicitation, you will find more than one trouble and probably more problems than what your team can handle at once. This is why you have to identify priorities and talk them down with the owner of the process and with your superior. And that leads us to the next lessons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate your notes with a mentor and/or your superior.
&lt;/h2&gt;

&lt;p&gt;This is probably more for people starting in the area.  But even for experienced analysts, elicitation and analysis are more about having the right conversation with the right people than about having a brainstorm with yourself walking in circles in your office.&lt;/p&gt;

&lt;p&gt;Receiving another point of view it’s critical when you are trying to make a work with quality.&lt;/p&gt;

&lt;p&gt;Now, notice that I’m talking about having not just a superior to check your notes with you, but also a mentor. If you are starting in the area, you may have noticed that there’s a lot of things you can learn by yourself but what most people don't say is that a mentor can save you a lot of headaches. Don’t you have one? Get one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identify improvement opportunities.
&lt;/h2&gt;

&lt;p&gt;The user and the client may tell you how they do things from the beginning of the time. They will describe the process they want you to systematize but they may lose improvement opportunities trying to be faithful to their day-to-day.&lt;/p&gt;

&lt;p&gt;It’s probably not your work but take into consideration that before making a system for a process, the company needs to optimize the process. You can always take notes and communicate with them. Be proactive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remember your objective.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/MdGUUTVHk7s1BA5Pyk/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/MdGUUTVHk7s1BA5Pyk/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://giphy.com/gifs/bigbangtheory-season-1-episode-9-big-bang-theory-MdGUUTVHk7s1BA5Pyk"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s not just building software for the company, it's solving problems of the company through software, so ask for the problems. Ask the different actors not just what they do and how things should be, but ask them about what kind of things usually go wrong and what happens then.&lt;/p&gt;

&lt;h2&gt;
  
  
  Respect people. Process owner, user, or client you must respect them.
&lt;/h2&gt;

&lt;p&gt;As we said before, while you are talking with several people you will notice that sometimes actors don’t have a holistic view of the company and its process and because of that, they may ask you for requirements that wouldn’t be right (mostly a matter of security). You will be tempted to make fun of the user and talk about “layer 8 problems”, or maybe of the client with something like “the customers know what they want but not what they need”, which may be true but you must have respect for them. The last thing you want is to have him as an enemy.&lt;/p&gt;

&lt;p&gt;Remember that they aren’t supposed to know what you know. If that were the idea you wouldn’t have been hired.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if people don't want to collaborate?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/11qCjC856PSmnm/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/11qCjC856PSmnm/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://giphy.com/gifs/genius-albums-11qCjC856PSmnm"&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially, I didn’t want to go into this topic, but while I was reviewing this article with my friend Vanessa, she told me that it would sound too idyllic if I didn't give any advice about hard people.&lt;/p&gt;

&lt;p&gt;There are all kinds of people in this world and there are people that will not collaborate with your elicitation, actors that can even get angry with you doing your work. These people require you to go the extra mile for them and try harder to get their collaboration but remember that you have to do it with sympathy and amiability. I remember that my boss used to buy chocolates for hateful people and most of the time that helped to make them know that you are trying to give a service for the company and the employees.&lt;/p&gt;

&lt;p&gt;Of course, if that doesn't work you will need to scale up the case or look for another person who can help you with that, but try to do that just as the last resource.&lt;/p&gt;

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

&lt;p&gt;Finally, if there is something that I want you to remember, is that during elicitation you shouldn't fear finding troubles. Actually, you should try to remember that you are looking for the kind of problems that you can fix with software. Situations rarely are as we expected, they are not always ideal and that’s ok.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>career</category>
    </item>
  </channel>
</rss>
