<?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 Imaginary Cloud on Medium]]></title>
        <description><![CDATA[Stories by Imaginary Cloud on Medium]]></description>
        <link>https://medium.com/@imaginarycloud?source=rss-a3e51f28e070------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*nzMuqX7grz2ktjwMz24JuQ.png</url>
            <title>Stories by Imaginary Cloud on Medium</title>
            <link>https://medium.com/@imaginarycloud?source=rss-a3e51f28e070------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 07:06:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@imaginarycloud/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[Why Use Python for Web Development?]]></title>
            <link>https://imaginarycloud.medium.com/why-use-python-for-web-development-a80ba370ed9f?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/a80ba370ed9f</guid>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 24 Dec 2020 10:20:33 GMT</pubDate>
            <atom:updated>2021-03-23T15:37:12.795Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L5T67bNqNWmH9moz8J0Ezw.jpeg" /></figure><p>Web development could be a hardworking task. There are a lot of coding languages that can be worthy of building a great product. So, which one must be chosen among all of them? If there’s a language that has gained cult status on web development frameworks and in the shortest span of time, it’s Python.</p><p>Any programming language’s choice depends on how robust and responsive the end application is intended to be and the volume of coding and complexities it may involve. As an Object-Oriented Programming Language focused on Rapid Action Development (RAD), Python has motivated many emerging organizations and startups to choose it as a first-choice. In fact, developers have acknowledged the many significant advantages that endorse Python for web development and how it can quickly adapt to technology changes.</p><p>This blog post will introduce you to Python characteristics and how it inserts itself into the web development domain. We will discuss the benefits of using Python and describe the two most popular web development frameworks for it: Django and Flask.</p><h3>What is Python?</h3><p>Python was first created in 1991 by Guido van Rossum. Its philosophy highlights code readability, which is made clear by its simple syntax, namespaces, and rigidity towards indentation. The simplicity and readability of Python make it a favourite as an initiation language for many people. Tim Peters described the language beautifully using 19 aphorisms, which are known as the Zen of Python:</p><pre>Beautiful is better than ugly.<br>Explicit is better than implicit.<br>Simple is better than complex.<br>Complex is better than complicated.<br>Flat is better than nested.<br>Sparse is better than dense.<br>Readability counts.<br>Special cases aren&#39;t special enough to break the rules.<br>Although practicality beats purity. <br>Errors should never pass silently. <br>Unless explicitly silenced. <br>In the face of ambiguity, refuse the temptation to guess. <br>There should be one-- and preferably only one --obvious way to do it. <br>Although that way may not be obvious at first unless you&#39;re Dutch.<br>Now is better than never.<br>Although never is often better than *right* now.<br>If the implementation is hard to explain, it&#39;s a bad idea.<br>If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea --let&#39;s do more of those!</pre><p>Python is a simple but powerful language that runs smoothly on the most popular operating systems (Windows, Linux, and Mac). This language can conform to the programmer’s coding style (functional, imperative, or object-oriented), meaning that developers can use the style that best suits the handed task. Python can be used not only for web development but also in many different fields ( <a href="https://www.imaginarycloud.com/blog/importance-of-artificial-intelligence-for-a-web-developer/">Artificial Intelligence</a>, Deep Learning, and the Internet of Things) and in many different industries like Travel, Healthcare, Transportation, and Finance.</p><p>Many world-class software companies (like Google, Intel, Microsoft, Dropbox, Instagram, Facebook, and Spotify) use Python in their services and, if they do it, that’s got to mean something!</p><h3>Why use Python for Web Development?</h3><p>First of all, what is web development? Although it may seem hard to define, web development can be seen as a way of creating, building, and maintaining websites. Typically, web development involves a front-end (everything that interacts with the user) and a back-end — hidden from the regular user — which contains all the business logic and interacts with a database. Python inserts itself in web development as a back-end language, and it is usually combined with some other front-end language (frequently javascript) to build a whole website.</p><p>Back to our star question, the reason for using Python in web development is simple: it’s an adaptable, versatile, and highly efficient programming language that offers dynamic typing capabilities. Python allows developers to create scientific applications, system applications with graphics, games, command-line utilities, web applications, and many more options. In fact, Python has been considered as “the most popular coding language” for the past years. Check the graphic below regarding 2019 pieces of research over the most popular coding languages:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*N5_qc3-73VST1sOYDj4X_w.jpeg" /><figcaption>Most Popular Coding Languages in 2019 (source: Statista)</figcaption></figure><p>Another excellent reason for using Python is that it can be used and distributed for free. Known as an open-source product that works with a vast set of libraries, all the coding information needed is available on the Internet, which means that copying, embedding, and distributing Python in your products is unrestricted. This makes it extremely useful in the digital systems world once it conceives flexibility in the marketplace and allows companies to interact with many industry sectors. The result? A high-functioning and very successful product. Let’s check the main benefits:</p><h3>Benefits of using Python for Web Development</h3><p>There are several factors that simplify the use of Python for web development:</p><ul><li><strong>Easy to learn:</strong> The simplicity of the syntax allows you to deal with intricate systems and ensure communication between developers working on the same project is much more efficient. In fact, a language that is easy to learn means that newbie developers or developers who don’t have any experience in python can learn the language and join the development team faster.</li><li><strong>Good readability:</strong> The fact that python is similar to our everyday language and its emphasis on readability means that its developers can write understandable code.</li><li><strong>Complex tasks on the back-end:</strong> Python is an advanced coding language that allows you to do complex tasks on the back-end, including <a href="https://www.imaginarycloud.com/blog/data-science-what-is-and-how-it-can-help-your-business/">AI and Data Science</a> as well as any other common task in other programming languages.</li><li><strong>High popularity among web development:</strong> Usually, this characteristic can be seen as an index of how suitable/good a language is, but this is also an advantage for debugging our application. If you are struggling with some bug or don´t know precisely how to implement a new feature, there probably exists someone on the internet who already had the same problem, and finding a solution is only a few clicks away.</li><li><strong>Wide range of libraries:</strong> There are a lot of python libraries that you can use to accelerate the development of your application. These libraries are packages of pre-written code available to everyone, so you don’t have to reinvent the wheel. Some of the libraries are Numpy, scitLearn for data analysis and mathematical algorithms, and x for composable SQL queries.</li><li><strong>Good Frameworks:</strong> Some of the most popular web development frameworks for python include Django, Flask, Pyramid, Web2Py, and Turbogears. These frameworks are similar to toolboxes aiming to help you speed up the development of a web application. They contain packages and modules of standardized code to aid you in several application areas (URL routing, accessing the database, HTTP requests, and responses ).</li></ul><p>In the next two sections, we will introduce and discuss the two most popular web development frameworks for python: Django and <a href="https://www.imaginarycloud.com/blog/flask-python/">Flask</a>.</p><h3>What is Django?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/0*puRuDZF3oID2R6td.jpg" /></figure><p>Django is a back-end python web development framework for building complex and scalable websites, and it might be the reason for python´s rise in popularity in the last years. Django uses the model-view-template (MVT) architecture, a pattern based on a set of best practices for organizing your code.</p><p><strong>Model:</strong> The model is what binds your application to the database. Normally a model represents a table in the database and defines what and how your application accesses the database. It simplifies the tasks of creating, deleting or updating table entries.</p><p><strong>View:</strong> The view is the user interface. It renders the templates and defines what you see and the behaviour of it. It is composed of HTML, CSS, and javascript files.</p><p><strong>Template:</strong> Is the desired static HTML structure file with special syntax. It describes the inserted content.</p><p>Django follows a “batteries included” philosophy, which means that standard functionalities for building web applications should come with the frameworks. So, by just installing Django on the device, it will allow you to have access to: user authentication system; URL routing; the template engine; Object Relational-Mapper (ORM); and database schema migrations. This makes the initial application setup very fast and, if you require additional tools, Django has more than 4000 extra downloadable packages that can be used according to your project needs.</p><p>In addition to this, Django has a very detailed documentation. With it being around for a long time (2005), many helpful practice tutorials are readily available on the internet. Being proficient in Django will make application development pragmatic, fast, and clean. Over the years, many popular websites were built using Django — that’s the case of Spotify, Instagram, and Youtube.</p><h3>What is Flask?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/0*B9uDAhc3PRKzy3HK.png" /></figure><p>Armin Ronacher developed Flask, in 2010, as a back-end Python framework widely known as Django’s alternative for web development. Being more recent than Django, Flask’s creator used the Python web development community to base his knowledge as he built this new framework.</p><p>After Flask’s initial success, the author created “The Pallets Projects”, a collection of libraries to help developers with their web development needs. Even if Django and Flask serve the same development purposes, they have a very different philosophy.</p><p>Flask comes only with two main components: The Jinja 2 template engine — to help build HTML templates — and the Werkzeug (a scary german word), a tool that provides HTTP routing support. Because of its simplicity, Flask is considered a microframework that doesn’t force you to work with a large predefined set of tools like Django. Instead, Flask comes with the bare minimum, leaving the developer to decide what tools should be used. For this reason, Flask is considered a more pythonic framework of the two.</p><p>The Flask minimalistic approach means that applications can be developed with minimal boilerplate code and, when handled by experienced developers, Flask can produce extremely straightforward applications (code-wise). However, the framework flexibility and the available tools allow the application’s functionalities to extend as the project requirements change or evolve.</p><h3>In short</h3><p>Python is an amazing coding language that has been around for a long time. Its simple and straightforward syntax makes it ideal as a first-choice language for beginners, yet it is powerful enough to be behind some of the worlds’ most popular websites.</p><p>Both of its most popular frameworks — Django and Flask — have their merits, and you can go with either of them to build your web application. Yet, if you are a less experienced developer, we recommend using Django once it provides an easier and faster web development. There’s a popular saying in the Python community that is both funny and self-explanatory: “Pirates use Flask, The Navy uses Django.”</p><h3>Found this article useful? You might like these ones too!</h3><ul><li><a href="https://www.imaginarycloud.com/blog/ruby-vs-python-for-web-development/">Ruby vs Python for web development</a></li><li><a href="https://www.imaginarycloud.com/blog/how-to-handle-async-operations-with-redux/">How to handle async operations with Redux</a></li><li><a href="https://www.imaginarycloud.com/blog/angular-vs-react/">Angular vs React: A comparison of both frameworks</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/why-use-python-for-web-development/"><em>https://www.imaginarycloud.com</em></a><em> on December 24, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a80ba370ed9f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Data science: what is and how it can help your business?]]></title>
            <link>https://imaginarycloud.medium.com/data-science-what-is-and-how-it-can-help-your-business-b794570e35b0?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/b794570e35b0</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-scientist]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 17 Dec 2020 10:25:29 GMT</pubDate>
            <atom:updated>2020-12-17T17:39:10.285Z</atom:updated>
            <content:encoded><![CDATA[<h3>Data science: what is it and how can it help your business?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NgHFlbbkyYsF5l3nqrrx1g.jpeg" /></figure><p>Have you ever imagined the value that exists in a cloud of data? Well, feel free to come aboard with us!</p><p>Living in the era of “ <strong>Big Data</strong>” can be overwhelming. We might not think about it, but we continuously produce and release volumes of information about ourselves with each move we made (cameras, sensors, card movements, PC logins, internet navigation).</p><p>If the need for storage was previously the main focus, nowadays, it’s how we can process complex and large sets of data considered key information about individuals, groups, and periods of time. Extracting meaningful insights is what Data Science stands for. In this blog, we will be covering the foundations of Data Science and how it can help businesses grow and prosper.</p><h3>What is Data Science?</h3><p><strong>Data Science</strong> is an interdisciplinary area that uses scientific methods, processes, algorithms, systems, and machine learning principles to discover hidden patterns, trends, and correlations from the extracted raw data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-PmwEjZCSaj2h-4W.png" /></figure><p>Data Science emerges to provide a holistic business vision by gathering and filtering valuable/actionable insights that help predict customer behavior and identify new revenue opportunities. The result? It will ease the decision-making process and enhance innovation and efficiency.</p><h3>Data Science can be used for:</h3><ul><li>Detection of anomalies (fraud, disease, crime);</li><li>Automation and decision-making (background checks, credit worthiness);</li><li>Classifications (like classifying emails as “important” or “junk”);</li><li>Forecasting (sales, revenue and customer retention);</li><li>Pattern detection (weather patterns, financial market patterns);</li><li>Recognition (facial, object, voice, text, fingerprint);</li><li>Recommendations (products, services, books).</li></ul><h3>How is Data Science changing the world?</h3><p>From 1970 to the middle ’90s, the existing data was mostly structured and small in size, which could be analyzed using simples BI tools. Today we face a completely different reality, where about 80% of data is unstructured or semi-structured. Check the figure below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/925/1*AWkyEHMtVTqVkp77kvq5aA.png" /></figure><p>Big Data makes it possible to achieve research results that cover a wide range of issues and tell us much about developments in the world in many different areas. This data is generated from different sources (databases, text files, social media, forms, APIs, browser searches, etc.), and simple BI tools cannot process the large volume and variety of data.</p><p>The demand for data science skills has grown significantly over the years. Having advanced analytical tools became essential to process and analyze data. These tools help data scientists find meaningful insights and uncover solutions to business challenges.</p><h3>What is a Data Scientist?</h3><p>Data Scientists not only do the exploratory work to discover relevant insights from data. They also use advanced techniques and algorithms to develop hypotheses, make inferences, and identify customer and market trends. More than analyzing what is currently happening, they are responsible for setting best practices regarding data interpretations.</p><p>Data Scientists are a new breed of analytical experts who use industry knowledge, contextual understanding, and predictive assumptions to find trends and manage data from many angles, sometimes not even known earlier. This role is an offshoot of many scientific areas such as mathematics, statistics, and computer science, using the latest technologies (like machine learning and <a href="https://www.imaginarycloud.com/blog/importance-of-artificial-intelligence-for-a-web-developer/">artificial intelligence</a>) to find development solutions and growth within organizations.</p><h3>How can Data Science leverage your business?</h3><p>We have already seen what Data Science is capable of, but how do we make it useful to us? What are its real-world applications?</p><p>In fact, Data Science is revolutionizing many industries (see picture below), providing valuable business benefits that can be summoned into three major categories: business efficiency, product creation, and customer experience. The ability to increase efficiency is the highest value opportunity that Data Science brings to an existing business model.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/941/1*1YV-G_avQ1CSg0QNA-AJ_A.png" /></figure><h3>How Data Science can help improving business efficiency:</h3><ul><li><strong>Data Creation:</strong> improving business efficiency requires more than analyzing the existing data. Creating new and useful data through some tests will help to measure what needs to be improved. Finding actionable insights within this data can result in a significant productivity increase.</li><li><strong>Real-Time Reporting:</strong> it can improve business efficiency immediately by generating and leveraging micro-scale interaction that makes customer interactions more effective. Companies that prioritize better response times will have their sales processes optimized.</li><li><strong>Historical Data Interpretation:</strong> historical data allows to analyze customers’ past behavior and build predictive models to learn how they will likely behave in the future. More than learning from the mistakes on a person-to-person level, it’s essential to predicting the occurrence of future events to avoid those problems altogether.</li><li><strong>Data-Driven Culture:</strong> Focusing on data and making the best use of it can’t just be the data science team’s scope. It must be part of leadership’s mentality in encouraging data-driven decision-making at every level, with every employee understanding data’s inherent importance in their job role.</li></ul><h3>Conclusion</h3><p>The gathering and generation of large volumes of data have long outpaced our ability to process it manually. The automatic processing and analysis of data is a growing industry all on its own. And guess what? The full potential of Big Data technologies is beyond any business’s ability to realize it without Data Science experts to help.</p><p>To be ahead of the curve, it’s necessary to have a science team focused on creating and analyzing predictive constructs to boost your business efficiency. Being a strong competitor requires implementing all these cutting edge data procedures and taking the best advantage.</p><h3>Found this article useful? You might like these ones too!</h3><ul><li><a href="http://Native vs. Hybrid vs. PWA: The Pros and Cons">Native vs. Hybrid vs. PWA: The Pros and Cons</a></li><li><a href="https://www.imaginarycloud.com/blog/building-minimum-viable-product/">Why Building A Minimum Viable Product Matters</a></li><li><a href="https://www.imaginarycloud.com/blog/18-best-agile-practices-to-use-in-your-software-development-life-cycle/">18 Best Agile Practices To Use In Your Software Development Life Cycle</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/data-science-what-is-and-how-it-can-help-your-business/"><em>https://www.imaginarycloud.com</em></a><em> on December 17, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b794570e35b0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to make CSS Animations | Imaginary Cloud]]></title>
            <link>https://imaginarycloud.medium.com/how-to-make-css-animations-imaginary-cloud-c228f3409b67?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/c228f3409b67</guid>
            <category><![CDATA[css]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[animation]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 29 Oct 2020 09:54:07 GMT</pubDate>
            <atom:updated>2021-03-09T13:11:56.432Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*tbRsCq67gGheVVhB" /></figure><p>Animations on the internet are not new. They have been used to achieve many goals, including making something more interesting to watch or even more appealing. Sometimes that is what makes a website stand out among the competition! Animations can make UI elements resemble the real world, making them smoothly change while giving the feeling of continuity, action and progress, instead of changing in a blink of an eye.</p><p>Even when applied to small elements, animations can help the user remember whether an action was executed or not. In fact, the user is more likely to remember what he/she just did after perceiving something changing little by little, instead of all at once. A simple animation for a loading screen tells more than just waiting with a white page. It’s the difference between knowing something is still happening and wondering if the page is broken.</p><h3>What are CSS animations?</h3><p>There are a lot of different ways of achieving an animation on a webpage. You can use a premade animation from a .gif file and use it as a regular image, which can be simple but will make you lose the ability to change that animation within the code. Manipulate HTML elements using JavaScript is a thing that can be done as well, however, it is often a little too expensive in terms of computation. Also, feel free to use CSS and <strong>define multiple styles</strong> of an element to smoothly <strong>change throughout time</strong>. It will not only be easier but also allow the browser to optimize performance and efficiency.</p><p>CSS offers two different types of animations. The first one is the <strong>transition property</strong>, which is frequently used for hover effects and other user interactions. The second one is the <strong>animation property</strong>, which allows creating more continuous animations or, as we will see later, animations with more stages. Check the example of these two properties’ effects on the codepen below (if you don’t know what codepen is, check <a href="https://www.imaginarycloud.com/blog/how-to-use-codepen-to-speed-up-your-front-end-development/">our article about this great tool</a> for sharing code snippets):</p><ul><li>at the left an hover effect using the transition property;</li><li>at the right a loading effect using the animation property.</li></ul><h3>Key elements of animations</h3><p>To make simple or more complex CSS animations, it’s necessary to master two key elements: <strong>Animation Timing</strong> and <strong>Inner Components</strong>. An animation without time associated is the same as having no animation, as it will merely change instantly. Using inner components will make life easier as it is much more likely to need more than one element to enhance animations. Let’s check them:</p><h3>Animation Timing</h3><p>To create a smooth animation or transition, it’s essential to define time limits. On both <strong>transition</strong> and <strong>animation</strong> properties, we have <strong>duration</strong>, that says how much time it takes to go from start to finish, which is defined by the first time unit (seconds or milliseconds). Then, the <strong>delay</strong>, which determines how much time the element will wait before the animation starts, being defined by the second time unit.</p><pre>transition: all 0.5s linear 0s; animation: rotate 1s linear infinite 0.1s;</pre><p>Below, there are four examples that show the multiple effects that different values can create: two hover effects (one with a duration of 0sec and another 0.5sec), together with two loading effects (one with a delay of 0sec and another with 0.1sec, 0.2sec, and 0.3sec for each of the squares).</p><h3>Inner Components</h3><p>The second key factor and the secret for making more sophisticated animations is the use of inner components. If only one or two extra elements are needed, the <strong>:before</strong> and <strong>:after</strong> components can be used, just like in the sample below.</p><pre>//HTML structure &lt;div class=&quot;my_text&quot;&gt;&lt;/div&gt; /* CSS styling */ my_text { ... } my_text:before { content : &quot; &quot; ; ... } my_text:after { content : &quot; &quot; ; ... }</pre><p>They can be styled as usual on your CSS file, but it won’t be necessary to define them on the HTML. It will automatically associate the extra elements with the main component, leaving the HTML intact. The only difference in the CSS is that you need to define the <strong>property content</strong> represented by a string. As an example, it’s like describing the text inside a div on the HTML. From the hover effect example, check below how the a:before component was styled and an empty string was used on the content property to only create that little corner.</p><pre>a { color: #FCD63F; font-size: 35px; text-decoration: none; text-transform: uppercase; padding: 5px 10px; margin: 0px 10px; position: relative; transition: all .5s } a:before { content: &quot;&quot;; position: absolute; bottom: -8px; left: -8px; width: 12px; height: 12px; border: 3px solid #FCD63F; border-width: 0 0 3px 3px; opacity: 1; transition: all 0.3s }</pre><p>In case the animation needs more than two extra elements, standard <strong>HTML components</strong> can be used. Change the HTML structure and incorporate unstyled components like spans, apply styling, and then apply the transition or animation. The use of multiple components is also useful if you have different types of movements once <strong>each component can only take one animation or transition at a time</strong>. The example below shows the loading effect: there is a div named container with four spans inside, and the container has one animation which makes it get bigger. Finally, each span has an animation that makes them rotate.</p><pre>//HTML structure &lt;div class=&quot;container&quot;&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt; &lt;/div&gt; /* CSS styling */ .container { width: 90px; height: 90px; position: relative; animation: animate 1s linear infinite; transform: rotate(45deg); } .container span { position: absolute; width: 45px; height: 45px; animation: rotate 1s linear infinite; }</pre><h3>CSS transitions</h3><p>So, how is a transition implemented? The first thing to do is define an initial and final style/state of the elements involved, including the :before and :after components. Then, using the <strong>transition property</strong>, it will inform those components how they will behave between the two states. This transition property is the composition of four other properties: <strong>transition-delay</strong> and <strong>transition-duration</strong> (which are time-related properties and we have already covered), <strong>transition-property</strong> and <strong>transition-timing-function</strong>.</p><p>Let’s check what these last two properties are and how do they work:</p><h3>Transition-property</h3><p>This part of the transition allows specifying which properties are going to be affected. It can be set to “all”, so all properties that change from one style to another are selected. But it can also be a specific property or a set of them. This is very useful when setting different timings or behaviours between the element’s different properties. For example, if you want the background-colour to change much faster than the text colour, you would use:</p><pre>transition: color 0.5s linear 0.5s, background-color 0.1s linear 0.5s; // instead of transition: all 0.5s linear 0.5s;</pre><h3>Transition-timing-function</h3><p>The timing function defines the transition’s velocity and has a set of possible values:</p><ul><li><strong>linear</strong>, the velocity will be constant;</li><li><strong>ease-in</strong>, it will start slow and then get faster;</li><li><strong>ease-out</strong>, it will start fast and then get slower;</li><li><strong>ease-in-out</strong>, a mix of the last two: it will start slow, then get faster and slower again;</li><li><strong>ease,</strong> is a variation of the previous one and the default value of this property.</li></ul><p>Explore how these different values can affect an animation in the example below. Notice that the transition can keep track of itself. Moving the mouse quickly in and out of the animated component, the animation will not go all the way till the end: it will rollback.</p><h3>CSS animations and keyframes</h3><p>In contrast to the transition property, there’s no need to specify the element properties affected, nor even define an initial and last state on animation one. The animation property gives more freedom due to keyframes usage. <strong>Keyframes</strong> determine the different styling/states of the component, having a name that will be later used on the animation property. Having just two states, it can be used <strong>“from”</strong> and <strong>“to”</strong> to define the initial and final ones. But, in case of wanting more, it can be used percentages and specify something like the rotate animation on the loading effect.</p><pre>@keyframes rotate { 0% {transform: rotate(0deg);} 10% {transform: rotate(0deg);} 50% {transform: rotate(90deg);} 90% {transform: rotate(90deg);} 100% {transform: rotate(90deg);} } span { position: absolute; width: 45px; height: 45px; animation: rotate 1s linear infinite; }</pre><p>Just like the transition property, the animation one is also the composition of other properties. They are: <strong>animation-duration</strong>, <strong>animation-delay</strong> and <strong>animation-timing-function</strong>, that work in the same way as the transition ones; <strong>animation-name</strong>, where the name of the keyframe appears; <strong>animation-iteration-count</strong>, to determine how many times the animation will run, which can be a specific number of “infinite”; <strong>animation-direction</strong> and <strong>animation-fill-mode</strong>.</p><h3>Animation-direction</h3><p>This property tells in which direction the animation must render on the keyframe selected, allowing to choose one of the following values:</p><ul><li><strong>normal</strong>, the animation goes from 0% to 100% (default value);</li><li><strong>reverse</strong>, the animation goes from 100% to 0%;</li><li><strong>alternate</strong>, the animation goes from 0% to 100% and 0% again;</li><li><strong>alternate-reverse</strong>, the animation goes from 100% to 0% and 100% again.</li></ul><h3>Animation-fill-mode</h3><p>Wondering what happens to the component after the animation finish? The animation-fill-mode property has the answer for it. This value tells how the component may behave outside the animation time, in other words, before and after the animation:</p><ul><li><strong>none</strong>, the component is set to its default style;</li><li><strong>forwards</strong>, after the animation is complete, the component will remain as the animation left it;</li><li><strong>backwards</strong>, before the animation starts, on delay time, the component will immediately take the style defined at the start of the animation.</li><li><strong>both</strong>, before and after the animation, the component takes the style the animation defines.</li></ul><p>Check the result of each value below. Just click on any of the boxes where the animation has one second of delay and the differences will be clear.</p><h3>What CSS properties can be animated?</h3><p>Both types of animations element properties can almost be changed, as long as they are <strong>represented by unit values</strong>. For instance, you’ll be able to see a smooth transition on colours, height and width values, margins and paddings, opacities, transform, etc. However, you won’t see that effect on borders style, position, float, background-img, font-family, etc.</p><p>Even though unit/numeric properties can be changed smoothly, not all of them impact the rendering process the same way; some can be slightly heavier than others. When a browser initiates a web page, it will go through some steps: the first is <strong>Layout</strong>, the second is <strong>Paint</strong>, and finally, the <strong>Composite</strong>. If we choose to animate a property that triggers Layout, like width, the browser will repeat the paint and composite. For that reason, the use of properties that only activate the composite step, like <strong>transform</strong> and <strong>opacity</strong> should be prioritized. You can check the <a href="https://csstriggers.com/">full list of CSS properties and their triggers.</a></p><h3>Transform property</h3><p>As mentioned before, the transform property is one of the cheapest to animate. However, this does not mean it’s a limited property. In fact, it allows doing a lot of this to the element, including:</p><ul><li><strong>translate ( x , y )</strong> — Move an element x pixels horizontally and y pixels vertically. Negative values will move left or up and positive ones will move right or down.</li><li><strong>rotate( y )</strong> — Rotate an element y degrees. Positive values for clockwise and negative for counter-clockwise movement. The effect will happen over the center of the element by default, change it with the transform-origin property.</li><li><strong>scale( x , y )</strong> — Alter the size of the element. Given two values, x and y, it will change the width of the element x times and the height y times. Given only one value, like w, it will change both width and height w times, keeping the initial proportion of the element. It can be used scaleX( x ) and scaleY( y ) to only target width or height correspondingly. Values above 1 make the element bigger and between 0 and 1 smaller.</li><li><strong>skew( x , y )</strong> — skews the element x deg horizontally and y deg vertically. You can specify only one value, but the effect will only affect the X-axis, the y will be set to 0. Just like scale, you can specify this action for the X and Y-axis individually with skewX() and skewY().</li><li><strong>matrix( scaleX() , skewY() , skewX() , scaleY() , translateX() , translateY() )</strong> — the matrix allows to easily combine all the methods above.</li></ul><p>All the previous effects will be applied to the centre of the element unless the property transform-origin value is changed. That value can be 1 or 2 percentages or even the following values: top, bottom, right, left and centre.</p><p>If you tried to explore the code of some of the <strong>previous animations</strong> shown here, you may notice that we are <strong>not using the transform property</strong> all the time. However, that does not imply that you can not do the same animations using only transformations. To show that, <strong>we created both effects using the transform property</strong>. Check below all the alterations needed; you’ll be surprised by how easy it is to do the same effect without changing the HTML structure.</p><h3>Performance of CSS Animations vs Javascript</h3><p>Animations done through <strong>JavaScript</strong> are managed on the <strong>main thread</strong> of the browser where the layout and painting also happen. <strong>CSS</strong> animations, depending on the properties that are being changed, can occur in a separate thread called the <strong>compositor thread</strong>. If the browser takes more time on more demanding tasks, main thread animations will be compromised and interrupted, whereas compositor ones won’t be affected and will keep going smoothly. So, if you choose Javascript, you are more likely to have missing frames on your animations.</p><h3>Conclusion</h3><p>In sum, making animations using CSS and the transform property should be a priority. They are easy to do, especially for those who already get the hang of it and know precisely the goals to achieve. Nonetheless, it’s important to be careful regarding animation’s excessive use since it can lead to performance issues and cause an overwhelming situation for the user.</p><h3>Found this article useful? You might like these ones too!</h3><ul><li><a href="https://www.imaginarycloud.com/blog/5-front-end-development-tools/">5 Essential Front-end Development Tools</a></li><li><a href="https://www.imaginarycloud.com/blog/how-to-use-codepen-to-speed-up-your-front-end-development/">How To Use CodePen To Speed Up Your Front-end Development</a></li><li><a href="https://www.imaginarycloud.com/blog/async-javascript-patterns-guide/">JavaScript Async Patterns Quick Guide</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/how-to-make-css-animations/"><em>https://www.imaginarycloud.com</em></a><em> on October 29, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c228f3409b67" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to accelerate your development with React Native and Expo]]></title>
            <link>https://imaginarycloud.medium.com/how-to-accelerate-your-development-with-react-native-and-expo-7a196aa981ac?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/7a196aa981ac</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[expo]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 10 Sep 2020 15:03:00 GMT</pubDate>
            <atom:updated>2020-12-09T13:27:11.481Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QzB1acm97szbvbdFd1ho0Q.jpeg" /></figure><p>If you are here, you may be wondering “ <em>How can React Native and Expo help me building my next mobile application faster?</em> “.</p><p>As interns at <a href="https://www.imaginarycloud.com/">Imaginary Cloud</a>, we were proposed to develop an application that was somehow useful for the situation that the world currently faces, the Coronavirus pandemic. Due to this situation, we have to adopt new proceedings about how we manage common areas in the company. Since we now have limitations in how many people can be in the same room according to its size, we need to reduce the spread of the virus by grouping people who share the same work area.</p><p>Also, it is our intention for this application, to raise awareness by showing some warning messages, and to track the availability of a room without visiting it.</p><p>As a result of these constraints, our goal was to solve this problem by developing an app using these React Native and Expo. We were not familiar with any of these, as you might not be, so don’t worry, with some reading and practice you’ll understand how they work and why they are a good choice when it comes to mobile app development. That’s why we think it’s important to share our journey and some lessons learned from our experience.</p><p>This post might help you ramp-up your next project, and we hope this may enlighten your next steps and what advantages it brings. In this blog post, we are going to talk about these two frameworks, how they are related and why this might save you some time, even if you are not familiar with mobile development. But let’s start with the very basics of these technologies.</p><h3>What is React Native?</h3><p>React Native is <strong>an open-source framework for building native apps with React</strong> created by Facebook and released in 2015. It allows you to use native UI controls and to have full access to the native platform provided from the comfort of a JavaScript library. React Native makes it easy to simultaneously develop for both Android and iOS as the code can be shared across platforms.</p><p>Plus, this framework combines the user experience of the native platforms with the developer’s knowledge of building with React on the web, supporting the desired approach of <strong>“learn once, write everywhere”</strong>.</p><h3>What is Expo?</h3><p>Expo is <strong>a framework and a platform for universal React applications</strong>. It supplies a set of tools and services that simplify the development and testing of React Native apps, offering/giving the possibility to run the code on your phone easily. Besides that, Expo provides a more robust and developer-friendly workflow.</p><h3>How to install React Native?</h3><p>Setting up the development environment might be different depending on the experience you have with mobile development, but that’s not a problem.</p><p><strong>If you are new to mobile app development</strong>, the easiest way to get started is with Expo CLI.</p><p><strong>If you are already familiar with mobile app development</strong>, you may want to use React Native CLI.</p><p>We are going to cover the set-up for new mobile developers, because even if you are familiar with mobile development, Expo is a really nice framework to use and easy to learn.</p><h3>How to install Expo?</h3><p>There are two tools that you will need to develop apps with Expo: <strong>a local development tool</strong> and <strong>a mobile client to open your app</strong>.</p><p>As a local development tool, we use <strong>Expo CLI</strong>. In addition to the command-line interface (CLI) it also has a web-based graphical user interface (GUI) that pops up in your web browser when you start your project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*K918rQpXae1vneP5.png" /></figure><p>You will need <strong>Node.js</strong> in order to install Expo CLI. After installing Node.js, you can now install Expo CLI by running the following command: npm install -g expo-cli</p><p>Now, after you follow all the steps, that we already covered on this blog, all you have to do is run the following command, with a project called for example “MyProject”: expo init MyProject</p><h3>Advantages of using React Native</h3><p>You must be wondering why you should use React Native. We are going to talk about some advantages when using this framework.</p><ol><li><strong>Code Reusability:</strong> with React Native you will be able to develop cross-platform code, without the need of building one app for each platform. Most of the written code in React Native can be reused for both OS (Android and iOS).</li><li><strong>Pre-built components:</strong> Even though this framework is new/young, you can find already built components that you can use in your mobile application. React UI frameworks like Material UI provide you pre-built components for faster and simpler development that can be adjusted to your needs.</li><li><strong>Real-time feedback:</strong> Fetching real-time data and generating updated UI when something changes on the code is one of the greatest React Native’s features. When you are building your app, you need to view your code changes and you have two options. <strong>Live Reload</strong> is useful when you need to reload the entire app when a file changes (for example, to test routes/navigation). Besides that, <strong>Hot Reload</strong> can be helpful when you just want to refresh the files that were changed without losing the state of the app.</li><li><strong>Performance:</strong> React Native performance is almost as good as native performance. The fact that the programming language is optimized for mobile devices and the use of two separate threads (one for native APIs and the other one for the UI) makes it possible to run React Native apps efficiently.</li><li><strong>Popularity:</strong> Although React Native is a newcomer for building cross-platform mobile apps, it already has significant popularity being used by the largest companies. Just to have an idea, the GitHub community of React Native is already much bigger, in the number of contributors than Swift for example.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*bEB7-OP-tVdATR6i.png" /></figure><p>According to Google Trends, as we can see from the chart above, researches related to React Native has been rising, which shows the growing interest and demand for this technology.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*tWBxW-rbsmGW3x4I.png" /></figure><p>Moreover, according to the Stack Overflow 2019 survey, React Native was the 6th most popular framework among developers. Also, the number of questions on Stack Overflow related to React Native has been increasing since its release.</p><h3>Is Expo easy to learn?</h3><p>According to our experience, Expo makes things really simple when talking about running and debugging. You can run your app for testing without any effort or check some errors, and even debug your app. This is, for sure, one of the reasons why the Expo’s popularity has increased as we can see from the chart below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*KqtFLthkmD43c_WK.png" /></figure><p>After the set-up is completed, if you want to run your app to see how your progress is going, all you have to do is run the following command: npm start. After that, a window pops up in your web browser. You can test it on simulators, both for Android and iOS, but you can also run in your own device, you just need to install the Expo client app and scan the QR code you see in the terminal or in Expo Dev Tools. Note that Expo is not only a framework but also a platform where you can find a lot of useful documentation, tutorials, examples from the community, and even become a contributor on GitHub.</p><h3>What if you want to get rid of Expo?</h3><p>You may be wondering if it is possible to continue your project without using Expo on it. Yes, it is. If you are having a bad experience developing your app using Explo CLI, you can easily leave it and move for a React Native bare project.</p><p>What is this about the React Native bare project? Simply, your project will include the folders/directories related to the operating systems (iOS and Android) thus allowing you to create your own native builds. So, for example, if you know that you will eventually need to include your own native code in the project, you can eject expo running the command npm run eject on the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QzB1acm97szbvbdFd1ho0Q.jpeg" /></figure><h3>Expo Build</h3><p>When we think about the process of building a mobile app, we can think of it as a complex process. For this reason, Expo tries to simplify and speed up the whole process. In the <a href="https://docs.expo.io/distribution/building-standalone-apps/">official documentation</a>, they explain in detail all the steps you must follow and even give you the opportunity to auto-generate the keystore and credentials needed for the application.</p><p>The keystore allows you to store cryptographic keys in a container to make it more difficult to extract from the device. Once keys are in the keystore, they can be used for cryptographic operations with the key material remaining non-exportable. Moreover, it offers facilities to restrict when and how keys can be used, such as restricting keys to be used only in certain cryptographic modes. So, you don’t need to worry about all these details, since Expo automates the process of signing your app for iOS and Android.</p><h3>Building an app with React Native and Expo</h3><p>We had our first contact with these frameworks as soon as we started our internship at Imaginary Cloud. Here we started working with React Native and Expo as part of developing a mobile application for an internal project.</p><p>In the beginning, it was tough to understand how to work with these technologies as we were just starting. It was a new world for us. However, the documentation available, as well as the help of our colleagues, were very important aspects in the development of this project. It is completely normal if there are any doubts or questions regarding these frameworks at an early stage. During the development, these doubts are dissipated to give place to knowledge and experience. The use of some React Native libraries as well as some pre-built components, not only saved us some time, but also made it easier for us to do the work.</p><p>In spite of React Native helping us reuse code for Android and iOS, there were certain details that we had to take into account due to the differences between OS. For example, the line-height property of some fonts, couldn’t be the same for both platforms, or else users would notice different styles from the iOS app and Android app.</p><p>One of the most challenging problems we faced was how to load fonts in our app. We tried a lot of different tutorials, we searched a lot, and we lost some time trying to use a custom font, but the final result was worth the effort.</p><p>Another of the difficulties came from the use of pre-built components. React Native is sensitive to packages and their versions, and it is necessary to bear in mind that some things work in React Native but are not yet supported by Expo, so it is necessary to look for other solutions.</p><p>For instance, we used a pre-built picker select but its latest version was not compatible with Expo, more precisely on Android, so we needed to downgrade it. Not everything is easy. Sometimes you have to find another way to reach your goals. Nevertheless, as you probably noticed, React Native and Expo can simplify a lot of things and help you save some time.</p><p>Overall, our journey working on this project was very positive. As it was our first experience/time working with React Native and Expo, we felt some difficulties in the beginning but as we started to know more about these technologies, it became easier and natural.</p><p>We learned that it is possible to easily run an application on our own device and to see the changes on the code almost immediately, which ended up justifying the comfort we felt when using React Native with Expo. In addition, the variety of APIs they offer helped us to reach further on our goals. For instance, Expo-Notifications was useful to us, providing essential features in the scope of notifications.</p><p>To conclude, our knowledge increased and it was a very enriching project on how to develop a mobile application, using these frameworks. We realized its advantages and allowed us to reach our initial goals.</p><p>At <strong>Imaginary Cloud</strong> we work not only with React Native, but with a wide tech stack. If you need help building a scalable mobile app, we are waiting for you! Drop us a line <a href="https://www.imaginarycloud.com/contacts">here</a>!</p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/5-common-errors-found-in-a-react-native-app-using-expo/">5 common errors in a React Native app when using Expo</a></li><li><a href="https://www.imaginarycloud.com/blog/how-to-find-experienced-react-native-developers/">How to find experienced React Native developers</a></li><li><a href="https://www.imaginarycloud.com/blog/react-native-vs-flutter-for-app-development-2020/">React Native vs Flutter for app development</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/how-to-accelerate-your-development-with-react-native-and-expo/"><em>https://www.imaginarycloud.com</em></a><em> on September 10, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7a196aa981ac" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How we used AWS to power our backend | Imaginary Cloud]]></title>
            <link>https://imaginarycloud.medium.com/how-we-used-aws-to-power-our-backend-imaginary-cloud-fb9c8ca5a596?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/fb9c8ca5a596</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 20 Aug 2020 16:00:00 GMT</pubDate>
            <atom:updated>2020-11-30T14:54:47.929Z</atom:updated>
            <content:encoded><![CDATA[<h3>How we used AWS to power our backend</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8etjNeD2YxksoaR6f1_AJA.jpeg" /></figure><p>Companies are switching to a <strong>serverless architecture</strong>. It results in a <strong>shorter time to market</strong>, <strong>decreases operational costs</strong> and <strong>developers can focus on improving applications</strong> instead of managing infrastructures.</p><p>If you are new to this concept, you might be asking: <strong>What is a serverless application?</strong> Basically, it’s software that runs in an environment where you don’t need to manage any servers. The host that provides it, is fully responsible for managing all the infrastructure and operational tasks.</p><p>One of the solutions that address this, is AWS Lambda. According to <a href="https://www.datadoghq.com/state-of-serverless/">a report by Datadog</a>, in less than 5 years <strong>AWS Lambda is used by half of the AWS users</strong> and is most common in the largest environments.</p><p>As a trainee at <a href="https://www.imaginarycloud.com/">Imaginary Cloud</a>, I had a project in hands: an application called Dwipper. It consisted of a social network to share shower thoughts (similar to Twitter). I needed to have a backend supporting all the essential operations like authentication and processing data. AWS Lambda could offer all I needed for the backend with the integration of other services AWS offers, such as Cognito, API Gateway, DynamoDB, CloudWatch, CodeCommit and CodePipeline. I even didn’t need to worry about managing servers. But before going straight to the application developed, I want you to understand what AWS Lambda is.</p><h3>What is AWS Lambda?</h3><p>AWS Lambda, provided by AWS (Amazon Web Services), is a <strong>serverless computing service</strong> that allows you to run code with no need to worry about the infrastructure or managing servers. Code executed on AWS Lambda is called Lambda function and once created, it’s ready to run when triggered.</p><p>This function can be associated with a specific AWS resource. For example AWS SNS (Simple Notification Service), that is a messaging service. As soon as this resource changes, Lambda executes your function and manages what is needed.</p><h3>How does AWS Lambda work??</h3><p>The first thing to do is to <strong>create an AWS account</strong>. In case you don’t have one, you must configure it. Amazon IAM (Identity and Access Management) provides user management and permissions in AWS. If you’re working as a team, you might need to create an IAM user to give the necessary permissions to your AWS console or in case your application needs to make API calls to AWS.</p><p>The next step is to <strong>set up your serverless backend</strong>, choose what services you will need, configure them and finally, to <strong>create your Git repository</strong> so you can start working on your application.</p><p>Now you can start by writing code in any language supported by AWS Lambda and upload it. You can also write your code in the code editor that Lambda provides. Then you set up your code to be triggered from other AWS services or in-app activity. Lambda receives your request and runs your code only when triggered.</p><h3>Advantages of using AWS Lambda</h3><p>AWS Lambda gives you a lot of benefits that you probably should know before choosing any other serverless computing service. If you’ve already asked yourself <strong>why to use AWS Lambda</strong>, take a look into the main advantages below.</p><h3>Support multiple languages</h3><p>For the time being, <strong>AWS Lambda does not support all programming languages</strong>. But it does support Java, Go, PowerShell, Node.js, C#, Python and Ruby code. For each one of them, AWS provides an SDK that makes it easier for you to write your Lambda functions and integrate them with other AWS services. It also provides a Runtime API, which allows you to use any additional programming languages to author your functions.</p><h3>Minimized cost</h3><p>In AWS, <strong>you pay only for the compute time you consume</strong>. You don’t have to pay for the service to host your code. Instead, AWS Lambda bills you based on when that code is executed. You are charged based on the number of requests and the duration, so this excludes the unused minutes of server time.</p><h3>Fully managed infrastructure</h3><p>Once your functions are running on AWS infrastructure, it takes care of servers for you. This way, developers have more time to spend improving the product instead of performing operational tasks such as managing the network layer or taking care of scalability.</p><h3>Automatic scaling</h3><p>Let’s imagine that from one moment to another, your application gets loads of new users. This might be a problem if the server is not prepared to handle a massive number of requests. With AWS Lambda you don’t need to worry about it, as <strong>the application scales precisely with the size of the workload</strong>. It automatically scales your functions according to their demand, so different parts of your application can scale differently according to current usage levels.</p><h3>Integration with other AWS products</h3><p>AWS Lambda integrates with AWS services as DynamoDB, API Gateway, Cognito and many more. Each one of those services sends data to your function in JSON as an event that Lambda runtimes convert first into an object, passing it after to your function. All of this allows you to build an application fully functional within your Lambda functions.</p><h3>When to use AWS Lambda</h3><p>Like any other computing platform, AWS Lambda is better suited for some scenarios due to its characteristics. First, we will cover in which scenarios it would be a suitable computing service, checking what AWS Lambda used to be, as you can see below:</p><h3>File processing</h3><p>Imagine that you have an application to upload pictures and resize them to a variety of different sizes. Your application stores those pictures in an Amazon S3 bucket, so probably there’s a Lambda function doing this job of resizing pictures. Amazon S3 is one of the supported AWS event sources that can publish object created events and invoke your Lambda function. All of this is entirely automatic, and there are no servers to manage. Your Lambda function code can read the image object from S3 bucket, create the resize version, and finally save it in another S3 bucket.</p><h3>Data and analytics</h3><p>Imagine you are building an application that has data that you need to store. You can use DynamoDB for that, a fully-managed database service, handling write an update and delete items in a table.</p><h3>Websites</h3><p>Imagine you are building a website and you want to host the backend login on Lambda. Lambda is excellent for this, as the web frontend can send requests to Lambda functions over HTTP endpoints using Amazon API Gateway.</p><h3>Mobile applications</h3><p>Like websites, Amazon API Gateway can be useful for mobile applications, but it doesn’t end here. You can create, for example, a Lambda function to process clicks within your application.</p><p>In addition to these scenarios where this service suits better, it is good to keep in mind the limitations that Lambda carry and realize if it’s actually the best service to integrate into your product.</p><h3>AWS Lambda limitations</h3><h3>Latency</h3><p>Serverless functions mean you will be dealing with a cold start time. When a function is triggered, there may be a small amount of time waiting between the beginning of the call and when it runs. If this function hasn’t been used in the last 15 minutes this time can be very high, 5 seconds or more.</p><p>This can be a potential issue to consider if your workloads are time-sensitive. Some workarounds try to avoid it, for example, keep your functions small and focused, as <strong>cold start times increase linearly with memory and code size</strong>.</p><h3>Function Limits</h3><p>The Lambda functions have some limits such as <strong>run time, memory, size and concurrency</strong>. The maximum time a function can run is 15 minutes, making Lambda unsuitable for long-running workloads. If your function typically takes more than 15 minutes, AWS Lambda might not be a good solution. The amount of RAM available to the Lambda functions range from 128MB to 3,008MB, in 64MB increments. There is a limit of 75GB as well for all AWS Lambda functions that have been deployed. To avoid this limit, make sure you don’t keep old versions of your Lambda functions. By default, the concurrent execution for all <strong>AWS Lambda functions within a single AWS account are limited to 1000</strong>. Any Lambda execution triggered above this limit will be forced to wait until other functions finish running. To avoid this, you can request a limit increase by contacting AWS support.</p><h3>Not always cost-effective</h3><p>At first glance, the pay only for what you use can produce significant cost savings, but it might not be that way every time. Several factors determine the cost of your Lambda functions and working out this cost is not easy.</p><p>If the load for your application increases, this will increase proportionally and might end up being a high cost. You need to have in mind that any other service you decide to use along with your Lambda functions, like API Gateway, CloudWatch or any other, will add to that cost. So you should consider <strong>how much you expect your application to scale</strong>.</p><h3>Comparing AWS Lambda with other alternatives</h3><p>AWS Lambda is not the only serverless service that you can choose for your project. On this topic, you can see other alternatives to Lambda, very similar to it. With a couple of differences you might want to consider when choosing which serverless service to use.</p><h3>AWS Lambda vs Azure Functions</h3><p>AWS Lambda and Azure Functions both support Node.js, Python and C# but Azure Functions also support F# and PHP. They also support automatic scaling.</p><p><strong>AWS Lambda has a straightforward programming model</strong>, while Azure Functions has a more sophisticated one, based on triggers and bindings. The binding system provides extra flexibility, but it also brings some complexity. Both services can run multiple executions of the same function simultaneously.</p><p>If you want to add HTTP integration, with AWS Lambda you will have an additional cost, as we already saw, you pay for additional services. On the other hand, Azure Functions come with HTTP endpoint integration and there is no extra cost.</p><h3>AWS Lambda vs Google Cloud Functions</h3><p>AWS Lambda and Google Cloud Functions both support Node.js, Python and Go. Lambda allows for unlimited functions, while Google Cloud Functions allows just 1000 functions per project. <strong>They also support automatic scaling</strong>.</p><blockquote><em>In terms of the maximum execution time of a function, AWS Lambda stays ahead with six more minutes than Google Cloud Functions.</em></blockquote><p>Regarding payment, just like AWS Lambda, with Cloud Functions <strong>you pay only for your function’s execution time</strong>. You are not billed when your function is idle.</p><h3>AWS Lambda vs Kubernetes</h3><p>AWS Lambda and Kubernetes are two different realities. While Lambda is all about going serverless, Kubernetes is all about containers.</p><p>On AWS Lambda, you don’t manage the infrastructure and you can’t install any extra software. On Kubernetes, you have to manage the infrastructure and you can install additional software.</p><p>Those are just some of the significant and main differences between both of them. In conclusion, if you want to have <strong>complete control of the environment</strong>, go for a container service like <strong>Kubernetes</strong>. If you want something more <strong>manageable and focus more on improving the product itself</strong>, you should choose a serverless service like <strong>AWS Lambda</strong>.</p><h3>Other services AWS provides used in our backend</h3><h3>AWS Cognito</h3><p>AWS Cognito is a service to manage authentication. You can add user sign-up and sign-in quickly and easily. It still supports sign-in with social identity providers, such as Amazon, Google, and Facebook. It even provides a User Pools feature to help you manage user accounts.</p><h3>AWS API Gateway</h3><p>This Amazon service handles all the tasks involved in accepting and processing API calls. It allows developers to define the HTTP endpoints and connect them with the corresponding backend. API Gateway can also validate if the user is authenticated by adding an authorizer to an endpoint mapping connected to a Cognito user pool, meaning that only users in the user pool can access the endpoint.</p><h3>AWS DynamoDB</h3><p>AWS DynamoDB is a fully managed database that can scale automatically and allows to create database tables that can store and retrieve any amount of data.</p><h3>AWS CloudWatch</h3><p>Cloudwatch is a service to monitor all your AWS resources, applications and services that run on AWS. It collects data in the form of logs, metrics and events that you can check to quickly solve issues and keep your application running without any trouble.</p><h3>AWS CodeCommit</h3><p>CodeCommit is a source control service that helps teams collaborate on software development, allowing them to import and host private Git code repositories securely.</p><h3>AWS CodePipeline</h3><p>AWS CodePipeline is a continuous delivery service that automates the build, test and deploys phases of your release process every time there is a code change based on how you defined the workflow.</p><h3>How we built a serverless application with AWS</h3><p>As mentioned before, we integrated some other services with AWS Lambda to build our backend. Our application Dwipper consists of a social network to share thoughts, called Dwipps, where users need to register to start sharing what is on their minds. The functionalities built are:</p><ul><li>register</li><li>login</li><li>recover password/change it</li><li>see all Dwipps from all users</li><li>upvote a Dwipp</li><li>mark a Dwipp as favorite</li><li>create a new Dwipp</li><li>delete and edit a Dwipp</li><li>see the user’s own Dwipps.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/567/0*4vXEO8c41Rpw9AGH.png" /></figure><p>We integrated DynamoDB as our database, where we store all the Dwipps created by users from our application, as well as editing and deleting them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*Vn4HYwJVTgi78r99.png" /></figure><p>For authentication, AWS Cognito was the solution. It provided an easy management of user authentication that was needed for clients to register their email, generating tokens easily for each user every time they log in to have access to specific content.</p><p>To create the REST API and generate the necessary endpoints for all the flow of our application, we integrated Amazon API Gateway. We had to configure AWS Lambda to run our code in response to HTTP requests using API Gateway, which can validate the token generated during login and inject the user data into a lambda environment execution.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*XQ70tcjohvI0JtIL.png" /></figure><p>Starting with the authentication, we used Cognito User Pools in our function to create a new user account. Regarding the registration, it asks for email and password and the function gets those values, sending them to Cognito and returning the response whether the user has been successfully registered or not. The endpoint is configured in a separate file with the other endpoints, where we put its function. For the login function, we access Cognito once again, sending the user data. In case that user exists, Cognito returns a token needed for the user’s access to the application’s content.</p><p>One crucial function is to show all Dwipps from all users. For this one, we need to access DynamoDB, to get the specific table and return all its content. The function to create a Dwipp is basically the same, but instead of getting all items from the table, we want to insert a new item there. The unique ID for each Dwipp is created with uuidv4, a JavaScript package that helps create IDs. The ID and content of the new Dwipp are sent to that table with each field in its column. The user needs to have a token that was generated during the login, the API Gateway validates this token and injects the user data into the environment of the lambda execution. This way, we can identify the user trying to create a new Dwipp.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*8M_DMo4DZkTLNTMU.png" /></figure><p>To upvote a Dwipp, we use the same table as before. But for the favorited Dwipps, we had to create a new table. For the first table, we have a function that checks the current user’s email address and if it has already upvoted the Dwipp registered in the table. If yes, the number of upvotes decreases by one and the email address is removed from the list. If not, it increases by one and the email address is added.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*A1aauX5lX5rblc48.png" /></figure><p>As for the function to mark a Dwipp as favorite, we check if that Dwipp is already in the favorite Dwipps’ table. If it’s there, we confirm if that user already favorited it before. If not, a new favorited Dwipp is added to that table. The information of users that favorited a specific Dwipp are kept in the table as well.</p><p>With all those available and easy-to-integrating services, we built a working application with authentication and some functionalities in less than one month.</p><p>In the beginning, our idea was to use both AWS Lambda and Google Cloud Functions. We’ve decided for AWS as it provides tools for user creation and authentication, while Google Cloud Functions does not. Everything lives up to expectations as all the required functionalities were possible to implement with only AWS.</p><p>It may seem like a big deal to understand all those services at first sight, but <strong>AWS provides complete documentation</strong> clarifying each of them and useful examples. If you take some time to understand it, start trying it out and test it, you will quickly be able to create a full working backend for your application: <strong>free of server and infrastructures management, in a short time and with a reduced cost</strong>.</p><p><strong>Found this article useful? You might like these ones too!</strong></p><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/how-we-used-aws-lambda-to-power-our-backend/"><em>https://www.imaginarycloud.com</em></a><em> on August 20, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb9c8ca5a596" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to find experienced React Native developers]]></title>
            <link>https://imaginarycloud.medium.com/how-to-find-experienced-react-native-developers-fde4b4fc6918?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/fde4b4fc6918</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[react-native]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 13 Aug 2020 11:33:00 GMT</pubDate>
            <atom:updated>2020-08-28T09:53:25.625Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yTpdDOcDqt3djHwxLGlMag.jpeg" /></figure><p>If you’re starting a new project or building a mobile application, React Native likely pops up as an option when deciding which tech stack to use. As a cross-platform tool, it’s a cost-effective alternative to native apps, as you don’t need to have two development teams: one for IOS and another for Android.</p><p>All good so far. But, how can you find experienced React Native developers that can bring your idea to life?</p><p><strong>Should you hire a freelancer?</strong><br><strong>A permanent in-house developer?</strong><br><strong>Or an experienced React Native developer from a trusted software development partner?</strong></p><p>If you already asked yourself any of these questions, keep reading. It’s what we’ll cover below.</p><h3>Why is it so hard to hire React Native developers?</h3><p>Hiring the right person is never an easy task. It’s often a time-consuming process, sometimes, with no guarantee that the developer hired will be up for the challenge. In case you identified yourself in one of the previously mentioned scenarios or already started a recruitment process, you’ll probably encounter a few obstacles in the way.</p><p>But <strong>why is hiring a React Native developer so difficult</strong>?</p><h4>A lot of job search platforms (finding a needle in a barn)</h4><p>If you’re based in the UK or US, you’ll agree that <strong>hiring a talented React Native developer can be quite challenging</strong>. There are many freelance platforms (Upwork, Toptal, Fiverr, etc.), outsourcing companies, job search boards, and other tools that make it challenging to find the right person.</p><h4>The rise of cross-platform apps vs native apps</h4><p>React Native is king when it comes to choosing a cross-platform tool to build a mobile app. Part of it because, with React Native, developers can <a href="https://www.imaginarycloud.com/services/app-development">build mobile applications</a> for Android and iOS using JavaScript. And we all know that almost every developer knows something about JavaScript (React, Node.js, React Native). It turns out that this “something” may not be enough for what you need.</p><h4>The urgency behind the projects</h4><p>Conducting a recruitment process on your own is a time-consuming process. From the moment you release a job offer, your inbox can be either flooded with applicants (which is then followed by a hard part of the screening, interviews, technical assignments, etc.) or empty for weeks. The software development industry is in high demand, so if you are in a rush to release your product and you need to find someone quickly, you could use a hand from a trusted software development partner.</p><h4>The “Bermudas triangle” (as we call it)</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OXkp8n9KRMvSrxWn.png" /></figure><p>As there are no perfect companies, there are no flawless candidates. As you look for perfection, you might come across different personalities, experiences, and technical backgrounds. What is often called cultural fit means <strong>finding a balance</strong> between the <strong>company values</strong>, what is expected from the mentioned position, and how easy it would be for a new team member to feel onboarded. Which skill are you going to value the most? An impressive experience? A humble yet <strong>confident attitude</strong>? Or an <strong>in-depth knowledge of React Native</strong>? We believe it is a mix of these three skills, in the right doses.</p><h3>Why do you need to hire a React Native developer?</h3><p>Understanding your needs and acknowledging the phase your company is going through, is a great way to start. It might seem obvious, however, in such a high demand industry as software development, <strong>hiring an experienced React Native developer can be a struggle</strong>. Thus, you need to have a clear view of what your company needs to thrive and how that person is going to help you achieve that.</p><p>Let’s take a look at <strong>three typical case scenarios</strong> where you can probably link your company to:</p><h4>Scenario 1: Early-stage startup</h4><p>If your company is a startup in an early stage, <strong>having no time to lose is like a mantra</strong>. Investors are usually hungry for results and you need a <strong>faster time to market to test your mobile application</strong>. With this in mind, <strong>building an MVP</strong> is an option to consider, which means that your best way out is to hire an experienced React Native developer who can <strong>boost your development</strong>.</p><h4>Scenario 2: Native to Cross-platform app</h4><p>Hiring a React Native developer can be difficult if you do not have a clear understanding of what you need both in the short and long term. Let’s say that you already have an iOS app. However, you’ve identified that the Android market has a strong potential in terms of business, and now you need to make the Android version of it. Instead of hiring an Android team, a possibility is to <strong>hire React Native developers to help you build a cross-platform mobile app</strong>. It comes up as a way of having a shared codebase for both device families and saving money in the long term, as you don’t need to have two development teams.</p><h4>Scenario 3: Web product to mobile application</h4><p>In case you have a web application built by your in-house development team and need to create a mobile version of it, adopting React Native can be a great option in terms of cost/benefit. Depending on your team size and allocation, if your front-end developers already have a background in React, the transition to React Native is smoother. This way, you can only <strong>extend your existing team with expert React Native developers</strong> instead of hiring a whole new team for Android or iOS.</p><h4>Scenario 4: You have the product, the team, but lack the background in React Native</h4><p>If you don’t have a tight deadline but expect that you’ll need to develop a mobile application soon, you can always <strong>ask your developers to learn React Native</strong>. It may sound like a cost-effective way to handle the situation, especially if they already have a JavaScript background. They can learn online from Pluralsight, Codecademy, Bootcamps, or other online learning platforms. However, do not forget that <strong>usually learning a new framework has a ramp-up time</strong>, as it happens with almost all programming languages. If you’re going to build a mobile app from scratch, make sure that the lack of experience on this specific framework doesn’t compromise the outcome.</p><p>For each of these scenarios, there’s an ideal way to promptly hire your talented React Native developers while guaranteeing an ideal skill set. Searching for the right talents can be daunting, especially in an industry like software development with such high demand. But it doesn’t always have to be like this. Especially if you know your options.</p><h3>How to find trusted React Native developers?</h3><p>Hiring the right React Native developer to your team starts by knowing how to find them. To streamline this process a little, we identified your leading solutions:</p><h4>1. Hire an in-house React Native developer on your own</h4><p>This might be your first option when you think of recruiting a new team member. You can set a budget, align expectations in terms of the candidates’ experience and background, create your job offers, and advertise them on job boards such as Glassdoor, Indeed, LinkedIn, Landing.jobs, Stackoverflow, etc. Here are the pros and cons of this process:</p><p><strong>Pros:</strong></p><ul><li>You can control the whole process;</li><li>The developer will be part of your team, sharing your culture and getting involved in the long term projects;</li></ul><p><strong>Cons:</strong></p><ul><li>Time-consuming (screening and interviewing candidates);</li><li>Competitive industry (high demand for React Native developers, which makes it harder to find the right person);</li><li>High-risk for a bad fit, as your budget or process are not tunned</li></ul><h4>2. Hire a freelancer React Native developer</h4><p>If you’re not that into hiring someone permanently to your team, finding a contractor or a freelancer can come up as an alternative. You can search for React Native developers on platforms like Fiverr, Upwork, or Toptal, and conduct the screening process based on the candidates’ profile, projects for which they contributed directly as React Native experts, and reviews of their work.</p><p><strong>Pros:</strong></p><ul><li>Cost-effective for short term projects;</li><li>Public reviews from other companies which eases the initial screening process;</li></ul><p><strong>Cons:</strong></p><ul><li>Time-consuming (as you still need to conduct interviews);</li><li>Lack of engagement as this person will not be entirely part of the team;</li></ul><h4>3. Contract a React Native expert from a trusted partner (software development company)</h4><p>On average, it takes four weeks to hire a React Native developer on a more traditional approach, like the ones mentioned previously. But it doesn’t always have to be this daunting. If you’ve never considered contacting a <a href="https://www.imaginarycloud.com/services/staff-augmentation">staff augmentation company</a> who’s <strong>expert in software development</strong> to help you with this, you may not be aware of its advantages due to the common misconception of being a more expensive solution.</p><p><strong>Pros:</strong></p><ul><li><strong>Easier Integration with an In-House Development Crew</strong>: companies have a development process and can adapt or improve yours. (freelancers and new team members will spend considerable time finding out how to work together as a team.</li><li><strong>More flexibility</strong>, as the days invoiced depend only on the number of days dedicated to your project. (time and materials monthly invoice)</li><li><strong>Higher code quality &amp; overall quality levels</strong>. Working with an experienced team has the big plus of getting meaningful advice on the best direction to go or on the best way to do it to avoid costly mistakes.</li><li><strong>Faster hiring process</strong>, as React Native developers are ready to join your team remotely.</li><li><strong>Higher scrutiny</strong>, since companies have a reputation to maintain as a brand (while a freelancer platform delegates this reputation to the freelancer itself)</li></ul><p><strong>Cons:</strong></p><ul><li>For some, the budget may be a concern as you might think that extending your team with a React Native developer from an expert software development company can be more expensive than an in-house developer or a freelancer. It also depends on the number of hours required from one developer and if the project is short or long term.</li></ul><p><strong>To partner with a software development company saves you time and money</strong> when you decide to hire a React Native developer.</p><h3>Why are we so picky when hiring React Native developers?</h3><p>Here at Imaginary Cloud we are experts in <a href="https://www.imaginarycloud.com/services/app-development">web/mobile app development</a> and <a href="https://www.imaginarycloud.com/services/ui-ux-design">UI/UX design.</a> Over the last decade, we have been hiring only the best developers and UX designers in Portugal. We have multiple projects for top clients worldwide, and it’s our way to guarantee the best performance and quality of the work delivered. Hiring React Native developers is not an easy mission, just as retention of those talents. We want our people to be at their best every day. This is why we have excellent working conditions with tons of space and natural light, along with competitive salaries and other benefits.</p><p>According to Glassdoor, <a href="https://www.glassdoor.com/employers/blog/4-tips-for-hiring-the-elusive-software-engineer-infographic/">it takes 120 candidates to make one engineering hire</a>. Over the years, and learning from our own mistakes, our HR designed a process that ensures we can reduce our margin error in the hiring process. After releasing the job offer and spreading the word, this is how our recruitment process looks like:</p><p><strong>Phase 1:</strong> Basic technical assessment (to ensure that the knowledge baseline that we need is there or not)</p><p><strong>Phase 2:</strong> Interview to make sure there’s a fit with the company’s values, team, and culture.</p><p><strong>Phase 3:</strong> Technical assessment suited to the role</p><p>Some might say that we’re picky, but we do it intentionally. We want to make sure that we’re hiring a person that shares our vision of creating digital products that improve people’s lives while being skilled at it. For this reason, when hiring a React Native developer that will later join a client’s team to build a mobile application, our specialized HR team works together with our Senior developers that conduct all the technical interviews. <strong>Our retention speaks for itself: 91% in 2019</strong>.</p><h3>What our clients say about our team</h3><p>We’re proud of the way we work. Having in our team the best React Native developers in Portugal and delivering the best of breed digital products to top clients worldwide is rewarding. But above that, we’re grateful for knowing that our clients are happy with our performance, grow with us and recommend us to other players as they feel we’ve contributed to their success.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/0*wFaqmL3nczQGLe54.png" /></figure><h3>Find experienced React Native developers with a software development partner</h3><p>Hiring a React Native developer can be a struggle if you do not have a clear understanding of what you need both on a short and long term basis.</p><p>While it can be time-consuming to hire on your own or make sure a freelancer has all that takes to perform well, recurring to a software development partner can be extremely helpful when:</p><ul><li><strong>You have a new product to develop in a short time to market</strong>, and you can’t invest a lot of time in a recruitment process from scratch;</li><li><strong>You don’t have a lot of experience hiring React Native developers</strong>, such as designing and conducting technical assessments, that are essential to evaluate the candidates’ performance;</li><li><strong>Your company is at a very early stage</strong>. You need experienced professionals that can not only boost your software development but also provide meaningful advice on how to perform;</li><li><strong>You need a React Native developer for only a few months</strong> or short term, where you don’t really need to hire in-house React Native developers.</li></ul><p>At <a href="https://www.imaginarycloud.com/">Imaginary Cloud</a>, <strong>we have the best React Native developers in Portugal</strong>. We’re the #1 software development company in Portugal by The Manifest and we delivered more than 100 projects over the last ten years.</p><p>In need of React Native developers to build a mobile app or help you with an existing project? <a href="https://www.imaginarycloud.com/contacts">Get in touch!</a></p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/18-best-agile-practices-to-use-in-your-software-development-life-cycle/">18 Best Agile Practices to use in your software development life cycle</a></li><li><a href="https://www.imaginarycloud.com/blog/react-native-vs-flutter-for-app-development-2020/">React Native vs Flutter for app development</a></li><li><a href="https://www.imaginarycloud.com/blog/why-ux-designers-are-essential-for-your-next-web-mobile-app/">Why you should hire a UX designer for your next digital project</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/how-to-find-experienced-react-native-developers/"><em>https://www.imaginarycloud.com</em></a><em> on August 13, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fde4b4fc6918" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Do you really want a User Centered Design approach?]]></title>
            <link>https://imaginarycloud.medium.com/do-you-really-want-a-user-centered-design-approach-bfe7240dbb1a?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/bfe7240dbb1a</guid>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[digital-product]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[user-centered-design]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 30 Jul 2020 13:50:45 GMT</pubDate>
            <atom:updated>2020-08-24T15:43:25.234Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*089hu_wlWI8N64Q4A4068w.jpeg" /></figure><p>Unless you have been living under a rock for the last few years, it’s unlikely that you have never come across <strong>User Centered Design (UCD)</strong>. After UX and UI, it’s one of the most popular terms in the design field.</p><p>If you’re building a web or mobile app, you might feel that the recipe for success is to follow a User Centered Design approach. But do you actually know what is it about? Are you following a trend? Or <strong>do you really want your product to be user centered</strong>?</p><p>To answer all these questions, we’re covering below where this User Centered Design approach comes from, main principles and whether if you should follow it or not.</p><h3>Where User Centered Design comes from</h3><p>The term User Centered Design gained much popularity in the (not so) recent years. <strong>It was first introduced about 30 years ago</strong> in the book User Centered System Design: New Perspectives on Human-computer Interaction written by Donald Norman and Stephen Draper. In this book, the authors speculate about central issues and questions involving designers, creators and users, when developing software.</p><p>The 80’s were kind of a primordium time when it comes to interactive systems and, as you can imagine, software design was not that good. It quickly became clear that the visual part of the system was quite necessary.</p><blockquote><em>What users see is what drives their expectations of what they can and can’t do with the system.</em></blockquote><p>Human-computer interaction is basically a communication between humans/users and machines, both speaking very different languages. Part of the earlier work done with User Centered Design was adapting a language already expressed by users, highlighting their needs and skills to <strong>turn complex software into something understandable and usable</strong>. So, at this time, <strong>the user needed to be at the center of the process</strong>.</p><p>In the 90’s, as computers evolved from work tools to social and personal tools, there was more to be addressed than just usability and productivity. Designers began to think about the user’s whole experience, hence the term <strong>user experience</strong>: powerful words that companies would use to differentiate themselves.</p><p>The years that followed were crucial in the interactive systems field. Not only because gradually, almost everyone began to have a computer at home, but also due to the globalisation of the world wide web.</p><p>The opportunities to create new software and interactive systems were growing. More companies would focus on this field using the User Centered approach to deliver products with a good user experience. As you can see from the image below, the popularity of the User Centered Design was at its peak about 20 years ago.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/0*q7OqSZ-FUdYPQaKX.png" /></figure><p>From this point on, the User Centered Design process has become a sort of dogma that designers would follow without much questioning to achieve a good user experience.</p><h3>The principles of User Centered Design</h3><p>But why has User Centered Design become so popular among designers? How does this approach possibly lead you to a better user experience? I think the answer lies in its principles.</p><blockquote><em>Every product is unique in terms of needs, requirements, tasks, phases and even team.</em></blockquote><p>The UCD approach is entirely adaptable to different scenarios. Nonetheless, some <strong>User Centered Design key principles</strong> that should be present no matter the scenario:</p><ol><li>Understanding the user and task requirements;</li><li>Integrate the feedback from users when defining both requirements and design;</li><li>The user is actively involved in the evaluation of the product’s design since an early stage;</li><li>The User Centered Design should be incorporated into other development activities;</li><li>User Centered Design is an iterative process. This means that you should repeat the process until you have reached the best solution possible.</li></ol><h3>Why is User Centered Design important?</h3><p>When users are at the center of the process, it is more likely that decisions made are not biased, made of assumptions or to rely only on information gathered from them. Since the UCD approach contemplates a lot of analysis and feedback, designers can make important changes right in the earliest stages of the design process. As you can imagine, applying this method avoids design modifications in more advanced stages, which ends up being beneficial in terms of costs.</p><p>David Benyon, a professor with over 25 years of experience in the field of Human-Computer Interaction, names 4 ways in which UCD can be helpful:</p><ol><li><strong>A UCD approach can potentially increase the sales of a product</strong>. Having the user involved in every phase of the process means that you have a better understanding of requirements and expectations. Once these are met, you’re more likely to deliver a better product, which leads to more sales.</li><li><strong>It leads to safer products.</strong> A product that is designed for specific tasks and contexts has fewer chances of human error.</li><li>Because the design team is in closer contact with users, they develop not only a deeper understanding but also <strong>a stronger sense of empathy</strong> towards them.</li><li><strong>A UCD approach leads to more inclusive products.</strong> By leaving biases out of the process and focusing on all the different types of users, the design team can acknowledge all the differences between them. Whether they be in terms of age, culture or language, designers can attend them.</li></ol><h3>User Centered Design as a quality stamp</h3><p>The term User Centered Design gained so much popularity that it started to be associated with good practices in the field of user experience. Nowadays, most product owners want to be able to show that they are doing User Centered Design. However, not all of them understand exactly what is involved or are not willing to invest in it. There is almost a kind of pressure to say for you to follow a User Centered approach, may it be true or not.</p><p>Involving users is not a free option. It’s like the old saying, “you have to spend money to make money”. Nevertheless, most of the product owners come with this paradox: they want their product to be user centered, but when the time comes to invest, the first thing to be cut off is user’s involvement, either by user research or user feedback.</p><p>Of course, there is also the case of product owners that already have a full concept with a prioritized feature list for a product that was created without any previous user research. This leaves no room for a User Centered Design approach.</p><h3>Beyond User Centered Design</h3><p>Donald Norman, the creator of UDC, is the hardest critique. He argues that designers accept the term with no questions asked and that it is also used without any criteria.</p><p>Like many fields, design and particularly, user experience design, is not a stagnated field.</p><blockquote><em>Designers should not assume a particular process as a dogma without questioning it.</em></blockquote><p>In an essay written by Norman, “Human-Centered Design Considered Harmful” he talks about how the process was developed: to improve software’s design and, therefore, the overall usability and understandability of products. For both human centered design and UCD, understanding the user is critical.</p><p>Norman also states two perspectives:</p><ol><li>Most of the everyday products we use daily were not designed based on the user’s understanding, but the knowledge of the activity they were intended to.</li><li>History is filled with products that made users adapt to them and not the other way around.</li></ol><p>Based on these points, understanding the user is essential. But knowing the activity and tasks that the product will have to accomplish is also equally important.</p><p>Designers are almost obsessed with creating a seamless experience, to create a product that is understandable almost by just looking at it. This is not natural. Technology is not natural. There is a learning curve, and people will need to adapt. This being said, our job as <a href="https://www.imaginarycloud.com/services/ui-ux-design">UI/UX designers</a> is to create an outstanding user experience with the least pain points.</p><p>Think of this in this way: if you create a product that is super easy to use, but doesn’t entirely do what it was supposed to do, users will likely end up being disappointed. It’s not harmful to let your users explore your product for themselves to find out what the product is about and how to use it, as long as the activity is performed correctly.</p><p>Another important thing to consider is that, by focusing too much on individual users, you’ll likely create a perfect product for them, but a terrible one if you think of groups of users.</p><p>With that in mind, I don’t think that we should put aside understanding users. I do believe that we have to turn it down a little. It makes a lot of sense to me that <strong>focusing on the activity and tasks of a product is equally beneficial as understanding the user</strong>.</p><h3>Our Product Design Process</h3><p>With years of experience working directly with product owners, we developed our own process: <a href="https://www.productdesignprocess.com/">The Product Design Process</a>. We looked at already existing processes and techniques and merged those with our own field of experience and feedback.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/0*DN5CQhUCBrliJ4N-.png" /></figure><p>As you can see, our process contemplates the user’s introduction in the process. Not only by conducting user interviews in the user research step, desirability tests on the moodboard, but also usability tests on the wireframes. However, those steps are not mandatory. Our advice is to put all the phases and steps at use when possible, but to <strong>adjust it to every project’s needs and budget</strong>.</p><p>The goal of our process is to achieve the best product possible while still being realistic. As I said before, our field’s reality is that most product owners don’t want to invest in user involvement, so we had to find ways around it.</p><p><strong>Proto-personas is something that we do in almost every project</strong>. Unlike personas, proto-personas are based on the product owner’s existing knowledge or assumptions about the users. This is not perfect, yet, it has proven to be helpful. Since it allows us to baseline assumptions, it helps to avoid mistakes like elastic users, self-referential design and edge cases. It also provides a reference document that will help troubleshoot if the product is not received as expected by the users when launched. All this considering each project’s budget and effort.</p><p>The Decision Matrix step is equally important and sensitive.<br> After concluding the benchmark, personas and user journey, usually, everyone involved has many different ideas for features that the product must-have. In this step, those features are going to be prioritized based on both user and business goals. This way you can guarantee that you have a Minimal Viable Product (MVP), meaning that even under time and budget constraints, the team will develop a viable product.</p><p>What Norman said, here we can put it into practice. We don’t focus only on the user, we do our work to understand what are the expected activities and tasks and what they involve.</p><h3>So, do you really want a UCD approach?</h3><p>Now that you know better in what consists of a UDC approach, you can clearly decide whether to invest in it.</p><p>One thing is sure, you should not follow any approach blindly just because it’s popular or because all the cool kids are doing it.</p><p>First of all, you should be clear on what every approach implies and if you have the necessary team, budget and time. And, even if you do, is that approach the one that suits your product better? Maybe your product is small and doesn’t need all the steps of a method. Perhaps it is too big and the approach you are using is not the most applicable.</p><p>By being aware of an approach to follow, you may adapt it or combine some of its steps to fit your product and its goals better. This must be considered before compromising with a strategy so you can get best outcome possible.</p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/product-design-process/">We’re sharing our secret sauce: meet the Product Design Process</a></li><li><a href="https://www.imaginarycloud.com/blog/why-ux-designers-are-essential-for-your-next-web-mobile-app/">Why you should hire a UX designer for your next digital project</a></li><li><a href="https://www.imaginarycloud.com/blog/the-4-most-recent-product-design-books-every-designer-should-read/">The 4 most recent product design books every designer should read</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/user-centered-design-do-you-really-want-it/"><em>https://www.imaginarycloud.com</em></a><em> on July 30, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bfe7240dbb1a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React Native vs Flutter for app development | Imaginary Cloud]]></title>
            <link>https://imaginarycloud.medium.com/react-native-vs-flutter-for-app-development-imaginary-cloud-eb154b73c8e8?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/eb154b73c8e8</guid>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[app-development]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 23 Jul 2020 18:20:00 GMT</pubDate>
            <atom:updated>2020-11-30T18:00:38.222Z</atom:updated>
            <content:encoded><![CDATA[<h3>React Native vs Flutter for app development</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VKu4USlpFGjOrLT8-LQt_Q.jpeg" /></figure><p>When considering what to use for your next mobile application, you’ll have to do some research about which frameworks can provide you with the tools you’ll need. React Native is a top dog of the industry, while Flutter is a rising star. If you’re not sure which one to choose, this post will help you decide which one is best for your needs.</p><p>To learn more about both technologies, I’ve developed Dwipper: a social network app (similar to Twitter) that one can use to post shower-thoughts (Dwipps).</p><h3>Hybrid vs Native</h3><p>Full disclosure: you should only look for a hybrid framework when you want your application to work on iOS and Android. Otherwise, you are better off sticking to native development for performance improvement, debugging, testing, and a simple way to release your application. <strong>Hybrid development makes the process faster</strong> and, therefore, cheaper while increasing the potential number of users. <strong>Native development</strong>, however, <strong>offers better performance and improved data protection</strong>.</p><h3>What is React Native?</h3><p>React Native is an open-source mobile application framework created by Facebook, released in March of 2015. <strong>It’s used for both mobile and web applications</strong>, by enabling developers to use React and other native platform capabilities. Being built on top of ReactJS and Javascript, it’s likely that developers that are used to such languages may find a preference for React Native over other frameworks.</p><h3>What is Flutter?</h3><p>Flutter is an open-source UI software development kit created by Google, released in May of 2017. <strong>It’s used for both mobile, desktop and web applications, all from the same codebase</strong>. Based on the object-oriented programming language Dart, those with a preference for those types of paradigms may prefer Flutter.</p><p>While Flutter comes with its material design guidelines, one may be inclined to use it. However, there’s no inherent problem with not using it, as Flutter was created with a custom brand design in mind. It just happens to have some material design as a bonus.</p><h3>Which one is more popular: React Native or Flutter?</h3><p>To give you some insights on how popular both frameworks are, here’s a graphic displaying the number of questions on StackOverflow that React Native has compared to Flutter.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OGAsFwuZxg87DiVi.png" /></figure><p>As we can see, <strong>Flutter rapidly gained traction</strong>, especially since 2018, in a way that since the end of 2019, StackOverflow has had more questions asked about Flutter than React Native. Flutter became slightly more popular as Google has been investing a lot of time into it.</p><h3>Is React Native easy to learn?</h3><p>Since it comes from JavaScript, <strong>it’s easier to learn and debug than other languages</strong>. It means you have a more straightforward approach to development. However, that ease comes at the cost of many errors people may find in their code, in runtime, because JavaScript is not a strict language. To avoid this, Facebook, React Native’s creator, suggests <a href="https://flow.org/"><em>Flow</em></a>, a type checker. It allows the inclusion of annotations on JavaScript to infer types and identify undesirable behavior, that is used to mitigate this issue by identifying problems as the code is being written.</p><h3>Is Flutter easy to learn?</h3><p>In a vacuum, <strong>Flutter is not as easy to learn as React Native</strong>. Nevertheless, a background in either Dart or any other Object-Oriented Language will make your life easier. Due to its increase in popularity, finding help online is quickly done and hardly any trouble.</p><h3>How does React Native work?</h3><p>React Native offers components equivalent to React’s web counterpart. Span in React is Text in React Native, which would be equivalent to UIView in iOS and TextView in Android.<br> Two threads are intrinsic to each React Native application:</p><ol><li>The main thread runs a standard native app, handling the display of elements and processing user gestures.</li><li>The other executes all the JavaScript code in a separate engine, either JavaScriptCore or V8, which deals with the business logic of the application. It also defines the functionality and structure of the user interface.</li></ol><p>These threads never communicate directly or block each other.</p><h3>How does Flutter work?</h3><p>The rough equivalent of iOS’s UIView and Android’s View, in Flutter, is a Widget, which is somewhat different from the counterparts mentioned above. For starters, they have a different lifespan: they are immutable and only exist until they need to be changed. When that happens, Flutter’s framework will create a new set of widget instances. In comparison, views in iOS and Android are drawn once and only redrawn when setNeedsDisplay() and invalidate, respectively, are called.<br> Having such a reactive framework allows the developer to brush aside the need to get references to the widgets, facilitating the structure for all backend, with a single language.</p><h3>About the project: Dwipper</h3><p>As part of my learning experience, I worked with both frameworks to develop an application called Dwipper, where users post their shower-thoughts as Dwipps.</p><p>The app had the following screens:</p><ul><li>Basic login, registration and forgot password</li><li>All Dwipps, to see everyone’s Dwipps</li><li>My Dwipps, where you can see all Dwipps you posted</li><li>New Dwipp, to write and post a Dwipp</li><li>Change password, where the user can change their password</li><li>Logout, where the user can logout</li></ul><p>To me, this was a great learning experience. <strong>Flutter felt more intuitive</strong>, like how you work with widgets felt simpler than components in React Native. The only real issue we initially had was communicating with the app’s backend. It wasn’t something directly related to the framework itself, only a matter of figuring out what and how to send.</p><p>React Native, on the other hand, was slightly more troublesome, perhaps because <strong>I had no prior experience with JavaScript</strong>. The most frustrating part was working out how to set up the navigation between the login part and the “real” part of the app. Having to install a new component each time we needed something for a specific task wasn’t very pleasant.</p><h3>Comparing with other frameworks</h3><h4>Flutter vs Ionic</h4><p>As Ionic was initially released all the way back in 2013, it lags behind Flutter slightly. If the developer isn’t sound in JavaScript, CSS and HTML5, the ramp up time for proficiency will cost time and money in learning the framework, while Flutter has a smoother learning experience. Being able to hot reload for quick experimentation allows for faster development as well.</p><h4>React Native vs Ionic</h4><p>When we talk about <a href="https://www.imaginarycloud.com/blog/ionic-vs-react-native-pros-and-cons/"><em>React native vs Ionic</em></a>, we can say that Ionic has great documentation and its tools are well understood by web developers. But since it’s built on top of a browser, the code can’t easily access native features.</p><p>React Native, on the other hand, has a big community backing it up, which leads to more issues or problems being solved by other developers online. React Native is translated into native code, being able to reach 60 frames per second easily, as if it’s a native app. However, it is backed by a big company, meaning that any new tools will only be released according to said company’s needs.</p><h3>React Native vs Flutter: which one is better?</h3><p>At the end of the day, when asking yourself which one is the best, Flutter or React Native, it all comes down to personal preference.</p><p><strong>Someone with more knowledge and experience in JavaScript</strong> or React will most <strong>likely prefer to use React Native</strong>, since the transition is rather smooth.<br> On the other hand, a developer who enjoys the Object-Oriented paradigm will most <strong>likely prefer to use Flutter</strong>.</p><p>In case you need to <a href="https://www.imaginarycloud.com/services/app-development">build a mobile app</a> more complex than Dwipper, you might consider using Flutter since it’s slightly more popular than React Native right now. That popularity might be of use when bug-hunting your app. More people means a wider variety of issues, which increases the probability of finding someone with the same problem as you or having it solved by another community member who already encountered it.</p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/5-common-errors-found-in-a-react-native-app-using-expo/">5 Common Errors Found in a React Native APP (Using EXPO)</a></li><li><a href="https://www.imaginarycloud.com/blog/how-to-configure-eslint-prettier-in-react/">How To Configure Eslint And Prettier In React</a></li><li><a href="https://www.imaginarycloud.com/blog/angular-vs-react/">Angular Vs React: A Comparison Of Both Frameworks</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/react-native-vs-flutter-for-app-development-2020/"><em>https://www.imaginarycloud.com</em></a><em> on July 23, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb154b73c8e8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to handle Async operations with Redux | Imaginary Cloud]]></title>
            <link>https://imaginarycloud.medium.com/how-to-handle-async-operations-with-redux-imaginary-cloud-bae39c862623?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/bae39c862623</guid>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[redux-thunk]]></category>
            <category><![CDATA[redux]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 16 Jul 2020 11:50:24 GMT</pubDate>
            <atom:updated>2020-11-30T18:00:18.682Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to handle Async operations with Redux</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L5T67bNqNWmH9moz8J0Ezw.jpeg" /></figure><p>It comes as no surprise to anyone that JavaScript is everywhere.<br> Here at <a href="https://www.imaginarycloud.com/">Imaginary Cloud</a>, the most part of the projects we are involved in, use it as the main language. My last project was a fairly large application that involved the usual culprits of the <a href="https://www.imaginarycloud.com/blog/a-javascript-ecosystem-overview/">JavaScript ecosystem</a>. We used a React front-end and a Node.js back-end stack.</p><h3>Why do we use Redux?</h3><p>When we needed to define a stack for this project, due to its nature of involving a lot of visual presentation and 3D modeling, React presented itself as a no brainer choice, regarding the front-end technology.</p><p>Unfortunately, at that time, a clear strategy for state management wasn’t defined. As the project evolved, it started becoming an issue, so the team decided to migrate all the logic related to state management to a Class that presented itself as a Singleton. That would help with all the state-related storage and events. This solution was fine on the short-term, but eventually, it would outgrow his usefulness and a plan was set in motion to find a better alternative. It came in the form of Redux, helped by the introduction of <a href="https://redux-starter-kit.js.org/">Redux Toolkit</a>, previously known as Redux Starter Kit.</p><h3>What is a Redux Store?</h3><p><a href="https://redux.js.org/">Redux</a> is a state container for JavaScript applications that lets you circumvent the natural React unidirectional data flow. This is possible as it has a source of truth that you can consult in your entire application, without having to drill downstate as a prop to other components. However, it also allows you to alter using predefined actions, while also keeping a history of such actions and mutations, that can be consulted while testing.</p><h3>Who created Redux?</h3><p>When Facebook presented React to the world, it was already evident for them how props could become a major hurdle, when reaching a certain level of complexity. To mitigate this issue, they introduced a concept alongside React called Flux, which describes how a store should work in conjunction with React. Redux, as we know today, stems from just a proof of concept hacked by Dan Abramov, while tinkering with Flux principles for React Europe.</p><h3>Where is Redux used?</h3><p><strong>Redux is used in large scale applications</strong> where an interaction with one component might propagate changes to the entire page. To facilitate this kind of communication between components, instead of having to create callbacks at the top level of the application, you can just consult the store. In my current project, Redux makes sense, because the application had escalated to a point where props related to its state were being passed down through several layers of components, which in turn was making the code hard to read and even harder to debug.</p><h3>Dispatching Async Actions using Redux</h3><p><strong>Redux looked like a godsend</strong> when we started migrating old code to this new feature. It made the <strong>code look slicker</strong>, it was <strong>extremely intuitive</strong> to understand and <strong>reduced drastically the number of props floating around the application</strong>. But it was not perfect. The very nature of reducers poses a problem when you’re encompassing the fetching of information in them, and that’s something the Redux community has been tackling for a very long time.</p><h3>How to handle Async Actions in Redux</h3><p>Reducers, in theory, are pure functions, according to the documentation <a href="https://redux.js.org/basics/reducers#handling-actions">itself</a>.</p><blockquote><em>Given the same arguments, it should calculate the next state and return it. No surprises. No side effects. No API calls. No mutations. Just a calculation.</em></blockquote><p>So, where should you <strong>apply async calls in Redux</strong>?<br> The Actions should be the immediate answer, but the basic implementation of actions is nothing more than a plain JavaScript object you use to pass information to your store. For this reason, the community came up with several middlewares that wrap all the logic into functions instead, which mimic the natural behavior of the store.</p><h3>Which Async Redux Middleware should you pick?</h3><p>As with everything in programming, <strong>there isn’t a one size fits all solution</strong>. So you should definitely research which middleware fits your problem the best. The first solution suggested by the documentation is <a href="https://github.com/reduxjs/redux-thunk">Redux Thunk</a>. This middleware allows you to create Actions as more than plain objects. These new Actions can dispatch other Actions, other Thunks and also <strong>perform async operations</strong> inside them. But recently, other middlewares have started gaining traction, like <a href="https://github.com/redux-saga/redux-saga">Redux-Saga</a> and <a href="https://github.com/redux-observable/redux-observable">Redux-Observable</a> have different use cases but they all share one thing, which is a very active repository and thriving community behind them.</p><h3>Why Redux Thunk?</h3><p>Out of all the popular solutions to this issue, <strong>Redux Thunk</strong> is the easiest one to understand. It’s also fairly accessible in technical terms and, at this time, it’s the suggested way to approach this situation according to the Redux documentation.</p><h3>How to implement Redux Thunk?</h3><p>We start here:<br>npx react-create-app my-app --template redux</p><p>This will get you a fresh new app using React with all the Redux modules we needed to do this short tutorial. We will also be working with the <a href="https://woofbot.io/">WoofBot</a> API service.</p><p>The first thing to do is to set up a dog slice, where you’ll keep all the information related to your dog API response.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xkLgBzJ0mm5hBuVD.png" /></figure><p>We have our Actions:</p><ul><li><strong>uploadBreeds</strong>: Will be used as a dump of all the payload information regarding the dog breeds.</li><li><strong>uploadBreedImage</strong>: Will be used to uploading certain breeds specific images, if needed.</li><li><strong>loadingState</strong>: Will be used to updating the status of the request.</li></ul><p>and Selectors:</p><ul><li><strong>selectBreeds</strong>: Returns an array of all the breeds in store.</li><li><strong>selectBreedImage</strong>: Returns the image for a specific breed.</li><li><strong>isLoading</strong>: Returns the status of the request</li></ul><p>How would you normally implement this back and forth with the API and the store? I would fit it all into a <strong>useEffect hook</strong>, similar to this one:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*07YzkqAv5dn2axX6.png" /></figure><p>What are we doing here?</p><ol><li>Component is mounted</li><li>Loading State is set to Request with one dispatch of an action</li><li>Data is requested using a simple fetch</li><li>Data is received from the API and processed to the object we want</li><li>Breed information in the slice is set to what we got using another dispatch</li><li>Loading State is set back to Waiting</li></ol><p>Alternatively, we might receive an error from the API which will stop the flow in step 4 and set the Loading State to Error.</p><p>This works, and that’s ok. But it also has several downsides. Mainly, it puts too much logic in the component. It’s not reusable, and if you want to access this information somewhere else, you’ll always need to make sure this component is loaded first.</p><p><strong>Now with Thunks</strong>:</p><p>npm install --save redux-thunk</p><p>The component logic looks like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*96p3oB05ekUIdXFa.png" /></figure><p>We need to create a new fetchBreeds action that looks very similar to the logic we previously had in the component:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*NwVgW6FRKpk0SfSZ.png" /></figure><p>This simple change of location in the code <strong>fixes most of the issues we had previously</strong>. We’ve abstracted code from the component and we’ve made this specific piece of logic re-usable throughout the entire code base. This information isn’t bound to mounting the component anymore, so now you can issue a new fetchBreeds action and the data will be loaded.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*KntpP56H1idxdA3B.png" /></figure><p>This also enables us to chain Thunks in case need more complicated logic inside our actions. We can also access the state directly, instead of needing selectors. However, you’ll still want to use selectors to make sure that any changes to Redux don’t affect your Thunks.</p><h3>In the end, what to pick to handle async operations in Redux?</h3><p>Depends on the situation. In the same way you can’t use a spoon for everything, the solution has to be chosen based on the problem and not on the other way around.</p><p>In the most recent issues I’ve faced, Thunks was more than enough to satisfy all my edge cases. But maybe in your case, you’ll need a more specific solution.</p><p>Do your research, keep yourself updated and you’ll always have the best tool on your side.</p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/react-hooks-vs-redux/">Demystifying React Hooks vs Redux</a></li><li><a href="https://www.imaginarycloud.com/blog/how-to-configure-eslint-prettier-in-react/">Learn to configure ESLint and Prettier in React</a></li><li><a href="https://www.imaginarycloud.com/blog/angular-vs-react/">Angular vs React: which one to choose?</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/how-to-handle-async-operations-with-redux/"><em>https://www.imaginarycloud.com</em></a><em> on July 16, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bae39c862623" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The 4 most recent product design books | Imaginary Cloud]]></title>
            <link>https://imaginarycloud.medium.com/the-4-most-recent-product-design-books-imaginary-cloud-472bd1b54f4d?source=rss-a3e51f28e070------2</link>
            <guid isPermaLink="false">https://medium.com/p/472bd1b54f4d</guid>
            <category><![CDATA[ux-design]]></category>
            <category><![CDATA[design-process]]></category>
            <category><![CDATA[web-design]]></category>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[book-recommendations]]></category>
            <dc:creator><![CDATA[Imaginary Cloud]]></dc:creator>
            <pubDate>Thu, 02 Jul 2020 15:30:00 GMT</pubDate>
            <atom:updated>2020-11-30T17:59:51.120Z</atom:updated>
            <content:encoded><![CDATA[<h3>The 4 most recent product design books</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wZ6IoyjGCOaqPyrwz8spHQ.jpeg" /></figure><p>As the Lead Designer at <a href="https://www.imaginarycloud.com/">Imaginary Cloud</a>, I conduct most of the interviews for design positions. While interviewing a design candidate, I frequently ask about their preferred books on the subject of UI/UX or product design. Sadly often, they answer: <a href="https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited">Don’t Make Me Think</a> or <a href="https://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things?ac=1&amp;from_search=true&amp;qid=ZQGYTSt2tW&amp;rank=1">Design of Everyday Things</a>.That’s the moment I know that my interlocutor knows very (very!) little about product design. Why is that? Well, don’t get me wrong. It is not that those books are <strong>bad</strong>. They were landmarks, <strong>in their time</strong>. In a time when there was very little acknowledgment about the importance and the role of design, when design was mainly done by developers and with very little user awareness. Those books were an important step forward. They laid down the first basic standards and foundational best practices. But this was around <strong>20 years ago! 20 years!</strong> (And yes, these books were updated and re-edited, but their core remains pretty much the same).</p><p>If your main reference about design is a 20 year old book that is the first recommendation in any bibliographic list from the 1st year of university, you really need to renew your readings. That expresses how updated you are in the field, what references do you have, and what’s your knowledge level.</p><h3>Why disregarding product design books is a mistake</h3><p>Some designers seem to have a certain disregard for books based on “Oh, I’m busy actually DOING things. You know, I like to be hands-on, learn with practice rather than just knowing the theory”. <strong>This is a big mistake</strong>.</p><p>If you are simply going hands-on, you are disregarding the valuable knowledge that other people and the industry have to offer. That means that you will be wasting time and resources. Be it re-inventing the wheel or trying out new stuff, but without solid foundations, direction and strategy.</p><p>“Oh, but I prefer listening to podcasts. And I follow some blogs”. The thing is: <strong>a book can expand a topic in much more depth than any blog article or podcast will ever be able to do</strong> — at least if it is a good book. I agree that a few books (maybe the majority) consist solely of an overly extended repetition of the same ideas over dozens of pages. Those books could be summarized without much loss in a blog post or podcast. That’s why knowing the best books to read is so important. That takes me to the problem I have with the “book lists for product designers” out there.</p><h3>The problem with most reading lists</h3><p>There are a couple of well-known <strong>reading lists for UX/UI</strong> and <strong>product designers</strong>. However, they have a few flaws that I consider crucial. Being aware of those flaws is important, so you don’t take them as “the ultimate reading lists” and miss looking for alternative book recommendations. It also helps you start developing a better sense of <strong>which books are worth reading or not</strong>, so you are not restricted on what other people tell you you should read. So, <strong>what are those flaws</strong>?</p><h3>Books that have more than 10 years.</h3><p>Going back to the issue I pointed about <em>Don’t Make Me Think</em> and <em>Design of Everyday Things</em>, <strong>one of the flaws of most well-known reading-lists is how outdated they are</strong>. Even if the mentioned books are good, I guarantee you, in the last 5 or 2 years someone has written something that good or better. Old classics can be good to give awareness about the field’s historical evolution. However, <strong>it’s likely that they are outdated</strong> regarding society/technology/design patterns or to only present high-level good practices that are more or less atemporal.</p><p>The problem with the first case is self-explanatory. The issue with the second scenario is that general high-level practices can be found (with a more relevant context) in any good design framework or design system (for instance, Google and Apple design guidelines). Also, <strong>high-level guidelines provide very little value for experienced designers</strong>, who are already familiar with the basics. This brings me to the second common problem with reading lists.</p><h3>Books that are too high-level</h3><p>Most reading lists tend to focus on books about high-level practices or processes. Be it older classics or more recent books.</p><p>What do I mean by books that are only “high-level”? We can look at the example of the best-seller <a href="https://www.thesprintbook.com/"><em>Sprint</em></a> in a <a href="https://www.imaginarycloud.com/blog/why-google-design-sprint/">previous blog post</a> that talks about how <em>Sprint</em> and our book <a href="https://www.productdesignprocess.com/"><em>Product Design Process</em></a> are complementary.</p><p>Summing it up: <em>Sprint</em> describes how to include design in your product development. However, the book doesn’t tell you how to <strong>do the design</strong>. This is clearly illustrated when the book describes the part of making the visuals. <em>Sprint</em> mentions that <strong>“Makers”</strong> (Designers or Engineers) should create the individual components (screens, pages, pieces, and so on) following under the direction of <strong>“The Stitcher”</strong>, who should give them a style guide to follow. The book, however, doesn’t present the process to make a style guide. It doesn’t go into the work of “The Stitcher”. The same is verified in multiple other instances in the book, be it regarding visual work or <strong>UX work</strong>.</p><p>I believe the focus on high-level practices is due to two reasons:</p><ol><li><strong>The obsolescence</strong> issue already mentioned above. If you provide detailed UX or UI advices, you will become obsolete once a new technology gets trendy, or once an unexpected world event changes user behavior. In a time and field where things change so quickly, sticking to high-level principles makes your book (and your reading list) age better.</li><li><strong>Most of those books are not targeted at designers</strong>, but at product owners and project managers. And that, in my opinion, is a problem itself.</li></ol><h3>Books that give product managers a light about design or that give designers a light about business.</h3><p>Many books “about design” actually target product owners, project managers, or CEO’s. The end goal is to raise the awareness of non-design roles about <strong>the importance of investing in design</strong>. It’s a way for people to understand, at a management level, how to incorporate design in their processes, product-life-cycles, and alike. This is, I believe, the case of <em>Sprint</em>. <strong>Books like this are extremely needed</strong>, and I’m happy that people write them and advertise them. <strong>However, they should not be mentioned as books “for designers”</strong>.</p><p>However, there’s another book category: <strong>books for designers about business</strong>. These books provide designers a bigger picture of the environment they work in, and help to clarify how they can perform better when aligning the design work with business goals and stakeholders. <strong>This type of book is extremely important for a designer’s career evolution.</strong> Having a proper understanding of the stakeholders’ motivations and their business vision is crucial for a design’s success and a good client-designer relationship. With a lot of academic curriculums missing that, <strong>these books are a must read if you want to be a great design professional</strong>.</p><p>Increasing <strong>business awareness is, nevertheless, far from being the only thing important to bring a product design to the next level</strong>. There are other fields of knowledge (neuroscience, psychology, sociology, communication, etc) that can help you improve design skills, your creative process or “simply” to help you become a better person to work with.</p><h3>The 4 most recent product design books you should be reading right now and why</h3><p>As a passionate book-worm, I gathered here the most recent books you should read if you seek to push your product design skills and knowledge to the next level. In the books listed below, you will find <strong>rich insights from ethics, anthropology, neuroscience and history.</strong></p><h3>1) Ruined by Design: How Designers Destroyed the World, and What We Can Do to Fix It — by Mike Monteiro</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/311/0*Q7BSOumE9WWNPZnQ.jpg" /></figure><p>Published in 2019, <a href="https://www.ruinedby.design/"><em>Ruined by Design</em></a> is not a book about hard skills. It’s a book about moral, ethics, and collective union. It is <strong>the rant we all need to hear</strong> about designers’ political and social responsibility as counselors (instead of just “pixel pushers”). It’s also about the need for accountability and collective organization that comes up with it.</p><p>If you are a <strong>junior designer entering the professional field</strong>, <em>Ruined by Design</em> will help you getting better prepared to face the ethical challenges you will meet in the corporate world, and empower you to have the fights you need to fight. If you are a <strong>senior designer working on the field for years</strong>, this book gives you the context to re-examine your moral compass and actions, checking if you still have them aligned and to reflect on what you could do better. The tone of this book is angry and passionate, being that the author repeats himself quite often. I would say, however, that both <strong>the outrage and the repetition are needed to balance out the brain-wash that corporate environments can do</strong>. As the author puts it: “the goal of this book is to <strong>do the right thing in environments designed to make it easier to do the wrong thing</strong> “.</p><h3>2) Mismatch: How inclusion shapes design — by Kate Holmes</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/341/0*eOSuQYCXH4lmXS8I.jpg" /></figure><p><a href="https://katholmesdesign.com/">Kate Holmes</a> was the former Director of Inclusive Design at Microsoft who led the company’s development <a href="https://www.microsoft.com/design/inclusive/">Inclusive Design Toolkit</a>. Edited by the <a href="https://mitpress.mit.edu/books/mismatch">IMT press</a> (first in 2018, and then in a new format in 2019), this book brings the question of “ <strong>what humans exactly are we putting at the center of human-centered design?</strong> “</p><p><a href="https://www.goodreads.com/book/show/39644200-mismatch"><em>Mismatch</em></a> presents the concept of Inclusive Design, beyond the notions of accessibility and universal design (“one size fits all”). The book reveals the issue of current <strong>user-centered design approaches</strong> and <strong>uncovers the misconceptions that designers and product owners have about users</strong>. Then, it provides suggestions to incorporate Inclusive Design in your product design/development process — highlighting the pitfalls commonly seen when teams try to do Inclusive Design and provide useful insights on how to avoid them.</p><p>All these technicalities are carefully presented in the context of the historical, social, political, and emotional impact that exclusion has on humans — and the responsibility (and power) designers have on shaping this. Lastly, <strong>one of the richest aspects of the book is how it gathers knowledge from a myriad of other fields</strong>: school systems and children development, gaming, architecture, mathematics, air force, anthropology, etc.</p><p>Mismatch is, without doubt, <strong>an essential reading if you have (or want to have) any leadership role in a design project or team.</strong></p><h3>3) Captivology: The Science of Capturing Peoples’ Attention — by Ben Parr</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/332/0*HU-QxeVmhKqeoE-D.jpg" /></figure><p>In this book, you will find a collection of both scientific studies and business cases that provide an insight on <strong>how to capture users’ attention</strong>, but also how to sustain it. By reading it, you will get to know how the human brain works, understanding attention and memory mechanisms.</p><p><a href="https://www.goodreads.com/book/show/22543500-captivology"><em>Captivology</em></a> presents, in a complete but brief and accessible way, what science knows about attention and memory. Considering that the most part of designers lack training in cognitive science, this is an important reading so you can <strong>design in a more science-based approach</strong>. The book doesn’t present you with straight-forward tips directly translatable in design decisions, but I would say that it’s a plus in this case. On one side, the depth of the knowledge covered goes beyond the basic design principles, which allows you to <strong>understand the why’s of common design best-practices</strong>. On another side, the relatively universal and timeless nature of the scientific knowledge presented, paired with the absence of prescribed rules, will provide you with <strong>a great basis so you can dare to innovate beyond standard interaction patterns</strong>, without risking usability.</p><h3>4) User friendly: How the hidden rules of design are changing the way we live, work and play — by Cliff Kuang and Robert Fabricant</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/326/0*ERTAwUa6JKFapFUm.jpg" /></figure><p>The best way I find to describe <a href="https://www.goodreads.com/book/show/41940285-user-friendly"><em>User Friendly</em></a> is as the <a href="https://www.goodreads.com/book/show/23692271-sapiens"><em>Sapiens: A Brief History of Humankind</em></a> for product design. The book presents the history of user-centered design from the beginnings of computer science to nowadays. Considered a successor to <em>Design of Everyday Things</em>, User Friendly figures in <a href="https://www.amazon.com/User-Friendly-Hidden-Design-Changing/dp/0374279756">Amazon Best Books of 2019 Picks</a></p><p>What distinguishes User Friendly the most from other design books (including the other ones in this list) is <strong>its incredible good writing</strong>. The book is written in a narrative form with a very clean but somehow poetic style. That makes User Friendly feel much more like a leisure book than a book that you are reading to learn — even though, you will definitely be learning a lot by reading it. The book covers <strong>the major world events, people and technology artifacts that brought the user-friendly design to where it is now.</strong></p><h3>Our own book about product design: Product Design Process</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*FnCARbzDZOF_9ael.png" /></figure><p>I couldn’t finish this reading list without mentioning the book we wrote at Imaginary Cloud: <a href="https://www.productdesignprocess.com/"><em>Product Design Process: The manual for digital product design and project management</em></a>. The book is great if you are well versed in the existing <strong>UX/UI tools</strong> (user interviews, focus groups, personas, jobs to be done, user journeys, mood boards, style guides, etc…), but if you struggle on how to move from one step of the design process to the next.</p><p>The <a href="https://www.productdesignprocess.com/"><em>Product Design Process</em></a> book will help you <strong>select the essential UX/UI design tools</strong>, and present you with <strong>a straightforward design methodology</strong> (using the output of a step as the input of the following one). This will improve your efficiency in two main aspects: on one hand, <strong>it will allow you to create a seamless workflow</strong>, relying less on bursts of creativity. On the other hand, it will <strong>make design approvals easier</strong> by providing a clearer link between research data and design decisions.</p><p>Finding time to complement our work experience with valuable readings can make a huge impact on our performance as designers. So, which book are you going to read first?</p><p><strong>Found this article useful? You might like these ones too!</strong></p><ul><li><a href="https://www.imaginarycloud.com/blog/7-ui-trends-for-2020//">7 UI trends you should be watching in 2020</a></li><li><a href="https://www.imaginarycloud.com/blog/why-google-design-sprint/">Google design Sprint Review</a></li><li><a href="https://www.imaginarycloud.com/blog/why-cross-cultural-design-really-matters/">Why cross-cultural design really matters</a></li></ul><p><em>Originally published at </em><a href="https://www.imaginarycloud.com/blog/the-4-most-recent-product-design-books-every-designer-should-read/"><em>https://www.imaginarycloud.com</em></a><em> on July 2, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=472bd1b54f4d" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>