<?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: inDrive.Tech</title>
    <description>The latest articles on DEV Community by inDrive.Tech (@indrive_tech).</description>
    <link>https://dev.to/indrive_tech</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%2F878099%2F42ef56f5-9717-42be-934e-fc73d4227085.png</url>
      <title>DEV Community: inDrive.Tech</title>
      <link>https://dev.to/indrive_tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indrive_tech"/>
    <language>en</language>
    <item>
      <title>C4 Models: Architecture From Simple To Complex</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Fri, 07 Oct 2022 08:59:44 +0000</pubDate>
      <link>https://dev.to/indrive_tech/c4-models-architecture-from-simple-to-complex-38fk</link>
      <guid>https://dev.to/indrive_tech/c4-models-architecture-from-simple-to-complex-38fk</guid>
      <description>&lt;p&gt;Software Architect from inDrive Alexander tells about how to define the architecture in a better way and shares his experience in C4 models usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real life architecture
&lt;/h2&gt;

&lt;p&gt;If you open Wikipedia, you will find there the exact definition of what architecture is. I found out that architecture is the process of creating and drawing certain diagrams, certain buildings, and other structures. People use architecture as a science to simplify complex designs such as bridges or buildings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_WRkJlHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3214u8jopodb1guj77xr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_WRkJlHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3214u8jopodb1guj77xr.png" alt="Image description" width="880" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In real life, architecture surrounds us everywhere. Even the room you're in right now is part of the architecture. It has windows, doors, and places to sit. And in real life, architecture has many standards. We can rely on standards to define our architecture and share this information with our peers. For example, from building components to who will create this building. The really good part about this architecture is that we can get down to very small details, like how to create this particular wall or how to create this particular room.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture in IT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Paper
&lt;/h3&gt;

&lt;p&gt;When it comes to IT, building an application architecture is like building a building. And in the beginning, we, like real architects, used the traditional way of creating architecture - we drew on plain paper. This method is good in that it improves the creativity used to brainstorm changes in our architecture, but at the same time it is very difficult to maintain.&lt;/p&gt;

&lt;p&gt;On paper, it is difficult to capture the standards that are extremely important for any architecture. We have many paths displayed as small blocks connected by lines that were not standards at all. When we are going to fit a lot of details into this picture or understand what is going on at one level or another, it is very problematic. Then we replaced the paper with the draw.io tool at the request of the system administrator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Draw.io
&lt;/h3&gt;

&lt;p&gt;Draw.io was a nice try. In draw.io, at the beginning, you can draw the desired picture, and then connect the blocks with lines. If we have many components or many connections or relationships between components, then at some point it will be very problematic to set up this diagram. For example, imagine what happens if we want to move a PHP component from a central location to another&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0DuMq4mZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hpv1zmg9vm3opu7ljx1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0DuMq4mZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hpv1zmg9vm3opu7ljx1g.png" alt="Image description" width="880" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need to move to a separate data center, it will require a lot of work to update everything. It's very difficult to understand how everything works in general, because we have completed pictures, we have a lot of details and usually we can't present this diagram to non-IT colleagues. If you want to provide this diagram to senior management, obviously they won't understand what's going on in the diagram.&lt;/p&gt;

&lt;h3&gt;
  
  
  Miro
&lt;/h3&gt;

&lt;p&gt;Another attempt is better. It's a Miro way, let's say. I like Miro because of very cool zooming feature, which is available by default in Miro. We can drill into our parts and see what's happening inside zooming into particular blocks. It's still partially maintained well because if we want to rearrange some parts or create some new components, then you will be required to draw all new lines, adjust the layout.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tefFLmZS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1crwwh82widyk01qujhk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tefFLmZS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1crwwh82widyk01qujhk.png" alt="Image description" width="880" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I guess it's annoying because, at some point in time, I will spend too much time just connecting small parts with each other. At some point, I guess this process will not be maintainable and require some energy from analysts to keep it up to date. Let's see how we can do it in a more standard way. I'm going to present you with a C4 model. This model was designed to simplify the process of designing architecture by describing the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  C4 Models
&lt;/h2&gt;

&lt;p&gt;On a very high level, we have this software system definition is used to describe systems in general. Then we have several more layers. Usually, we have more layers, which are containers, components, and the last one is code. On each layer we can define our architecture with more details. It's kind of zooming into our architecture. &lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;You can see that we have this context in the very top of the picture. If we click or select our central component which is the system, we can read or zoom into the container level where we can see more details which containers are required to run our application. How containers are connected between each other and what our external system is. On level three, we have an even more detailed picture.&lt;/p&gt;

&lt;p&gt;For example, different processes running inside our single container can be producers, subscribers, this can be Google, or something like that. On level four, we can have a well-built picture of a particular component with maybe UML diagrams of processes or database models. Okay, let's check what's happening inside. If we are talking about our first layer, which is system context, we are trying to represent our system as a very big block.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ffe-pmLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ollpbawfgn5aq3jhw5vy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ffe-pmLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ollpbawfgn5aq3jhw5vy.png" alt="Image description" width="880" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usually, blocks are presented to these boxes and we have links between such boxes. Usually, we describe only systems which are part of our application or system context. In this case, we are looking at some banking systems and we have just a mainframe banking system which stores information about customers account transactions, et cetera. We do not specify any database names, types, MySQL or Oracle, etc.&lt;/p&gt;

&lt;p&gt;We don't want to have any technical details on this level, just because we want to make this diagram available for everyone. Every person, even non-technical people should understand what's happening in the system. We can see the banking system uses an email system which is external one and just sends email using this system and stores information about payments in the banking system mainframe.&lt;/p&gt;

&lt;p&gt;Obviously, we have a customer who uses our systems and calls our API. Next level is more interesting for us, especially in IT. The community is a container diagram and we can see much more details here on this picture. In the diagram, there is information about containers which are required in order to run our application and we can see that now we have details about protocols. We usually use this information to understand what kind of dependencies, and what kind of protocols are used by this particular system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sUAiOUPd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rh4tk4gw5mph5iftvaeo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sUAiOUPd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rh4tk4gw5mph5iftvaeo.png" alt="Image description" width="880" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C2 levelThis information can help us to understand better requirements of how we can scale our application, how we can deploy this application to a new data center, and this information is most important for us because we have all necessary links, all necessary information about all containers which are required to run the application on this container diagram.&lt;/p&gt;

&lt;p&gt;Every container, do not confuse, it's not a docker container, it's a separate application that should be presented on the scheme because we want to understand how every container is connected with our application in order to make it scalable or we can think about how we can protect personal data about our customers. What if we are going on the next level which is C3 and it's a component diagram?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TPR6_L7j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p7jpx3ga9932b7eimqg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TPR6_L7j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p7jpx3ga9932b7eimqg2.png" alt="Image description" width="880" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On this level, we can present even more details compared to component diagrams and we can show internal parts of our application. For example, if you are talking about Go applications this can be a dedicated group of goroutines, consumers for Kafka or producers to Kafka. We can show some specific components like HTTP handle or maybe gRPC handle. We can show different protocols as well on this diagram like HTTPS or gRPC between some parts.&lt;/p&gt;

&lt;p&gt;We can show integration between controls itself and we can also present some external systems like an email system which is called by email component and we can present information about a database as well. There is information about type. In this case, we are using Oracle database and this diagram presents all necessary information about all blocks. If we go to the last level which is C4, we can drill up to very low-level details, how our component is working and this can be entity relation diagram, this can be email process or activity diagram.&lt;/p&gt;

&lt;p&gt;In the the billing service and we have created order, canceled order, and changed order defines it, and how particular containers or components are connected to each other. What I like in this way of describing architecture is that we can go from the very high definition of our application up to very low-level details which is really important in order to make our diagrams easy to read, easy to follow, and here is our current process.&lt;/p&gt;

&lt;p&gt;We have this inDrive architecture docs repository and currently, I'm trying to create C1 and C2 levels of all our components, and probably you have already checked it. You can claim it, you can use it with ideas, you can install the PlantUML plugin for your idea and just navigate through all components in real-time by clicking on components and you will drill down from the system context diagram up to internal details.&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
    <item>
      <title>UX Writer and Copywriter Roles in the Multiverse of Madness</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Wed, 07 Sep 2022 10:07:33 +0000</pubDate>
      <link>https://dev.to/indrive_tech/ux-writer-and-copywriter-roles-in-the-multiverse-of-madness-m95</link>
      <guid>https://dev.to/indrive_tech/ux-writer-and-copywriter-roles-in-the-multiverse-of-madness-m95</guid>
      <description>&lt;p&gt;In this article, Lisa, UX writer at inDriver answers the question: ‘Why are there two writers for one product?’&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_QCMdAnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/761f8puosy59brwan57n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_QCMdAnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/761f8puosy59brwan57n.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UX writer (UXW) and copywriter (CW) are two different professions. They are often mixed up for one simple reason: these professions have the same work tool — the text.&lt;/p&gt;

&lt;p&gt;Leveraging this tool, copywriters create an enchanting universe, while UX writers put things in order there. In this UX-driven universe, it’s impossible to get lost, fail a task, feel puzzled or helpless.&lt;/p&gt;

&lt;p&gt;A copywriter and UX writer are not interchangeable: they have different experiences, goals, and workflows. Without one of them, the universe will either lose its beauty and charm, or become inconvenient. Why can’t one specialist write all the texts?&lt;/p&gt;

&lt;p&gt;I’m Lisa, a UX writer in the inDriver product team. In this article, I present all the differences between UX writers and copywriters in points and pictures.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text in the hands of UX writer and copywriter&lt;/li&gt;
&lt;li&gt;Goals of the product text and marketing text&lt;/li&gt;
&lt;li&gt;Who is responsible for which texts&lt;/li&gt;
&lt;li&gt;What are the similarities between UX writers and copywriters&lt;/li&gt;
&lt;li&gt;What is the difference between UX writers and copywriters&lt;/li&gt;
&lt;li&gt;Collaborative work&lt;/li&gt;
&lt;li&gt;If you choose your way to work with texts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Text in the hands of UX writer and copywriter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9dhmpDKi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdi6c5jfzmouvklq5uvx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9dhmpDKi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdi6c5jfzmouvklq5uvx.jpg" alt="Image description" width="880" height="572"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;How the same working tool differs in the hands of different specialists&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concise — Vivid&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: UX writing, or product writing, is what a UX writer does. These texts are also called microcopy. There are many of them in IT products, and they help a person reach a goal without drawing attention to the copy. If the microcopy is concise and people don’t specifically focus on it, then it’s not distracting or annoying.&lt;/p&gt;

&lt;p&gt;CW: Contrary to the above, copywriting, or marketing texts, should attract attention, highlight the brand, be bright and memorable. People read marketing texts in specific situations, so the marketing copy should be bright, but not intrusive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supportive — Separate&lt;/strong&gt;&lt;br&gt;
UXW: Since UX writing is part of the user experience, it should be supportive. The name of the button should clearly explain where the person will go when they press this button, and the microcopy of the error should suggest what happened and what to do next.&lt;/p&gt;

