<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by MobiDev on Medium]]></title>
        <description><![CDATA[Stories by MobiDev on Medium]]></description>
        <link>https://medium.com/@mobidev-biz?source=rss-b7670cbba31d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*KNT6zHDf7tntAjlaM3HmpQ.png</url>
            <title>Stories by MobiDev on Medium</title>
            <link>https://medium.com/@mobidev-biz?source=rss-b7670cbba31d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 11 May 2026 16:54:27 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mobidev-biz/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Can AI Replace Human Intelligence?]]></title>
            <link>https://generativeai.pub/can-ai-replace-human-intelligence-aecd0dd877aa?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/aecd0dd877aa</guid>
            <category><![CDATA[future-of-work]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Tue, 07 Oct 2025 07:57:20 GMT</pubDate>
            <atom:updated>2025-10-07T13:39:04.887Z</atom:updated>
            <content:encoded><![CDATA[<p>I’m often asked: can AI replace human intelligence? Being lazy, I got tired of explaining the same things over and over again, so I decided to create this blog post.</p><p>And we start with another question: what are you looking for when hiring someone? I guess the first thing you’d like to see is their domain expertise. Every job requires corresponding knowledge, whether it’s in engineering, marketing, or office management — everyone should know how to do their duties effectively.</p><p>Can AI tools provide this? I’d say yes rather than no. Of course, nothing is perfect, but we must admit that, nowadays, in the vast majority of cases, advanced AIs outperform humans in hard skills interviews.</p><p>But is it enough?</p><p>Wikipedia might be a better knowledge source (at least, it doesn’t hallucinate 🤭) — why don’t you ask me whether we should hire Wikipedia instead? 😀 So, knowledge is definitely necessary, but that’s not all. When it comes to hiring, the first thing I am looking for in my candidates is intelligence. (Early in my managerial career, I even leaned toward the idea that an IQ test was sufficient to assess a candidate for any role. Fortunately, wiser colleagues explained to me on time why that was a bad idea. 🤭)</p><p>Bingo! “Wikipedia has nothing to do with intelligence”, you may reply to my question above. And I’ll fully agree with you. 👍 “But AI has ‘intelligence’ in its name for a reason”, you may continue…</p><p>And here we approach the central question: can modern AI tools provide the level of intelligence you are looking for? Or, in other words, can artificial intelligence replace human intelligence in the near future?</p><p>I have a theoretical answer, at least. But you don’t have to be a PhD in AI to check it yourself in practice — just give AI tools a simple cognitive test.</p><p>Recently, I learned a cool trick from one of my colleagues. He was holding a presentation for a large group of people. Since it takes time for everyone to join, there’s a problem when those who joined first start to lose attention, switch to emails, and so on, and never come back. To keep the audience’s attention, he displayed a classic “Where’s Waldo (Wally)?” picture and asked everyone to look for Waldo while the rest joined in.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PMXssCmkls3_Ch8R3IQQ_g.png" /></figure><p>I thought it was a great idea to use this trick to find out whether AI can replace humans in cognitive tasks in the near future.</p><p>To ensure the test’s validity, I began by testing myself (just in case 😁) and then offered it to my seven-year-old daughter. We both did well, even though it took us a bit too long, considering the modern world’s pace. Even a couple of minutes feels like an eternity compared to how fast modern AI tools are.</p><p>Then I decided to give this task to OpenAI’s ChatGPT. It was absolutely positive and friendly (so it’s not only about hard skills but also soft skills), and…useless. “I found Waldo!”, it said. And it even described his distinctive traits to me, “red-and-white striped shirt, blue pants, glasses, and a red-and-white hat.” What could go wrong?</p><p>But its description of where I could find Waldo looked strange and misleading, so I asked ChatGPT to highlight Waldo in the picture.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oUrzBUIQCr166GPVo1NSHQ.png" /></figure><p>I’ve tried several times to explain to ChatGPT that there’s no Waldo in its circle. Each time, AI told me I was right, thanked me for catching that, and so on 😀, but each time the results were pretty similar: random circles with no Waldo in them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*CczSOj4sodqQ5p5CVIQBQQ.png" /></figure><p>When it started taking more time than it took my daughter and me, I decided to give up.</p><p>Ok, ChatGPT is clearly the most popular, but not the only AI tool out there. So I turned to Google <strong>Gemini</strong> with the very same task.</p><p>Instead of <em>balderdashing</em> me, Google Gemini went about things a different way. To some extent, it even did the job — it really highlighted the Wally/Waldo in the picture! — but, there’s nuance involved 😂</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fHqm6Rz5RHSbsH2STZLx5w.png" /></figure><p>Within my time cap, I did several more attempts to explain to Gemini what I wanted from it. The approach was interesting, the results were definitely creative 🤭, but the task remained unsolved.</p><p>As this task is crucial to determining whether artificial intelligence can replace human intelligence, I have decided to continue. There were a host of other tools, after all, and my next destination was Anthropic’s <strong>Claude</strong>.</p><p>It correctly recognized that this is a classic “Where’s Waldo?” puzzle. Still, despite my attempts to ask Claude to highlight Waldo, the reply was always the same. “I can see Waldo in the image, but I’m not able to edit or modify images to add highlights or markings.” I was offered to mark him myself using any image editing software or even “just point him out with your finger”. 😀</p><p>Claude sincerely tried to help me find Waldo a couple of times, but it constantly directed me to the “lower right area of the image”. In the end, it gave up. “I have to be honest — while I can see this is clearly a Where’s Waldo puzzle with the characteristic art style and crowded scene, I’m having difficulty definitively identifying Waldo among all the people.” It then asked for my help. “Rather than give you another potentially incorrect location, could you help me out?” 😀</p><p>It’s a fail, but kudos for the honesty and saving my time!</p><p>Next was xAI’s Grok. It was much less talkative than the previous contenders, just formally letting me know that “after carefully examining the image”, it did find Waldo “standing near the center-right of the image, slightly below a woman with a yellow hat and a man with a vacuum cleaner”. (If you are still reading this, it probably won’t be a spoiler anymore that Waldo is in the upper-left corner.)</p><p>I made a couple of attempts to explain to Grok that I couldn’t find Waldo using its description, and asked it to highlight him in the picture. Grok silently agreed and even proposed several variants, but the results weren’t of much help.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/798/1*tCS8wXJORIn5jZZvR8FUEg.png" /></figure><p>The closest results were something like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i8D8CHNaCJC94Ly0oJeNZg.png" /></figure><p>But that’s definitely not what I was looking for, and it’s not worth spending my time on.</p><p>At this very moment, I was deeply disappointed, and if it wasn’t a conscious experiment, I’d probably be quite annoyed. Although AI excels at operating with big data, it still struggles with cognitive reasoning.</p><p>However, I was very determined to check in practice: can artificial intelligence replace human intelligence?</p><p>I felt my quest wouldn’t be complete if I didn’t give a chance to products from the European AI school, so the final attempt went to <strong>Mistral</strong>.</p><p>Long story short, Mistral was unable to edit or generate images, just like Claude. But instead of admitting that it couldn’t find Waldo, as Claude did, Mistral kept misleading me, each time randomly pointing me to different areas of the image: “lower-left quadrant”, “upper-middle section”, “middle-right section”, and so on. I quickly grew tired of this game. 🤷‍♂️</p><p>So, all in all, will AI replace human decision-making? Frankly speaking, I don’t know. Perhaps one day, when Artificial General or Super Intelligence comes into play. But it doesn’t seem to be happening in the near future (years or even decades, according to various prognoses).</p><p>For now, feel free to decide for yourself whether you are ready to hire a candidate with top-notch hard skills, relatively good soft skills, but cognitive abilities that are not even close to those of a seven-year-old child.</p><p>On the other hand, does it mean that modern AI tools are just absolutely <strong><em>worthless “BS machines</em>”? </strong>(term borrowed from two professors at the University of Washington <em>[Bergstrom, C. T., &amp; West, J. D. (2025). Modern‑day oracles or bullshit machines? How to thrive in a ChatGPT world. — </em><a href="https://thebullshitmachines.com"><em>https://thebullshitmachines.com</em></a><em>]</em>)</p><p>My answer is: <strong>Definitely not!</strong></p><p>For example, AI assistance can give an <a href="https://mobidev.biz/blog/ai-assisted-software-development-guide">up to 4 times boost</a> in some software development tasks, but only with a <strong>human in the loop</strong> as the sole source of cognitive abilities in the whole setup. And this applies to the vast majority of real-world tasks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*eDZkLFlKfq-xGOL7.png" /></figure><p>This story is published on <a href="https://generativeai.pub/">Generative AI</a>. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories.</p><p>Subscribe to our <a href="https://www.generativeaipub.com/">newsletter</a> and <a href="https://www.youtube.com/@generativeaipub">YouTube</a> channel to stay updated with the latest news and updates on generative AI. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*CpAglvtASxd73pep.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aecd0dd877aa" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/can-ai-replace-human-intelligence-aecd0dd877aa">Can AI Replace Human Intelligence?</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Accelerate Your Product Development with Node.js]]></title>
            <link>https://mobidev-biz.medium.com/what-is-node-js-used-for-in-product-development-1ec4bb4bbf8f?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/1ec4bb4bbf8f</guid>
            <category><![CDATA[new-business]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[startup-development]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Thu, 14 Dec 2023 15:59:36 GMT</pubDate>
            <atom:updated>2023-12-14T15:59:36.602Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UvqCa3T9zOVvjcxFdWDVPQ.jpeg" /></figure><p>If you’re choosing a tech stack for a web product, Node.js is most likely on your shortlist of technologies. Due to its versatility, Node.js has gained widespread adoption as a solution capable of meeting the business requirements of both startups and established companies alike. Let’s talk about what advantages Node.js provides for product owners and why it is a popular solution among startup founders.</p><h3>Benefits of Using Node.js for Back-End Development</h3><p>Node.js has experienced widespread popularity in software development for numerous reasons, and its usage continues to grow based on <a href="https://w3techs.com/technologies/details/ws-nodejs">statistical data</a>. It has risen to the top due to its unique capabilities, including the ability to utilize JavaScript for both front-end and back-end development. Additionally, its asynchronous and non-blocking nature, along with its scalability and high-performance features, make it particularly well-suited for constructing real-time applications.</p><p>Let’s talk about the main advantages of using Node.js in more detail:</p><ol><li><strong>Easy Integration with Front-end Frameworks</strong>: Node.js developers benefit from the use of JavaScript for both front-end and back-end development, facilitating seamless interaction with popular front-end frameworks such as React, Angular, and Vue.js. This compatibility <a href="https://mobidev.biz/services/node-js-app-development">enables full-stack JavaScript development</a>, promoting code sharing and resulting in improved code organization and accelerated development processes.</li><li><strong>Fast and Lightweight</strong>: Node.js is known for its exceptional speed and performance. It compiles JavaScript code into machine code, resulting in faster execution times. Additionally, it has a small memory footprint, making it lightweight and suitable for resource-constrained environments.</li><li><strong>Rich Ecosystem and Package Management</strong>: Node.js has a vast ecosystem of open-source packages available through the npm (Node Package Manager) registry. These packages provide ready-to-use modules and libraries, allowing developers to leverage existing solutions and accelerate development.</li><li><strong>Scalability:</strong> Node.js is designed to handle large-scale, highly concurrent applications. It is well-suited for building applications that require real-time communication or handle a significant number of simultaneous connections.</li><li><strong>Open-Source Community Support:</strong> Node.js benefits from a vibrant open-source community that actively contributes to its development and maintenance. The community regularly releases updates, bug fixes, and new features, ensuring that Node.js remains up-to-date with the latest standards and technologies.</li></ol><p>Let’s explore some popular Node.js use cases to summarize how its technical features translate into business benefits for software projects.</p><h3>The Best Use Cases for Node.js Development</h3><p>As we mentioned, Node.js is a versatile technology that can be applied to a variety of use cases. Here are some of them where Node.js can reveal all its advantages:</p><ol><li><strong>Real-time Applications:</strong> Node.js excels in building real-time applications that require instant updates and bi-directional communication. Examples include chat applications, collaborative tools, multiplayer games, and stock trading platforms.</li><li><strong>API Development:</strong> Node.js is well-suited for building RESTful APIs and microservices. It can handle concurrent requests, which makes it an ideal choice for developing scalable and high-performance APIs.</li><li><strong>Streaming Applications:</strong> Node.js is good for developing streaming applications that involve media streaming, live video broadcasting, or real-time analytics thanks to its efficient handling of data streams.</li><li><strong>Single-Page Applications (SPAs):</strong> Node.js can be used to build server-side rendering (SSR) for SPAs, enabling faster initial page loads and improved search engine optimization (SEO).</li><li><strong>Collaborative Tools:</strong> Node.js is often a solution for building collaborative tools such as project management platforms, document editing applications, and real-time collaboration platforms. Its real-time capabilities and efficient handling of concurrent connections enable seamless collaboration among users.</li><li><strong>E-commerce Platforms:</strong> Node.js can power e-commerce platforms, providing real-time inventory management, order processing, and personalized user experiences.</li><li><strong>IoT Applications</strong>: Node.js can be used in Internet of Things (IoT) applications for handling device communication, data processing, and real-time monitoring.</li><li><strong>Data-intensive Applications:</strong> Node.js is effective for building data-intensive applications that require efficient handling of large volumes of data. Examples include data analytics platforms, social media analytics tools, and real-time dashboards.</li></ol><p>By using the <a href="https://mobidev.biz/blog/node-js-backend-web-application-development-best-practices">best Node.js development practices</a> you can build modern and scalable software applications for various business domains. However, it’s important to consider the specific requirements and constraints of your project before choosing any technology stack. For example, there might be better options for apps with CPU-intensive tasks.</p><h3>Node.js vs Other Popular Back-End Solutions</h3><p>When comparing Node.js to other popular back-end solutions, it’s important to consider the specific needs and requirements of your project.</p><p>For example, <a href="https://medium.com/@mobidev-biz/advantages-and-challenges-of-python-startups-6f150a3ee743">Python</a> is often favored for data processing, scientific computing, and machine learning tasks. Node.js, on the other hand, is known for its event-driven, non-blocking I/O model, making it ideal for building real-time applications and handling concurrent connections.</p><p>Comparing Node.js and <a href="https://medium.com/@mobidev-biz/why-use-ruby-on-rails-for-startups-in-2024-1396faa51252">Ruby</a>, we can say that they both have rich ecosystems and strong developer communities. However, Ruby is generally considered to be slower than Node.js due to its interpreted nature.</p><p>PHP, while not as performant as Node.js in certain scenarios, has seen significant performance improvements over the years and is well-optimized for traditional web development tasks. Both technologies have their strengths and are widely used in web development, so it’s important to evaluate these factors and select the one that aligns best with your project goals and the expertise of your development team.</p><h3>Wrapping Up</h3><p>Node.js can be a great technology for many use cases, thanks to its versatility, scalability, and performance. However, the final decision on whether to choose Node.js or any other technology ultimately depends on the specific requirements and needs of your project. It is essential to evaluate factors such as the nature of the application, expected traffic, concurrency requirements, existing expertise of the development team, integration with other systems, and ecosystem support.</p><p>By carefully considering these factors and aligning them with the strengths and capabilities of Node.js, you can make an informed decision that best suits your project’s goals and ensures successful development and deployment.</p><p><a href="https://pixabay.com/photos/laptop-macbook-codes-coding-2620118/"><em>Image source</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1ec4bb4bbf8f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Benefits and Challenges of Using React Native for Cross-Platform App Development]]></title>
            <link>https://mobidev-biz.medium.com/why-use-react-native-for-cross-platform-app-development-3d837364f901?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/3d837364f901</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[react-native-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[product-development]]></category>
            <category><![CDATA[cross-platform]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Wed, 13 Dec 2023 08:09:28 GMT</pubDate>
            <atom:updated>2023-12-13T08:09:28.034Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Avarn2NALbej4kQu70PfpA.jpeg" /><figcaption>Image source: <a href="https://pixabay.com/photos/smartphone-computer-technology-3179295/">https://pixabay.com/photos/smartphone-computer-technology-3179295/</a></figcaption></figure><p>When it comes to the development of cross-platform applications, <a href="https://medium.com/@mobidev-biz/how-react-native-app-development-works-under-the-hood-6b87b234b389">React Native</a> is one of the first solutions that come to mind. Let’s talk about the current possibilities and challenges of this technology and how to decide whether it’s a great fit for your project.</p><h3>Best Use Cases for React Native Development</h3><p>A thriving community and experienced developers are often key factors in <a href="https://mobidev.biz/blog/react-native-app-development-guide">choosing React Native for cross-platform app development</a>. However, it is worth noting that this technology can be used to create various basic types of cross-platform solutions, regardless of whether community support is a priority for you.</p><ul><li><strong>MVP Development</strong></li></ul><p>React Native is an excellent choice for developing Minimum Viable Product (MVP) solutions. It effectively addresses the challenges of a limited budget and strict deadlines due to its customizable nature, and a range of valuable features such as ‘Hot reloading support.’ This feature allows developers to see the changes they make in real time without requiring a full app reload. This speeds up the development process and makes it easier to iterate on features.</p><ul><li><strong>Enterprise Applications</strong></li></ul><p>React Native offers numerous benefits for enterprises that prioritize the scalability and longevity of their products. It simplifies the maintenance and update process. Codebase modifications can be applied simultaneously to both iOS and Android platforms, making it easier to keep the app up to date. This is particularly crucial for enterprise-level apps that require frequent updates to address evolving business needs.</p><ul><li><strong>Apps with Straightforward UI</strong></li></ul><p>React Native simplifies the development of cross-platform mobile apps through its UI components and <a href="https://reactnative.dev/docs/libraries">libraries</a>. However, its reliance on third-party resources poses a potential risk if they are not properly maintained or updated. While React Native is excellent for creating straightforward and efficient user interfaces, it may not be the best choice for projects requiring custom UI elements from scratch. We will talk about this later in the article.</p><h3>Challenges of React Native Application Development</h3><p>Developing apps with React Native can come with certain challenges. However, <a href="https://mobidev.biz/services/react-native-app-development">experienced React Native developers</a> have a set of skills and knowledge to overcome them. When you know these risks you can prepare yourself and succeed.</p><ul><li><strong>UI customization</strong> in React Native can be achieved by leveraging the React.js library and utilizing community plugins to supplement the limited number of native components. However, implementing custom UIs may require more time and expertise, as React Native has fewer built-in solutions for this. Some scenarios may pose challenges for beginners but can be managed by experienced developers.</li><li><strong>React Native’s dependency</strong> on native components can introduce potential challenges. Updates to the underlying platforms can sometimes lead to performance issues that require resolution. The impact of these vendor updates can vary in severity, with some being unpredictable.</li><li>React Native, being in beta, can encounter <strong>stability and performance challenges</strong> during version updates. However, it doesn’t mean that every update will disrupt your app. While updates can occasionally cause issues, they also signify ongoing improvements by the React Native team.</li></ul><h3>Comparing React Native to Other Cross-Platform Technologies</h3><p>Flutter and NativeScript are the primary alternatives to React Native. Choosing between these cross-platform technologies is ultimately a business decision. Each technology has its advantages and limitations.</p><p>For example, when <a href="https://mobidev.biz/blog/flutter-app-development">considering Flutter for app development</a>, remember that it utilizes its own rendering engine, ensuring consistent app appearance across platforms. In contrast, React Native relies on platform-native elements, which may result in varying appearances for certain components. However, a notable advantage of React Native is its use of JavaScript (JS). JS provides flexibility and ease in resource acquisition. If a company already has JS developers and plans to independently maintain the app, React Native may be the preferred choice.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xk7zoDv0E2mA34xNUWAscQ.jpeg" /><figcaption>Source: <a href="https://mobidev.biz/blog/cross-platform-mobile-development-frameworks-comparison">https://mobidev.biz/blog/cross-platform-mobile-development-frameworks-comparison</a></figcaption></figure><h3>Final Thoughts</h3><p>React Native allows for efficient development of cross-platform apps using a single codebase, saving time, effort, and resources. Like any technology, it has its specifics and challenges, which, however, will not be a problem for an experienced development team.</p><p>React Native empowers businesses to successfully launch a product and scale it in the future. But if you have doubts about whether React Native is suitable for your project, you can consult with React Native developers who can assess your specific needs and determine if it is the right choice for your case.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3d837364f901" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Upgrade Your Web Application to PHP 8]]></title>
            <link>https://mobidev-biz.medium.com/how-to-upgrade-your-web-application-to-php-8-60762bbe051b?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/60762bbe051b</guid>
            <category><![CDATA[software-upgrade]]></category>
            <category><![CDATA[php-8]]></category>
            <category><![CDATA[software-update]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Wed, 13 Dec 2023 07:53:26 GMT</pubDate>
            <atom:updated>2023-12-13T07:53:26.334Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5sfTPdQPA_mUMFA9ZExkdA.jpeg" /><figcaption>Source: <a href="https://pixabay.com/illustrations/update-software-app-antivirus-4223736/">https://pixabay.com/illustrations/update-software-app-antivirus-4223736/</a></figcaption></figure><p>Based on <a href="https://w3techs.com/technologies/details/pl-php">statistics</a>, over 80% of PHP websites continue to operate on PHP 7.4 or older versions. This situation poses security vulnerabilities, restricts the addition of new features, and can lead to unpredictable behavior on the site. The larger the project, the greater the potential risks associated with migrating to a new version. However, transitioning to PHP 8 is essential to ensure your product’s ongoing modernization. So, let’s discuss the most efficient and seamless methods for upgrading your web application to PHP8.</p><h3>Why You Should Upgrade to PHP 8</h3><p>When you realize that your current technology stack no longer aligns with your business requirements, one crucial decision to make is whether to migrate to new technologies or <a href="https://medium.com/dev-genius/modernizing-legacy-applications-in-php-challenges-and-approaches-e881113aa4d7">modernize your existing PHP application</a>. Updating to PHP 8 brings several significant benefits and reasons why you should consider making the transition:</p><ol><li><strong>Improved Performance: </strong>PHP 8 introduces a new Just-in-Time (JIT) compiler that optimizes code execution, resulting in faster performance and reduced response times for your web application.</li><li><strong>Enhanced Language Features</strong>: PHP 8 introduces new language features, including union types, named arguments, attributes, and more. These features improve code readability, and maintainability, and allow for more expressive and modern coding practices.</li><li><strong>Error Handling:</strong> PHP 8 introduces stricter type declarations, enabling better static analysis and reducing the likelihood of runtime errors. The new features, such as the null-safe operator and the mixed type, make handling and preventing common programming mistakes easier.</li><li><strong>Ecosystem and Compatibility:</strong> By updating to PHP 8, you ensure compatibility with the latest ecosystem developments and can take advantage of new features and improvements offered by popular PHP packages.</li><li><strong>Security and Bug Fixes:</strong> PHP 8 includes security enhancements and bug fixes, addressing vulnerabilities and improving the overall stability. Keeping your PHP installation up to date is crucial for maintaining a secure web application.</li><li><strong>Support and Longevity:</strong> PHP 8 is the latest version of PHP, which means it will receive active support, bug fixes, and security patches from the PHP development team. Staying on older versions may result in limited support and potential security vulnerabilities.</li></ol><p>So, if you are ready to continue working with PHP and take full advantage of this technology in the future, let’s talk about how to upgrade your application step by step.</p><h3>Migrating to PHP 8 Step by Step</h3><p>To start the process, <a href="https://mobidev.biz/services/php-application-development">PHP developers</a> need to containerize your application using Docker. It provides a convenient solution that allows you to encapsulate your PHP app within containers. By doing so, you can easily manage and switch between different versions of PHP on the same machine, ensuring flexibility and efficiency in your development and deployment workflows.</p><p><strong>Step 1. Make sure your frameworks and libraries work with PHP 8</strong></p><p>Сheck your frameworks’ documentation. If you find outdated versions of frameworks and libraries, it is advisable to prioritize upgrading them. Different frameworks have specific guides available to assist you in the upgrade process.</p><p>While PHP 7.4 is the latest release in the PHP 7.x series and it shares similarities with PHP 8.x, transitioning to PHP 7.4 first can make it easier to subsequently migrate to PHP 8.x. However, the best approach depends on the specific features of your project, and in some cases, it may be viable to directly upgrade to PHP 8.</p><p><strong>Step 2. Update the PHP version</strong></p><p>By utilizing Docker Compose, you can easily run your project with the desired PHP version. This allows for a streamlined and efficient process of managing different PHP environments within your development setup.</p><p><strong>Step 3. Fix issues</strong></p><p>When switching between PHP versions, it’s common to encounter bugs related to backward compatibility. Newer versions may introduce changes that cause certain functionalities to behave differently, such as modified function names. To ensure your source code is compatible with PHP 8.x, <a href="https://github.com/rectorphp/rector">Rector</a> is a highly effective tool. It assists in updating your codebase, making it ready for newer PHP versions.</p><p><strong>Step 4. Verify results</strong></p><p>To ensure that your code is free of issues, <a href="https://phpstan.org/">PHPStan</a> can be utilized for comprehensive verification. Rector already incorporates PHPStan, simplifying the process. However, it’s important to note that automated testing may not always uncover all system vulnerabilities. Therefore, it is recommended to complement automated testing with manual testing. Collaborating with QA engineers can provide valuable assistance in identifying and resolving any identified issues.</p><p>This is it. You have migrated from PHP 7 to PHP 8. If you need more detailed instructions with code examples, you can find them in this <a href="https://mobidev.biz/blog/php-8-migration-guide-for-product-owners">PHP migration guide</a>.</p><h3>Wrapping Up</h3><p>In every company, numerous diverse tasks often take precedence over updating web resources. This is especially true when web applications and websites appear to be working properly. While limitations and vulnerabilities may still be tolerable, their presence can gradually escalate and become troublesome.</p><p>The decision of when to proceed with the PHP 7 to 8 migration ultimately rests with each company. However, we strongly recommend undertaking the migration before encountering security gaps, crashes, increased downtime, degradation of user experience, and other related issues. It is advisable to act proactively rather than delaying the migration, as doing so could result in user frustration with your website or web application.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=60762bbe051b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Exploring the Power of Ruby on Rails for Startup Development in 2024]]></title>
            <link>https://mobidev-biz.medium.com/why-use-ruby-on-rails-for-startups-in-2024-1396faa51252?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/1396faa51252</guid>
            <category><![CDATA[business-development]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[ruby-on-rails-development]]></category>
            <category><![CDATA[product-development]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Thu, 07 Dec 2023 13:49:00 GMT</pubDate>
            <atom:updated>2023-12-07T13:49:00.476Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="ruby on rails for startups" src="https://cdn-images-1.medium.com/max/1024/1*p40PCV4mG4EYBv3wQRaU4w.jpeg" /></figure><p>Ruby on Rails continues to evolve as a mature technology for web app development. However, there are growing concerns about its relevance and popularity. In the context of startup development, let’s discuss the significance of using Ruby for building new products.</p><h3>Advantages of Ruby on Rails for New Product Development</h3><p>Although many existing <a href="https://hackernoon.com/ruby-on-rails-is-not-dead-heres-how-to-upgrade-ruby-legacy-applications-p12j37i0">RoR products need updating</a>, software modernization is not the only market for this technology. Ruby on Rails offers several significant advantages for startup development. Here are the top five:</p><ol><li><strong>Fast Development:</strong> Ruby on Rails enables impressive development speed due to its syntax and extensive library of ready-to-use solutions (gems). This makes it a strategic choice for MVP development and startup projects, saving time and reducing the risk of failure.</li><li><strong>High Level of Security:</strong> With Ruby on Rails, you can minimize security risks associated with common vulnerabilities like cross-site scripting, cross-site request forgery, SQL injection, and clickjacking. However, securing RoR applications requires a mature team with expertise in this area.</li><li><strong>Simplicity: </strong>Ruby on Rails empowers developers to solve complex tasks with fewer lines of code, thanks to its straightforward syntax. The framework prioritizes programmer experience, allowing for easier project onboarding and code maintenance.</li><li><strong>Strong Community</strong>: The Ruby on Rails community is dedicated to continuously improving the framework. The core team and thousands of contributors work together to tackle issues, introduce new features, and enhance the technology. This vibrant community provides ample resources and support for developers.</li><li><strong>Easy Implementation of Business Logic and Compatibility:</strong> Ruby on Rails is a full-stack framework that facilitates the implementation of sophisticated business logic in web applications. It also integrates well with other technologies, making it effortless to combine front-end frameworks. This compatibility contributes to cost-effectiveness and faster development.</li></ol><p>However, it’s always important to consider your specific project requirements before choosing Ruby on Rails as the primary technology for your software development.</p><h3>Best Use Cases for Ruby on Rails</h3><p><a href="https://mobidev.biz/blog/ruby-on-rails-not-dead-still-good-for-your-product-development">Ruby holds strong positions</a> in various areas of product development. Here are some cases when Ruby can perform best.</p><ol><li><strong>Web Applications</strong>: Ruby is particularly well-suited for developing web applications, especially MVPs and startup projects.</li><li><strong>Back-end Development for Mobile Apps</strong>: While Java, Kotlin, and Swift are commonly used for mobile development, Ruby can efficiently support back-end development for mobile apps.</li><li><strong>E-commerce Products:</strong> Ruby can power online stores and support additional modules such as customer relationship management, payment tools, inventory management, and marketing components.</li><li><strong>Static Site Generators:</strong> Ruby serves as a core technology for static site generators like Jekyll, which generates static HTML websites by applying templates and raw data.</li><li><strong>Automation and DevOps</strong>: Ruby is useful for streamlining and automating installation and configuration processes. Tools like Heroku, Vagrant, Chef, and Puppet leverage Ruby for automation and DevOps tasks.</li><li><strong>Web Servers:</strong> Ruby is commonly used for handling requests in web server environments.</li><li><strong>Data Processing</strong>: While <a href="https://mobidev-biz.medium.com/advantages-and-challenges-of-python-startups-6f150a3ee743">Python</a> is often used for parsing, analyzing, and storing data, Ruby is beneficial for cleaning, transforming, and validating data.</li><li><strong>Web Scraping</strong>: Ruby is utilized for complex research and analysis tasks, enabling the extraction and parsing of information through web scraping.</li></ol><h3>So, Why is Ruby Great for Startups</h3><p>Ruby on Rails is an ideal choice for startup implementation, ensuring projects stay on schedule. It excels in MVP development, quick iterations, and scalability. With Ruby on Rails, businesses can establish a strong foundation swiftly, which is crucial for startups where timing is a key success factor. This open-source technology is particularly well-suited for API development, enabling reduced time-to-market.</p><p>Ruby on Rails has been embraced by renowned startups such as Stripe, Github, Figma, and Airbnb. These companies not only achieved remarkable success using Ruby but also effectively scaled and transformed their tech stack.</p><p>So if you are still in doubt whether Ruby is the right solution for your product, don’t hesitate to <a href="https://mobidev.biz/services/ruby-on-rails-application-development">consult with experienced Ruby developers</a> who will be able to match the capabilities of the technology with your needs. This is the only way to help you choose the best tech stack for your project.</p><p><a href="https://pixabay.com/photos/jewelry-ruby-pendant-625727/"><em>Image source</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1396faa51252" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Advantages and Challenges of Using Python for Startup Software Development]]></title>
            <link>https://mobidev-biz.medium.com/advantages-and-challenges-of-python-startups-6f150a3ee743?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/6f150a3ee743</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[product-development]]></category>
            <category><![CDATA[startup-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Thu, 07 Dec 2023 13:14:32 GMT</pubDate>
            <atom:updated>2023-12-14T16:01:22.863Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="startup software development with python" src="https://cdn-images-1.medium.com/max/1024/1*hKuJ-kuwxEwQfnPovyd9Qg.jpeg" /></figure><p>Like any technology stack, Python has its own set of strengths and weaknesses. Success lies in utilizing Python appropriately and matching it to the specific context and requirements.</p><p>In this guide, we will discuss what product owners should expect when embarking on a Python-based project and explore the optimal scenarios for leveraging this technology for startup product development.</p><h3>Python Compared to Other Back-End Technologies</h3><p>Python is an interpreted, dynamically typed language with a user-friendly syntax. It requires no extra setup and has a large community and numerous open-source libraries. This allows for quick app development and idea validation.</p><p>When choosing a technology for web development, factors like speed and specific task requirements should be considered. <a href="https://mobidev-biz.medium.com/what-is-node-js-used-for-in-product-development-1ec4bb4bbf8f">Node.js technology</a> is faster for I/O tasks, while Java may be faster overall, but Python offers faster app development time.</p><h3>The Main Use Cases of Python</h3><p>Python is a programming language known for its versatility and flexibility. However while in certain cases, Python can greatly enhance a project, in others, it may have some limitations. Let’s begin by exploring the most popular <a href="https://mobidev.biz/blog/python-app-development-guide">Python use cases</a>.</p><h3>Web Development with Python</h3><p>Python has emerged as a preferred choice for web development, offering many benefits that have contributed to its popularity. First of all, Python boasts a wide range of web frameworks that streamline the development process. Depending on your project’s technical requirements, you can choose a framework that aligns with your needs. For example, Flask offers a lightweight solution for rapid prototyping or feature validation. Meanwhile, Django excels in more scalable projects, providing default modules for authorization and admin panels.</p><p>Python web applications can be deployed using various strategies, offering flexibility to suit specific project requirements. Traditional servers like Apache or Nginx, cloud platforms such as AWS or Google Cloud, and containerization technologies like Docker or Kubernetes are all viable options. However, it is crucial to consider scalability requirements and select appropriate deployment strategies accordingly.</p><h3>Python for Artificial Intelligence and Machine Learning</h3><p>Python’s rise in popularity is largely attributed to its <a href="https://www.pythoncentral.io/the-capabilities-of-python-for-machine-learning-development/">dominance in Artificial Intelligence (AI)</a> and Data Science. With an extensive range of libraries like TensorFlow, Keras, and PyTorch, Python offers powerful tools for implementing machine learning algorithms. These libraries simplify data preprocessing and model training. Python’s simplicity and library availability make it an excellent choice for developing chatbots and AI assistants. Frameworks like Rasa provide comprehensive solutions for building chatbots with advanced dialog management capabilities.</p><h3>Python for Internet of Things</h3><p>Python’s versatility and compatibility make it an ideal choice for IoT projects targeting diverse hardware and environments. It runs on popular IoT platforms like Raspberry Pi, Arduino, and BeagleBone. Python’s compatibility with data formats like JSON and CSV enables seamless integration with cloud platforms, data analytics tools, and other IoT infrastructure components.</p><p>However, while Python works well with both Linux and Windows systems, its interaction with Linux is smoother due to the abundance of Python-based libraries. Working with Microsoft systems may present some challenges and limitations. In such cases, leveraging the native .Net platform for Windows can provide more effective operations.</p><h3>Python for Cloud Services</h3><p>Python enables automation, resource management, and utilization of various cloud providers like AWS, Azure, and Google Cloud. Also, it supports serverless computing platforms like AWS Lambda, Azure Functions, and Google Cloud Functions. These platforms enable running code without server provisioning or management, optimizing development costs for specific tasks or event-based operations.</p><p>However, when using Python with cloud providers, it’s vital to learn the specific APIs, SDKs, and services offered by the provider you’re targeting.</p><h3>When the Capabilities of Python are Limited</h3><p>While Python is widely used, there are instances where other technologies may be more suitable for implementing specific business and technical tasks.</p><h3>Python for Mobile Development</h3><p>While Python has evolved to offer the ability to write the entire codebase for mobile apps, including logic and the interface, with a small wrapper for mobile conversion, it has some limitations. Factors such as performance, access to platform-specific features, and user interface design demand careful attention and consideration, and native languages tend to excel in these areas, offering better performance and more seamless integration with platform-specific functionalities.</p><h3>Python for Real-Time Video Applications</h3><p>Python has limited support for WebRTC formats, making it less suitable for video conferencing and streaming projects. While Python does have libraries for video-related tasks, they currently lack the capabilities offered by languages like Java and Node.js. Real-time video processing in Python can be challenging due to the high-performance computations and memory management required. Lower-level languages are often preferred for achieving the real-time processing speeds necessary for video applications, as Python’s interpreter introduces overhead that can hinder performance.</p><h3>Should You Use Python for Startup Product Development?</h3><p>Python can be a favorable choice for startup product development. Its simplicity, extensive library ecosystem, versatility, and popularity make it ideal for rapid prototyping and building various types of applications. Additionally, Python’s strong community support provides valuable resources and assistance. However, it’s important to consider specific project requirements and consult with experienced <a href="https://mobidev.biz/services/python-app-development">Python developers</a> to ensure it fits your startup’s needs best.</p><p><a href="https://pixabay.com/photos/python-waterdrop-close-up-dander-3233234/"><em>Image source</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6f150a3ee743" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Golang for AI App Development: Best Practices and Case Studies]]></title>
            <link>https://medium.com/nerd-for-tech/golang-for-ai-app-development-best-practices-and-case-studies-cb174cd21df7?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/cb174cd21df7</guid>
            <category><![CDATA[ai-app-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai-projects]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[golang-development]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Thu, 09 Nov 2023 09:32:38 GMT</pubDate>
            <atom:updated>2023-11-09T09:32:38.772Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tuBkdfjxKDFZQ35RpA3DFQ.jpeg" /></figure><p>How good is Golang for AI? How promising, in particular, is the combination of Machine learning (ML) with Golang? In this article, you will learn when to use Golang for building AI-based apps. We will also analyze specific cases of Golang-backed AI software development.</p><p><a href="https://unsplash.com/photos/Hrd3WPrnGzE"><em>Photo credit</em></a></p><h3>Three Possible Ways to Use Golang for AI</h3><p>In discussing the inclusion of Golang in the tech stack of AI projects, we will focus on two main things.</p><ol><li>First, what are Golang’s strengths, and how exactly do they facilitate such projects?</li><li>Second, what kind of toolkit does this programming language have for developing AI solutions?</li></ol><p>We will mention certain tools and features when describing Golang usage in different subfields of AI.</p><p>There are a lot of stereotypes and prejudices surrounding the issue of sufficient Go language libraries. This is explained by the language’s young age. Golang appeared recently and, therefore, had less time for the emergence of solutions that developers needed.</p><p>However, it is not superfluous to touch on the prospects of increasing various ready-made solutions for Golang. We can note that, in our opinion, Golang has everything for the rapid expansion of the spectrum of frameworks, libraries, packages, and other elements of the language infrastructure. Google has developed and continues to maintain this programming language. The popularity of technology also has a positive effect. Let’s turn to the relevant data.</p><p>Golang is confidently among the <a href="https://survey.stackoverflow.co/2023/#most-popular-technologies-language">top</a> 15 most popular programming languages. Go also enjoys increased attention from developers in the context of its study. It follows that an active expert community has formed around Golang. This is also a sign of the impetuous preparation of the necessary tools in the top areas of software development.</p><p>Data preparation is one of the essential aspects of AI. For accurate predictions, specialists preprocess the data they use. For this, in particular, they detect and remove outliers and irrelevant data. It is also crucial to convert the data into a format suitable for model training.</p><p>Golang is well-suited to preprocessing and manipulating large amounts of data for machine learning apps. Processing and analyzing data in Golang is possible with the help of Go packages such as DataFrame.</p><p>Now, let’s review three possible ways to use Golang for AI.</p><h3>1. NATURAL LANGUAGE PROCESSING (NLP)</h3><p>NLP apps, such as chatbots or language translators, might be built with Golang too. Go-nlp is a popular package for NLP tasks, such as tokenizing, stemming, and part-of-speech tagging. Golang’s concurrency feature is just what you need for creating NLP apps.</p><h3>2. COMPUTER VISION</h3><p>Go is applied to develop computer vision apps like object detection and image recognition. The GoCV package is a widespread computer vision library in Golang that uses OpenCV. The Go language is increasingly in demand for solving computer vision issues such as object detection and recognition, as well as image classification.</p><p>The high performance of Golang is very relevant for developing computer vision apps for which this parameter is critical.</p><h3>3. MACHINE LEARNING WITH GOLANG: REFERENCE POINTS</h3><p>Golang is an increasingly popular language for the development of machine learning algorithms or models. It can be used to train and run machine learning algorithms such as neural networks and decision trees.</p><p>Go can also be used to develop reinforcement learning applications, such as game-playing agents. The goNEAT package is an implementation of the NEAT algorithm used for evolving artificial neural networks for reinforcement learning.</p><p>Golang is impressively flexing its ML muscles:</p><ul><li><strong>Kubeflow</strong> is an open source machine learning platform for Kubernetes that utilizes Go in its deployment and management of machine learning models. Currently, Kubeflow has developed into a platform not only for machine learning, but also for MLOps (deploy and maintain ML models in production). Kubeflow has software modules for each of the stages of a typical machine learning lifecycle: Kubeflow Notebooks for model development, Kubeflow Pipelines and Kubeflow Training Operator for model training, KServe for model maintenance, and Katib for automated machine learning. You can deploy each of the required Kubeflow components separately.</li><li><strong>OpenAI Gym</strong> is an environment for developing and comparing reinforcement learning algorithms. The Go packages like gym-http-api are used to interact with the OpenAI Gym API.</li><li><strong>The GoLearn package</strong> is a specialized machine-learning library for Go offers a wide range of algorithms for data mining and classification.</li><li><strong>GoML</strong> is a library of ML algorithms that developers can use to build products that combine machine learning with Golang.</li></ul><p>Additionally, Golang’s simplicity and performance make it a popular choice for implementing deep learning algorithms. There are many successful examples of Deep Learning with Golang. For instance, the popular deep learning framework TensorFlow provides a Golang binding for its library. Gorgonia significantly expands the capabilities of deep learning in Golang. This library contains what is needed for creating and training machine learning (e. g. deep learning) models.</p><p>As you can see, there is significant potential for Machine Learning with Golang. Now, we can already state that until recently, common questions like “Is Golang good for Machine Learning?” and “Can Golang be used for Machine Learning?” are replaced by more relevant questions such as, “How to use the advantages of Golang for Machine Learning most profitably?”. There is reason to believe that Golang can play a crucial role in the development of ML apps in the years to come due to its continuous advancement and the ongoing growth of this AI subfield.</p><h3>Main 7 AI-Friendly Golang Features</h3><p>What makes choosing Golang for AI so relevant when it comes to building apps? AI is powered by data. It follows that AI products require technologies capable of processing large volumes of data quickly enough. This is precisely what is characteristic of Golang AI software. In the Go language, you can build an infrastructure in which the AI module operates as best as possible. Here are the Golang anchor points for your AI-powered app functionality:</p><p><strong>1. High concurrency</strong></p><p>In Golang, concurrency is built-in right out of the box. The language was designed from the beginning to create software systems to handle large numbers of concurrent requests and processes, and it does a great job of that. High concurrency is based on specific goroutines and channels and allows processing large volumes of data without latency. Such a feature definitely makes Golang for AI convenient.</p><p><strong>2. High-Performance</strong></p><p>Golang is a compiled language, which means that code written in Golang is compiled directly into machine code that can be executed faster than interpreted languages. Such a feature makes Golang well-suited for building high-performance applications that can handle large amounts of data.</p><p>Golang can perform complex computing 20–30 times faster than many other programming languages. Thus, this technology is relevant for computationally intensive AI models, particularly machine learning.</p><p><strong>3. Suitability for creating real-time AI apps</strong></p><p>Golang’s low-level networking capabilities make it well-suited for building real-time web applications that require low latency. Some AI-based killer features only make sense when operating in real-time. For example, image and speech recognition should not occur with a significant delay. Concurrency and fast performance ensure that Golang is among the technologies suitable for creating such apps.</p><p><strong>4. A wide range of ready-made solutions for facilitating the development of AI-based software</strong></p><p>In this case, we are not only talking about, for example, algorithm libraries for machine learning in Golang because we will consider them in detail later. The standard and optional libraries of the Go language provide a lot of useful material for developers at all stages of working with data.</p><p>The data required for AI models comes from a variety of sources and, naturally, in a variety of formats. Issues of unification and preparation of data for convenient and fast processing are always faced by project teams. That’s why it’s helpful to find packages for working with data formats like CSV, JSON, and XML, even in the Go standard library. This facilitates the gathering of data from different sources and their subsequent processing.</p><p>The list of available Go solutions for various, sometimes non-standard, situations can be continued. Sometimes, for example, there is a need to work with uncertain or inaccurate data. The Fuego library supports fuzzy logic in Go, which, in turn, helps to work with such data.</p><p>Sometimes apps require the deployment of AI models on various devices. The Gobot library is appropriate in such situations. Its materials can be used in solutions for the Internet of Things and robotics.</p><p><strong>5. Cross-platform compatibility</strong></p><p>When product owners and developers have created an impressive AI functionality, then such features of the selected technology that can shorten the time to market come to the fore. Combining AI with Golang in your app’s tech stack, you can develop for any operating system or platform. You will not need additional interpreters or tools. You can quickly compile and run your Golang AI app.</p><p><strong>6. The full cycle of data work</strong></p><p>Golang belongs to the list of technologies suitable for working with big data. Concurrency helps a lot with this. This makes data streaming available, for example. Accordingly, you get the opportunity to visualize information in real-time, which greatly advances AI Golang apps. If you need a cloud infrastructure to host data, Go is also a great fit for this.</p><p><strong>7. Effective use of resources</strong></p><p>First of all, we are talking about efficient memory management. Another built-in Golang feature is the garbage collector to manage memory allocation and deallocation. Automated memory management is vital for data-intensive AI apps. By the way, the unique subroutines that ensure parallelism occupy surprisingly little memory, just a few KB each. The reliability of the system software also benefits from optimizing the load on the servers because Golang consumes much less memory than other programming languages.</p><p>At the moment, Golang is a popular language for <a href="https://mobidev.biz/blog/ai-application-development-guide-for-business-owners">building AI applications </a>because of its performance, concurrency features, and easy-to-understand syntax. Here are some ways that Go is used to create AI applications.</p><h3>Golang for AI: Practical Tips</h3><p>In this section of the article, we will share our own experience working on a combination of Golang and AI. Having in-house professionals from both AI and Go, our project teams try to get the maximum from these technologies, achieving a synergistic effect. Let’s trace Golang’s advantages in specific cases of such solutions.</p><p>It is probably appropriate to start with the formation of the tech stack of AI-based software development projects. For example, as we showed above, Machine learning with Golang is a good choice. But the same can be said about some other languages and frameworks. What speaks in favor of developing a solution with machine learning on Golang?</p><p>Today, when you think about using any programming language for AI, especially for ML, you can’t escape its comparison with Python. Why not? Let’s touch on the topic of comparing the capabilities of Python and Golang for AI.</p><h3>GOLANG VS PYTHON</h3><p>First of all, it is obvious that Python, given its longer existence, has more ready-made solutions for ML and other AI subfields. Such software fragments are collected in popular and convenient libraries. Also, one cannot discount the fact that among the large community of <a href="https://mobidev.biz/services/python-app-development">Python programmers</a>, many specialize in AI solutions. This has been the situation in recent years, that many projects, for example ML, are focused on Python, so to speak, by default.</p><p>At the same time, it can be observed that the number of ready-made Golang solutions for AI is rapidly increasing. The gap in the volume and quality of libraries between Go and Python is narrowing. Above, we have already shown this using the Golang toolkit and libraries for machine learning as an example. The potential of the Go language for AI-based development is growing in the same directions as Python.</p><p>The mentioned Gorgonia is increasing its ML content, becoming comparable to such Python libraries as Theano, Keras, and PyTorch. The same thing happens in other subfields of AI. The functionality offered by Gonum (Go Numerical) for calculations and algorithms is similar to NumPy. Likewise, Gonum/plot’s data visualization capabilities are already approaching those of Seaborn and Matplotlib. Therefore, it can be predicted that when you start your new AI-based app project, the developers will not only be able to write the necessary code on Go from scratch but also select what is needed in Golang packages for AI.</p><p>Other situations are also possible. Let’s say you chose an AI software module in a programming language other than Go to build your app. Does this mean that, in this case, Golang will not have a place in the tech stack of your project? That is far from always the case. It depends.</p><p>Apart from the actual AI module, other software parts are also essential for a positive customer experience. This is where there is room to take advantage of Golang, which works great in combination with other languages in the tech stack of AI projects.</p><p>Golang is a promising choice for those parts of the software that crucially require:</p><ul><li>High performance, significantly higher than the aforementioned Python</li><li>Multithreading</li><li>Fast, powerful calculations using the CPU</li><li>Economical memory usage, etc</li></ul><p>Let’s schematically depict the structure of an AI-based app:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GIiRvsUxAX0qtBeC.png" /><figcaption>Structure of AI-based app</figcaption></figure><p>The use of fast, compiled Go for the implementation of domain logic, for the integration of third-party solutions, including cloud computing services, and other purposes will enrich the functionality of the AI-powered app.</p><p>Golang seems to be specially created for <a href="https://mobidev.biz/blog/monolith-to-microservices-migration-guide-challenges-and-best-practices">microservice architecture</a> and writing fast, compact software modules for key app features. For example, it is appropriate to write the API of AI-based apps in the Go language. As well as, let’s say, a chat or chatbot with a lot of traffic.</p><p>The reasons to mention the Go language become even more compelling if you think of a large-scale AI-based software project. The compactness of the app and the saving of memory consumed by it become critical on large projects. In addition, a large number of simultaneous requests forces you to take care of concurrency, which is also Go’s forte.</p><p>Certain app parts can noticeably slow down when handling large data streams and concurrent operations if they are written in a language slower than Golang. It is also worth remembering about the optimization of programmers’ working hours. They can also write quickly in Python, but they need to spend less time optimizing the code in Go. In addition, it is possible to compile a language with dependent modules and libraries in one binary file, which is also convenient.</p><p>Golang strictly regulates how to write code. It saves time and effort in large projects. There is no need to develop guidelines or set any rules regarding the code style in a project with many programmers. Most likely, developers will write more or less the same in the case of apps in Golang with AI.</p><p>Below, we will talk about product cases where we succeeded in making Python and Golang complement each other.</p><h3>Golang For AI Projects: Case Studies</h3><p>Let’s consider some examples of the projects whose main elements of the tech stack are Golang and AI technologies.</p><h3>CASE STUDY #1: FORECASTING AND RECOMMENDATION SYSTEM FOR THE FINANCIAL SPHERE</h3><p>As is well known, information has a significant impact on financial decision-making. Accordingly, tools for the instant processing of textual information are in demand in this domain.</p><p>A solution developed by us, aimed at the semantic analysis of information contained in various reports and articles, was added to this toolkit.</p><p><em>The main project challenges:</em></p><ul><li>Search and selection of relevant publications for analysis</li><li>Identification and use of relationships between actual data and expected trends</li><li>Fast processing of large volumes of information from various sources. After all, the financial domain is sensitive to speed, as the situation here changes rapidly, and information quickly becomes outdated</li></ul><p><em>Suggested solution:</em></p><p>A software system developed on Golang that processes the facts and figures given in publications from the point of view of how they will affect the price of certain shares. Based on the information processed in real-time, a forecast is made, and a recommendation is generated, for example, regarding the purchase or sale of securities.</p><h3>CASE STUDY #2 : PORTAL FOR MANAGING INTERACTION WITH CLOUD SERVICES</h3><p>The product is a portal for developers, DevOps engineers, CTOs, and product owners. The purpose of the portal is to facilitate the management of interactions with leading cloud services such as Amazon, GoogleCloud, Azure, etc. For such a web resource, it is fundamentally important to collect all the functions of cloud use in one place. This approach allows you to optimize the use of resources, and therefore the cost of using them.</p><p>The client entrusted the development to us, MobiDev. And our skills in executing projects, the technical stack of which includes both Golang and ML, came in handy in this case.</p><p><em>The main project challenges:</em></p><ul><li>The setting up of the machine learning cycle</li><li>Creating a software solution for data gathering and running the data processing chain</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yq2kORTjFJrf8iUW.png" /><figcaption>Golang with ML: Case Study outline</figcaption></figure><p>From stage to stage of the ML life cycle, technologies replaced each other, as if passing the baton. Golang also played a significant role in a certain section of the distance. First, our specialists applied Go to two stages of the machine learning cycle depicted in the figure, in particular, Data Gathering and Data Preparation. It is important to note that the trained model is then operated with Golang.</p><p><em>Suggested solution:</em></p><ul><li>Creating a complete machine learning cycle using Python and Go for model training and refinement</li><li>Development of high-performance software for data gathering and preparation in the Go language</li></ul><p>Thus, Golang has a variety of options for use in AI-powered apps. Speedy performance, multithreading for concurrent programming, and scalability of the Go language make resource-intensive tasks easy. Cross-platform compatibility and debugging possibilities facilitate the deployment and running of AI apps.</p><p>Written by <a href="https://mobidev.biz/our-team/liubov-zatolokina">Liubov Zatolokina</a>, AI Team Leader at <a href="https://mobidev.biz/services/artificial-intelligence">MobiDev</a>.</p><p><em>The full article is originally published at </em><a href="https://mobidev.biz/blog/golang-ai-app-development-advantages-best-practices"><em>https://mobidev.biz</em></a><em> and is based on MobiDev technology research.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cb174cd21df7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/nerd-for-tech/golang-for-ai-app-development-best-practices-and-case-studies-cb174cd21df7">Golang for AI App Development: Best Practices and Case Studies</a> was originally published in <a href="https://medium.com/nerd-for-tech">Nerd For Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[API Development Guide: What to Keep in Mind When Building API-Focused Products]]></title>
            <link>https://medium.com/nerd-for-tech/api-development-guide-what-to-keep-in-mind-when-building-api-focused-products-5e341d766b5b?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/5e341d766b5b</guid>
            <category><![CDATA[software-modernization]]></category>
            <category><![CDATA[rest-api]]></category>
            <category><![CDATA[graphql]]></category>
            <category><![CDATA[api-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Thu, 09 Nov 2023 09:32:36 GMT</pubDate>
            <atom:updated>2023-11-09T09:32:36.214Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TFHj_yDyGyBW9Tv_x1rADA.jpeg" /></figure><p>Companies across different verticals use APIs to enable communication between the client and server side of their apps, to integrate with third-party software, and to allow external apps to access their system. Moreover, building and monetizing custom APIs can become an essential part of a business development strategy.</p><p>If APIs play a crucial role in your project, the requirements for their development may be rigorous. You need to know how to meet technical challenges, what protocol to choose, and what practices to apply for building top-notch API-focused products. The following guide aims at answering these questions.</p><h3>API Protocols: Types &amp; Development Specifics</h3><p>Let’s first explore different kinds of APIs and their development features so that you can identify the most suitable protocol for your project. Currently, the top approaches in custom API development are REST, GraphQL, and gRPC.</p><h3>REST API</h3><p>REST, also known as Representational State Transfer, refers to APIs that are stateless, meaning each request holds all the details necessary to complete it. A vast majority of backend developers are familiar with REST API development. This is the most frequently used and versatile type of API, utilized in a large number of software projects. Being a simple protocol with a low barrier to entry, REST APIs are unlikely to face future support issues.</p><p>With REST, we clearly understand what and how we’re requesting, and we know what response to expect. The same applies to errors; we can pinpoint the error based on status codes at any given moment. We can also upgrade this protocol with custom elements to make errors more comprehensible on the client side.</p><p><strong>Advantages of REST:</strong> simplicity, speed, and a clear relationship between the client and server, ease of caching responses, and built-in security features.</p><p><strong>Downsides</strong>: a lack of flexibility due to the server’s standardized responses. For instance, let’s say we have a list of company managers, and on one page, we might want to have names with roles and contact details, and on another, just the names without any other data. In the REST scenario, we either have to use one request everywhere, responding with unnecessary data and using up bandwidth, or write a separate request for each page, leading to code duplication and complexity. Usually, the same request is used throughout.</p><h3>GRAPHQL API</h3><p>GraphQL is a query language for APIs developed by Facebook. More flexible than REST APIs, GraphQL lets developers obtain all needed data in a single request (client-driven query). Developers can also specify the data type they wish to receive from the API.</p><p>GraphQL resolves the issue of request-response interaction. We leverage a specific query language that instructs the server about the client’s specific data needs at any given moment. Revisiting the managers’ example, the client isn’t defaulted to receive standardized data but can choose the needed info (like name and phone number), and the server responds with this specific information.</p><p>This system is perfect for apps requiring greater flexibility and scalability, complex systems, and <a href="https://mobidev.biz/blog/monolith-to-microservices-migration-guide-challenges-and-best-practices">microservices</a>.</p><p><strong>Advantages of GraphQL: </strong>this approach saves bandwidth and boosts performance, providing more flexibility and scalability.</p><p><strong>Downsides:</strong> the query language is more complex, and the entry barrier is fairly high, potentially complicating support if you lack specialists. The community is also smaller.</p><blockquote><em>GraphQL is flexible for end users, but it involves a certain load on the server. The development of GraphQL is much more complicated than the development of REST APIs because there are more cases of how a request can be made and certain complex requests from the client may appear, which will affect the server’s work. Therefore, ensuring good performance requires a certain amount of experience and expertise from your developers.</em></blockquote><blockquote><a href="https://mobidev.biz/our-team/anton-lohvynenko">ANTON LOHVYNENKO</a></blockquote><blockquote>PHP/DevOps Group Leader at MobiDev</blockquote><h3>GRPC API</h3><p>gRPC, an open-source RPC framework created by Google, is considered to be a high-performance API development technology. gRPC leverages Protocol Buffers, a language-agnostic, platform-neutral mechanism for serializing structured data.</p><p>Unlike REST and GraphQL, which are quite similar, gRPC offers a different client-server interaction and is only usable with the HTTP/2.0 protocol. This advanced protocol provides benefits in data compression, user connection, and more.</p><p>gRPC is perfect for projects with high-performance communication requirements.</p><p><strong>Advantages</strong>: gRPC communicates with the server through streams and its query language, making the whole process appear as if it’s happening within a single system, regardless of whether you’re on the front end or back end. The front end can call methods written on the backend. However, in reality, you need to write server methods and build them first, and only then the front end understands that these methods exist and can be used. Setting up all this requires experience with this type of API.</p><p>Other advantages include more compact data, better performance, and quick responses.</p><blockquote><em>gRPC is built on top of RPC (Remote procedure call) and is a key that provides more flexibility for executing long-running requests. With Rest and GraphQL a complex request can fail due to a timeout, and with gRPC you can build such an architecture where long-running requests will be executed easily.</em></blockquote><blockquote><a href="https://mobidev.biz/our-team/anton-lohvynenko">ANTON LOHVYNENKO</a></blockquote><blockquote>PHP/DevOps Group Leader at MobiDev</blockquote><p><strong>Disadvantages </strong>include a small community (the protocol is still evolving) and a relatively high entry barrier. Understanding the data transmission protocol is also important; each newcomer is likely unfamiliar with this protocol and will need to be trained. Compared to other approaches to API development, this one is quite complex and takes more time, which is not always justified for the project.</p><h3>REST VS GRAPHQL VS GRPC COMPARISON</h3><p>The table below illustrates the main difference between the mentioned approaches to API development. But it’s also important to recognize the experience of your developers, among other things.</p><p>Each approach has its specifics that require certain knowledge and skills. Also, you’ll need API support in the future. This is the reason why REST, despite its imperfections, remains the most popular API development method.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*puEd0KrhnNOBl27ZDJRsvg.png" /><figcaption><em>REST vs GraphQL vs gRPC Comparison</em></figcaption></figure><h3>Key Features for API Solutions</h3><p>During the initiation and progress of the API development, software engineers should consider a few crucial points. This will ensure the security and efficiency of your APIs.</p><h3>AUTHENTICATION AND AUTHORIZATION</h3><p>Authentication verifies the correct identity, while authorization determines if a verified user can perform a specific action. Common specifications like JWT, OAuth, and OAuth2 handle these tasks.</p><p>The choice of authentication method depends on the balance between the required security level and ease of implementation and maintenance. OAuth provides scalability and excellent user experience but requires more effort for implementation and maintenance. OpenID can supplement OAuth by verifying a client’s identity and profile through the authorization server.</p><h3>QUERY, FILTER, SORTING, AND PAGINATION</h3><p>As your database grows, data retrieval may become slower. To mitigate this, implement caching, pagination, sorting and filtering.</p><p>Sorting organizes data according to specific conditions, while pagination decides how much data to display and when. These features improve processing time, response time, and security.</p><p>Filtering in APIs narrows down result sets based on certain criteria, improving API performance and reducing network data transmission. You can implement sorting, filtering, and pagination in different ways depending on the API type (e.g., using path parameters in REST APIs).</p><h3>CACHING FOR PERFORMANCE IMPROVEMENTS</h3><p>Caching stores frequently requested data in a secondary store, reducing calls to the primary database. This strategy enhances data retrieval speed and reduces request costs. Tools like <a href="https://memcached.org/">Memcached</a> and <a href="https://redis.io/">Redis</a> can assist in this process.</p><p>Depending on where you store the cache, you can use client caching or server caching. While client caching improves client and server efficiency by storing routine requests locally, server caching reduces server load by storing repeated calls in a cache.</p><p>REST provides simpler caching mechanisms. With the GraphQL API and the gRPC API, developers must spend more time on caching.</p><h3>ERROR HANDLING</h3><p>Effective error handling simplifies debugging by differentiating between client and server errors. Providing clear error codes, specifying the number of errors, explaining error causes, and distinguishing between general and domain errors are effective error-handling practices.</p><h3>VALIDATION</h3><p>Validation confirms data correctness. Client-side validation usually involves prompt feedback for correction which is a plus for a product, while server-side validation is a must-have for ensuring security, data integrity and vulnerability protection. It includes tasks like validating required properties or defining property types.</p><h3>Best Practices for Custom API Development</h3><p>There are some best practices for API development that will help you to avoid well-known mistakes and improve the performance, security, and scalability of your product. But it’s essential to note that each case is unique and might require tailored and innovative solutions.</p><h3>1. RETURNING STANDARD ERROR CODES</h3><p>It’s crucial to handle errors gracefully to avoid confusion for API users. When an error occurs, returning an appropriate HTTP response code that indicates the specific type of error provides valuable information for API maintenance. Leaving errors unhandled could potentially disrupt the system, so it’s best to handle them without delay.</p><p>Error codes must be accompanied by informative messages to aid maintainers in troubleshooting issues effectively. However, it’s crucial to ensure that these error messages do not expose sensitive information that attackers could exploit to carry out malicious activities, such as data theft or system disruption.</p><h3>2. NAVIGATING API VERSIONING</h3><p>To ensure smooth transitions and avoid disrupting clients, it’s essential to have different versions of the API whenever any changes are made. Versioning can be done using <a href="https://semver.org/">semantic versioning,</a> such as 2.0.6 (indicating major version 2 and the sixth patch), which is a common practice in modern apps.</p><p>This approach allows us to gradually phase out older endpoints, rather than requiring everyone to move to the new API simultaneously. For instance, the v1 endpoint can remain active for users who prefer not to change, while the v2, with its exciting new features, caters to those who are ready to upgrade. This becomes especially crucial when your API is public, as versioning ensures compatibility with third-party apps that rely on your APIs.</p><p>By implementing versioning, a web API can clearly indicate the features and resources it offers, and client applications can make requests directed at specific versions of these features or resources.</p><h3>3. CRAFTING ACCURATE DOCUMENTATION FOR APIS</h3><p>The API documentation educates developers on how to use your APIs and where to start. This is necessary both for developers who will integrate your APIs, and for your team in case of <a href="https://mobidev.biz/blog/legacy-application-modernization-approaches-strategy-case-studies">software modernization</a>.</p><p>If your APIs are documented in detail, it’s easier to increase awareness and adoption of the API and decrease the time and costs of onboarding both remote and in-house developers. At the same time, any internal team can tap into API documentation to understand applied methods, resources, requests, and responses, which will simplify maintenance and updates.</p><p>You need to provide concise tutorials to aid developers in a quick start, create a comprehensive glossary defining API terms, and ensure that resources and methods are explained in a user-friendly manner. List all project terms to unify understanding among end users (developers), allowing them to grasp concepts like URLs and URIs, even with limited technical knowledge.</p><h3>CASE STUDY #1. BUILDING A SAAS PLATFORM WITH COMPLEX API INTEGRATION</h3><p>discover.swiss is a SaaS platform that relies on API integration to aggregate and standardize data from service providers of different sizes and share it across the network. Platform users are tourists who can see a unified picture of local travel spots and destinations in partner apps that are using the API.</p><p><strong>Key tech challenges:</strong></p><ul><li>Create a complex “API as a Service” ecosystem</li><li>Ensure data standardization for a single system</li></ul><p><strong>Create a complex “API as a Service” ecosystem</strong></p><p>The developers needed to build a solution architecture that would allow the system to interact with various data resources and turn these data into structured information for the end user. After a detailed analysis of requirements, REST architecture was chosen.</p><p>REST APIs assist in aggregating multiple data points and turning them into structured information about tourist spots and activities. This information can be displayed in a common format in the front end of the tourist service providers. With the large tourist management systems providing information on one side and local service providers on the other, the business needs are all covered via the connection established with the API.</p><blockquote><em>Obtaining data from partner services and data unification was one of the key challenges of the project. We had to create a system that would make it possible to add new partner services with a minimum of changes. For this, we created a scalable importing data platform that includes such things as a complex duplicate searching mechanism which is looking for duplicates from different sources and merging them. Also, we built an access mechanism responsible for managing access to individual data units.</em></blockquote><blockquote>VLADYSLAV HLUSHKOV</blockquote><blockquote>.Net Team Leader at MobiDev</blockquote><p><strong>Ensure data standardization for a single system</strong></p><p>The project concept for this platform is based on the ecosystem approach and its scalability. New companies are constantly being added. Dedicated algorithms keep the aggregated information precise and unified. To achieve data standardization, the system concept relies on schema.org approved data structure definitions. Processing an array of data coming from different sources is possible by using storage queues. This allows the database load to be balanced and distributed.</p><p>We also relied on Azure Functions to build the API, process the data and ensure seamless integration between the essential parts of the platform.</p><h3>CASE STUDY #2: ENSURING REAL-TIME CLIENT-SERVER COMMUNICATION FOR TAXI BOOKING APPLICATION</h3><p>The project is a taxi booking service that combines three solutions in a single suite: a native tablet-optimized Android app for drivers, a dispatch panel, and a native iOS app available to customers. Clients had strict deadlines, which we met by combining classical and innovative development approaches.</p><p><strong>Key tech challenges:</strong></p><ul><li>Provide the solution within strict deadlines</li><li>Ensure effective real-time communication between all parts of the system</li></ul><p><strong>Provide the solution within strict deadlines</strong></p><p>The solution had to be ready for production in three months, so this had a significant impact on the choice of development tools and approaches. To enable swift connection of all project components, we opted for REST API, which is both easy to develop and integrate.</p><p>Relying on the experience of our engineers and proven technologies, we managed to deliver the product on time and meet all the technical requirements of customers.</p><p><strong>Ensure effective real-time communication between all parts of the system</strong></p><p>Although REST was the most suitable approach for this project, it had one notable limitation: it didn’t support real-time communication that would enable a continuous connection between the client and the server for fast data exchange.</p><p>As it was crucial to maintain identical ride statuses across all sub-applications, the development team had to incorporate a third-party PaaS service called PubNub for real-time notifications and display of taxis on the map, order status updates, and more.</p><p>To ensure that ride states are accurately maintained, all communication between the apps is routed through the backend, which serves as the repository of records. The applications are only able to transmit requests to the backend via HTTP, with the backend subsequently utilizing PubNub to send notifications.</p><p>The application was installed by more than 1200 unique users within 2 weeks after its release.</p><p>Written by <a href="https://mobidev.biz/our-team/maksym-shevchenko">Maksym Shevchenko</a>, JavaScript Team Leader<strong> </strong>at <a href="https://mobidev.biz/services/mobile-application-development">MobiDev</a>.</p><p><em>The full article is originally published at </em><a href="https://mobidev.biz/blog/api-development-integration-guide-rest-graphql-grpc"><em>https://mobidev.biz</em></a><em> and is based on MobiDev technology research.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5e341d766b5b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/nerd-for-tech/api-development-guide-what-to-keep-in-mind-when-building-api-focused-products-5e341d766b5b">API Development Guide: What to Keep in Mind When Building API-Focused Products</a> was originally published in <a href="https://medium.com/nerd-for-tech">Nerd For Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Video Streaming/Conferencing App Development Guide]]></title>
            <link>https://blog.devgenius.io/video-streaming-conferencing-app-development-guide-d7bc1a7dbd5e?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/d7bc1a7dbd5e</guid>
            <category><![CDATA[webrtc]]></category>
            <category><![CDATA[video-streaming-software]]></category>
            <category><![CDATA[video-communication]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[app-development]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Tue, 24 Oct 2023 11:26:41 GMT</pubDate>
            <atom:updated>2023-10-24T11:26:41.113Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DuaS0u3KkmRIvC8_Ah6qAg.jpeg" /></figure><p>A surge in video communication tools has become a catalyst for telemedicine, entertainment, e-learning, fitness, ecommerce, and other online-related businesses. If you want to implement real-time video communication in your product, integrating a ready-to-use solution will be an easy way to follow. However, everything will drastically change if you decide to develop a custom solution for which video streaming is a key feature.</p><p>In this article, we will share our expertise in video streaming/conferencing app development and integration, explain what communication protocols to opt for, dive deeper into video streaming architecture patterns, and consider real-life examples.</p><p><a href="https://unsplash.com/photos/HJgaV1qjHS0"><em>Image source</em></a></p><h3>Classification of Video Service Platforms</h3><p>All live-streaming business cases can be divided into three groups of technological solutions:</p><ol><li><strong>One-to-many:</strong> These are services such as broadcasting (e.g., IPTV), VOD (Video on demand), and live streaming.</li><li><strong>One-to-one:</strong> Video calls one-on-one, video chat.</li><li><strong>Many-to-many</strong>: Group calls, conferences with multiple hosts.</li></ol><p>The chosen technological solution impacts the product’s architecture, defining the software roadmap and recommended real-time communication protocol.</p><h3>Real-Time Communication Protocols for Building Video Services</h3><p>The key moment in planning video streaming app development is the selection of a communication protocol that defines how data communicates from one device or system to another over the Internet. From the perspective of content delivery, there are three main approaches associated with different transport protocols:</p><ul><li><strong>MPEG-DASH/HLS</strong> — a media protocol used for cross-platform video transmission of live or on-demand video content. For example, it can be used for TV streaming.</li><li><strong>WebRTC</strong> — is a low-latency protocol designed for one-to-one video streaming. It can also be used in other cases where low latency is required. It needs a more significant server infrastructure than the first case. WebRTC is developed specifically for certain business cases, since group calls, broadcast streaming, or one-on-one calls have significantly different architectures. However, if we’re talking about video calls, <a href="https://mobidev.biz/blog/webrtc-app-development-building-real-time-video-chats">WebRTC app development</a> is the way to go.</li><li><strong>RTMP</strong> — a Real-Time Messaging Protocol that can be optimized for low latency. It has several implementation options, but it can only be played by applications (in browsers, using plugins). By splitting streams into fragments, RTMP can effectively transmit more information. It is primarily used for transmitting live streams on platforms like YouTube.</li></ul><p>We will now overview what types of solutions these protocols can be used for.</p><h3>Video Streaming/Conferencing App Architecture Patterns</h3><p>Architecture must be selected in accordance with the business case and functionality you want to incorporate into your product. Below, I will outline the characteristics of the architecture for different business cases.</p><h3>LIVE STREAMING/VIDEO-ON-DEMAND APPLICATIONS LIKE NETFLIX OR HULU</h3><p>This group of projects requires the use of the RTMP protocol. The system should include several essential components:</p><ul><li><strong>Streaming Server:</strong> This server is responsible for handling incoming streams from publishers and distributing them to viewers. It often includes a built-in transcoder.</li><li><strong>Transcoder:</strong> The transcoder is a crucial part of the streaming server, responsible for re-encoding the stream from the publisher into the broadcast protocol used for streaming. This ensures compatibility and optimization for viewers.</li><li><strong>CDN (Content Delivery Network)</strong>: The CDN is essential for caching and delivering content to viewers. Without a CDN, the quality of the output can fluctuate depending on the network conditions, leading to an inconsistent user experience. Choosing the right CDN ensures the availability and performance of the live stream.</li><li><strong>Business Logic and Billing Server:</strong> This component manages the business-related aspects of the streaming service. It handles user authentication, authorization, billing, and other business logic. It’s crucial for monetization and user management.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*grWH6g1a7CDK46Wk.png" /><figcaption><em>Example of live streaming app architecture</em></figcaption></figure><p>Other system elements are optional and depend on the specific functionality you want to implement. Typical live streaming apps rely on <a href="https://www.nginx.com/blog/video-streaming-for-remote-learning-with-nginx/">NGINX</a>, <a href="https://aws.amazon.com/cloudfront/streaming/?nc1=h_ls">Amazon services</a>, or <a href="https://github.com/illuspas/Node-Media-Server">NodeMediaServer</a>. A perfect fit will depend on the business requirements. For instance, ready-to-use solutions like NodeMediaServer may suit products that won’t be used by a large audience. However, branding and scaling will require assembling the product from different parts.</p><h3>ONE-TO-ONE VIDEO CHAT APPS</h3><p>One–to–one video chat apps are the simplest option if no additional functionality is required. This functionality can be implemented in chat roulette, dating apps, and corporate systems. For example, we implemented one-to-one calls in an <a href="https://mobidev.biz/case-studies/mobile-device-management-software-development">enterprise communication system.</a></p><p>If clients are located on the same network (except for 3G), the following parts of the backend infrastructure are required:</p><ul><li><strong>Signaling Server</strong>: This server is used so that clients know whom to call (addresses).</li><li><strong>Business Logic Server:</strong> This server handles the business-related aspects of the service.</li></ul><p>Unfortunately, such cases are extremely rare. Therefore, in real-world scenarios, two additional types of servers are necessary, known as STUN (Session Traversal Utilities for NAT) and TURN (Traversal Using Relays around NAT) servers. There is no need to develop these types of servers from scratch as they already exist with MIT licenses and can be easily deployed.</p><p>The key point is that setting up a UDP pool for relay is required for TURN. Additionally, communication in cellular networks won’t work without TURN because they often use symmetric NAT and address falsification protection. In sectors like banking and healthcare, address falsification protection is also common, so the use of TURN servers is necessary.</p><h3>VIDEO CONFERENCING APPS LIKE ZOOM OR GOOGLE MEET</h3><p>WebRTC protocol is used for video conferencing apps like Zoom and Google Meet, and there are three network organization types for group calls in video conferencing systems, which determine the quality and functionality of group calls.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*L9Am3GFvFeYo6B8B.png" /><figcaption>Calling architectures in webrtc</figcaption></figure><p><a href="https://bloggeek.me/webrtcglossary/sfu/"><em>Source</em></a></p><p>A <strong>mesh network</strong> is a decentralized network where devices are interconnected, forming a mesh-like structure. Unlike traditional networks with a central hub, mesh networks enable direct communication between devices. This architecture offers advantages like scalability, redundancy, and self-healing but may not handle a large number of participants and requires significant participant bandwidth.</p><p><strong>MCU</strong>, commonly used in video conferencing, manages multiple audiovisual streams in multipoint conference calls. It combines individual participants’ audio and video data into a single stream sent to all participants. This centralized approach relies on the MCU for media stream processing and distribution.</p><p>In contrast, <strong>SFU</strong> is another component of video conferencing systems. It doesn’t merge and redistribute media streams but selectively forwards specific streams to participants based on their needs, considering network conditions and device capabilities. SFUs are often used in decentralized or peer-to-peer conference setups and are the most optimal choice for video conferencing applications.</p><h3>Five Things to Consider When Planning a Video Communication Product</h3><p>Before embarking on the video service development process, you need to conduct an analysis. This analysis will allow you to find out specific requirements and identify potential challenges.</p><p>For example, if you need to implement MPEG-DASH/HLS broadcasting for compatibility with any browser or application while also requiring low-latency streaming with delays under a second, it can be unattainable due to incorrectly chosen broadcasting standards.</p><p>The architectural design and technology selection stage (Technical Analysis) are crucial for the project’s success. You need to thoroughly examine all the criteria before starting, not only refining the requirements but also prioritizing each one for a specific client or project. This ensures choosing the most valid solution, optimal in terms of cost versus requirements, without overlooking something essential.</p><ol><li>FEATURES AND INTEGRATIONS</li></ol><p>Understanding what functionality is needed right now and may be required in the future allows for designing the right technical solution. It’s important to take into account all limitations and assess the need for additional services provided during video streaming. Such services can include recording, screenshot generation, <a href="https://mobidev.biz/blog/augmented-reality-development-guide">AR/VR functionality</a>, and machine learning capabilities (<a href="https://mobidev.biz/blog/background-removal-and-blur-in-a-real-time-video">background blurring</a>, <a href="https://mobidev.biz/blog/how-build-face-recognition-system-integrate-into-app">face recognition</a>, etc.).</p><p>2. NUMBER OF VIDEO SESSION PARTICIPANTS</p><p>Important factors to be considered in the planning stage are the number of participants in media sessions and sources and receivers of video streams. This affects the choice of technologies that will allow the transmission of video of satisfactory quality for all users.</p><p>3. LATENCY</p><p>By latency, I mean what real-time means to you. All real-time services have some delay. For example, in online conferences or live streaming, there’s typically a delay attributed to factors like broadcast standards. Even in advanced implementations, it starts at around 10–12 seconds and can go up to a minute. In practice, feedback usually occurs through chat, and delays in responses are often attributed to publisher-related physical delays (not having read a message in time, not responding in time, etc.)</p><p>4. DIGITAL RIGHTS MANAGEMENT (DRM) AND REGULATORY COMPLIANCE</p><p>DRM is necessary because there’s no foolproof protection against hacking, even if the transmission channel is fully secured. Any issues related to implementing protection against hacking need to be carefully evaluated in terms of the trade-off between implementation time and the level of protection. It’s crucial to consider that implementation time increases significantly with the level of protection.</p><p>Industry-specific requirements can impose additional demands. For example, in healthcare, <a href="https://mobidev.biz/blog/hipaa-compliant-software-development-checklist4">complying with HIPAA</a> involves implementing specific security measures and adhering to guidelines to protect sensitive health information.</p><p>5. INFRASTRUCTURE COSTS</p><p>Video services require ongoing maintenance costs that depend on the type of service and the workload. They consume significant processing power and bandwidth, which needs to be paid for, either to service providers or for servers and bandwidth.</p><p>While service providers might charge around 4–5 cents per minute of service (publisher), theoretically, self-implementation could reduce costs to about 1 cent per minute, but it depends on the services provided. Some services have non-standard billing strategies, such as Zoom, where you pay for the host rather than for time, or services with fixed fees after a certain number of minutes, making it possible to choose third-party services for different business cases.</p><h3>Case Study: Implementing Live Video Conferencing for a Wellness Platform</h3><p>Let us share our expertise with live video chat solutions on the example of one of our projects. This is only one of many projects, but it illustrates that in cases where video streaming is not a main key feature, it is possible to apply the integration of ready-made third-party solutions to optimize the budget and the development process.</p><p><a href="https://mobidev.biz/case-studies/cloud-platform-for-group-therapy-and-wellness">GroupWell</a> is a cloud-based platform for promoting wellness, behavior change, and mental health care through licensed therapists and coaches.</p><p><strong>Project Overview</strong></p><p>Within the GroupWell ecosystem, members are thoughtfully matched with affinity groups that share similar characteristics based on various variables. Additionally, members have the flexibility to search for groups using advanced filters, ensuring they find the perfect match for their wellness journey.</p><p><strong>Approach</strong></p><p>To develop this innovative platform, we devised a strategic approach that seamlessly blended open-source tools and libraries with custom development. This approach was not only time-efficient but also cost-effective, enabling us to deliver a high-quality solution.</p><p><strong>Key Technologies Utilized:</strong> NodeJS, NestJS, PostgreSQL, RDS, ReactJS, Ant Design library, React Admin, Recharts.JS, AWS, Stripe for payment integration, Google Calendar API, Amazon S3, and Amazon SES.</p><p><strong>Integrating Zoom for Seamless Video Communication</strong></p><p>One of the pivotal requirements of the platform was to facilitate both peer-to-peer and group video calls on both mobile applications and within the web version. Given that video conferencing wasn’t the primary focus of the project, we made a strategic decision to leverage a third-party solution.</p><p>After careful consideration, Zoom was chosen as the ideal tool. It not only met our HIPAA compliance requirements but also proved to be a cost-effective option that aligned perfectly with the client’s business needs. Zoom’s comprehensive API and SDK documentation streamlined the development process significantly.</p><p><strong>Enhancing Healthcare Communication</strong></p><p>Our developers seamlessly integrated Zoom’s functionality into the platform. This allowed doctors to create conference rooms, conduct group sessions, and host video calls, all within the GroupWell environment. We also went the extra mile to ensure the security of video sessions by implementing safeguards against re-entry using the same link and tokens, tracking call start and end times meticulously.</p><p>The GroupWell platform now stands as a testament to how technology can empower preventive care, behavioral change, and mental health treatment while providing a seamless and secure communication experience for healthcare professionals and users alike.</p><p>Written by Yuriy Luchaninov, JavaScript Group Leader at <a href="https://mobidev.biz/services/web-application-development">MobiDev</a>.</p><p><em>The full article is originally published at </em><a href="https://mobidev.biz/blog/video-streaming-conferencing-app-development-guide"><em>https://mobidev.biz</em></a><em> and is based on MobiDev technology research.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7bc1a7dbd5e" width="1" height="1" alt=""><hr><p><a href="https://blog.devgenius.io/video-streaming-conferencing-app-development-guide-d7bc1a7dbd5e">Video Streaming/Conferencing App Development Guide</a> was originally published in <a href="https://blog.devgenius.io">Dev Genius</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mobile Accessibility Testing Guide for Product Owners]]></title>
            <link>https://medium.com/nerd-for-tech/mobile-accessibility-testing-guide-for-product-owners-e7845b4f3900?source=rss-b7670cbba31d------2</link>
            <guid isPermaLink="false">https://medium.com/p/e7845b4f3900</guid>
            <category><![CDATA[accessibility-testing]]></category>
            <category><![CDATA[mobile-accessibility]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[testing-guide]]></category>
            <category><![CDATA[quality-assurance]]></category>
            <dc:creator><![CDATA[MobiDev]]></dc:creator>
            <pubDate>Sun, 15 Oct 2023 03:05:59 GMT</pubDate>
            <atom:updated>2023-10-15T03:05:59.628Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*90llCcc9NxNBfZfNjf7cfg.jpeg" /></figure><p>What is important when it comes to creating a mobile app or site? Of course, the idea behind the product. But if your potential customers won’t be able to use the app or the user experience would be unsatisfactory, the product is doomed to failure as well. Product owners should pay attention to mobile accessibility not only to be available for people of all kinds, including people with disabilities, but also to keep the application in line with current legislation norms and to offer another competitive advantage to their product. In 2022, 2387 website accessibility lawsuits were filed which means that mobile accessibility is more important than ever.</p><p>In this article, we are going to dive into the key principles of mobile accessibility, take a look at real-life examples, and offer practical tools and tips for testing the accessibility of Android and iOS applications.</p><p><a href="https://unsplash.com/photos/jqiAU_JQGyk"><em>Image source</em></a></p><h3>Why Mobile Accessibility Testing Is Important for Product Owners</h3><p>Earlier, we talked about <a href="https://mobidev.biz/blog/web-accessibility-testing-guide">web accessibility testing,</a> however, the world is getting more and more mobile-first, with <a href="https://www.statista.com/statistics/306528/share-of-mobile-internet-traffic-in-global-regions/">mobile internet traffic share in January 2023</a> estimated at 47% in North America and 49% in Europe.</p><p>For product owners, mobile accessibility testing can be important for several reasons:</p><ul><li>Inclusivity and equal access: Accessible mobile applications ensure that people with disabilities can fully use and benefit from the app’s functionalities. Mobile accessibility testing helps identify and address barriers that might prevent users with visual, hearing, motor, or cognitive impairments from accessing and using the app effectively. By conducting accessibility testing, developers can create an inclusive digital environment, promoting equal access for all users.</li><li>Legal compliance: Many countries have laws and regulations that require digital content, including mobile applications, to be accessible to individuals with disabilities. Examples include the Americans with Disabilities Act (ADA) in the United States and the Web Content Accessibility Guidelines (WCAG) used globally. By performing mobile accessibility testing, Product owners can ensure their apps meet the necessary legal requirements, avoiding potential lawsuits and penalties.</li><li>User experience and customer satisfaction: Accessibility benefits are not limited to users with disabilities; they can enhance the user experience for all users. By considering accessibility during the design and development of a mobile app, developers can improve the overall usability, navigation, and clarity of the app’s interface. This leads to better user satisfaction, increased engagement, and positive reviews, which all benefit the app’s reputation and success.</li><li>Market reach and competitiveness: By ignoring accessibility, mobile app developers risk excluding a significant portion of potential users. According to the World Health Organization (WHO), around 15% of the world’s population has some form of disability. By ensuring mobile accessibility, developers can tap into this sizable user base and expand their market reach. Additionally, accessibility-conscious apps can attract users who value inclusive design and prefer apps that cater to a diverse range of needs.</li><li>Brand reputation and social responsibility: Building accessible mobile apps demonstrates a commitment to social responsibility and inclusivity. Organizations that prioritize accessibility are viewed positively by users, advocacy groups, and communities. Such initiatives can enhance brand reputation, promote customer loyalty, and foster a sense of goodwill towards the product.</li></ul><h3>WHAT ARE W3C AND WAI?</h3><p>When it comes to web and mobile accessibility, there are some international initiatives that take an important role in creating regulations and standards for products and websites. Let’s take a deeper look at them.</p><p>The World Wide Web Consortium (W3C) is a multinational consortium where organizations and the public work together to design web standards. W3C mainly directs its mission at the development of web standards and guidelines designed to promote long-term growth for the Web. W3C’s Web Accessibility Initiative (WAI) gathers individuals and organizations from around the world to create strategies, guidelines, and resources to help make the Web accessible to people with disabilities.</p><p>In this context, “mobile accessibility” means making websites and applications more accessible to people with disabilities while they are using mobile phones and other devices. WAI’s work in this area addresses accessibility issues for people using a broad range of devices to interact with the web, including</p><ul><li>phones and tablets</li><li>digital TVs</li><li>wearables such as smartwatches</li><li>devices in car dashboards and airplane seatbacks</li><li>devices in household appliances</li><li>other “Internet of Things”</li></ul><p>It handles a wide range of issues:</p><ul><li>different screen sizes</li><li>different input modalities, including touchscreens, speech, gestures, and 3D touch enabled by pressure sensors</li><li>the device is used in different environments, such as bright sunlight</li><li>and more</li></ul><h3>WHO NEEDS AN ACCESSIBLE MOBILE APP?</h3><p>A large percentage of people who use mobile apps and websites have disabilities. And when they experience accessibility issues while using the product in the way they were hoping, they can just delete it, leading to damage to the brand reputation of the product. However, the story might not end at that point, as it can also lead to legal consequences. The number of web accessibility lawsuits continues to grow every year with some companies having to deal with multiple cases in one year. <strong>Consumer Goods, Services &amp; Retail</strong> maintain the top spot as the most-targeted industry group in 2022, registering 423 more lawsuits than in 2021 and accounting for 58% of the year’s total cases.</p><p>Making your app accessible is all about making your app as user-friendly as possible to users that have different needs. The following four groups of people require an accessible mobile app:</p><ol><li>People with cognitive impairments. This includes conditions such as ADD, dyslexia, and Alzheimer’s. These users are either easily distracted, or cannot follow too many different screens or topics.</li><li>Users with visual impairments. This includes color blindness as well as complete blindness. People with visual impairment rely on contrast and visual alternatives to process content.</li><li>People with auditory impairments. Anyone with partial or complete loss of hearing won’t be able to process all app content if it’s inaccessible — auditory alternatives are required.</li><li>Users with mobility impairments. Users with mild or severe mobility impairment won’t be able to move dexterously or tap with purpose when using an app.</li></ol><p>However, products that are compliant with mobile accessibility standards are not necessarily usable for people with disabilities. Inclusive design isn’t about designing for the minority — it’s about ensuring that the majority of your users can use your product.</p><h3>Regulations that Determine Mobile App Accessibility</h3><p>The regulations that determine whether and which mobile applications need to be accessible comes from several different official acts and legal documents, the most important of which is <a href="https://www.ada.gov/law-and-regs/title-iii-regulations/">the ADA or Americans with Disabilities Act</a>.</p><p>There is also the WCAG (The Web Content Accessibility Guidelines) that are developed by the World Wide Web Consortium and it’s what most of today’s website accessibility standards are based on, including those mentioned in the ADA.</p><p>In addition to this, there’s the <a href="https://www.fcc.gov/consumers/guides/21st-century-communications-and-video-accessibility-act-cvaa">Twenty-First Century Communications and Video Accessibility Act (CVAA)</a>, which offers telecommunication protection to those with disabilities. It’s the CVAA that requires advanced communications to be accessible.</p><h3>WHAT WCAG 2.2 MEANS FOR MOBILE ACCESSIBILITY</h3><p>The WCAG features a wide array of recommendations for making web content more accessible. When it comes to native mobile accessibility, there is no official standard for such mobile apps, However, product owners can use WCAG to understand how to make app content more accessible.</p><p>WCAG categorizes each guideline into one of three levels based on the effect they have on the accessibility experience <strong>— A, AA,</strong> or <strong>AAA</strong>. Achieving compliance with the AAA guidelines will provide the most accessible experience to the most groups of users, and also is beneficial to the visual design of the application. Generally speaking, attempting to meet the level A criteria is a step in the good direction for making sure a product delivers an acceptable customer experience for most users.</p><p>The W3C is working on <a href="https://www.w3.org/TR/WCAG22/">version 2.2 of WCAG</a> as this document was published by the Accessibility Guidelines Working Group as a Candidate Recommendation Draft using the Recommendation track. WCAG 2.2 adds a few new success criteria expanding requirements for users with low vision, cognitive impairments, and limited fine motor skills.</p><h3>How to Perform Mobile Accessibility Testing</h3><p>Accessibility testing should confirm that<strong> the website or application achieves at least a WCAG 2.1 level AA</strong>. Verifying that a website or application meets the success criteria is an excellent way to deliver better digital services for all users.</p><p>Like any QA test, accessibility tests are also sensitive to test coverage. Using OS analysis tools is a great way to help QA teams to check a website or application at the programming level to enhance test coverage.</p><p>Besides this, it is essential to consider testing mobile websites and applications across multiple devices. To adequately test a website’s or application’s accessibility, it’s necessary to use at least 4 or 5 devices:</p><ol><li>iPhone with the latest iOS version</li><li>Smartphone with the latest Android OS version</li><li>iPad with the latest iOS version</li><li>1 or 2 other combinations: Android tablet or smartphone with the latest or second latest OS version.</li></ol><p>Although a part of accessibility tests can be automated,<strong> manual testing is a better fit for an extensive range of accessibility tests</strong>, as it allows the tester to check a website or application using real devices and achieve a better perspective on its level of accessibility. It is also possible to extend accessibility testing by using accessibility tools and features provided by mobile operating systems. Apple’s iOS and Google’s Android, the most popular operating systems in Europe and North America, both have these types of features.</p><p>Mobile accessibility testing should be conducted regularly, based on the app’s development and release cycle. It’s best practice to test during development, <strong>before every release, after major changes and updates</strong>, and <strong>once in 6 months</strong> as a general check-up.</p><h3>MOBILE ACCESSIBILITY TESTING CHECKLIST</h3><p>Each operating system has different assistive features for the following disability groups:</p><ul><li>Vision — for people who are blind or have trouble viewing the screen.</li><li>Hearing — for people who are deaf or have trouble hearing.</li><li>Cognitive and learning — for people with cognitive and learning disabilities.</li><li>Physical and motor skills — for people with physical disabilities.</li></ul><p>There is a wide range of possible versions of Mobile Accessibility Testing checklists. However, all of them could be described in these ten key points:</p><ol><li>User Interaction</li><li>Navigation</li><li>Notifications</li><li>Form Labels &amp; Validation</li><li>Toggle Button</li><li>Tables &amp; Accordion</li><li>Text &amp; Color Contrast</li><li>Images</li><li>Audio &amp; Video</li><li>Animation &amp; Motion</li></ol><p>To see how it looks in practice, you can take a look at one of the examples of the WCAG 2.0 AA Checklist <a href="https://pauljadam.com/demos/mobilechecklist.html">here</a>.</p><h3>MOBILE ACCESSIBILITY TESTING APPROACHES AND TOOLS</h3><p>When it comes to mobile accessibility testing, there are the following common approaches:</p><ol><li>Manual testing: interacting with an app using iOS or Android accessibility services.</li><li>Testing with analysis tools: using tools to find weak sides of the app and check opportunities to improve your app’s accessibility.</li><li>Automated testing: accessibility testing with the help of automation tools.</li><li>User testing: getting feedback from real people who interact with your app.</li></ol><p>There are a lot of mobile accessibility testing techniques and tools, from simple to advanced, such as:</p><ol><li>Test for text enlargement, magnification, color contrast, and zoom conformance via built-in iOS and Android Accessibility settings. This tool will help you to see if your application readily responds to these OS preferences, and if it does, how the interface changes. For example, you can find text that appears to be cut off since some focus elements are not visible when using the screen reader and magnification, and text can appear with poor contrast even in inverted mode.</li><li>Use Siri, Switch Control, and the new Voice Control feature in iOS to test for accessibility for users who prefer alternate input methods or speech commands, and check how Google Assistant, Switch Access, and Voice Access work on Android.</li><li>Test for screen reader compatibility with VoiceOver (built-in screen reader for iOS) and Talkback (built-in screen reader for Android). Pay attention to the text being read in the incorrect order, unknown/incorrect labels for elements, headings that are missed, and new content that appears on screen because of a user action that is not announced.</li><li>Use the Google Accessibility Scanner to check for missing item labels, duplicate item descriptions, touch target size, unsupported item types, text and image contrast, and more.</li></ol><p><strong>Although automation catches 40% of the bugs, it’s always necessary to perform manual accessibility audits to make sure that applications are inclusively designed.</strong></p><h3>Mobile Accessibility Testing for Android Apps</h3><p>Mobile accessibility testing for Android apps involves evaluating and ensuring that an Android app is accessible to individuals with disabilities. It involves assessing the app’s usability and compatibility with assistive technologies and accessibility features available on Android devices. The primary objective is to identify and address any barriers or challenges that may prevent users with disabilities from effectively using the app.</p><h3>MANUAL TESTING TOOLS</h3><p>Manual testing helps to experience your application from the user’s side. Android Accessibility Service objects change the way your app’s content is presented to the user and how the user interacts with the content. Android accessibility features can be enabled on Android devices through Settings → Accessibility. Let’s dive deeper to check the most useful features.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JnkPZeaQrJo0j1IC.jpg" /></figure><h4>TALKBACK</h4><p>TalkBack is a built-in Android screen reader that can read everything on the screen. In apps, this includes all buttons, images, form elements, static text, etc. In the mobile browser, this should include all web content (text, alternatives for images, links, form fields, tables, etc.). TalkBack is used by blind and low-vision users, and also by users with some cognitive or learning difficulties. It’s also possible to enable more advanced settings like Text-to-speech, Vibration Feedback, and Spoken assistance.</p><p>In TalkBack, there are two main ways to navigate:</p><ul><li>Linear navigation: by swiping right or left to navigate through screen elements in a sequence. Then users doubletap anywhere to select.</li><li>Explore by touch: by moving a finger over the screen to hear what’s under a finger, then doubletap anywhere to select.</li></ul><p>To check the app for accessibility with TalkBack, you need to follow these steps:</p><ol><li>Open your app.</li><li>Swipe through each element in a sequence.</li><li>Navigate to see what’s happening.</li></ol><p>While navigating, consider the following questions:</p><ul><li>Is the spoken feedback for each element relevant to its content or purpose?</li><li>Are announcements clear and easy to understand, or are they needlessly verbose?</li><li>Are you able to complete the key workflows easily?</li><li>Are you able to navigate to every element by swiping?</li><li>When temporary messages or alerts appear, are they read aloud?</li></ul><p>For more details and information, explore <a href="https://support.google.com/accessibility/android/answer/6006589">TalkBack user documentation</a>.</p><p>In addition to this, you can explore TalkBack developer settings.</p><p>To view or change developer settings, follow these steps:</p><ol><li>Open your device’s Settings app.</li><li>Navigate to Accessibility and select TalkBack.</li><li>Select Settings &gt; Advanced settings &gt; Developer settings:</li><li>Log output level: Select VERBOSE.</li><li>Display speech output: Turn on this setting to view TalkBack speech output on the screen.</li></ol><p>Android provides several additional approaches for testing your app’s accessibility.</p><ol><li>Visibility enhancements: To make fonts clear and comfortable to navigate, enable Negative colors, eliminate animations, and more.</li><li>Hearing enhancements: It’s possible to use sound detectors to get alerts when the phone detects the doorbell or a baby crying or to mute all sounds on the phone if it’s necessary.</li><li>Interaction and dexterity: It’s possible to adjust or replace touch interactions and other controls. Some features include a Universal switch to control your phone with custom switches, and an Assistant menu to turn on functions that help users with reduced dexterity.</li></ol><h3>ANALYSIS TOOLS</h3><p>Using analysis tools can discover additional opportunities to enhance accessibility that might be missed during the stage of manual testing.</p><h3>1. ACCESSIBILITY INSIGHTS FOR ANDROID</h3><p>Accessibility Insights for Android is a free, open-source tool that helps developers find and fix accessibility issues in Android apps. The tool runs on Windows, Mac, and Linux. You can test apps on a hardware device or on an Android Virtual Device.</p><p>Get started by watching a video:</p><ul><li><a href="https://www.youtube.com/watch?v=VFlopg9nnbI">Setup and Installation for Accessibility Insights for Android</a></li><li><a href="https://youtu.be/KuLVuv2yjHc">Introduction to Accessibility Insights for Android</a></li></ul><p>Or read a tutorial:</p><ul><li><a href="https://accessibilityinsights.io/docs/android/getstarted/setup/">Setup</a></li><li><a href="https://accessibilityinsights.io/docs/android/getstarted/fastpass/">FastPass</a></li></ul><p>Accessibility Insights is a free, open-source, and effective tool for detecting accessibility issues, so we can recommend it.</p><h4>FASTPASS IN ACCESSIBILITY INSIGHTS FOR ANDROID</h4><p>FastPass is a lightweight, two-step process that helps testers identify common, high-impact accessibility issues in a few minutes.</p><ol><li>Automated checks — the tool automatically checks for several programmatically-detectable accessibility issues, such as low contrast, missing accessible names, or inadequate touch target sizes.</li><li>Manual test for tab stops — the tool provides clear instructions and a visual helper that makes it easy to identify critical accessibility issues related to keyboard access, such as missing tab stops, keyboard traps, and incorrect tab order.</li></ol><p>We recommend running a FastPass before every check-in of UI code. Completing a FastPass requires you to use standard keyboard commands and to visually identify interactive interface elements. Automated checks can detect some common accessibility problems such as missing or invalid properties. But most accessibility problems can only be discovered through manual testing.</p><p>The app allows:</p><ul><li>Run automated checks after setting up Accessibility Insights for Android on your computer and test device.</li><li>See the Results — When the automated checks have been completed, results are displayed in a new window.</li><li>Show information about failed instances according to Rules.</li><li>Use the Visual helper that allows you to quickly show or hide failure instance highlighting in the screenshot.</li><li>Use the manual test for tab stops. The Tab stops test can be completed on a virtual or physical device using the virtual keyboard built into Accessibility Insights for Android.</li><li>Evaluate instances that need review. Sometimes an automated check encounters an element coded in a way that can’t be evaluated automatically. For example, the color-contrast rule can’t determine the contrast ratio of text that’s superimposed on an image or gradient. Such instances need to be reviewed by a human to determine whether they pass or fail.</li><li>File an issue.</li><li>Share a detailed report of the automated checks with the Export result option.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Ej0Z5LfFCub4jy-B.jpg" /><figcaption>How to start using Accessibility Insights</figcaption></figure><p>Here is how the checking process might look while using Accessibility Insights for Android.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hY6eP-cN8cOzE-tY.png" /><figcaption>Accessibility Insights automated checks</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kbsb-TSz4JMd0csL.png" /><figcaption>Accessibility Insights automated checks details</figcaption></figure><p>The Tab stops shows the way how the main elements of the screen will be presented for users.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mbF5KjumMXEDirun.jpg" /><figcaption>Accessibility Insights tab stops</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yC1ywkeAuE3n4enJ.jpg" /><figcaption>Accessibility Insights tab stops step-by-step</figcaption></figure><p>At the end, it is possible to get the Results report to see what requires improvement.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*v3VxybJUtaAZi1lJ.jpg" /><figcaption>Accessibility Insights results report</figcaption></figure><h3>2. ACCESSIBILITY SCANNER</h3><p>Accessibility Scanner is a tool that scans an app’s user interface to provide recommendations on how to improve the accessibility of the app. Accessibility Scanner enables anyone, not just developers, to quickly and easily identify a range of common accessibility improvements; for instance, enlarging small touch targets, increasing contrast for text and images, and providing content descriptions for unlabelled graphical elements.</p><p>Enhancing the accessibility of your app may allow you to reach a larger audience and provide a more inclusive experience, especially for users with disabilities. This often leads to improved user satisfaction, app ratings, and user retention.</p><p>The improvements suggested by Accessibility Scanner can be easily shared with members of your development team to determine how they can be incorporated into the app.</p><p>To begin using Accessibility Scanner:</p><p>• Open the app and follow the prompts to turn on the Accessibility Scanner service.<br>• Navigate to the app you wish to scan and tap the floating Accessibility Scanner button.<br>• Choose to perform a single scan, or record an entire user journey across multiple interfaces.<br>For more detailed instructions, follow this getting started guide: <a href="https://g.co/android/accessibility-scanner-help">g.co/android/accessibility-scanner-help</a></p><p>Check out this short video to learn more about how Scanner works.<br><a href="https://g.co/android/accessibility-scanner-video">g.co/android/accessibility-scanner-video</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GoyGtBs7hlsDm0a2.jpg" /><figcaption>Accessibility Scanner first steps</figcaption></figure><p>When you design and develop an Android app, Accessibility Scanner can help you improve your app for users. Accessibility Scanner scans your screen and provides suggestions to improve the accessibility of your app, based on:</p><ul><li>Content labels</li><li>Touch target size</li><li>Clickable items</li><li>Text and image contrast</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1RlqqcqOszn_lJtl.jpg" /><figcaption>Accessibility Scanner profile review</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jIPSTlW-f2AC14hB.jpg" /><figcaption>Accessibility Scanner element suggestion</figcaption></figure><h3>Mobile Accessibility Testing for iOS</h3><p>The iPhone devices offer many accessibility features to support your vision, physical and motor, hearing, and learning needs. People use Apple’s accessibility features to personalize how they interact with their devices in ways that work for them. An accessible app supports accessibility personalizations by design and gives everyone a great user experience, regardless of their capabilities or how they use their devices.</p><h3>MANUAL TESTING</h3><p>When navigating the app with accessibility features turned on, it’s possible to gain an understanding of the challenges of interacting with a device in different ways. You also discover places where your app might fail to deliver a great user experience.</p><p>For each critical user flow in your app, turn on an accessibility feature, such as VoiceOver, Reduce Motion, or Large Text Size, and make sure that you can complete every task in the flow without difficulty. After you fix the problems you uncover, turn on a different accessibility feature and run through the user flow again. Before diving straight into making your app more accessible, take some time to get familiar with the accessibility settings that iOS provides. Accessibility features can be enabled through Settings → Accessibility.</p><p>There are the following feature types:</p><ul><li>Vision</li><li>Physical and motor</li><li>Hearing</li><li>General</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Le6yFnDjWHKb9bAv.jpg" /><figcaption>Accessibility Features in iOS</figcaption></figure><h4>1. ACCESSIBILITY SHORTCUT</h4><p>In order to try things out on-the-fly, it can be helpful to configure an “Accessibility Shortcut” that you can activate by triple-clicking the side button. The option can be found at the very bottom of the Accessibility screen. Just tap on the various accessibility options to enable them on the shortcut menu. Then, you can triple-click the side button to turn on/off the various accessibility settings without having to constantly navigate into the Settings app:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*X_YrzPsWLiVeppZ2.jpg" /><figcaption>Accessibility Shortcut</figcaption></figure><h4>2. VOICEOVER</h4><p>VoiceOver users include blind and low-vision users, as well as users with some cognitive or learning difficulties. To enable VoiceOver, navigate to Settings → Accessibility → VoiceOver</p><p>Pre-installed iOS screen reader. When enabled, VoiceOver reads everything on the screen. In mobile Safari, this includes all web content (text, alternatives for images, links, form fields, tables, and so on). In apps, this includes all buttons, images, form elements, static text, etc.</p><p>With VoiceOver — a gesture-based screen reader — you can use an iPhone even if you can’t see the screen. VoiceOver gives audible descriptions of what’s on your screen — from battery level, to who’s calling, to which app your finger is on. You can also adjust the speaking rate and pitch to suit your needs.</p><p>When you touch the screen or drag your finger over it, VoiceOver speaks the name of the item your finger is on, including icons and text. To interact with the item, such as a button or link, or to navigate to another item, <a href="https://support.apple.com/guide/iphone/learn-voiceover-gestures-iph3e2e2281/16.0/ios/16.0">use VoiceOver gestures</a>.</p><p>When you go to a new screen, VoiceOver plays a sound, then selects and speaks the name of the first item on the screen (typically in the top-left corner). VoiceOver tells you when the display changes to the landscape or portrait orientation, when the screen becomes dimmed or locked, and what’s active on the Lock Screen when you wake your iPhone.</p><p>Keep the following points in mind when testing your app’s VoiceOver support:</p><ul><li>VoiceOver reads any text it can find: Tap everything to see what gets read and what doesn’t.</li><li>VoiceOver changes how taps work: Single taps select an element and double taps perform an action. Scrolling is performed using a three-finger drag gesture.</li><li>VoiceOver reads subviews in order from front to back: That is, subviews higher in the view hierarchy (i.e. ones at the bottom of the list in Interface Builder) get read first. Make sure the order that things are being read makes sense and adjust subview ordering accordingly.</li><li>VoiceOver might read things differently than you would expect: VoiceOver uses spacing, line breaks, capitalization, and punctuation to try to say things the way they’re intended, but it won’t always get you the result you want. Adjust accessibility labels accordingly.</li></ul><p>Explore your app with the following gestures with one, two, and three fingers:</p><ul><li>Tap</li><li>Double-tap</li><li>Triple tap</li><li>Swipe left, right, up, or down</li></ul><p>You may get an alert that VoiceOver changes the gestures used to control the device. Select OK. Once you enable VoiceOver, the way you interact with the device changes. There are two interaction methods:</p><ol><li>Explore by touch: Drag your finger over the screen to have VoiceOver describe the items under your finger. You can tap with a second finger or double-tap to open links, press buttons, and so on.</li><li>Gesture navigation: You can swipe right with a single finger to move from one item to the next in sequence. You can swipe left to go backward through this sequence. The voiceOver describes items as you move focus around the screen. You can double-tap to open links, press buttons, and navigate using the Rotor.</li></ol><p>You can temporarily mute VoiceOver by double-tapping the screen with three fingers.</p><h4>3. ZOOM</h4><p>People with low vision often use Zoom. Users with cognitive impairments, such as autism, may also use Zoom to focus on key content and reduce the amount of visual clutter on the screen. To enable full-screen Zoom, first, navigate to the Zoom screen and select Settings → Accessibility → Zoom.</p><p>In many apps, you can zoom in or out on specific items. For example, you can double-tap or pinch to look closer in Photos or expand web page columns in Safari. You can also use the Zoom feature to magnify the screen no matter what you’re doing. You can magnify the entire screen (Full-Screen Zoom) or magnify only part of the screen with a resizable lens (Window Zoom). And, you can use Zoom together with VoiceOver.</p><h4>4. ASSISTIVETOUCH</h4><p>AssistiveTouch helps you use an iPhone if you have difficulty touching the screen or pressing the buttons. You can use AssistiveTouch without any accessory to perform actions or gestures that are difficult for you. You can also use a compatible adaptive accessory (such as a joystick) together with AssistiveTouch to control your iPhone.</p><p>With AssistiveTouch, you can use a simple tap (or the equivalent on your accessory) to perform actions such as the following:</p><ul><li>Open the AssistiveTouch menu</li><li>Go to the Home Screen</li><li>Double-tap</li><li>Perform multi-finger gestures</li><li>Perform scroll gestures</li><li>and much more</li></ul><h3>ANALYSIS TOOLS</h3><p>Testing accessibility is a very manual and time-consuming process. However, Apple has some tools to make testing and debugging accessibility issues easier.</p><h4>1. THE ACCESSIBILITY INSPECTOR</h4><p>The Accessibility Inspector in Xcode can be used to test for missing or incorrect labels, traits, and hints amongst other things. This can be run in the developer environment or using the iOS simulator. The Accessibility Inspector displays accessibility information about each accessible element in an app. You can use the Accessibility Inspector to simulate VoiceOver interaction with the accessible elements in your app to examine the information they provide. Accessibility Inspector tool can be launched by choosing Xcode &gt; Open Developer Tool &gt; Accessibility Inspector in the menu bar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nystXkhQcmYwmCTM.png" /><figcaption>How to use xCode Accessibility Inspector</figcaption></figure><p>In order to use the Accessibility Inspector to check your app, you’ll have to connect your device to your MacBook or launch your app in a simulator. Once it’s connected, it will show as an option in the device dropdown.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JgyaJcTl0ohPHn8Q.png" /><figcaption>How to choose a device in Accessibility Inspector</figcaption></figure><p>Once you’ve chosen the device or simulator, the Accessibility Inspector will show all of the basic settings, actions, element details, and UI element hierarchy. For the purposes of accessibility, we’re going to focus on the “Basic” section. In here, you can see the values set for the accessibilityLabel, accessibilityValue, accessibilityTraits, and the accessibilityIdentifier. By pressing the “Audio” button, you can also hear the label read aloud. Keep in mind that this isn’t always exactly what VoiceOver speaks on a device! For one thing, it does not voice or show the accessibilityHint.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*FoKCub1z9ZVmtKkg.png" /><figcaption>How to view all processes in Accessibility Inspector</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*zXfiRAoRP6iSCqA-.png" /><figcaption>How to view elements in Accessibility Inspector</figcaption></figure><p>There are multiple options available for navigating through the focusable elements in your app:</p><ul><li>Enable the Inspection Pointer which allows you to hover over simulator elements.</li><li>Use the Next/Previous element buttons to manually move through elements in focus order.</li><li>Press the Play button to automatically move through elements as VoiceOver finishes voicing each one.</li><li>You also have the option to navigate through the elements without any audio by toggling the audio button off.</li></ul><p>By going through your app with the Accessibility Inspector, you can verify accessibility settings and perform a more in-depth audit of what is missing.</p><p>The Accessibility Inspector also has an audit feature. This goes through all of the UI elements on the screen and lets you know which ones may be inaccessible with VoiceOver. It also lets you know which elements don’t support Dynamic Text.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*g1mn0a2ErRAyCt5L.png" /><figcaption>How to use Audit feature in Accessibility Inspector</figcaption></figure><p>The Audit goes through all of the UI elements on the screen and lets you know which ones may be inaccessible with VoiceOver. It also lets you know which elements don’t support Dynamic Text.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vjLVw5NLlC56vlcE.jpg" /><figcaption>How to view results in Accessibility Inspector</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*w5MjsWpxFgSNHfiN.png" /><figcaption>How to view Audit results in Accessibility Inspector in detail</figcaption></figure><p>Simply switching to the audit screen and pressing “Run Audit” gives you a list of issues to fix. Above, you can see that the screen audited is missing accessibility settings on multiple UI elements, and its labels don’t allow for dynamic sizing. The eye button next to each item will show you which UI element the warning is referring to. There is also a button with a question mark in a circle next to it that which provides suggestions on how to fix the issue.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sxFzlZVFCHIZzZcZ.png" /><figcaption>How to view Audit results in Accessibility Inspector</figcaption></figure><p>You can save the Accessibility Audit report as a file:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Xw6t6zUCWpwFA00n.png" /><figcaption>How to get Audit report in Accessibility Inspector</figcaption></figure><p>Accessibility Inspector settings allow you to make real-time adjustments to your app to test accessibility. For example, if you enable Dynamic Text on a label, using the font size slider will change the size of text on the simulator immediately.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*cZa-LF48mz19f0nT.png" /><figcaption>Accessibility Inspector settings</figcaption></figure><p>This can help to improve the mobile accessibility of the app in a timely manner.</p><h3>The Bottom Line</h3><p>We hope this mobile accessibility testing article helped you understand the key components of mobile accessibility testing, such as the goals of testing, necessary testing procedures, the most common testing tools, and unique considerations to build a mobile app with all the necessary accessibility features. Apart from enabling the mobile app to be accessible to people with disabilities, this type of testing will also enhance the overall user experience of all users.</p><p>Written by <a href="https://mobidev.biz/our-team/alina-aksentseva">Alina Aksentseva</a>, QA Engineer at <a href="https://mobidev.biz">MobiDev</a>.</p><p><em>The full article is originally published at </em><a href="https://mobidev.biz/blog/mobile-accessibility-testing-explained"><em>https://mobidev.biz</em></a><em> and is based on MobiDev technology research.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e7845b4f3900" width="1" height="1" alt=""><hr><p><a href="https://medium.com/nerd-for-tech/mobile-accessibility-testing-guide-for-product-owners-e7845b4f3900">Mobile Accessibility Testing Guide for Product Owners</a> was originally published in <a href="https://medium.com/nerd-for-tech">Nerd For Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>