{"id":36528,"date":"2023-06-08T11:07:42","date_gmt":"2023-06-08T08:07:42","guid":{"rendered":"https:\/\/orbitsoft.com\/blog\/?p=36528"},"modified":"2023-06-09T13:47:46","modified_gmt":"2023-06-09T10:47:46","slug":"bugs-monitoring","status":"publish","type":"post","link":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/","title":{"rendered":"We decreased the number of support referrals by a factor of 30"},"content":{"rendered":"\n<p>A software error, or a bug, is a defect in the application, due to which it behaves differently than the user expects. For example, it freezes, displays incorrect data, charges users more than once for one purchase. Most frequently, bugs appear due to errors in the code, incorrect integration with other systems, or incorrect data entry.<\/p>\n\n\n\n<p>Most bugs can be fixed before users encounter them. That\u2019s why automatic and manual tests are carried out before launching the application. But there are errors that appear after launch. If it\u2019s not fixed quickly, users will leave, and the company will lose money. So, you need to set up monitoring systems to prevent this: it will help you to find the cause and eliminate errors quickly.<\/p>\n\n\n<div class=\"wp-block-lazyblock-case lazyblock-case-Z1sr4Xv\"><div class=\"styled-block\">\n  <div class=\"styled-block__main\">\n          <h3 class=\"styled-block__title\">\n        In briefe      <\/h3>\n        <ul class=\"case__list\">\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">01<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Project<\/span>\n            <\/div>\n            <p><span style=\"font-weight: 400;\">VPN app with a paid subscription<\/span><\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">02<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Problem<\/span>\n            <\/div>\n            <p><span style=\"font-weight: 400;\">The more time spent on fixing bugs in the application, the more users leave<\/span><\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">03<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Task<\/span>\n            <\/div>\n            <p><span style=\"font-weight: 400;\">Develop a solution that will help you to fix errors in the application quickly, so the business loses less money<\/span><\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">04<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Results<\/span>\n            <\/div>\n            <ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">We connected Elasticsearch log viewing system and crash reporting system<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The number of technical support referrals decreased by a factor of 30<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Since 2022, there hasn\u2019t been a single major glitch in the application<\/span><\/li>\n<\/ul>          <\/div>\n        <\/li>\n          <\/ul>\n  <\/div>\n  <\/div><\/div>\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-29KmJ8\"><h2 class=\"article__h\">Project: Paid VPN app <\/h2><\/div>\n\n\n<p>A Canadian company runs an adult video platform. The company turned to OrbitSoft to avoid losing users in countries where such content is blocked. In 10 months, we have developed a VPN application for five operating systems. The client saved his audience and even received additional profit: the application is used not only by the subscribers, but also by other clients.<\/p>\n\n\n\n<p>Read more about the project in the article \u201cVPN application: how we fixed other people&#8217;s mistakes and launched the project\u201d. We described how we connected online payment, notification system, and CRM in this case \u201cHow to set up external integration using a VPN application as an example\u201d. In this article we\u2019re focus on the organization of technical support and integration of error monitoring systems.<\/p>\n\n\n<div class=\"wp-block-lazyblock-banner lazyblock-banner-Z23nYM\"><div \n  class=\"banner\n   \n  \" \n  >\n    <div class=\"banner__body\">\n        <h2 class=\"banner__h\">We integrate external systems and services into websites and applications:<\/h2>\n        <div class=\"banner__content\">\n            <ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">CRM, ARM, POS, warehouse systems<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Notification systems, SMS and email distributions<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Payment services<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Error monitoring systems and etc.<\/span><\/li>\n<\/ul>        <\/div>\n                            <div \n              class=\"banner__button button js-form-modal\n               button_style_light-on-promo2\">\n               Order a free consultation                          <\/div>\n            <\/div>\n    <div class=\"banner__photo\">\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/product-form-1.png\" alt=\"\" class=\"banner__img\">\n    <\/div>\n<\/div><\/div>\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-Z2eeTsn\"><h2 class=\"article__h\">Problem: the more time spent fixing app bugs, the more users quit <\/h2><\/div>\n\n\n<p>When launching the application, we connected technical support, or helpdesk, to it. This is the main way to get information about bugs and feedback from users: they write to technical support when they encounter a bug. We ran into two problems:<\/p>\n\n\n\n<ol>\n<li>In tickets, people describe the problem in their own words. Most often they write something like \u201cthe page doesn\u2019t open\u201d, \u201cthe application freezes\u201d or \u201cI paid for a subscription, but nothing happened\u201d. It\u2019s not always clear to developers what is the cause of the error from such explanations. It takes a long time to ask all of the questions that can relate to a matter to find out what\u2019s causing the problem.<\/li>\n\n\n\n<li>Users are reluctant to answer questions about bugs. If you ask them to do some complicated things, for example, get into a registry, turn VPN services on and off, people won\u2019t bother at all: it\u2019s easier for them to remove the application and install another one.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-ZwqlYj\"><h2 class=\"article__h\">We developed systems that speed up bug fix process in the application <\/h2><\/div>\n\n\n<p>To speed up the processing of requests from users and give technical support more information about emerging problems, we decided to implement two systems<\/p>\n\n\n\n<ul>\n<li>The log viewer system collects information about user activities<\/li>\n\n\n\n<li>The crash reporting system generates detailed crash reports for developers<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-m0pze\"><figure class=\"article__figure \">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/tg_image_787931682.jpeg\" alt=\"Scheme1\">\n    <\/div>\n                <figcaption><em>At the request of the user, the developer reviews the information in the system for viewing logs and crash reporting, which speeds up the solution of the problem. When the error is fixed, the operator sends a notification to the user through the notification system<\/em><\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-heading3 lazyblock-heading3-Z2jIvyB\"><h3 class=\"article__h3\">The log viewer tells about user actions<\/h3><\/div>\n\n\n<p>Logs are files with the information about user actions and server operation. For example, if user paid for the subscription and it doesn\u2019t get activated, the log will record: from which IP address and through which payment system he tried to pay, how the payment request was transmitted to the payment system and where in this chain the data could get stuck. The developer opens the file, studies the information and understands what needs to be fixed so that the payment error doesn\u2019t happen again.<\/p>\n\n\n\n<p>At first, VPN application logs were stored on a single server. Developers could search for information in them manually. However, later we decided to make the architecture more robust and deployed a cluster of three servers. This is necessary for the application to be able to get scaled and not to worry about it can get frozen due to high volume of users.<\/p>\n\n\n\n<p>With the new architecture, sorting through the logs manually has become inconvenient. For example, a payment notification was received from the payment system. One server places it in queue, then another server processes it. Developer had to connect to servers to trace the entire path of this notification through the logs, use UNIX commands to select log files for a certain period, open and read each of them. It took a lot of time, so we decided to automate the process.<\/p>\n\n\n\n<p><strong>Automated work with logs<\/strong><\/p>\n\n\n\n<p>We used a ready-made solution for monitoring logs &#8211; Elasticsearch. The system collects information from three servers into one storage and provides a convenient interface for the developer. There\u2019s no need to connect to the server and go to the log files. You can search for information by keywords and see the result right in your browser.<\/p>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-1tYVKU\"><figure class=\"article__figure \">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/tg_image_4217900603.jpeg\" alt=\"Scheme2\">\n    <\/div>\n                <figcaption><em>This is how working with logs in the Elasticsearch system looks like<\/em><\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-Zq75Lv\"><figure class=\"article__figure \">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/Elasticsearch.jpg\" alt=\"Screenshot of the Elasticsearch-based admin panel\">\n    <\/div>\n                <figcaption><em>This is how the Elasticsearch-based admin panel looks like. The timeline shows when the user performed actions in the application. This helps to quickly find out what the problem is<\/em><\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-heading3 lazyblock-heading3-Z2vKkre\"><h3 class=\"article__h3\">The crash reporting system generates error reports<\/h3><\/div>\n\n\n<p>We chose a ready-made crash reporting library for .Net, in which the application is written. We connected it to the application and added the addresses where messages from users should come to. It took us only a day to set up this system.<\/p>\n\n\n\n<p>How the report is generated:<\/p>\n\n\n\n<ol>\n<li>The application shows an error and the user sends a request to the technical support.<\/li>\n\n\n\n<li>The library generates an error report and sends it to the administrator by email. The report contains information about which part of the application and code caused the error, as well as log files with the user activity. They can be compared with the logs of our API server.<\/li>\n<\/ol>\n\n\n\n<p>The crash reporting system not only generates error reports, but also collects feedback from users: it sends an email and asks to rate the application and the specific VPN servers. This is how statistics on server performance is collected &#8211; see which of them are problematic and also fix errors there.<\/p>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-Z9sAW0\"><h2 class=\"article__h\">Results <\/h2><\/div>\n\n\n<p>Integration error monitoring systems into the applications helps to quickly find out the cause of bug and fix it. For the VPN application, we set up and connected two systems:<\/p>\n\n\n\n<ul>\n<li>Elasticsearch log viewing system. With it, developers don\u2019t have to manually investigate a lot of log files to fix a bug. All information is collected in one storage with a convenient web interface.<\/li>\n\n\n\n<li>The crash reporting system automatically generates an error report that helps the developer quickly understand which part of the application caused the crash.<\/li>\n<\/ul>\n\n\n\n<p>We didn\u2019t develop monitoring systems from scratch, but integrated third-party solutions that are well known to us. This made it possible to shorten the project time.<\/p>\n\n\n\n<p>Feedback helped to improve the application: we finalized it according to crash reports, and now only minor bugs come to tech support. For example, users of a Windows application used to send 2-3 emails per day to technical support, and after the implementation of the system, 1-2 emails per month. Since 2022, the app hasn\u2019t had a single major outage.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A software error, or a bug, is a defect in the application, due to which it behaves differently than the user expects. For example, it freezes, displays incorrect data, charges users more than once for one purchase. Most frequently, bugs appear due to errors in the code, incorrect integration with other systems, or incorrect data [&hellip;]<\/p>\n","protected":false},"author":214,"featured_media":36529,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[196],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>We decreased the number of support referrals by a factor of 30 - OrbitSoft Blog<\/title>\n<meta name=\"description\" content=\"Case of setting up error monitoring systems in a VPN application: the Elasticsearch log viewing system and the crash reporting system\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"We decreased the number of support referrals by a factor of 30 - OrbitSoft Blog\" \/>\n<meta name=\"twitter:description\" content=\"Case of setting up error monitoring systems in a VPN application: the Elasticsearch log viewing system and the crash reporting system\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/tg_image_982864710.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@orbitsoft\" \/>\n<meta name=\"twitter:site\" content=\"@orbitsoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"elevina\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"We decreased the number of support referrals by a factor of 30 - OrbitSoft Blog","description":"Case of setting up error monitoring systems in a VPN application: the Elasticsearch log viewing system and the crash reporting system","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/","twitter_card":"summary_large_image","twitter_title":"We decreased the number of support referrals by a factor of 30 - OrbitSoft Blog","twitter_description":"Case of setting up error monitoring systems in a VPN application: the Elasticsearch log viewing system and the crash reporting system","twitter_image":"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/tg_image_982864710.jpeg","twitter_creator":"@orbitsoft","twitter_site":"@orbitsoft","twitter_misc":{"Written by":"elevina","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/","url":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/","name":"We decreased the number of support referrals by a factor of 30 - OrbitSoft Blog","isPartOf":{"@id":"https:\/\/orbitsoft.com\/blog\/#website"},"datePublished":"2023-06-08T08:07:42+00:00","dateModified":"2023-06-09T10:47:46+00:00","author":{"@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/f96c7f7c1bcb1cdf7e1750794548b6fa"},"description":"Case of setting up error monitoring systems in a VPN application: the Elasticsearch log viewing system and the crash reporting system","breadcrumb":{"@id":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/orbitsoft.com\/blog\/bugs-monitoring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/orbitsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"We decreased the number of support referrals by a factor of 30"}]},{"@type":"WebSite","@id":"https:\/\/orbitsoft.com\/blog\/#website","url":"https:\/\/orbitsoft.com\/blog\/","name":"OrbitSoft Blog","description":"Discover the latest in news and resources for OrbitSoft","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/orbitsoft.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/f96c7f7c1bcb1cdf7e1750794548b6fa","name":"elevina","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9f569b41ea8902fc571542fc77005a24?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9f569b41ea8902fc571542fc77005a24?s=96&d=mm&r=g","caption":"elevina"},"url":"https:\/\/orbitsoft.com\/blog\/author\/elevina\/"}]}},"_links":{"self":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36528"}],"collection":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/users\/214"}],"replies":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=36528"}],"version-history":[{"count":4,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36528\/revisions"}],"predecessor-version":[{"id":36542,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36528\/revisions\/36542"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/media\/36529"}],"wp:attachment":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=36528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/categories?post=36528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/tags?post=36528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}