&lt;p&gt;CW: Marketing texts are, most often, independent. For example, slogans are remembered and perceived on their own, without any context: a person may not even remember where they read it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistent — Offbeat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: Consistency in microcopy helps to boost the user experience. A person does not have to read the text, as the consistent structure makes it scannable. The use of the same words for the same entities makes the texts recognizable, so these names don’t have to be memorized.&lt;/p&gt;

&lt;p&gt;CW: As an example of marketing texts, slogans must be offbeat, so the reader does not have associations with other firms’ slogans, and the brand’s reputation remains unscathed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Goals of the product text and marketing text
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jQdh7pTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lb23zkn1zp7000emmvff.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jQdh7pTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lb23zkn1zp7000emmvff.jpg" alt="Image description" width="880" height="572"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;What goals does the UX writer’s text and the copywriter’s text fulfill&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Earn trust — Engage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: The primary goal of UX writing is to earn the trust of a person and ensure retention. A person reads microcopy inside the product, so product texts are calm and informative. As part of the product, it makes people’s lives easier, while being in line with the user experience.&lt;/p&gt;

&lt;p&gt;CW: A copywriter, on the other hand, writes a marketing text to engage a person — in a competent manner, with no hype or comparisons with the competition. The latter technique may attract attention, but it also creates an impression that the company wants to stand out at the expense of others, or copy their ideas from the competitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build relationships — Make an impression&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: With the help of microcopy, the UX writer builds a long-term relationship with the product users, so they feel they’ve made the right choice, and their first impression was not deceptive.&lt;/p&gt;

&lt;p&gt;CW: Most often, people get their first impression about a brand from marketing texts: these texts should encourage people to use the product and remain happy about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Respect a personal space — Get an emotional response&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: In UX writing, it’s critical to understand the audience and business values, yet the key concept here is empathy. Empathy means respect for a person and their personal space. Since we build long-term relationships with the aid of microcopy, we cannot evoke an emotional response from people throughout our communication: people will simply get tired of it. Sometimes we can see this mistake on button texts. Instead of helping a person quickly navigate onwards, an overly creative UX writer would make a mistake naming the button ‘Wow, what’s next?’&lt;/p&gt;

&lt;p&gt;CW: One way to make the right first impression with marketing text is to decide what kind of emotional response we want to get from a person. We find examples in ads: some of them cause sadness, others — tenderness or laughter. All this is an emotional response. For example, a marketing text may appeal to nostalgia or tenderness: ‘Any distance can be overcome when you love.’ Or it can be inspiring: ‘Spend a year so that its results get a million likes.’ The main thing is to know who you are writing for, who will read this text. You also need to know who we want to attract to the product, and what will be the benefit of this audience for the business.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who is responsible for which texts
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ekby5tJF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4hwl6dhkcumw5ewkp1s0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ekby5tJF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4hwl6dhkcumw5ewkp1s0.jpg" alt="Image description" width="880" height="564"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Comparable examples of UX writing and copywriting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Header — Slogan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: Microcopy is a small block of text that helps a person to navigate within a product: on a website, in an app, or through any interface. Of course, headers are also considered microcopy. Their goal is to unambiguously reflect the main idea of the content on the page.&lt;/p&gt;

&lt;p&gt;CW: The slogans of copywriters are more ambitious: they succinctly reflect the values of the company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instruction — Longread&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: Instructions by UX writers are well structured and help a person to navigate in a complex or long process: most often, such instructions are stored in an FAQ section.&lt;/p&gt;

&lt;p&gt;CW: Copywriters’ longreads are also long text blocks, which, unlike instructions, do not give a person an idea of how to use the product. Instead, they give an idea of how the product will improve their life, boost their social status or self-confidence. Adhering to the goals of a marketing text, longreads will impress and evoke an emotional response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding — Presentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: In a product, onboarding is a brief and structured introduction. Good onboarding doesn’t aim to impress people, bad onboarding is always bewildering or irritating. Sometimes, onboarding is used carelessly, as a copy of other companies’ practices. In fact, a good onboarding should be unique. It should show how this particular product will make a person’s life more comfortable, and what a person can do to gain this comfort by themselves, i.e. how they can turn our product into a tool that makes their lives better.&lt;/p&gt;

&lt;p&gt;CW: A marketing presentation highlights the benefits of a product, how we want people to perceive us. Perception doesn’t always match up with reality, yet a professional copywriter isn’t afraid to describe flaws. Using the right words, a copywriter can tell an honest story about a brand and the people who develop it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the similarities between UX writers and copywriters
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7EIdAMvB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j396hafbs95l2hpd7u42.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7EIdAMvB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j396hafbs95l2hpd7u42.jpg" alt="Image description" width="880" height="572"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Points that UX writers and copywriters have in common&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audience and product expertise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both professions must know their audience: what the clients want and why they come to use the product. Since a UX writer and copywriter write for a brand, they know how the product works. Of course, knowing the audience and the product is crucial not only for these two professions. Anyone who communicates with people through any kind of text should think in these terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experience in writing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The more specialists are immersed in their fields, the more they write and explore, the better they feel and manage the language. The same happens with attention to detail: over time, it becomes easier to pinpoint typos. Anyway, using the tools to check your texts, especially the long ones, is a must.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collaboration with designers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since a copywriter creates compelling copy, designing it visually becomes an important task. Designers make it visually engaging. Design also matters in UX texts. For instance, without design buttons just look like unclickable text, causing gaps in the user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between UX writers and copywriters
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R9cfUb1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/35h8s2lau6irkiegfye8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R9cfUb1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/35h8s2lau6irkiegfye8.jpg" alt="Image description" width="880" height="818"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The main differences between the two professions&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reason behind every word — Focus on the taste&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: UX writers must understand why this piece of microcopy is the best possible. UX writers are always objective: if the text is regarded to be faulty, the UX writer should have strong counterarguments — or microcopy has to be rewritten.&lt;/p&gt;

&lt;p&gt;CW: Copywriters focus on people’s feelings and emotions. They rely on the tastes of the audience and on the team’s opinion. The key questions here are: Is the wording appropriate? What feelings can it evoke in a person? What feelings do we want to evoke in them? If everything matches, the copywriter’s text is ready to be published.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Join the project at the beginning — Join at any stage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: The process of creating a product isn’t complete without UX writing. The earlier UX writers are involved in the process, the less work is spent on changing blocks, screens and entire flows where microcopy isn’t needed, or a completely different format is needed, or a different order is due.&lt;/p&gt;

&lt;p&gt;CW: A copywriter joins when the product is already formed, and its advantages are clear and obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define the tone of voice and style guide — Follows the customer requirements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: UX writers and copywriters have different workflows: UX writers specify the rules and voice of the texts that all texts in the product follow. The same voice is also used on all platforms within the company: support, stores, landing pages, social networks, and so on.&lt;/p&gt;

&lt;p&gt;CW: Copywriters’ texts also stick with the brand guidelines, yet their tone of communication is more emotional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team workers — Work on their own&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UXW: UX writers don’t create the product UX on their own. Microcopy is created directly in the designers’ layouts, the product manager coordinates the process and developers make it work. UX writers need to communicate and exchange opinions with different teams.&lt;/p&gt;

&lt;p&gt;CW: Copywriters can work on their own, focusing on the brand voice, and simply provide the complete text to the designer. Of course, teamwork is always better, but not always as necessary as within the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product team — Marketing team&lt;/strong&gt;&lt;br&gt;
Apparently, product and marketing texts are created by people from two different teams: product and marketing. When copywriters write interface texts, or UX writers create marketing texts, it breaks the entire process: the text stands out where it should hardly be noticed, or understates something that should catch the eye. Don’t fall into this trap. Better show this article to your manager and explain why the company should have at least two different text specialists.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collaborative work
&lt;/h3&gt;

&lt;p&gt;Since the UX writer works in the product team and the copywriter in the marketing team, they don’t meet each other too often. However, both specialists follow the same tone of voice, focusing on different tones of communication within this voice. In marketing, the tone is rather personal and even bold, in microcopy it’s calm and reassuring.&lt;/p&gt;

&lt;p&gt;That being said, a UX writer and a copywriter do have room for cooperation. For instance, in landing page content. Scenario one: the copywriter writes the content for the page according to the ready-made structure and asks the UX writer to proofread the terms and verify the style guide compliance. Scenario two: the UX writer prepares the structure, writes the content and passes it on to the copywriter for slogans and headlines.&lt;/p&gt;

&lt;p&gt;Overlaps do happen on different stages and customers do not always understand who should write which text. For example, push notifications can be both promotional and informative. The former are written by copywriters, the latter — by UX writers.&lt;/p&gt;

&lt;p&gt;Within the same company, copywriters and UX writers should align to follow the same brand style. Users want consistency. You can’t treat the user as your bestie in a marketing text and communicate with them like a robot in a product text. The brand persona would simply fall apart, and the clients’ trust would be shattered.&lt;/p&gt;

&lt;p&gt;The same will happen if a marketing text exaggerates the product’s ease of use. An announcement that the product is accessible in a ‘couple of clicks’ appears confusing for UX writers. It’s simply impossible to shorten the registration process because of the catchy words on the banner.&lt;/p&gt;

&lt;p&gt;People encounter marketing texts first, and microcopy second. Inside a company, the process works the other way: from the product to marketing. You need to write slogans about a specific product, and not adjust the product to fit the slogans. Seems obvious, but better keep the workflow right to avoid further screw ups.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to choose your path
&lt;/h3&gt;

&lt;p&gt;If you wish to understand which profession is in your line, go back to the format and goals of the text. See what texts you like to write more, what works better for you, what kind of thinking you have.&lt;/p&gt;

&lt;p&gt;I chose UX, because UX means care. Everything a UX writer does helps a person get familiar with the tech, save their time and effort, and make their life a little easier.&lt;/p&gt;

&lt;p&gt;If you want to work with microcopy as a UX writer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forget the pay-per-character model: the volume of work a UX writer performs and the amount of texts that go into production do not correlate.&lt;/li&gt;
&lt;li&gt;Study the subject matter and useful software: Figma is good for starters, but there’s more to it.&lt;/li&gt;
&lt;li&gt;Write and practice on the interfaces that you see daily, pay attention to microcopy and the UX in general.&lt;/li&gt;
&lt;li&gt;Be ready to substantiate every little piece of your work: this is one of the key UX writer’s skills.&lt;/li&gt;
&lt;li&gt;Be empathic and scrupulous.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The demand for UX writers is surging, yet UX writers still have to defend their right to exist — like copywriters before.&lt;/p&gt;

&lt;p&gt;Copywriters dispelled the prejudices about their profession, and marketing texts took their deserved place in business development.&lt;/p&gt;

&lt;p&gt;UX writers are also headed in this direction. Businesses are becoming increasingly aware of UX writing and its role as a crucial layer between the customer and the product.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>design</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>True Product Backlog Refinement: 4 stages to the correct work on features</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Fri, 02 Sep 2022 11:26:44 +0000</pubDate>
      <link>https://dev.to/indrive_tech/true-product-backlog-refinement-4-stages-to-the-correct-work-on-features-5hgg</link>
      <guid>https://dev.to/indrive_tech/true-product-backlog-refinement-4-stages-to-the-correct-work-on-features-5hgg</guid>
      <description>&lt;p&gt;In this article, Agile Coach from inDriver Ekaterina Kolesnikova will share the experience of conducting PBR without any boring theory about “correct” planning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TppZDdGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vk52l66kp1id2z2g29kp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TppZDdGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vk52l66kp1id2z2g29kp.png" alt="Image description" width="880" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I joined the team, I noticed problems in the Product Backlog Refinement process. I proposed a new scenario for this process and it worked. I’m sure many of the problems I encountered are familiar to you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crushing expert opinion. One person spoke on PBR: Tech Lead, Senior, Product Owner or other leader. The rest of the team members remained in quiet agreement, did not express an opinion, were poorly involved and did not understand the task.&lt;/li&gt;
&lt;li&gt;We’ll sort it later. Tasks were only specified after the start of the sprint.&lt;/li&gt;
&lt;li&gt;Tasks in Jira without a description. There was no documentation or parsing.&lt;/li&gt;
&lt;li&gt;No assessment. The sprint planning was chaotic, and the results were difficult to predict.&lt;/li&gt;
&lt;li&gt;No product or technical decomposition. They didn’t know what they were doing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scenario that I propose is suitable for a product team of eight people. The PBR process itself was divided into four stages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 0. Get it all done in advance
&lt;/h3&gt;

&lt;p&gt;At least three days, and preferably a week before the PBR, the Product Owner sends information about the features that we would like to start work on. The development team looks over the information, prepares questions and offers solutions in advance. This greatly reduces the meeting time.&lt;/p&gt;

&lt;p&gt;At this stage, it becomes clear which tasks are simple, and which will definitely take a lot of time to work out. This helps to better plan the timing of the upcoming PBR. To save time, simple tasks can be graded asynchronously and compared at the meeting. If the team is not new colleagues may come to the same conclusion, and the discussion of such problems takes a maximum of 10 minutes.&lt;/p&gt;

&lt;p&gt;Artifacts and feature documentation include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user problem we are solving.&lt;/li&gt;
&lt;li&gt;A hypothesis to solve this problem.&lt;/li&gt;
&lt;li&gt;Results of the research or experiment that support this hypothesis.&lt;/li&gt;
&lt;li&gt;The target audience of the feature.&lt;/li&gt;
&lt;li&gt;Product metrics we want to influence.&lt;/li&gt;
&lt;li&gt;Layouts.&lt;/li&gt;
&lt;li&gt;User Story Mapping (USM), Customer Journey Map (СJM).&lt;/li&gt;
&lt;li&gt;Keys for conversions (if necessary).&lt;/li&gt;
&lt;li&gt;Analytics events to add.&lt;/li&gt;
&lt;li&gt;Product decomposition and task description.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is good practice to have detailed items in the product backlog at least two sprints ahead. This simplifies sprint planning as the Product Owner and Scrum team start planning with a clear, well-analyzed, and accurately evaluated set of user stories.&lt;/p&gt;

&lt;p&gt;If the task falls into the sprint without a PBR, the sprint planning stretches in time, raises many questions, requires clarifications and/or leads to inconsistencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 1. Product challenge
&lt;/h3&gt;

&lt;p&gt;The Discovery Team, in our case, this is the Product Owner, Analyst, Designer, Technical Leader and business representatives, once again personally tell us about the stories that we would like to start work on.&lt;/p&gt;

&lt;p&gt;The product challenge should take no more than 30 minutes. We discuss features from the point of view of the product (“what are we doing?”, “why are we doing it?”).&lt;/p&gt;

&lt;p&gt;People ask pre-prepared questions. During the discussion, we write out new problems, risks and barriers to the implementation of the feature that cannot be solved quickly. When the product challenge ends, the Development Team looks at all of this and makes a decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To postpone further work until the Discovery Team resolves the issues that have arisen. In this case, we assign a new product challenge.&lt;/li&gt;
&lt;li&gt;To continue the PBR process if the outstanding issues are not critical. In this case, the DevTeam may:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Drill down a feature discussion with the whole team (not the best way in terms of interaction efficiency).&lt;/li&gt;
&lt;li&gt;Select a working group (a cross-functional team whose competencies allow it to fully work out the technical implementation of the feature).&lt;/li&gt;
&lt;li&gt;Select several working groups (feature teams) so that each team tackles several decomposed user stories from one big feature. After the work is completed, the feature teams present the selected solutions to each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my opinion, the last option is ideal for a team of eight or more people. We broke up so that each feature team had one representative from the platform. This helped to involve all participants and speed up the development of features.&lt;/p&gt;

&lt;p&gt;Depending on the chosen work format and the complexity of the discussed feature, the DevTeam may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start a technical elaboration within the current meeting (no more than 50 minutes).&lt;/li&gt;
&lt;li&gt;Agree on follow-up work (a new meeting or asynchronous mode of work via instant messenger — the team chooses any format that suits them).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The visually described Product Challenge process looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GT17LIYF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19ykri440ejn5967skne.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GT17LIYF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19ykri440ejn5967skne.jpg" alt="Image description" width="880" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 2. Technical challenge
&lt;/h3&gt;

&lt;p&gt;DevTeam works on decomposed features in one of these formats: the whole team, a working group, or several feature teams. One important condition: in any format, the technical team is cross-functional, autonomous and empowered to make decisions on its own. Product Lead, TechLead, Product Designer and Scrum Master can participate in the technical challenge as external experts at the request of the team.&lt;/p&gt;

&lt;p&gt;A checklist of questions that will help the team with the analysis of the problem on PBR:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many modules are affected by the task?&lt;/li&gt;
&lt;li&gt;How many external interactions and dependencies are there: contract formed with backend, work with other teams, top-level architecture worked out.&lt;/li&gt;
&lt;li&gt;How many internal interactions are there?&lt;/li&gt;
&lt;li&gt;Technical decomposition.&lt;/li&gt;
&lt;li&gt;Estimated story points (complexity, volume, risks), did testing take these into account? Do you have time for conversions?&lt;/li&gt;
&lt;li&gt;Risks. What can go wrong? What is the worst case scenario?&lt;/li&gt;
&lt;li&gt;Acceptance Criteria (AC).&lt;/li&gt;
&lt;li&gt;Definition of Ready (DoR) control.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also use the DoR checklist for all product teams:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is there a description or presentation for the task?&lt;/li&gt;
&lt;li&gt;Are there Acceptance Criteria (AC)?&lt;/li&gt;
&lt;li&gt;Is there a Story Point (SP) estimate?&lt;/li&gt;
&lt;li&gt;Are there User Interface (UI) layouts?&lt;/li&gt;
&lt;li&gt;Are there analytical metrics?&lt;/li&gt;
&lt;li&gt;Are there localization keys if needed?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The technical challenge lasts 50 minutes if the team continues the Product Challenge meeting, or around an hour and a half if it is a separate meeting. The duration also depends on the complexity of the feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the feature team can’t “buff” the feature in less than an hour and a half, it means that the feature was badly decomposed. This is worth discussing in retrospect.​​&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WTiwTtl3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mti9ifzvufsda1pdg00.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WTiwTtl3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mti9ifzvufsda1pdg00.jpg" alt="Image description" width="880" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 3: Final challenge
&lt;/h3&gt;

&lt;p&gt;This is a general event lasting no more than 30 minutes, in which feature teams present each to other (if they have been separated), the product lead, the technical lead and the designer, the technical solution of the feature.&lt;/p&gt;

&lt;p&gt;The purpose of this stage is to get approval from the above participants on the further implementation of the feature within the next sprints, and also to sync up if several teams have been working on the features.&lt;/p&gt;

&lt;p&gt;During the discussion, the team checks each feature according to DoR and parks the questions that have arisen during the meeting on a separate board. At the end, we make a decision: the feature is ready for the sprint (converted into Ready for development) or additional clarifications/discussions are needed. Also one responsible person is selected who will transfer all information from Miro to Jira.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gEU0bdcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86s78er9k4v2dixqqtvg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gEU0bdcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86s78er9k4v2dixqqtvg.jpg" alt="Image description" width="880" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the participants say
&lt;/h3&gt;

&lt;p&gt;I spoke with the participants in our PBR experiment. Here is some feedback from my team members:&lt;/p&gt;

&lt;h4&gt;
  
  
  Backend developer
&lt;/h4&gt;

&lt;p&gt;Before, the analysis of what the business wants did not allow for discussion of any points. And this entailed task changes on the fly. When we started discussing a task at PBR, because the team was so large, it turned into a story that wasted quite a lot of time and lowered the quality of internal communication. Now, when we divide the meeting into relatively small teams, everything works fairly well, but there are always moments that we want to improve.&lt;/p&gt;

&lt;h4&gt;
  
  
  QA engineer
&lt;/h4&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding the essence of the tasks before development.&lt;/li&gt;
&lt;li&gt;Documentation testing has become the responsibility of the team, not the testers.&lt;/li&gt;
&lt;li&gt;The priority of the tasks became apparent.&lt;/li&gt;
&lt;li&gt;Everyone could express their “essence [’fe’ in Armenian’]”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Takes time.&lt;/li&gt;
&lt;li&gt;Forced to think.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Android developer
&lt;/h4&gt;

&lt;p&gt;Before the arrival of Agile Coach, we had no idea what story points were and that tasks should be evaluated! Because of this we had sprints for 1–2 months without results. There were no discussions, it was more like “there are problems here, okay let’s take a look”. Thanks to the facilitator’s brain cells, a meeting structure has appeared. We now understand that we can assess everything, and then plan a sprint.&lt;/p&gt;

&lt;h4&gt;
  
  
  Product Owner
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;There was unpredictable development, there was no understanding of the timing for the development of several tasks — fixed, except for a few exceptions.&lt;/li&gt;
&lt;li&gt;Missing the development timeline — fixed, I think we hit 80%.&lt;/li&gt;
&lt;li&gt;Only a few people participated in the discussion — fixed.&lt;/li&gt;
&lt;li&gt;There was no common understanding of task assessment — plus or minus, you need to keep recalibrating&lt;/li&gt;
&lt;li&gt;There was no preparation for the PBR and no involvement in the discussion. The team did not take responsibility for the task — now everyone is involved, but sometimes they perform more formally.&lt;/li&gt;
&lt;li&gt;The task processing quality has improved.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agile</category>
      <category>scrum</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to cut the release inspection time from 4 days to 4 hours</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Tue, 09 Aug 2022 12:38:23 +0000</pubDate>
      <link>https://dev.to/indrive_tech/how-to-cut-the-release-inspection-time-from-4-days-to-4-hours-3i8k</link>
      <guid>https://dev.to/indrive_tech/how-to-cut-the-release-inspection-time-from-4-days-to-4-hours-3i8k</guid>
      <description>&lt;p&gt;In this article we’re going to tell you about how inDriver’s release team cut the duration of regression testing for the release build of a mobile app, and the release cycle, to one week, about the problems they came up against and about how they solved them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--faZC8NSw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8vfu3vghzsuagtuplpdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--faZC8NSw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8vfu3vghzsuagtuplpdl.png" alt="Image description" width="880" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some background information
&lt;/h3&gt;

&lt;p&gt;In 2018, the release team was significantly smaller than it is now, releases were not yet happening regularly and all of the company’s QA-engineers played a part in the pre-launch inspection. That was very time-consuming, though, and it slowed down the overall development process significantly. It was decided that the testing of each app released would be conducted solely by the release team.&lt;/p&gt;

&lt;p&gt;Back then, the release cycles lasted 2 weeks. The team had 3 QA engineers, who weekly for 2–3 full-time days checked the release build of one of the alternating platforms. In addition to checking the release, the guys were busy streamlining the release process, writing documentation, onboarding newcomers, and updating test cases in the TMS.&lt;/p&gt;

&lt;p&gt;There were a number of drawbacks with this approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defects could only be discovered during the 2–3 days of the check, so more time was required to fix them and the Time-to-Market (TTM) increased.&lt;/li&gt;
&lt;li&gt;If anyone in the team was unable to take part in the testing of the release, the workload on the other team members was significantly greater, and so too was the time required for the check.&lt;/li&gt;
&lt;li&gt;Long release checks are tedious, and the likelihood of a defect being missed increases.&lt;/li&gt;
&lt;li&gt;There is a low level of coverage across devices, meaning that specific defects were more likely to be missed.&lt;/li&gt;
&lt;li&gt;During the check, you had to get to grips with all the new features and the ways of configuring the test environment to suit them. The test cases and other documentation therefore have to be perfectly written, before the point when the feature gets into the release. Otherwise, the inspection process would be slowed down: a lot of time would be wasted clarifying all the nuances.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changing the release inspection process
&lt;/h3&gt;

&lt;p&gt;At the end of 2021, the decision was taken to scale up the release check to the QA engineers from all teams. And it was decided that, from 2022 onwards, we would move to weekly checks of both the mobile platforms at the same time, and stop doing the TMS TestRail in favor of Qase, since the former was very slow and kept going down.&lt;/p&gt;

&lt;p&gt;Since the automatic branch cuts and the forming of the release builds for the mobile app used to take place on a Friday evening, Monday was chosen as the most suitable day for checking the release. The tech leads in each team knew that, for 4 hours on a Monday, the QA engineers would be working solely on the release check. For those 4 hours, the tech leads had to remove, or at least minimize, any team activities in which the QA engineer was supposed to be involved.&lt;/p&gt;

&lt;p&gt;In turn, by the time the check started, the release team would prepare a relevant test environment, form the test runs and distribute them to all the cases. The aforementioned problems were thereby solved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All the bug reports are compiled in the first 4 hours of a Monday, and, accordingly, the fixes are put into the release build at a much earlier stage.&lt;/li&gt;
&lt;li&gt;If a couple of QA engineers are unable to take part in the release check, this has practically no impact on how quickly the release check can be conducted.&lt;/li&gt;
&lt;li&gt;The release check does not take more than 4 hours — and it’s much easier to maintain one’s concentration and alertness for that kind of time interval.&lt;/li&gt;
&lt;li&gt;The level of coverage across devices goes up several times over.&lt;/li&gt;
&lt;li&gt;Certain very specific new features are initially checked by their “owners”, and then gradually rolled out across the entire team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The release team also writes UI self-tests, in conjunction with the QA Automation team, which develops various testing instruments. To achieve this, the following tools are used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appium.&lt;/li&gt;
&lt;li&gt;Kotlin, JUnit 5.&lt;/li&gt;
&lt;li&gt;Selenoid.&lt;/li&gt;
&lt;li&gt;Allure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The upshot
&lt;/h3&gt;

&lt;p&gt;At this point in time, UI tests have covered about 30 percent of the total test cases in the acceptance set. They are launched immediately after the cut on the release branch, and the result of them, in the shape of an Allure-report, is sent to Slack by a bot. As this automated process unfolds, the test cases are taken out of the release run’s pool. During the release check, the QA engineer on duty goes through the fallen tests manually, and, where necessary, compiles a bug-report:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9ZFyRW_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l2zmdtkg8m00or3yf3tu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9ZFyRW_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l2zmdtkg8m00or3yf3tu.png" alt="Image description" width="646" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to keep the tests green and discover bugs ahead of time, they are launched on a dev-build every night. After that, the duty QA enters the new test update tasks or bug-reports on a special dashboard. A range of tests can also be launched by anyone who wishes to do so with the help of GitHub Actions:&lt;/p&gt;

&lt;p&gt;As a result of the changes set out above, the duration of build release checks has fallen from around 72 hours to 4 hours, without sacrificing anything in terms of the quality of the product.&lt;/p&gt;

&lt;p&gt;One of the problems that the release team encountered was that of time zones. Our staff are located in a wide range of different cities and countries, making it far from easy to conduct a simultaneous release check. However, given that most of the engineers are located in three time zones, it was decided that the time of the check should be made as close as possible, taking everyone’s work schedule into account. In Almaty, for instance, the release check starts first thing in the morning.&lt;/p&gt;

&lt;p&gt;Another problem is related to the fact that, in order to get a large number of engineers involved in the same process, particular effort is required on the organizational front:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drawing up lists of the people who are going to take part in the release, taking vacations and days off into account.&lt;/li&gt;
&lt;li&gt;Redistributing cases in the release process, if anyone has had any problems getting through them.&lt;/li&gt;
&lt;li&gt;Checking and preparing the test environment in good time, and doing the same thing with the methods of delivering the app build, so that there is no downtime.&lt;/li&gt;
&lt;li&gt;Checking to make sure that the developers promptly set to work on any defects discovered in the release build.&lt;/li&gt;
&lt;li&gt;Answering any questions that arise on the part of those involved in the process and dealing with any unexpected situations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve this problem, a flow of weekly duties was introduced by one of the QA engineers in the release team, who assumes responsibility for all the duties referred to above and independently accompanies the release from beginning to end.&lt;/p&gt;

&lt;p&gt;In the first instance, it was hard to work out how long the release check was going to take. To calibrate its duration, the progress on the cases it is going through is recorded at hourly intervals. It turned out that an interval of 4 hours was ideally suited to the task, and enabled everyone to go through the release at a comfortable pace.&lt;/p&gt;

&lt;p&gt;Thereafter, the release team left in the flow a requirement to note the release’s progress. The table below shows the percentage of cases from the release run that have been completed, at a particular stage of the release check. It can be seen that the total time spent on the check gradually falls:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BMyqU8di--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8oi1thms4acfkrji1j84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BMyqU8di--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8oi1thms4acfkrji1j84.png" alt="Image description" width="880" height="865"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, the time required to check a release version of the app is gradually falling. With the transition to this flow, the TTM of product features was significantly reduced, and at the same time the quality of the check was enhanced. The release process, meanwhile, became more predictable and transparent for all the other teams.&lt;/p&gt;

</description>
      <category>management</category>
      <category>mobile</category>
      <category>agile</category>
    </item>
    <item>
      <title>10 items that must be addressed during a one-on-one meeting</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Mon, 01 Aug 2022 10:19:40 +0000</pubDate>
      <link>https://dev.to/indrive_tech/10-items-that-must-be-addressed-during-a-one-on-one-meeting-jh8</link>
      <guid>https://dev.to/indrive_tech/10-items-that-must-be-addressed-during-a-one-on-one-meeting-jh8</guid>
      <description>&lt;p&gt;The one-on-one meeting is one of the most valuable tools for communicating with an employee, especially when working remotely. Here, we highlight 10 items that must be addressed during a one-on-one meeting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M83sll14--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8nie6c7fplxfc8wc6bhu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M83sll14--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8nie6c7fplxfc8wc6bhu.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Turn your webcam on and ask your employee also to turn theirs on. Pour yourself some tea, coffee, or water to deal with a dry mouth if you have to. And make sure you smile.&lt;/li&gt;
&lt;li&gt;Small talk. A brief exchange on an unrelated matter is needed to make sure you both are tuned in and on the same page. For example, you can give the other person a compliment, say something nice about their hoodie, cool glasses, their Google Meet background or the view out the window, and so on. Yes, these are trivial things, but they go a long way to contributing to an overall pleasant vibe and bringing a smile to the other person’s face.&lt;/li&gt;
&lt;li&gt;Ask about how things are going for them and how the sprint went. Watch closely as the person talks about issues they have encountered in the past week.&lt;/li&gt;
&lt;li&gt;Ask how things are going with the team and the team lead.&lt;/li&gt;
&lt;li&gt;Discuss your employee’s concerns. Don’t interrupt them, and let them fill you in on all the key details.&lt;/li&gt;
&lt;li&gt;Check in to make sure the employee has been able to look at the agenda you had prepared for this meeting. If not, go over the highlights once again.&lt;/li&gt;
&lt;li&gt;Share the news or important announcements you have to discuss. This item is optional, as you might have nothing to share for this particular week :)&lt;/li&gt;
&lt;li&gt;Ask the employee what they think about the news and important announcements you just brought up. Find out how your employee feels about this new information.&lt;/li&gt;
&lt;li&gt;At the very end of the session, check if the employee has any questions left to ask, and whether they are clear on everything you have discussed. Make sure you both are on the same page on all key points of the agenda.&lt;/li&gt;
&lt;li&gt;End the call with a smile and wish your employee a great day.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Additionally, below we will highlight several crucial points that a manager should bear in mind during a one-on-one meeting so as to establish a relationship of trust with the employees.&lt;/p&gt;

&lt;p&gt;Important point #1. I recommend one-on-one meetings be conducted not only with the employee, but also with their team lead or product lead. From them, you can learn how the employee behaves within the team, as well as get feedback on their performance. The team lead or product lead may be able to shed light on details that may have slipped under the manager’s radar.&lt;/p&gt;

&lt;p&gt;Important point #2. During a one-on-one conversation, neither the employee nor the supervisor should be distracted by any chats, parallel incoming calls, or other unrelated tasks. If your employee is distracted in this way, stress to them the importance of the discussion and explain that it would be great if they could focus their undivided attention on the conversation at hand.&lt;/p&gt;

&lt;p&gt;Important point #3. Always take an interest in the employee’s opinion and perspective on various workplace situations, even if they are inexperienced or disagree with you. The important thing here is to show that you are interested in their opinion. This is essential to build mutual trust and get to know your employee better as a person and a professional. This makes them feel how important it is to communicate and helps them take a deeper dive into the topics under discussion in a one-on-one setting, rather than just answering with platitudes or keeping their opinions to themselves.&lt;/p&gt;

&lt;p&gt;Important point #4. If you have some relevant examples from your past jobs, make sure you always share your stories, screw-ups, and inspiring cases.&lt;/p&gt;

&lt;p&gt;Important point #5. When talking with your employee, make sure to ask more open-ended questions and give them enough time to think through and perhaps discuss the issue briefly with you (remember Point #3).&lt;/p&gt;

&lt;p&gt;Important point #6. As a meeting recap, always briefly summarize the points you have agreed on and what you expect from the employee concerned.&lt;/p&gt;

&lt;p&gt;Most important! Point #7. You must deliver on any promise made to your employee. If you can’t do that, be honest about it and explain the reason.&lt;/p&gt;

</description>
      <category>career</category>
      <category>community</category>
      <category>management</category>
      <category>motivation</category>
    </item>
    <item>
      <title>How we switched to regular mobile app releases</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Thu, 21 Jul 2022 10:33:51 +0000</pubDate>
      <link>https://dev.to/indrive_tech/how-we-switched-to-regular-mobile-app-releases-1k68</link>
      <guid>https://dev.to/indrive_tech/how-we-switched-to-regular-mobile-app-releases-1k68</guid>
      <description>&lt;p&gt;Since a short time ago, inDriver has been rolling out new mobile releases weekly. Below, we will tell you about how we switched from random to regular releases, what issues we ran into along the way and how we handled them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ASRg1ScB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/10biwgx05n7hhu56td4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ASRg1ScB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/10biwgx05n7hhu56td4p.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some background information
&lt;/h3&gt;

&lt;p&gt;In 2018, there were four development teams at inDriver: Android, iOS, Backend, and QA. They had about 30 employees, 10 of whom were mobile developers. At that time, new app releases were rolled out only on a when-needed basis — mostly when the big tasks were complete and ready.&lt;/p&gt;

&lt;p&gt;There were several problems with this approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It was unclear when the next release was going to come out. It was difficult to predict the release of a new feature, as the timeline of large tasks might take anything from a few weeks to a few months.&lt;/li&gt;
&lt;li&gt;You had to wait a long time for the release of small tasks. There was a backlog of minor improvements and fixes awaiting release, which could already have benefited our users.&lt;/li&gt;
&lt;li&gt;Long turnaround times for releases. As too many tasks were involved in the release, there was a high probability that many bugs would be identified, requiring more time to look into. With significant changes being made, it was harder to catch all the bugs before release, so the debugging process involved multiple hotfixes, thus contributing to postponements to the full-fledged release. And that’s to say nothing of the tasks that “had to be included for sure, let’s move back the release date a short while, there’s only a little bit of work left to do.”&lt;/li&gt;
&lt;li&gt;Development slowdowns during the release testing phase. All new features got stuck at the “Ready for Test” status because the bulk of the testing personnel’s efforts was diverted and fully focused on testing the release for a few days. Additionally, at that time, no new features could undergo a test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This situation continued until 2020. In late 2020, we increased the number of development personnel, implemented a major transformation in the development structure, and moved over to operating cross-functional teams. And whereas in the recent past you only had to coordinate your release within one team, now there were 20 such teams to consider and make arrangements with. The mobile developers who used to be committed to the shared repositories were now on different teams, and this imposed extra restrictions on the release of the app. After all, each team wanted to release their own tasks in alignment with their own plans and priorities.&lt;/p&gt;

&lt;p&gt;Something had to be changed. We decided to set up a dedicated team to handle release management issues. That was how the release team emerged.&lt;/p&gt;

&lt;h3&gt;
  
  
  Switching to regular releases
&lt;/h3&gt;

&lt;p&gt;Once it was established, the first step our release team took was to shift to regular releases. The plan to follow was like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Establish a release cycle.&lt;/li&gt;
&lt;li&gt;Set the day of the week on which to create a release branch.&lt;/li&gt;
&lt;li&gt;Set up a release schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By this point, we had already made several attempts at transitioning. Based on this experience, we outlined a clear-cut approach to managing releases. We knew for a fact that a two-week release cycle with alternating platforms would suit us just fine. Previously, we had tried a three-week cycle, but we were not happy with the delivery speed and the fact that the releases in this case were fairly large, which affected the testing process. Therefore, deciding on a release cycle length was a quick choice to make.&lt;/p&gt;

&lt;p&gt;We chose Friday as the day of the week on which to create a release branch. We had several reasons for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It was a good fit because it synced with the end of the work week and the completion of sprints.&lt;/li&gt;
&lt;li&gt;Releasing on a Friday protects the guys from too much overwork on weekends trying to keep the release on schedule.&lt;/li&gt;
&lt;li&gt;Release validation efforts kicked off on Monday because, at that time, it took several days to run a release verification routine. Hopefully, there would be enough time to check the release during the week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the release cycle and the cutoff date were defined, we proceeded to establish a release schedule in Google Sheets:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9hpgZ62I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jtxoyktchbtwauyexta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9hpgZ62I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jtxoyktchbtwauyexta.png" alt="Image description" width="880" height="102"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Release Schedule&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But that was not all. It took several months for the teams to get used to the new process. As it turned out, no one was prepared to wait two weeks until the next release, so a lot of team members actively threw in tasks of their own. Due to this, multiple errors arose during release checks, and this pushed back the timeline.&lt;/p&gt;

&lt;p&gt;But there were some positive changes as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, not as many tasks were getting into the release anymore, and they became smaller.&lt;/li&gt;
&lt;li&gt;The delivery process for our product accelerated. Smaller tasks were steadily reaching users now.&lt;/li&gt;
&lt;li&gt;It had now become possible to plan out your tasks based on the release schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generally speaking, a more transparent process emerged. The releases became regular and small. But along with this came a large amount of routine work. Plus, the lengthy testing process for the release was still there to go through. Therefore, automating the process and speeding up the release verification were the next issues at hand that needed addressing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automating the release process
&lt;/h3&gt;

&lt;p&gt;The process of releasing an application consists of several stages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preparing a candidate release.&lt;/li&gt;
&lt;li&gt;Acceptance testing.&lt;/li&gt;
&lt;li&gt;Uploading and sending the release to the store for review.&lt;/li&gt;
&lt;li&gt;Rolling out and monitoring the release.&lt;/li&gt;
&lt;li&gt;If all goes well, the release is rolled out to all users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of the stages involves a particular set of steps. For example, the following steps are performed at the stage of the release candidate’s development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a release branch.&lt;/li&gt;
&lt;li&gt;Creating a task for the release.&lt;/li&gt;
&lt;li&gt;Creating a pull request.&lt;/li&gt;
&lt;li&gt;Building a release app.&lt;/li&gt;
&lt;li&gt;Bumping the app version.&lt;/li&gt;
&lt;li&gt;Creating a release changelog.&lt;/li&gt;
&lt;li&gt;Sending release notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ut_rlRJT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z06j1ld5dgpvm5g7ap1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ut_rlRJT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z06j1ld5dgpvm5g7ap1n.png" alt="Image description" width="636" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We decided to automate routine work as it was taking up too much time. To automate all of the above steps, we wrote a large number of scripts and are now actively developing our internal service for releases. Here is our technology stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions.&lt;/li&gt;
&lt;li&gt;Bash, Python, Go.&lt;/li&gt;
&lt;li&gt;Fastlane.&lt;/li&gt;
&lt;li&gt;Docker.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first thing we did was to prepare a source of release information. We created a new type of Release task in Jira and presented the release steps as a workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MvqbtwwJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1ir9rrk80jhdivqaq9u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MvqbtwwJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1ir9rrk80jhdivqaq9u.png" alt="Image description" width="403" height="583"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Release Workflow&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This strategy enabled us to have a clear idea about which stage the particular release had reached. Previously, you had to check in with the people involved in preparing the release. Now there was no need to ask anyone.&lt;/p&gt;

&lt;p&gt;We gather the necessary information in the release tasks. You can view a list of tasks, build numbers, and command statuses, by subtask. In the testing phase, the progress of individual teams can be tracked via these subtasks.&lt;/p&gt;

&lt;p&gt;If any bugs or errors are discovered, they are tied to the release task at hand. In this manner, we can check the current status of the release: to see how many bugs are in the works and which ones are not being investigated.&lt;/p&gt;

&lt;p&gt;A separate dashboard can be used to keep track of release statuses:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z5GQCG9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k4l05t3zwkt2zeqeho7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z5GQCG9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k4l05t3zwkt2zeqeho7c.png" alt="Image description" width="880" height="269"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dashboard&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The release task is created on Fridays at midnight. Scripts responsible for the work, which is now routine, are triggered and run in Github Action, as scheduled.&lt;/p&gt;

&lt;p&gt;The bottom line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have improved the transparency of the release process. Now, the status of releases and a list of tasks included in them can be viewed.&lt;/li&gt;
&lt;li&gt;The amount of routine time-intensive work is now significantly reduced.&lt;/li&gt;
&lt;li&gt;The release process for both platforms is now standardized.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Speeding up the release verification process
&lt;/h3&gt;

&lt;p&gt;As I mentioned in the beginning, in 2018, our primary testing personnel had to be diverted to attend to the release verification responsibilities. At that time, no new features could be tested, and this slowed down the development process during release testing. To solve the problem, we decided to run checks through the efforts of our release team only.&lt;/p&gt;

&lt;p&gt;We assigned four testers to the team, thus relieving the workload off of the other teams. In addition to checking the release, the guys were busy streamlining the release process, writing documentation, onboarding newcomers, and updating test cases in the TMS.&lt;/p&gt;

&lt;p&gt;However, this approach revealed a number of downsides:&lt;br&gt;
It is tiring to go through the lengthy checks for the release.&lt;br&gt;
If someone on the team was unable to participate, the other guys were faced with an immediate increase in workload to deal with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fJa-wmZw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzhw81z14g1fcgz8epql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fJa-wmZw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzhw81z14g1fcgz8epql.png" alt="Image description" width="500" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Relatable&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You start missing mistakes as your eyes get too used to looking at your work.&lt;/li&gt;
&lt;li&gt;There’s not much coverage on devices.&lt;/li&gt;
&lt;li&gt;You have to be a good expert on all the features to quickly check the entire application.&lt;/li&gt;
&lt;li&gt;You need to have well-written test cases to check unfamiliar functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This went on for several months. Afterward, taking the shortcomings identified into account, we decided to scale up the test to embrace the entire testing team.&lt;/p&gt;

&lt;p&gt;Things went much better after that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The release veriﬁcation process was accelerated significantly.&lt;/li&gt;
&lt;li&gt;More coverage on actual devices.&lt;/li&gt;
&lt;li&gt;Concurrently, we improved the knowledge of the product and its verticals among all testers, thus further facilitating potential replacements within the team or access to help in critical situations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It became clear that it was now essential to automate the release verification process in order to cut down testing time. Together with the team of automation developers who were tasked with developing various testing tools, we went on to actively implement UI tests, to validate the release. To achieve this purpose, we use the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appium.&lt;/li&gt;
&lt;li&gt;Kotlin, JUnit 5.&lt;/li&gt;
&lt;li&gt;Docker, Selenoid.&lt;/li&gt;
&lt;li&gt;GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point in time, UI tests have covered about 30 percent of the total test cases in the acceptance set. And to keep these tests green and detect bugs in advance, we run them on a daily basis, at night.&lt;/p&gt;

&lt;h3&gt;
  
  
  To recap the highlights here:
&lt;/h3&gt;

&lt;p&gt;Switching to regular releases cleared away most of our problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We set up a release schedule. Our teams now have the ability to plan out their tasks, and it became possible for businesses to plan launches and know the dates of the next releases in advance.&lt;/li&gt;
&lt;li&gt;The bulk of the routine time-intensive jobs was automated. This allowed us to focus on other tasks, such as those intended to actively implement UI tests.&lt;/li&gt;
&lt;li&gt;We improved the transparency of the release process. It was now possible to track the status of each release and view the necessary information.&lt;/li&gt;
&lt;li&gt;The release validation time was reduced to one day, on Monday, and that time frame is rapidly becoming shorter through automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even so, we realized that a two-week release cycle with alternating platforms had a long delivery time for new features. As teams were still unprepared to wait 2 weeks for the next release and then a full rollout of the application, they tried to throw as many extra tasks into the release as possible. Prior to the release cutoff, there was a long queue of tasks for infusion, and this put significant stress on CI. Plus, the teams had asynchronous sprints due to the alternating of the platforms.&lt;/p&gt;

&lt;p&gt;With this in mind, the goal for the next year was to shift to weekly releases. To accomplish this, we conducted a one-week release experiment at the end of 2021 and gathered feedback from the team. As a result of the experiment, several problem areas that needed improvement were identified. In addition, some things had to be completely replaced.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>docker</category>
      <category>jira</category>
      <category>releases</category>
    </item>
    <item>
      <title>Your Product Without UX Writing: Wasted</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Tue, 05 Jul 2022 14:11:57 +0000</pubDate>
      <link>https://dev.to/indrive_tech/your-product-without-ux-writing-wasted-3bj2</link>
      <guid>https://dev.to/indrive_tech/your-product-without-ux-writing-wasted-3bj2</guid>
      <description>&lt;p&gt;When you introduce a new IT product to a highly competitive urban environment, you have to cater to various groups of people and factor in multiple levels of tech availability.&lt;/p&gt;

&lt;p&gt;UX writers do not always stick around when the company is just launched. More often than not, firms consider hiring a UX writer when the product is fully functional and about to go live.&lt;/p&gt;

&lt;p&gt;You can boost any product with a good text. Let’s use our inDriver app as an example and see how it works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZX4kma11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqniosn2tgl2l4x8mina.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZX4kma11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqniosn2tgl2l4x8mina.png" alt="Image description" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the foundation of good UX?
&lt;/h3&gt;

&lt;p&gt;Let’s start with the foundation of a good product: what is necessary for building an optimal user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple idea, clear benefits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a product has no use, no text will describe how it helps people.&lt;/p&gt;

&lt;p&gt;The idea of the inDriver app is that you can find a driver on your own and agree on the ride price with them. Its perks are obvious savings and flexibility vs. imposed tariffs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the audience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Text is the main tool of communication for any company. Communicating with people without understanding their needs and use cases is a ride for a fall.&lt;/p&gt;

&lt;p&gt;Marketing, BI, Support — all teams communicate with people who use our app to a greater or lesser extent. Communication is the primary source of ideas, problems and solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on software development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The name of the button has to be unambiguous. I need to know what happens when I tap the button. If this button doesn’t work and doesn’t bring me anywhere, the text won’t help. As UX writers, we can tell people we’ve messed up and resolve the problem. But we can’t press our luck. If it happens more than twice, the person will look elsewhere for a working product.&lt;/p&gt;

&lt;p&gt;inDriver has dedicated development teams, keeping the software development processes under control at all times.&lt;/p&gt;

&lt;p&gt;Once we’ve identified the product idea and benefits, verified the idea with the audience and assembled a development team, it’s now time to do UX writing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is UX writing?
&lt;/h3&gt;

&lt;p&gt;Generally speaking, UX writing is a process of creating microcopy within an IT product. Everything a person reads in the app, on the website, landing pages and any other interfaces.&lt;/p&gt;

&lt;p&gt;The goal of UX writing is to make the interface easy to understand, logical and predictable. To that end, microcopy needs to be easily intelligible, recognizable and suitable for localization.&lt;/p&gt;

&lt;p&gt;The core elements of UX writing are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structure. Microcopy is easy to scan without reading.&lt;/li&gt;
&lt;li&gt;Consistency. The same object is called the same name across the board, punctuation is consistent.&lt;/li&gt;
&lt;li&gt;Simple language and unambiguity. Everyone reading the microcopy can understand it at once.&lt;/li&gt;
&lt;li&gt;Short sentences. One sentence — one idea.&lt;/li&gt;
&lt;li&gt;Informative. Every phrase and sentence is useful to the reader.&lt;/li&gt;
&lt;li&gt;Accessibility. Microcopy can be read and understood by people with disabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UX writing has its limitations. You should use certain elements with caution if you are positive they’ll be appropriate and intelligible for your audience. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phrasal verbs.&lt;/li&gt;
&lt;li&gt;Phraseologisms and idioms.&lt;/li&gt;
&lt;li&gt;Humor, especially local humor.&lt;/li&gt;
&lt;li&gt;Wordplay.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What are UX writers responsible for?
&lt;/h3&gt;

&lt;p&gt;UX Writer or UX Content Writer, Content Designer, UX Copywriter — these are different names for the same profession.&lt;/p&gt;

&lt;p&gt;UX writers are engaged in writing interface texts. With the help of microcopy, they create and develop a product hand in hand with designers and researchers. UX writers always know the context. They understand the product, the audience, business requirements, design changes, new app features and test results. &lt;/p&gt;

&lt;p&gt;Even working on a single screen, the UX writer has the full picture and makes sure every step is clear and predictable. By predictability, I mean a person has an understanding of how everything works. They see it when previous actions are completed, they see it when it’s time to move on.&lt;/p&gt;

&lt;p&gt;If a person wants to get home from work at their own price, they will come to use our product. To find a driver, they’ll go through several steps: download the app, enter a phone number, receive a confirmation code, figure out how the app works and where to start, fill in their basic info so drivers can respond to their offers, fill in the ride info, suggest a price, and choose a driver. &lt;/p&gt;

&lt;p&gt;This number of steps looks annoying, but if there is someone who prompts and helps, the task becomes easy to complete and undemanding.&lt;/p&gt;

&lt;p&gt;UX writers create microcopy that help people. As if someone were sitting next to them and guiding them through the process. As I mentioned before, it’s crucial to cater to the needs of both long-term users and newcomers who have just tried the app.&lt;/p&gt;

&lt;p&gt;Aside from creating microcopy, UX writers are responsible for writing guidelines that benefit the entire company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tone of Voice or the brand voice&lt;/strong&gt; — the company’s distinct style of communication with its audience through the app, web, social networks and ads.&lt;/p&gt;

&lt;p&gt;The purpose of the Tone of Voice is to build trust towards the product as people view our ads, download the app, go to the website and contact support. That’s why the brand voice always considers the target audience and adapts to it. Our app has a vast geography. It seems impossible to narrow down the target audience, so we took a calm and respectful approach that works in any culture.&lt;/p&gt;

&lt;p&gt;Depending on the situation and environment, the voice may vary. This is called the Tone of Communication. For example, we are friendly on social media, and we sound more official, yet humane and caring in customer support.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hEY96n_E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yd8yu7va0jfe8aycktj7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hEY96n_E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yd8yu7va0jfe8aycktj7.jpg" alt="Image description" width="880" height="672"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Identity verification screen&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is how we’ve applied our Tone of Voice to this screen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rewrote the microcopy in casual style.&lt;/li&gt;
&lt;li&gt;We showed that we care.&lt;/li&gt;
&lt;li&gt;We informed people of what’s important and showed respect.&lt;/li&gt;
&lt;li&gt;Also we applied gender-neutral wording in the button caption and removed superfluous checkbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Guidelines&lt;/strong&gt;. Here’s another essential document for the UX writing team. This document is about our internal text rules.&lt;/p&gt;

&lt;p&gt;Clear microcopy is instrumental in Giudelines as it saves people’s time. Such a guide includes grammar rules, yet it’s more about interface clarity. Punctuation, capitalization, upper or lower case use — all these technicalities are up to UX writers themselves.&lt;/p&gt;

&lt;p&gt;inDriver Guidelines focuses on how the person benefits, as is this case the company benefits as well. Here are some of the rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We don’t make microcopy short just to make it short. If microcopy gets longer, yet more useful, then we’re on the right track.&lt;/li&gt;
&lt;li&gt;Fewer punctuation marks — greater clarity. We remove any perception barriers that may emerge.&lt;/li&gt;
&lt;li&gt;No ambiguity in microcopy, it has to be suitable for translation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BUhbAK7d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukrks20ywq2v8el5y6sc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BUhbAK7d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ukrks20ywq2v8el5y6sc.jpg" alt="Image description" width="880" height="757"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Login screen&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s how we applied Guidelines to the login screen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dot was removed from the title.&lt;/li&gt;
&lt;li&gt;The phone number was rendered in the accepted format.&lt;/li&gt;
&lt;li&gt;The name of the button was changed as it leads to the confirmation screen.&lt;/li&gt;
&lt;li&gt;The label above the social media icons and the confirmation text were edited.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Glossary&lt;/strong&gt;. This third instrumental document includes the terms we use to name various entities in our product. It helps us avoid unwanted multiplication of terms and make our naming recognizable. For example, if an app section is called ‘Balance’, we need to stick to this name, rather than ‘Wallet’, ‘Finance’, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pmd0shkE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1eabtpm8edtvsl8sxbi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pmd0shkE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1eabtpm8edtvsl8sxbi.jpg" alt="Image description" width="880" height="817"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The ride Options and Comments screen&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Words on the new screen are the words from our Glossary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On a previous screen this block is called ‘Options’, so we use the same word.&lt;/li&gt;
&lt;li&gt;The options themselves became more intelligible.&lt;/li&gt;
&lt;li&gt;The button is called ‘Apply’, because all buttons that save some options are called ‘Apply’.&lt;/li&gt;
&lt;li&gt;The input field was named ‘Comments’ and moved to the bottom of the screen: comments are entered only if the necessary option is lacking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  UX writing for business
&lt;/h3&gt;

&lt;p&gt;To describe the benefits of UX writing for business, let’s go back to the three fundamental principles of a working product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the product has a simple idea and benefits&lt;/strong&gt;, microcopy will be a tool that explains this idea and shows how the product is useful to the person.&lt;/p&gt;

&lt;p&gt;When our product team was researching the updated version of the app, we realized standard texts sounded indifferent to people. The templates were robotic or abstruse: a person wouldn’t understand what they read, and it felt like the app showed off its intelligence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YvWdNxxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sk19tb18i7och8estlzz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YvWdNxxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sk19tb18i7och8estlzz.jpg" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The updated confirmation window is written in casual language without formality. It tells you how the process of deleting an account works. The unnecessary info and ambiguity in the name of the button were removed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If a person feels comfortable with the product, they get used to it and recommend it. Word of mouth works — the number of unique users grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the business understands its audience&lt;/strong&gt;, microcopy personifies the business as a brand. We communicate with people in a common language and build trusting relationships. In a modern product, it’s key to show that there are real people behind the product. Also, it’s important to stick to the voice of the brand. By the way, being calm and respectful is also the voice and character of the brand.&lt;/p&gt;

&lt;p&gt;One of the ways to accommodate the needs of a large audience is to use universal English in microcopy, without British humor or American slang. That’s how the product becomes easier to understand for more people across the globe.&lt;/p&gt;

&lt;p&gt;UX writing is also about accessibility. We can’t write something like ‘Press the green button on the left side of the screen’, as this leaves out people with disabilities and limitations. According to the World Health Organization, one in seven people have one or more disabilities. Such a disability may also be temporary. For example, when using the phone outdoors in sunny weather, it’s very difficult to distinguish colors in bright sunlight.&lt;/p&gt;

&lt;p&gt;We also aim to preempt possible questions. Remember the identity verification screen? We mentioned that the photo will not be published, which helped to boost by 7% in just two weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you focus on software development&lt;/strong&gt;, the person won’t notice that everything is working, because it should be that way. In this case, microcopy can make the UX even better.&lt;br&gt;
According to our research, people notice it when microcopy becomes more readable and easier to scan. If programmers pay little attention to microcopy, the structure may crash: lists, non-breaking spaces, separation with an empty line — anything can go wrong. A responsible development team makes sure the screen matches its layout exactly.&lt;/p&gt;

&lt;p&gt;How does UX writing benefit a software product?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An edge over the competition.&lt;/li&gt;
&lt;li&gt;Expanded audience — accommodating those who couldn’t use the product before.&lt;/li&gt;
&lt;li&gt;Ethical product that keeps up with the times.&lt;/li&gt;
&lt;li&gt;Genuine care and long-term relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general, UX writing is an investment in a software product. Proper microcopy helps a company reach out to different audiences and make the product relevant in various scenarios.&lt;/p&gt;

&lt;p&gt;By thinking about people and caring about their experience, we create the best version of our product. A product that helps people and powers company growth.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>writing</category>
    </item>
    <item>
      <title>A journey into the unknown: how we saw Qase</title>
      <dc:creator>inDrive.Tech</dc:creator>
      <pubDate>Wed, 22 Jun 2022 12:59:15 +0000</pubDate>
      <link>https://dev.to/indrive_tech/a-journey-into-the-unknown-how-we-saw-qase-kl6</link>
      <guid>https://dev.to/indrive_tech/a-journey-into-the-unknown-how-we-saw-qase-kl6</guid>
      <description>&lt;p&gt;In this article, I will try to provide a brief description of what the Qase test management system looks like. There will be some small marks where there are differences from TestRail, the system we used to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  A little background
&lt;/h3&gt;

&lt;p&gt;One not-so-great day, we started thinking about moving from TestRail to a different Test Management System (TMS). This is because TestRail had started to produce bugs that we did not like.&lt;/p&gt;

&lt;p&gt;It became inevitable that we would have to search for a new system. And we started Googling right away. Most of the articles we found described each system in general terms — this is a TMS, which allows us to store and edit cases. And here is a list of its features. But that wasn’t enough. The upshot of our short search was Qase.&lt;/p&gt;

&lt;p&gt;A couple of words on what Qase is all about. It is a cloud-based test management system that helps teams store and organize product test information and organize team work. To put it simply, it is a place where testers hold their test cases and carry out all sorts of manipulations with them.&lt;/p&gt;

&lt;p&gt;This article will constitute a short overview of the system. I will briefly touch on the main questions to which our team wanted to find out the answers, and that we received on the demo and during the transition.&lt;/p&gt;

&lt;h3&gt;
  
  
  General view
&lt;/h3&gt;

&lt;p&gt;At the top, we see a menu that divides the resource into different parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dih9PRsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgdcfvnbguujmu04lvqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dih9PRsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgdcfvnbguujmu04lvqu.png" alt="Image description" width="880" height="207"&gt;&lt;/a&gt;&lt;em&gt;Menu&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project — contains projects that we select from the list of projects created. We can create our own project. There is also a list of cases, runs, plans, etc.&lt;/li&gt;
&lt;li&gt;Workspace — workspace setup (users, gender, roles).&lt;/li&gt;
&lt;li&gt;Reports — reports and queries.&lt;/li&gt;
&lt;li&gt;Apps — integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects can be presented as a list or as cards:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mwj4FVQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywptdsnsgcndp7q1jtq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mwj4FVQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywptdsnsgcndp7q1jtq7.png" alt="Image description" width="880" height="207"&gt;&lt;/a&gt;&lt;em&gt;Lists&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9CM38Jg7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rsylxt2mij9qstsbbryz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9CM38Jg7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rsylxt2mij9qstsbbryz.png" alt="Image description" width="880" height="483"&gt;&lt;/a&gt;&lt;em&gt;Cards&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here we can create a new project, find it, filter it, and add it to favorites. The latter option allows us to keep the selected projects at the top of the list at all times. We can choose an icon for each project — this is very convenient.&lt;/p&gt;

&lt;p&gt;Let’s move on to a more detailed review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case Repository
&lt;/h3&gt;

&lt;p&gt;Here’s what this section looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PXArXHY0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ovxkqp0ea6o94b86o7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PXArXHY0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ovxkqp0ea6o94b86o7i.png" alt="Image description" width="880" height="286"&gt;&lt;/a&gt;&lt;em&gt;Repository&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We see here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action menu with cases — it appears only if we select several cases. Actions are visible on the buttons.&lt;/li&gt;
&lt;li&gt;List of cases — this contains the automation icon (a hand turning a gear that sets the automation level), case ID and name. At the bottom, there is a button for creating a case quickly. There are 4 buttons next to the name of the suite — creating a suite or case, editing the description, cloning, and deleting.&lt;/li&gt;
&lt;li&gt;View — a way to display cases. All in one long plain-text version, or each folder separately.&lt;/li&gt;
&lt;li&gt;Action menu — exporting and importing cases. There is also a very handy trash can. No case will ever be deleted, but will simply be put in the trash.&lt;/li&gt;
&lt;li&gt;List of suites in the project — contains the name and number of cases in it.&lt;/li&gt;
&lt;li&gt;Case counter — contains the total number of suites and cases. If we apply a filter, it will contain values based on the filters set.&lt;/li&gt;
&lt;li&gt;Adding filters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;A brief word on the advantage of TestRail in this section — there we can add the display of information about additional fields to the list. Unfortunately, this is not yet available in Qase.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here’s what the case looks like with different opening methods:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hWyb46j2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4gw5k2ulcowi2wuokwq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hWyb46j2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4gw5k2ulcowi2wuokwq.png" alt="Image description" width="880" height="340"&gt;&lt;/a&gt;&lt;em&gt;When you tap on the case name, it opens like this&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--umfYUgHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0mg0492d429u1lvkkbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--umfYUgHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0mg0492d429u1lvkkbg.png" alt="Image description" width="880" height="432"&gt;&lt;/a&gt;&lt;em&gt;When you tap on the case ID in the list, a preview opens up&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The editing mode is presented in two screenshots:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oZDFoc6l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oeqgkqkpkhthkx5bv9gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oZDFoc6l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oeqgkqkpkhthkx5bv9gg.png" alt="Image description" width="880" height="411"&gt;&lt;/a&gt;&lt;em&gt;Editing №1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EgmWPEcL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/net3gllf6plb2rkmfvem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EgmWPEcL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/net3gllf6plb2rkmfvem.png" alt="Image description" width="880" height="295"&gt;&lt;/a&gt;&lt;em&gt;Editing №2&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Above, there are standard system fields, then pre- and post-conditions.&lt;/li&gt;
&lt;li&gt;Tags.&lt;/li&gt;
&lt;li&gt;Custom fields.&lt;/li&gt;
&lt;li&gt;Attachments.&lt;/li&gt;
&lt;li&gt;Parameters. Example of usage — when you enter 2 parameters, there are already 2 identical cases in the run, one for each parameter. There is still only one case in the repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the steps themselves and the objective results, a toolbar is provided; this eliminates the need to keep the markdown in your head (I always struggled with this in TestRail). Font color, type, 2 types of list, links, tables, image, code block, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fMN9h2op--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jf4kqdl39mx1h421lv9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fMN9h2op--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jf4kqdl39mx1h421lv9b.png" alt="Image description" width="874" height="344"&gt;&lt;/a&gt;&lt;em&gt;Toolbar&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Shared Steps
&lt;/h3&gt;

&lt;p&gt;This contains the list of Shared Steps for the project. It is possible to create and edit a shared step, and also to search by the existing ones.&lt;/p&gt;

&lt;p&gt;It is convenient that they are not stored in one big heap: each project has its own set. They can be edited easily and created immediately. As we can see, the number of cases in which it is used is displayed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M_I-JOxW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vlk33m6ql3hh2xuam3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M_I-JOxW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vlk33m6ql3hh2xuam3z.png" alt="Image description" width="880" height="476"&gt;&lt;/a&gt;&lt;em&gt;Shared Steps&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Con: shared steps with the same name can be created. And only here can we make it from two or more steps.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When creating a shared step in the case editing mode, we can create it in just one step:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf1m4LcZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nhwbwviinyd40bqsd1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf1m4LcZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nhwbwviinyd40bqsd1l.png" alt="Image description" width="880" height="236"&gt;&lt;/a&gt;&lt;em&gt;Creating a Shared Step&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Milestones
&lt;/h3&gt;

&lt;p&gt;Used to indicate a milestone in development. I could not find any differences between Qase and its fellow product, TestRail. It’s available as part of the project, and this makes good logical sense. We hardly ever use it.&lt;/p&gt;

&lt;p&gt;The description of the list contains basic information about it. Unfortunately, there are no filtering options on this screen yet.&lt;/p&gt;

&lt;p&gt;A milestone can be selected when creating a run or a case within a project. If you have several teams, and each has its own project, creating a single entry point will not work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bME_HMQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qi1drqe6rxs83em0bvqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bME_HMQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qi1drqe6rxs83em0bvqm.png" alt="Image description" width="880" height="154"&gt;&lt;/a&gt;&lt;em&gt;Milestone&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Plan
&lt;/h3&gt;

&lt;p&gt;This is where things get more interesting:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--89F6bPDj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/64rrvdsb1ytmvgmd1cau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--89F6bPDj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/64rrvdsb1ytmvgmd1cau.png" alt="Image description" width="880" height="217"&gt;&lt;/a&gt;&lt;em&gt;Plan&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The main difference between Qase and TestRail is that the plan is a template for the future run. In TestRail, it was the entity that enabled runs to be merged.&lt;/p&gt;

&lt;p&gt;The plan contains the name and estimated run time — it is formed on the basis of the duration of the cases (if they were run). This is convenient if you want to provide a forecast about the run time.&lt;/p&gt;

&lt;p&gt;When creating a plan, you can provide a name and a description, and collect cases by condition. Also, when selecting cases, assign is available for the person selected.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cons: no dynamic filters. If you collected cases according to a condition, but then they stopped going there, the plan will not change.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--khvZrt9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xzsj12x1bh7eydkk8bye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--khvZrt9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xzsj12x1bh7eydkk8bye.png" alt="Image description" width="880" height="253"&gt;&lt;/a&gt;&lt;em&gt;Assigned cases in the plan&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Runs
&lt;/h3&gt;

&lt;p&gt;Just as in TestRail, this is a set of cases to run within a release or a feature. The peculiarity is that there is a wizard, a kind of interface for performing a run.&lt;/p&gt;

&lt;p&gt;Multiple entry points for creating a run:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select a plan — create a run based on it.&lt;/li&gt;
&lt;li&gt;Go to the Test Runs section — create a run there.&lt;/li&gt;
&lt;li&gt;Select one or more cases in the repository — use the action bar (Run button) to start them up.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_BbKvKC7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xoqks4fzitewjewf5vqk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_BbKvKC7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xoqks4fzitewjewf5vqk.png" alt="Image description" width="880" height="451"&gt;&lt;/a&gt;&lt;em&gt;Test runs&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the left, there is a list of cases. We can filter them as required.&lt;/li&gt;
&lt;li&gt;On the right, there is the case itself. At the top, there is the result for the case; below each step, there is a specific result.&lt;/li&gt;
&lt;li&gt;The View and Edit buttons open the case in a new window for viewing and editing, respectively. Changes to a case lead to a change in the case in the run after a page refresh.&lt;/li&gt;
&lt;li&gt;Custom fields are displayed in the run, above the steps (we can see the AndroidResult field as an example).&lt;/li&gt;
&lt;li&gt;Case Run History — history of the case. This displays the result of past runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;_Cons: it is not clear what was written in the comment when the case was run. We need to open the general list of cases in the run (*by closing the wizard) and click on the result label. &lt;/p&gt;

&lt;p&gt;And if we do not put in the result for each step of the case, we will not see the steps in the completed case.&lt;/p&gt;

&lt;p&gt;It seems to me that TestRail is more convenient, since we can immediately see in the tab what happened in the last run._&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_fa2lgLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q825wm0zj5ffwcayfvcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_fa2lgLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q825wm0zj5ffwcayfvcl.png" alt="Image description" width="880" height="372"&gt;&lt;/a&gt;&lt;em&gt;View of the run with a closed wizard&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We see a list of cases; when they are selected, several more actions are available. In the side menu, there is a chart of case statuses (when clicked, filtering by the status selected is performed) and some information (who started it and when).&lt;/p&gt;

&lt;p&gt;The Team stats tab will show how much has been completed, and by whom:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0gtBKG_2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p77p7rsl97ouiagsyv1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0gtBKG_2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p77p7rsl97ouiagsyv1u.png" alt="Image description" width="880" height="190"&gt;&lt;/a&gt;&lt;em&gt;Team stats&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Settings
&lt;/h3&gt;

&lt;p&gt;It is logical that it contains the project settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sajcrb_h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ffx6v371d3xmnt9opyg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sajcrb_h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ffx6v371d3xmnt9opyg3.png" alt="Image description" width="880" height="402"&gt;&lt;/a&gt;&lt;em&gt;Settings&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Name, code (this will be the case ID), description, and type. There are also tabs for integration, webhooks, configuration, and setup.&lt;/p&gt;

&lt;p&gt;Of particular interest is the Settings tab — there we can set settings for starting and ending runs, confirming the deletion of a case, and displaying fields in project cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workspace
&lt;/h3&gt;

&lt;p&gt;Here we see the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GXn-7Mis--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8isgsc4ippza7mfhx69a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GXn-7Mis--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8isgsc4ippza7mfhx69a.png" alt="Image description" width="378" height="808"&gt;&lt;/a&gt;&lt;em&gt;Workspace&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Members — a list of participants: their role, name and the time of their last activity. This makes it possible to block and unblock users. There are filters by status (active or blocked), role, and type (full or read only).&lt;/li&gt;
&lt;li&gt;Invites. This contains a list of the invites sent. There is an option to revoke an invite on this page.&lt;/li&gt;
&lt;li&gt;Groups — used when a private project is being created. When creating a project whereby access is only given to a specific group.&lt;/li&gt;
&lt;li&gt;Roles — roles in TMS. It regulates the capabilities of a user under a specific role. We can create a role, delete it or edit it.&lt;/li&gt;
&lt;li&gt;Fields — system and custom fields, creating or editing, and also deleting.&lt;/li&gt;
&lt;li&gt;Tags — entity available for a case, a run, and other filtering options.&lt;/li&gt;
&lt;li&gt;Attachments — a complete list of all attachments (photos, etc.). It is possible to conduct a search: we can specify in which project a specific attachment is involved.&lt;/li&gt;
&lt;li&gt;Logs — a complete log of the actions of all users. Various filtering options are available.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fields and Roles
&lt;/h3&gt;

&lt;p&gt;In the Field tab, we can set up system fields and custom fields. We can create custom ones right there:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tnG2FuZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g749e4semj744bmyq8qz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tnG2FuZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g749e4semj744bmyq8qz.png" alt="Image description" width="880" height="352"&gt;&lt;/a&gt;&lt;em&gt;Fields&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All the fields are in one place — this is convenient, as we can set up the visibility of a specific project for each field.&lt;/p&gt;

&lt;p&gt;Edit a field (a custom one or a system one) — here you are, except for the Automated, isFlaky, and Status system fields. Also, you will not be able to change the field type (from Single List to Multi List, for example). Everything else can be edited quickly and in a convenient way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c6tEQxXe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9y1hu8am2gmbhkzdjtzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c6tEQxXe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9y1hu8am2gmbhkzdjtzw.png" alt="Image description" width="880" height="732"&gt;&lt;/a&gt;&lt;em&gt;Editing field №1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N9-3spX0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgv10ccdyilo5g55417d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N9-3spX0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgv10ccdyilo5g55417d.png" alt="Image description" width="880" height="848"&gt;&lt;/a&gt;&lt;em&gt;Editing field №2&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When editing, the name of the fields (though not for system ones), direction (case or run), and type are set. Next, the visibility for the project and the default value are selected.&lt;br&gt;
The values are set on the second tab. For each one, as needed, a color and an icon are selected (for some future feature, I suppose). Values can be deleted, their positions can be swapped, and new ones can be added.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now let’s talk about the roles:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--68Jdub28--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1dil5x8657v83soxzsrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--68Jdub28--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1dil5x8657v83soxzsrz.png" alt="Image description" width="880" height="204"&gt;&lt;/a&gt;&lt;em&gt;Roles&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We see the list of roles, type and whether the field is a default one. The number of users for each role is displayed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iv6D3B1k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q8w8d03s49vnnite95c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iv6D3B1k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q8w8d03s49vnnite95c3.png" alt="Image description" width="880" height="896"&gt;&lt;/a&gt;&lt;em&gt;Creating a role&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When creating the role, we set the name, description and choose what is available for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reports
&lt;/h3&gt;

&lt;p&gt;On this page we can create and see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard — information about the project or projects. The dashboard contains some information about cases and other data. One or more widgets are created in order to display information about cases, runs or defects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cNlMl8Xb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26fwjbd4fze2cph40wwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cNlMl8Xb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26fwjbd4fze2cph40wwa.png" alt="Image description" width="880" height="383"&gt;&lt;/a&gt;&lt;em&gt;Dashboard&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query — a QQL query is created (this is similar to the advanced search function in Jira). A search is performed for projects according to conditions (status, project, name, etc.). A QQl memo will open if you click on the question icon in the search bar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each query can be edited however you like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6D3GlZLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttzr9vi34ka16qhfgudq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6D3GlZLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttzr9vi34ka16qhfgudq.png" alt="Image description" width="880" height="139"&gt;&lt;/a&gt;&lt;em&gt;Queries&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saved queries — a list of saved queries is stored here:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hzpwFWjK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7c7w214rrxs1kzwm2fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hzpwFWjK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7c7w214rrxs1kzwm2fw.png" alt="Image description" width="880" height="129"&gt;&lt;/a&gt;&lt;em&gt;Saved queries&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile. When we click on it, we will see the following:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3qZ0BBr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5a0bv5c34s38ghcwjge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3qZ0BBr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5a0bv5c34s38ghcwjge.png" alt="Image description" width="576" height="762"&gt;&lt;/a&gt;&lt;em&gt;Profile&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Billing — a button for payment. This contains information about the payment for the current subscription, as well as the payment history (access depends on the role).&lt;/li&gt;
&lt;li&gt;Appearance — choice of a theme from among the ones suggested.&lt;/li&gt;
&lt;li&gt;API tokens — creating an API token.&lt;/li&gt;
&lt;li&gt;Profile — setting up a profile, changing the name, password, subscribing to notifications, and adding a photo.&lt;/li&gt;
&lt;li&gt;Help — a help center.&lt;/li&gt;
&lt;li&gt;API docs — API documentation.&lt;/li&gt;
&lt;li&gt;Roadmap — a product roadmap. This shows which features are planned, which are in the works, and which have already been implemented.&lt;/li&gt;
&lt;li&gt;Status — information about incidents, the current state of the product.&lt;/li&gt;
&lt;li&gt;Sign out — exit button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fG9NsWR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yx1v66meb8olupx4mevh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fG9NsWR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yx1v66meb8olupx4mevh.png" alt="Image description" width="880" height="497"&gt;&lt;/a&gt;&lt;em&gt;Choice of themes&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Of course, one article is not enough to review a tool as large as this. I hope, though, that it will help you in choosing a solution. In the future, I will try to write a short piece with some more extensive material on how we migrated from TestRail.&lt;/p&gt;

&lt;p&gt;The result of the transition to Qase, for us, is the absence of critical bugs and peace of mind while we work. Yes, this TMS is not perfect, but it is better than TestRail. And our use of it has proven as much.&lt;/p&gt;

&lt;p&gt;The important thing is the continuous improvement of it and, even more importantly, the incredible feedback from the Qase developers themselves. It’s nice to get an answer to your questions quickly and to see bugs being fixed even more quickly (incomparably faster than with TestRail, when it took a couple of months for bugs to be fixed).&lt;/p&gt;

&lt;p&gt;During the transition to Qase, a lot of questions were asked, and we received a detailed and extended answer to each of them within 1 to 2 hours, at most. The number of questions, as you know, was huge. But the support team answered with all the calmness of a well-fed Tibetan boa constrictor.&lt;/p&gt;

&lt;p&gt;P.S. If you are interested in this topic, I am attaching links to the Qase &lt;a href="https://www.youtube.com/channel/UCvJ5CYaKZBcpD3OK4I-M_kA"&gt;YouTube channel&lt;/a&gt; and &lt;a href="https://github.com/qase-tms"&gt;GitHub&lt;/a&gt;, where you can learn more about the system’s capabilities.&lt;/p&gt;

</description>
      <category>qa</category>
      <category>testing</category>
      <category>qase</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
