<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ITMAGINATION</title>
    <description>The latest articles on DEV Community by ITMAGINATION (@itmagination).</description>
    <link>https://dev.to/itmagination</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F697008%2Fb09ce41b-9bfd-462d-af22-c5d1409196f6.jpg</url>
      <title>DEV Community: ITMAGINATION</title>
      <link>https://dev.to/itmagination</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itmagination"/>
    <language>en</language>
    <item>
      <title>Trends in Software Development 2022</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Fri, 01 Jul 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/trends-in-software-development-2022-g0n</link>
      <guid>https://dev.to/itmagination/trends-in-software-development-2022-g0n</guid>
      <description>&lt;p&gt;Earlier this year, Andrzej Frydryszak, .NET Developer at ITMAGINATION attended a few conferences on software development. The list we compiled is a list of the most significant points the attendees of the conferences have heard from some of the top engineering leaders in the US &amp;amp; Europe. Here goes:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Observability [Tracing, Monitoring &amp;amp; Logging] is crucial!
&lt;/h2&gt;

&lt;p&gt;You are working on your software, and you are ready to deploy it. All tests pass, and test coverage is on a decent level. Knowing this, we may deploy our code, and continue to work on it in peace. As much as this is not the optimal scenario (and as rare as it is) our code may still fail. Yes! Therefore developers need to always observe their code, and have it report metrics all the time. In case anything fails, you need to have your systems ready to deliver your logs to you. As Andrzej writes:  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Observability is crucial. Without it, developers are blind. It gives us an opportunity to react to every problem occurring in the system at any time.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. It’s a good practice to use both the “serverless” &amp;amp; “serverful” approaches. In that case, we benefit from both approaches to software development.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.itmagination.com/blog/how-to-scale-node-js-apps-with-serverless"&gt;Serverless&lt;/a&gt; is a way of running apps (seemingly) without any servers involved. Of course, it is a major simplification – there are always servers involved; only in this case you do not do anything with them, and they come preconfigured. It’s touted as the new black, except… It’s not a perfect remedy to all ailments. For starters, you cannot configure the underlying server, as we mentioned before. You don’t really know what’s under the hood, either. The main drawback is the approach’s major benefit at the same time. You don’t have to configure anything, so instead of deploy ⇾ worry, it’s more of a deployment ⇾ forget.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;There are benefits of either serverless or serverful solutions. In the modern systems, it is common to join two approaches to gain most of the solution.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Containerize everything! Kubernetes is a hot technology!
&lt;/h2&gt;

&lt;p&gt;Not all software development trends are good ideas. Do you remember CoffeeScript or Ruby? Sadly, we do. Luckily, &lt;a href="https://www.itmagination.com/blog/360deg-tech-check-2-linkedin-security-breach-kubernetes-spending-github-copilot-facebook-bulletin-arm64ec"&gt;Kubernetes (K8S)&lt;/a&gt; don’t seem as if they are going to join the two in the valley of sorrow. K8S are making DevOps specialists lives’ much, much, easier.  &lt;/p&gt;

&lt;p&gt;Here are the benefits you can expect by introducing containerization and container orchestration as a core tenant of your technology strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will be able to easily optimize your IT infrastructure costs&lt;/li&gt;
&lt;li&gt;Your users can expect higher availability and better SLAs due to seamless scalability&lt;/li&gt;
&lt;li&gt;Using Kubernetes enables your team to use multi-cloud solutions more easily&lt;/li&gt;
&lt;li&gt;Since containers and container orchestration tools are technology-agnostic, you can build using any technology that you want with a leaner team&lt;/li&gt;
&lt;li&gt;You no longer run into the age-old “it works on my machine” issue by containerizing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond the obvious benefits, we’ll leave you with some case studies that, we hope, will inspire you and help you decide if using Kubernetes is right for you, as well as show more in-depth benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/case-studies/northwestern-mutual/"&gt;Northwestern Mutual Case Study | Kubernetes&lt;/a&gt;: after acquiring a fintech startup, Northwestern Mutual had to consolidate workflows between cloud-native and on-prem processes, deploy more often, and unify their team’s operations to ensure their customers kept getting the same seamless experience they had been used to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using Kubernetes helped them increase their deployment velocity by over 25 times from 24 in a year to over 500 in 10 months, planned outages are a thing of the past, and infrastructure costs decreased significantly thanks to their API management being part of their overall stack that’s deployed on Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You can read more about these points, the transition to AWS, using Microservices, renewed developer autonomy, and keeping their 4.5 million customers happy with the quality and speed of their services in the case study.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/case-studies/capital-one/"&gt;Capital One Case Study | Kubernetes&lt;/a&gt;: in Capital One’s case, bottom-line is a big topic. Their estimates show that without using K8s’ ability to scale up and down automatically and easily, their AWS infrastructure costs would easily triple or even quadruple.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other benefits they’ve seen by using Kubernetes is time-to-market for new products, which now takes as little as 2 weeks, whereas it could have taken 3 or more months before.&lt;/p&gt;

&lt;p&gt;The main reason for starting to look at Kubernetes for their development? Capital One’s team wanted to increase the speed at which they’re able to process streaming data for key decisions in the areas of fraud detection and credit decisioning, as well as for other big data and machine learning applications that are critical to the day-to-day operation of the bank.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You can read more about these points, the deployment speed increases, how K8s helped unify Capital One's development environment, and more in the case study.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Other intesresting case studies worth checking out:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/case-studies/pearson/"&gt;Pearson Case Study | Kubernetes&lt;/a&gt;: reducing time-to-market for new features, increasing provisioning speeds from months to minutes, and ensuring high SLAs for an education company serving 75 million users.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/case-studies/prowise/"&gt;Prowise Case Study | Kubernetes&lt;/a&gt;: zero downtime between application versions, hours to seconds for new deployments, and new releases sped up by 3x in a complex development environment that includes many products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/case-studies/zalando/"&gt;Zalando Case Study | Kubernetes&lt;/a&gt;: the European fashion e-commerce leader used K8s for scalability, enabling multiple business use cases like same-day-delivery, multi-tenancy, increasing their offering and geographical reach, and enabled them to re-write and create all the SaaS products they had been using as custom software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/case-studies/adidas/"&gt;adidas Case Study | Kubernetes&lt;/a&gt;: e-commerce site load times were cut in half, releases were done multiple times a day instead of once a month, and developers have much more autonomy thanks to adidas’ move to being cloud native.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/case-studies/booking-com/"&gt;Booking.com Case Study | Kubernetes&lt;/a&gt;: after using OpenShift and learning the ropes of how to use Kubernetes, Booking.com’s team shifted to their own vanilla version of K8s to enable their developers to be more autonomous, independent, and not have DevOps be their perceived bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have any questions about how to optimize your K8s deployments or whether it’s the right choice for you at your current scale? &lt;a href="https://www.itmagination.com/contact"&gt;Make sure to reach out to us&lt;/a&gt; to talk to Maciej Gos, our DevOps competency leader.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. When it comes to software architecture, we should divide &amp;amp; conquer
&lt;/h2&gt;

&lt;p&gt;Monoliths of large sizes are somewhat of a yesterday’s tale. They haunted developers for long, though not anymore. Splitting huge unitary codebases into smaller scale apps is the new way of doing things. It fireproofs your applications, reducing the frequency of errors, and making apps safer in case something wrong happens. The downside is, apps become harder to test, and it takes more resources to do so. For teams of a smaller size, it still makes more sense to maintain a monolith.&lt;/p&gt;

&lt;p&gt;Divide a monolithic application into independent microservices.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Open-Source &amp;amp; Free Software are the ways of the future.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.itmagination.com/blog/360deg-it-check-41-react-18-kentucky-bitcoin-astro-chrome-100-vs-code"&gt;React&lt;/a&gt;, &lt;a href="https://www.itmagination.com/blog/360-it-check-47-next-js-angular-jquery-microsoft-build-duckduckgo"&gt;Angular&lt;/a&gt;, and Zuul, from Meta (which used to be Facebook), Google, and Netflix, respectively, are tools countless developers use in their jobs every day. Without the tools these organizations released at no cost to all those willing to use them, everybody’s job would have been much more difficult. Countless services would not have seen the light of day, as it would have been too hard or too time-consuming to write these apps. All because, before writing them, one would have to figure out how to e.g., write front-ends for scale, on their own, without sharing the lessons learned would be extremely inefficient.  &lt;/p&gt;

&lt;p&gt;This is why we have to praise open-source &amp;amp; free software maintainers, creators, and all others contributing to the creation and maintenance of such software.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Creation of a tool/technology and making it open-source (or making it free) gives the organization eternal glory.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use Architectural patterns.
&lt;/h2&gt;

&lt;p&gt;There is a common rule in software development – don’t reinvent the wheel. Knowing that we likely have faced the same problem as somebody else before, the rule becomes all the more valuable. This is why engineers and developers from around the world use Architectural Patterns to structure their projects – not to waste time on thinking about how to figure out solutions others already came up with.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Much of modern pieces of software use patterns like CQRS and Event Sourcing. Don’t reinvent the wheel, use the patterns.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Programming languages are evolving.
&lt;/h2&gt;

&lt;p&gt;The fact that we have newer and newer programming languages isn’t a surprise. They all come and go, and leave to be replaced by others. Nobody codes in Algol or Pascal anymore. One old-timer, C, is still around, however, though that’s a topic worth exploring on its own.&lt;/p&gt;

&lt;p&gt;One noteworthy aspect is the way in which they all evolved during the years. At first, imperative languages were the only ones around. Then the boom for Object-Oriented languages came, and now, some might argue, that they are being pushed out by languages such that are much more flexible, mixing some imperative, functional, and object-oriented features.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;The way languages evolve is getting more and more independent of the systems we work on, and with. Modern languages are cross-platform. Thanks to the growth of DevOps, the language selection becomes less and less important.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thanks to the modern infrastructure, complexity is moving from the application to the external platforms.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The classic infrastructure on a physical server in the basement is displaced by cloud providers and related technologies. We have VMs as a service, databases as a service and many other infra elements as a service. Major of planning in a software solution has moved to the high-level design of an infrastructure, since much can be automated based on it. Additionally, we have containers and container orchestration. It takes over the complexity, since we can divide the system into smaller and simpler parts.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Application code gets more independent of the platform. The complexity, however, lies in the infrastructure and operations. Application developers focus increasingly on business logic. DevOps engineers handle the rest.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. SCRUM != AGILE
&lt;/h2&gt;

&lt;p&gt;Adopting specific processes usually leads to learned behaviors, which ultimately lead to habits. At least, that’s the theory of it.&lt;/p&gt;

&lt;p&gt;In some cases however, processes stay processes that people trudge through just to go through the motions, but the behaviors never develop. Think of it this way, how many development teams have you seen go through all the Scrum rituals but not actually working in an agile way? Too many? We agree.&lt;/p&gt;

&lt;p&gt;So what can you do? First, team buy-in, this is always the first step that needs to be established. If your team does not see the value in working using this methodology, then all the processes and rituals will not move the needle much in the long term.&lt;/p&gt;

&lt;p&gt;The second step is to make sure you have a great scrum master and project manager to ensure good practices are being passed onward and that any objections are being  &lt;/p&gt;

&lt;p&gt;The third step is to realize: forcing Agile values &amp;amp; the Scrum framework down people’s throats when it doesn’t hold any merit will get you nowhere, fast. We’ve covered this point and many more in detail in our post titled “&lt;a href="https://www.itmagination.com/blog/scrum-isnt-the-answer-for-every-it-project"&gt;Scrum isn’t the answer for every IT project (itmagination.com)&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;SCRUM can be agile, but it does not guarantee agility. Agility comes from behaviors, not only processes.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Continuous Security
&lt;/h2&gt;

&lt;p&gt;As we wrote many times before, security cannot be an afterthought. We cannot simply “leave it for later.” Checking apps for security issues has to be integrated into the DevOps process, and into the development process itself from day one. Luckily, there are few tools we may use to make the process frictionless. One of them is Snyk. It’s a comprehensive tool to “[f]ind and automatically fix vulnerabilities in your code, open-source dependencies, containers, and infrastructure as code[…].”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We must apply security checking procedures in the development cycle. Security is a base of trust – the currency of the future.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Audit the prices of cloud provider’s services
&lt;/h2&gt;

&lt;p&gt;As the three main cloud providers enjoy virtually no competition, and differences in services they provide are (more or less) arbitrary. The only difference that we may see, realistically, is the difference in the price of services. This is why, being biased about this one particular provider is not necessarily bad. There really is, mostly, little to no difference.  &lt;/p&gt;

&lt;p&gt;Choose whichever provider you are comfortable with, and already know. Assess as you go, and don’t be afraid of change.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cloud providers have no virtual competition and no cost arbitrage. Cloud infrastructure costs are very dependent on inflation and recession.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Everything can be done “as a Service”.
&lt;/h2&gt;

&lt;p&gt;Platform as a Service, Infrastructure as a Service, Database as a Service, Software as a Service, Backend as a Service… We spared you more examples, and you should get our point across. Everything you can think of can be done by a third-party and sold to you.&lt;/p&gt;

&lt;p&gt;Using these services is a trade-off. You give up some control to become leaner, and to be able to iterate faster, as well as to save some money upfront.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Due to the growth of the importance of cloud providers and serverless approach, every piece of software can be done as a Service.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Everybody uses Visual Studio Code.
&lt;/h2&gt;

&lt;p&gt;Visual Studio Code took the world by storm. The combination of having the backing of Microsoft, having an Open-Source license, being written in TypeScript, and allowing for an easy extension of functionality were great decisions. The text editor is, by far, the most popular choice among modern programmers. Other choices, such as Intellij-based Integrated Development Editors (IDEs) or Vim, are in Code’s shadow, though &lt;a href="https://www.itmagination.com/blog/360deg-it-check-41-react-18-kentucky-bitcoin-astro-chrome-100-vs-code"&gt;JetBrains’ Fleets might change that&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Thanks to the multiple extensions and customization tools, VS Code becomes the most popular IDE among developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. TensorFlow is widely used these days.
&lt;/h2&gt;

&lt;p&gt;TensorFlow, Google’s framework for Machine Learning is an incredibly popular choice among programmers. For one, it is in GitHub’s top 20 for the most starred repositories. Then, there are multiple ports, &lt;a href="https://www.itmagination.com/blog/javascript-frameworks-part-3-data-science"&gt;including the JavaScript one&lt;/a&gt;, which teams use in their e.g., &lt;a href="https://www.itmagination.com/blog/cross-platform-mobile-apps"&gt;React Native&lt;/a&gt; apps, or web apps in &lt;a href="https://www.itmagination.com/blog/react-18-what-changes-does-it-bring"&gt;React&lt;/a&gt; or any other JS framework. This provides enormous flexibility, and allows teams to embed the solution in many solutions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to TensorFlow we can implement AI solutions in web applications. The models for training are provided by the library. Developers should focus on training them.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A great long-term hiring strategy is to hire juniors and train them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hiring juniors is a good long-term strategy. While there is no “best strategy” that’s a fit for all companies, hiring juniors and training them is definitely one of the best ways to grow and retain in-house talent.&lt;/p&gt;

&lt;p&gt;Hiring juniors is a great way to scale up your team slowly over time, and building an internal culture that is easier to mould when compared to hiring people who are possibly set in their ways. Juniors also give a fresh perspective and are more in touch with current trends.&lt;/p&gt;

&lt;p&gt;There are a few cases where this isn’t ideal, for example when your company needs to scale and develop new features rapidly. It’s also not the best if you have a small in-house team who are constantly trying to catch up with their backlog due to unrealistic development expectations. &lt;a href="https://www.itmagination.com/blog/outsourcing-versus-in-house-software-development-pros-cons"&gt;In that case, hiring an external technology partner to help with development while scaling up the in-house team in tandem could be a great middle-ground solution.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hiring juniors to train them as a strategy doesn’t come without pitfalls. Juniors who are on your team are not vetted by previous companies, they don’t have a work history, and it may very well be a hit or a miss. The unfortunate reality is that while this strategy can be great with appropriate compensation packages, junior employees may find themselves in positions where they can double, triple, or even quadruple their salary by simply moving companies, rather than waiting or pushing for a promotion or raise.&lt;/p&gt;

&lt;p&gt;This is why it’s so important to have transparent salaries and pay scales to show people where and how they can advance in their career path. This is why it’s also crucial to have great onboarding programs to make sure that the time spent on training the juniors is well-spent and benefits both the mentors and mentees.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;According to numerous studies, a great long-term hiring practice for software developers is to hire non-experienced engineers and train them into the ways of the organization.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>software</category>
      <category>programming</category>
      <category>trends</category>
      <category>2022</category>
    </item>
    <item>
      <title>Rust: The Perfect Language For Blockchain Development</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/rust-the-perfect-language-for-blockchain-development-4oeh</link>
      <guid>https://dev.to/itmagination/rust-the-perfect-language-for-blockchain-development-4oeh</guid>
      <description>&lt;p&gt;Rust, Graydon Hoare’s creation, is the famous language for creating fast and secure applications. The language is also universally well-liked, earning the top spot in the Stack Overflow Survey 6 years in a row!&lt;/p&gt;

&lt;p&gt;It’s no wonder, then, that many major companies, such as Discord, 1Password, Dropbox, and Toyota decided to embrace Rust, the language developed in 2010.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Rust different?
&lt;/h2&gt;

&lt;p&gt;Rust’s design is unique, and crucially, it aims to answer the oldest existing question: how to eat a cake and still have that cake. In the simplest terms, it solved the challenge of having a tool for designing apps that do not compromise on performance while at the same time, save you from potentially dangerous flaws.&lt;/p&gt;

&lt;p&gt;Of course, if you need to escape some of that safety, you may. Even though it is highly discouraged, a simple unsafe statement will do the trick. &lt;/p&gt;

&lt;p&gt;Another key feature that many programmers always appreciate, is how easy it is to generate documentation. If somebody published a piece of code for others to reuse, you may find documentation for it on docs.rs. Frankly, there are few languages that even match that functionality (Go is one of them, of course). &lt;/p&gt;

&lt;h2&gt;
  
  
  The Gotchas
&lt;/h2&gt;

&lt;p&gt;Of course, claiming that something is without flaws is delusional. The designer of the language, and the team behind it now, had to make tradeoffs.&lt;/p&gt;

&lt;p&gt;One of them is the language’s excessive wordiness. Writing &lt;code&gt;option.as_ref().unwrap().borrow()&lt;/code&gt; is a Rustacean’s (that’s how Rust programmers call themselves) constant companion for better or for worse.&lt;/p&gt;

&lt;p&gt;Furthermore, the editor support appears to be top-notch, but only on the surface. There’s a JetBrains’s plugin for CLion, an extension for Visual Studio Code (VS Code)… Or is it? Suggestions are often a miss, and the functionality often crashes, and it’s slow.&lt;/p&gt;

&lt;p&gt;Overall, there are definitely more shortcomings, and we can’t pretend there aren’t. The optimistic accent is how the wider project handles flaws and challenges. One example is how the community handled one highly requested feature: asynchronous programming.&lt;/p&gt;

&lt;p&gt;See for yourself at &lt;a href="https://areweasyncyet.rs/"&gt;https://areweasyncyet.rs/&lt;/a&gt;. In short, there was a popular movement of programmers to co-create the necessary foundations for the feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rust’s Use Cases
&lt;/h2&gt;

&lt;p&gt;Specifics aside, there are use cases In the same way that we won’t see a supercar making deliveries, or a delivery van race on a track - programming languages have their use cases that they're built for.&lt;/p&gt;

&lt;p&gt;Rust excels in all the (most frequently) multi-platform, high-performance scenarios, where security cannot be an afterthought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blockchains&lt;/li&gt;
&lt;li&gt;Browsers&lt;/li&gt;
&lt;li&gt;Operating Systems&lt;/li&gt;
&lt;li&gt;Cybersecurity Products&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These all successfully use the airtight language to improve their offering.&lt;/p&gt;

&lt;p&gt;There are some scenarios, however, where we have to resort to using C, or C++ instead. Embedded development is one such area. In this case, engineers have to apply solutions that are sometimes older than they are. It’s a sad necessity since memory and CPU speed are a luxury. Though that might be for worse. As a matter of fact, C may have been indirectly responsible for a series of car crashes, and billions of dollars of losses for one automotive company (pages 36, 38, 40, 43).&lt;/p&gt;

&lt;p&gt;Sadly, the affair happened before 2010, therefore the only way to produce better code back then was to voluntarily adhere to standards.&lt;/p&gt;

&lt;p&gt;In cases of web back-ends, developing them in JavaScript, Java or C# are the best suited tools. It’s an active sacrifice of the app’s performance for quicker iterations and shorter development time. Little do people know, however, that Rust apps make terrific front-end web apps.&lt;/p&gt;

&lt;p&gt;Did you know that Figma allows people to create their designs using the super safe language under the hood?&lt;/p&gt;

&lt;h2&gt;
  
  
  Blockchain projects running based on Rust
&lt;/h2&gt;

&lt;p&gt;Safety, easy multi-platform development, speed, and quality is just what blockchain developers need - and where Rust excels.&lt;/p&gt;

&lt;p&gt;For all the enthusiasts out there, you may even find a dedicated newsletter updating everybody on advances of “Rust in Blockchain”. The amount of high-profile projects in this area alone is impressive, just to mention Zcash, and MobileCoin.&lt;/p&gt;

&lt;p&gt;We want to highlight different projects, however. Some higher-profiles ones are:&lt;/p&gt;

&lt;h3&gt;
  
  
  Solana
&lt;/h3&gt;

&lt;p&gt;The project started in November 2017 and had one goal from day one. They wanted “a blockchain built from the ground up for scale.”&lt;/p&gt;

&lt;p&gt;‍The story began in 2017, with a scientific paper by Anatoly Yakovenko. Few years down the line, and we have a top project with numerous contributors, and a strong community. Solana and Polkadot are fighting Ethereum on their quest to become the choice for Web3. Will they be successful? Only time will tell.&lt;/p&gt;

&lt;p&gt;Question: how do you build something extremely fast, and safe at the same time? The Clear Answer: You develop it in Rust.&lt;/p&gt;

&lt;p&gt;Engineers from Geneva, Switzerland, use the programming language to ensure the highest levels of safety and speed. To achieve higher efficiency, the team even restricted the language features available.&lt;/p&gt;

&lt;p&gt;The effect? “710,000 transactions per second on a standard gigabit network if the transactions are, on average, no more than 176 bytes.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: The name Solana is “a nod to a small beach town North of San Diego called Solana Beach, where Anatoly, Greg and Stephen [the founders] lived and surfed for three years when they worked for Qualcomm.”&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Polkadot
&lt;/h3&gt;

&lt;p&gt;Polkadot, a London-based organization, “envision[s] a Web where our identity and our data is our own – safely secured from any central authority.”&lt;/p&gt;

&lt;p&gt;That’s not their only goal either. The team sees their mission being “connecting private and consortium chains, public and permissionless networks, oracles, and future technologies that are yet to be created” as well.&lt;/p&gt;

&lt;p&gt;How do they want to do all that? You guessed it: build a solution on top of Rust.&lt;/p&gt;

&lt;p&gt;While the team, primarily based in London, explicitly highlights the foundation is Hoare’s child, the project also states that Go and C++ are among the languages in use “making Polkadot accessible to a wide range of developers.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Hyperledger Sawtooth
&lt;/h3&gt;

&lt;p&gt;If you played “spot the odd one out”, then here is the correct answer. A little different from their colleagues, Hyperledger solves other problems altogether. While the former two are public blockchains, Sawtooth is an “enterprise solution for building, deploying, and running distributed ledgers.”&lt;/p&gt;

&lt;p&gt;The company, based in San Francisco, USA, uses Rust to “to give application developers and administrators more control, more flexibility, and greater security for their blockchain networks.” The team switched to Mozilla’s language from… Python.&lt;/p&gt;

&lt;p&gt;Guido van Rossum’s creation had one purpose: to facilitate prototyping. After a year, in 2019, the team decided to rewrite the project to Rust, enabling them to ship better code. Teams have “account for all possible error and edge cases”, thus low-quality code will not get a pass from the compiler.&lt;/p&gt;

&lt;p&gt;Comparing that to C++, or even Python, the solution will be of higher quality, due to the strictness of the language and its compiler.&lt;/p&gt;

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

&lt;p&gt;But… is Blockchain development, and low-level (advanced operations where speed is a must) development the only things I can do with Rust? No! In fact, full-stack development is not only the domain of JavaScript. Maybe a Nest.js and Angular (JavaScript frameworks) are enterprise favorites. However, nobody says you can’t make an app with Actix Web, and Yew (Rust alternatives to the aforementioned solutions) just as well! If you prefer to keep your current web engineers, then that’s quite alright as well. You may just compile your code to run inside, e.g., a React, Vue or Angular app.&lt;/p&gt;

&lt;p&gt;Whatever you are using Rust for, should you want to have a conversation about your project, &lt;a href="https://www.itmagination.com/services/custom-software-development/blockchain-development-services"&gt;don't hesitate to get in touch with us here to talk about our Blockchain Development Services. We would love to talk to you.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Developing Your Web3 Decentralized Application: 3 Things To Consider</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Wed, 08 Dec 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/developing-your-web3-decentralized-application-3-things-to-consider-3lce</link>
      <guid>https://dev.to/itmagination/developing-your-web3-decentralized-application-3-things-to-consider-3lce</guid>
      <description>&lt;p&gt;Web1, the grandparent of Web3, was all about decentralization. Everything was community governed and open. Value was not in the hands of the service providers, but at the very edge — in the hands of individual users and groups of multiple users. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.archive.org/web/20111110143942/http://darcyd.com/fragmented_future.pdf"&gt;“Web 2.0” was a term coined in 1999 by Darcy DiNucci&lt;/a&gt;, later popularized by Tim O'Reilly and Dale Dougherty during the O'Reilly Media Web 2.0 Conference in 2004. In this chapter, the power resides, and has always resided centrally, with the platforms, such as Facebook, Google, and Twitter.&lt;/p&gt;

&lt;p&gt;This has caused &lt;strong&gt;many&lt;/strong&gt; problems (&lt;a href="https://www.theguardian.com/news/series/cambridge-analytica-files"&gt;Cambridge Analytica&lt;/a&gt; anyone?). The argument for the new name was different, however. It was that before the new era, content was mostly static, while Web2 was about dynamic content. Not all agreed (not even the creator of the internet himself), but the name stuck. &lt;/p&gt;

&lt;p&gt;Fast-forward to now, we are possibly living at the start of the new era, the time of Web3. The time when we have decentralized apps that run on blockchains. Now, we can finally make things right. The next iteration of the web aims to fix many of the shortcomings and flaws of the previous version. &lt;/p&gt;

&lt;p&gt;The code that governs transactions, and runs on, e.g., Ethereum’s (ETH) virtual machine (EVM), is visible to everybody in its entirety. There are no surprises here.&lt;/p&gt;

&lt;p&gt;Web3 apps are also much safer. That is because the authenticity of your code is ensured by all the Ethereum nodes around the world. Of course, ETH is not your only option, which is a blessing, as the chain does not have the highest bandwidth possible. In practice, the network is limited to only up to about 15 transactions per second, which some alternatives solve quite well. These are Solana, Polkadot, or EOS.&lt;/p&gt;

&lt;p&gt;With the problem of scalability gone, there is one concern that does not go away. No matter which solution you are using, the complexity of new apps sharply rises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complex? Not necessarily.
&lt;/h2&gt;

&lt;p&gt;Despite what one might think, Web3 apps are more complex than their Web2 ancestors. Sure, you don’t really write your back-end code anymore in a way that you used to, nor do you manage your backend like before.&lt;/p&gt;

&lt;p&gt;There is not exactly a server you need to worry about. The lack of a traditional backend could be seen as a positive. There are so many things you don’t need to worry about or configure.&lt;/p&gt;

&lt;p&gt;On the other hand, traditional servers scale much better. You do have to start adding resources eventually, though, though definitely you will not run into a brick wall. The difficulties start when your product becomes known to more and more users.&lt;/p&gt;

&lt;p&gt;Ethereum cannot handle too many operations at a time, which it has a bad rap for. The limits can become painful, too fast. There is a light of hope, however. The Eth2 update started on October 29, 2021, with the aim of making the chain more scalable.&lt;/p&gt;

&lt;p&gt;The complexity is a result of bypassing the limitations of Ethereum. IPFS to store data, Layer 2 solutions for increasing the number of transactions possible at a time.&lt;/p&gt;

&lt;p&gt;The graphic below illustrates what an app’s architecture can look like.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ibv-SO0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/61b9d1e7002b483c133fbeaa_Web3%2520dApp%2520Architecture.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ibv-SO0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/61b9d1e7002b483c133fbeaa_Web3%2520dApp%2520Architecture.png" alt="A graph showing the architecture of Web3." title="The architecture of a Web3 app" width="604" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Decentralized? Absolutely.
&lt;/h2&gt;

&lt;p&gt;Web3 does not resolve the issue of centralization fully, either. We still have to host our web apps somewhere. It more often than not will be on the servers of a cloud provider, such as AWS or Azure. There is always an option to host everything on your premises, though we definitely see a trend to do otherwise. &lt;/p&gt;

&lt;p&gt;Http is not a necessity, however. The traditional way to access websites (including ours), is not the only way for your clients to access your new app. The Interplanetary File System (IPFS) or Swarm can be the alternative routes to your service. Of course, the majority of your users will not have the necessary extensions installed. Most likely, you will have to host your service in both the “traditional” way, and the Web3 way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Costly? It depends.
&lt;/h2&gt;

&lt;p&gt;Even though we do not have to have a database, saving all our generated data to the Ethereum chain can become very costly, very quickly. If you feel it would be better not to run out of money too fast, you might store data off-chain. There are a couple of options for you to do that. There is the IPFS, and Swarm. &lt;/p&gt;

&lt;p&gt;IPFS may serve as decentralized storage for your app, though as it aims to replace http, your clients would have to at least have a custom extension installed to view the website you’re sending them to. Swarm is another solution to the problem. You may host your websites on the network, and also enjoy the benefits of hosting your app on a decentralized network.&lt;/p&gt;

&lt;p&gt;There are some clients There is also a Chrome-based browser, Brave, that comes with an IPFS functionality built-in. If you want a good Web3 compatible browser, that would be the best choice. Another browser that comes with the native IPFS support is Opera. Both of them might be too niche for your taste, so if you want to keep using your current browser, you may download the &lt;a href="https://docs.ipfs.io/install/ipfs-companion/"&gt;IPFS Companion extension&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;There are always obstacles to overcome when any new tech reaches the phase of Early Majority – do not be discouraged that it’s the same way this time. Obstacles can be overcome in some of the ways we have described. &lt;/p&gt;

&lt;p&gt;These obstacles are no mountains that one cannot climb. If you are discouraged by the limitations we have now, it would have been similar to claiming something like “Netflix will &lt;strong&gt;never&lt;/strong&gt; work” back in the dial-up modems days. Sure, it would not have worked then. What was needed was a couple of breakthroughs that did come, in time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Once you overcome these obstacles, there is a whole another world waiting for you and your users. A world where you and your clients literally own parts of the web. A more democratic world, than the one we have now. If you need a hand stepping into this world, &lt;a href="https://www.itmagination.com/services/custom-software-development/blockchain-development-services"&gt;feel free to check out our blockchain development services and contact us&lt;/a&gt;!
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.itmagination.com/blog/developing-web3-decentralized-application-3-considerations"&gt;https://www.itmagination.com/blog/developing-web3-decentralized-application-3-considerations&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>ethereum</category>
      <category>decentralization</category>
    </item>
    <item>
      <title>Change Blindness</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Fri, 19 Nov 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/change-blindness-578e</link>
      <guid>https://dev.to/itmagination/change-blindness-578e</guid>
      <description>&lt;p&gt;Designing interfaces always happens with a goal in mind, whether it’s a purchase, sending a form, or performing a calculation.&lt;/p&gt;

&lt;p&gt;A properly designed UI may influence an outcome of a task dramatically. The way it’s built may mean the difference between failure and success. It’s because in the midst of all tasks, schedules, and to-do lists — it’s too easy to miss a change.&lt;/p&gt;

&lt;p&gt;Were you ever in a situation where you wanted to attend a meeting on Teams that either already happened in the past, or one that is coming up in the future? If so, it might have been because you missed a change in time; especially in a situation when your calendar is frequently updated. &lt;strong&gt;Our senses are relentlessly bombarded by the constant waves of triggers that can overwhelm our brains.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Change blindness is you missing new visual details added to an existing canvas.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Gorilla In The Room
&lt;/h3&gt;

&lt;p&gt;Daniel Simmons &amp;amp; Christopher Chabris have conducted an experiment at the University of Harvard, during which they showed everybody a video.&lt;/p&gt;

&lt;p&gt;In the video, you will see two teams playing with a ball. One is in black t-shirts, while the other team is in white t-shirts. Scientists asked participants to watch the video and count how many passes the two teams completed. Please watch the video, and let’s see if you will get the number right.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vJG698U2Mvo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Now that you have watched the video, have you gotten the number correct? More importantly, though. Noticed anything unusual there? Maybe a gorilla? Watch the video again now.&lt;/p&gt;

&lt;p&gt;This time, don’t count the passes. During the original study, almost half of the participants did not notice the gigantic monkey. Did you?&lt;/p&gt;

&lt;h3&gt;
  
  
  A Good Old Switcheroo
&lt;/h3&gt;

&lt;p&gt;In another experiment, a passer-by asked a stranger for directions. During the conversation, the person asking for directions was replaced by somebody else. Yet again, almost half of the “victims” did not notice the change.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VkrrVozZR2c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Despite our best intentions, we can only focus on one task at a time (we're looking at you, people who talk over their phones while driving).&lt;/p&gt;

&lt;h3&gt;
  
  
  Vans - Off The Mark
&lt;/h3&gt;

&lt;p&gt;Another example of Change Blindness is the now changed mobile version of Vans’ website.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1WXKIw0x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197abc0b9125b023722eb82_MDRSZ1BOX9tPP9xd6lf4rBv1ZCU6PCaCQb2IKzRG9DE2AWKZbEQF7EITtI4B40Clq0TBPbGXn8OWBGXugy4-0RITQ4wyN0VL6i8IyYAvpwgv-yK6Thxv67VTAyBxj7jjjcCc4LHG.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1WXKIw0x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197abc0b9125b023722eb82_MDRSZ1BOX9tPP9xd6lf4rBv1ZCU6PCaCQb2IKzRG9DE2AWKZbEQF7EITtI4B40Clq0TBPbGXn8OWBGXugy4-0RITQ4wyN0VL6i8IyYAvpwgv-yK6Thxv67VTAyBxj7jjjcCc4LHG.png" alt="Vans's website" width="431" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a user chooses a size that is not available, the button label, saying “Add To Cart” changes to “Out Of Stock.” The difference was not visible enough, however, as the difference in text was not big enough.&lt;/p&gt;

&lt;p&gt;In the current version, if a shoe size is not available anymore, you may see it right away, and the button to add it to cart is disabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  What could be a factor in “change blindness”?
&lt;/h2&gt;

&lt;p&gt;What we say is transformed and interpreted by our brain. To make the world comprehensible, it has to prioritize what is the most important for us to reach our goal. On the flip side, it filters out anything that is unnecessary for us.&lt;/p&gt;

&lt;p&gt;Any pauses in our perception, such as when a website loads, or when we blink, will most likely not get picked up. Sadly, even the best designed communication, be it on buttons or progress bars, if noticed by your user, might mislead them.&lt;/p&gt;

&lt;p&gt;If we want to support your users in reaching their goals, you have to remember a few things.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can you design better interfaces?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Changes need to be signaled clearly
&lt;/h3&gt;

&lt;p&gt;If we filter data too fast, the person on the other end might not notice the change. It is therefore necessary to appropriately accentuate the shift with the right alert that something happened, or that something is about to happen.&lt;/p&gt;

&lt;p&gt;Take a look at a notification you get when your phone battery is low. It is close to impossible to miss it, and probably after getting it, you started to frantically look for your charger.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PWIm-Z04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197ac0e2bce2e35ac24ea35_u9NdNjpeKSjZPUTBc4fI3BIhjjyL1HWnJZ3f-yihRL1HcyWbdnqYUI6RZP2Ei-NL5qwZWrh50HjaqDSyMFjHxPu7zu0yrAj441VQkIrS-1Wk21RrWsQ2qHZKbbII2VO4amTWCFnf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PWIm-Z04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197ac0e2bce2e35ac24ea35_u9NdNjpeKSjZPUTBc4fI3BIhjjyL1HWnJZ3f-yihRL1HcyWbdnqYUI6RZP2Ei-NL5qwZWrh50HjaqDSyMFjHxPu7zu0yrAj441VQkIrS-1Wk21RrWsQ2qHZKbbII2VO4amTWCFnf.png" alt='An graphic showing an alert saying "Low battery" "20% battery remaining"' width="335" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a good rule of thumb — your change will likely picked up if you will be able to notice it even if you lean back and squint your eyes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The right positioning
&lt;/h3&gt;

&lt;p&gt;A good practice is to design your interface to place key information close to the place where your users might be working on their task.&lt;/p&gt;

&lt;p&gt;For example. when somebody is filling out a form, make sure to display feedback right next to the place where somebody is editing data.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rQCXGAOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197ac4b66833757bad74b38_A-Lcoxzczowk5K3xO3zvPQs7em-KZVDBMd1xFiC610LZQUV62r5iSeCHjZilO0UmxDxhKOg04kDLW9h8YrI8rd1rmYMLGLP-MvXFrLp6FTwR9UbA7zp6Txozl2xF6kjULf18lG2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQCXGAOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6197ac4b66833757bad74b38_A-Lcoxzczowk5K3xO3zvPQs7em-KZVDBMd1xFiC610LZQUV62r5iSeCHjZilO0UmxDxhKOg04kDLW9h8YrI8rd1rmYMLGLP-MvXFrLp6FTwR9UbA7zp6Txozl2xF6kjULf18lG2s.png" alt="A graphic showing a personal info form with errors below the text inputs" width="331" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Animations
&lt;/h3&gt;

&lt;p&gt;Animated icons or feedback after an action moves somebody’s sight to the place where it is required. Thanks to that, any alterations will not go unnoticed.&lt;/p&gt;

&lt;p&gt;Remember not to overload your app with animations because there is a risk that a key shift will be missed among the chaos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In conclusion&lt;/strong&gt;, remember that your users need clear communication when something changes on a page, especially if this is a critical alert. The ways you can avoid change blindness are through clear signals, good positioning of those signals, and animating this signals when appropriate to make sure that there is a clear change happening for the user.&lt;/p&gt;

&lt;p&gt;You can take a deeper dive into &lt;a href="https://www.nngroup.com/articles/change-blindness-definition/"&gt;Change Blindness in this piece published by the Nielsen Norman Group&lt;/a&gt; and by checking out the dangers of change blindness in other cases like driving for example and how we are &lt;a href="https://cognitiveresearchjournal.springeropen.com/articles/10.1186/s41235-019-0165-4#Sec36"&gt;overly confident in our abilities to track and respond to changes.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ui</category>
      <category>ux</category>
      <category>design</category>
      <category>psychology</category>
    </item>
    <item>
      <title>Developing Performant Mobile Apps Part 3: Cross-Platform Apps</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Fri, 19 Nov 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/developing-performant-mobile-apps-part-3-cross-platform-apps-ah3</link>
      <guid>https://dev.to/itmagination/developing-performant-mobile-apps-part-3-cross-platform-apps-ah3</guid>
      <description>&lt;p&gt;There was once a time, when there were more mobile operating systems than just Android, and iOS. Some of you might remember Windows Phone, Firefox OS, or Samsung’s Bada. Out of the 3 niche platforms, only Microsoft’s OS enjoyed decent popularity at its height. Back in the day, when companies went primarily native, one extra platform to develop for meant so much more work for everybody.&lt;/p&gt;

&lt;p&gt;That is a part of a reason why we don’t have Windows Phone anymore. Third-party support was mostly negligible, because of all the extra resources required to target an additional platform for developers. A lose-lose scenario for both users, and businesses — because of all the money that was on this untapped market. Cross-platform development, even though not new by any means, is now in a state where it’s increasingly chosen as the go-to by more and more companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks
&lt;/h2&gt;

&lt;p&gt;There are few frameworks, that are standard choices for quickly developing quality apps, which we will cover. First, it is important to distinguish between the two main types of cross-platform frameworks. Even though they achieve the same goal, they do it in an entirely different way. There are the Web-based frameworks, such as Ionic, that, in the simplest terms, package web assets to apps.&lt;/p&gt;

&lt;p&gt;‍Then, there are frameworks, that make use of native elements. Examples of these frameworks include Microsoft’s Xamarin, and Facebook’s React Native. As it is often with life, there are shades of gray. This is where Google’s Flutter is. Flutter does not use native elements. Instead, it renders everything itself, thanks to the superfast Skia engine. &lt;/p&gt;

&lt;p&gt;When it comes to using JavaScript to create cross-platform apps, apart from React Native, you also have NativeScript, and Weex, though they are somewhat niche options. Your best bet in this situation is to go for the industry-standard, Facebook’s framework.&lt;/p&gt;

&lt;p&gt;In this article, we will be talking about Xamarin (and Xamarin.Forms), React Native, and Flutter because they are the most popular in their category. We will also be explaining how the name “Xamarin” is the song of the past, and what comes next.&lt;/p&gt;

&lt;p&gt;Let’s dive in!&lt;/p&gt;

&lt;h3&gt;
  
  
  Xamarin and .NET
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M96BMJ9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djmanad6npxe31qg2ugr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M96BMJ9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djmanad6npxe31qg2ugr.png" alt="Xamarin, and Xamarin.Forms's architecture" width="880" height="1207"&gt;&lt;/a&gt;&lt;br&gt;
Xamarin is the framework for developing apps with C#, and F# programming languages. In your apps, you may use almost all the underlying native APIs from the comfort of either C# or F#. Should some feature you are looking for be missing, and you can easily call Java, C++, C or Objective-C code, giving you a wide range of options. &lt;/p&gt;

&lt;p&gt;Xamarin is technically divided into three subprojects. There is Xamarin.Android for Android development, Xamarin.iOS for… you guessed it, iOS development. Both of them are often referred to as Xamarin.Native. Then there is Xamarin.Forms for when you want to achieve maximum code reusability across the targeted platforms. The code governing interactions, and the actions, will be the same.&lt;/p&gt;

&lt;p&gt;The difference is in the code that determines how the user interface looks like. In one case, it’s specific to each platform. You have to write everything specifically for the platform you are targeting; iOS code will be different from the Android code. In Xamarin.Forms, almost 100% of the code that lays everything out on the screen is the same.&lt;/p&gt;

&lt;h4&gt;
  
  
  The future of Xamarin
&lt;/h4&gt;

&lt;p&gt;With .NET 6, some changes are coming regarding the structure of the projects. Xamarin.iOS, and Xamarin.Android will become .NET for iOS, and .NET for Android, respectively. Xamarin.Forms will become .NET MAUI, or .NET Multiplatform App User Interface. The name highlights the main focus of the platform: code reuse.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Native
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oa-anJfU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gkfwcwaq51hm784kkafo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oa-anJfU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gkfwcwaq51hm784kkafo.png" alt="React Native's Architecture" width="880" height="416"&gt;&lt;/a&gt;&lt;br&gt;
One person once said, that if something can be done using JavaScript, it eventually will. As JavaScript’s importance grew over time, it became more, and more, apparent. Facebook’s developers had a big part in that, with their release of React, and React Native. The big benefit is the reuse of code that dictates what happens behind the scenes between the web app and the native app.&lt;/p&gt;

&lt;p&gt;Twitter took things even further. What they’ve done is, adapt their mobile app using &lt;a href="https://github.com/necolas/react-native-web"&gt;‘react-native-web’&lt;/a&gt; to run in the browser. It effectively allows them to use their mobile app as a web app as well, with less work than it would have been otherwise required.&lt;/p&gt;

&lt;p&gt;React Native is by far the most popular solution to develop mobile applications using JavaScript. For a good reason. For better or worse, React is a standard choice for web development purposes. It is mainly thanks to its flexibility, and an overwhelming third-party support. The transition to React Native is a smooth one; much smoother than if you required them to learn e.g. Xamarin all of a sudden.&lt;/p&gt;

&lt;p&gt;How does React Native work? Your JavaScript code gets executed, but it does not “speak” to the phone’s platform directly. That is handled by the bridge that talks to the native modules. &lt;/p&gt;

&lt;p&gt;The solution enjoys huge 3rd party support, even from companies such as Microsoft. Not long ago, the company from Redmond shared their React Native for Windows, and macOS. The company even switched to the JS framework for their &lt;a href="https://www.theverge.com/2020/8/3/21352695/xbox-microsoft-store-redesign-faster-better-navigation"&gt;wider UWP app development purposes.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developing user interfaces can be somewhat painful. This is a tedious task since everything you do, you need to do yourself. The set of shipped elements available out of the box is underwhelming, at best.&lt;/p&gt;

&lt;p&gt;There is one thing to note in this section. As of the time of the writing, the library’s version is at 0.66. This means, that there was no stable release yet. Even though it’s battle-tested, and used by the biggest of the biggest, we are still waiting for the version 1.0.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flutter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2grJ4-Hz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vw6k16nbdi1p3xq3swdm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2grJ4-Hz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vw6k16nbdi1p3xq3swdm.png" alt="Flutter's Architecture" width="880" height="416"&gt;&lt;/a&gt;&lt;br&gt;
Flutter is one of the default options for creating apps for the upcoming Google’s new Operating System Fuchsia. It is pretty impressive, what can the framework do today. You may target iOS, Android, Linux, Windows, macOS, and the web using one codebase.&lt;/p&gt;

&lt;p&gt;The problem that many companies face is the “exotic” language that you are forced to use. It is the Dart programming language. Dart is not bad in itself. It’s a pretty good, and it’s relatively easy to pick up for Java, JavaScript, or C# developers. As with every new environment, however, the issue is that it forced everybody to learn a new way of doing things, again. One cannot reliably use Dart on the server side, as well, as it's the case with JavaScript, and C#.&lt;/p&gt;

&lt;p&gt;Perhaps the greatest feature is the rendering engine, Skia. It is a complete 2D engine for rendering text, images, and more. It promises smooth 120 frames per second (!) without difficulties in the world where many frameworks aim “only” for 60 frames per second (in reality, 60fps is more than enough, however). Another great advantage is the enormous depth of provided elements out of the box. Material Design or not, it’s impressive.&lt;/p&gt;

&lt;p&gt;Now that we know what are the main solutions available, what are the pros and cons of cross-platform mobile app development? Even though the solutions we mentioned achieve their goals differently, they share about the same pros and cons. &lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and Cons of the Cross-Platform Approach
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;p&gt;Cross-platform apps sit right in the middle between native apps, and PWAs in terms of all the aspects. There is a reason why, when facing uncertainty, people flock to the safe middle. You are likely choosing one of the safest options, without experiencing extreme effects.&lt;/p&gt;

&lt;p&gt;Exactly, so your apps will be quick. Not quite as quick as native apps, not quite as slow as Web-based solutions. You won’t have to pack too much additional assets required, but you still will have to ship some; in case of Xamarin is the Mono code. Even then, the apps will be quick enough. Your users will likely not notice any “hiccups”, should they occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;p&gt;Sadly, not all native APIs are accessible to you. Usually, that won’t be a problem, however. If something is not available by default, there are third-party packages available for you. An excellent example for the community support is React Native. The amount of additional functionality brought to you by the community is overwhelming. &lt;/p&gt;

&lt;p&gt;With great power comes great responsibility. 3rd party packages can introduce numerous bugs and security flaws. Let’s look at React Native, again. It’s not uncommon for vulnerabilities to pop up in npm packages.&lt;/p&gt;

&lt;p&gt;In September 2021, &lt;a href="https://www.npmjs.com/package/pac-resolver"&gt;a package&lt;/a&gt; enjoying big popularity got hacked, allowing for the execution of arbitrary code. Another example features the ua-parser-js package where a malicious party uploaded to the central base where it was downloaded by the unsuspecting developers. It enabled hackers to download additional files to your PC.  Even though all the flaws were quickly fixed, the bad taste remains.&lt;/p&gt;

&lt;p&gt;We will note, once again, that an app’s speed is lower. Of course, as Unity games run pretty well highlighting the potential of high-performance cross-platform apps, they are slower than they could have been.&lt;/p&gt;

&lt;h2&gt;
  
  
  Xamarin vs React Native vs Flutter
&lt;/h2&gt;

&lt;h3&gt;
  
  
  React Native
&lt;/h3&gt;

&lt;p&gt;Each framework has their unique pros and cons as well. React Native will feel familiar to React developers, you use JavaScript and TypeScript to write apps, though you have to do everything manually unless you use 3rd party packages. The documentation is rather poor, though the community has got you covered.&lt;/p&gt;

&lt;p&gt;Again, we have to note that we are still waiting for the 1.0 release, which means we are yet to receive a truly stable version. Don’t be fooled, though. The biggest of the biggest rely on the framework to write apps, and it definitely is battle-tested.&lt;/p&gt;

&lt;p&gt;Examples of apps developed using React Native&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Soundcloud Pulse&lt;/li&gt;
&lt;li&gt;Facebook&lt;/li&gt;
&lt;li&gt;Instagram&lt;/li&gt;
&lt;li&gt;Walmart&lt;/li&gt;
&lt;li&gt;Bloomberg&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Flutter
&lt;/h3&gt;

&lt;p&gt;Flutter is an excellent project, wowing everybody with the speed of development, and the breadth of user interface elements available right out of the box. Apps are lightning speed as well. Sadly, the Dart programming language can be a bit of an obstacle. Concerning the design system, you are locked in to Google’s Material Design. While it is a flexible design system, it’s necessary to keep this in mind.&lt;/p&gt;

&lt;p&gt;Examples of apps developed using Flutter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;eBay Motors&lt;/li&gt;
&lt;li&gt;Tencent Apps&lt;/li&gt;
&lt;li&gt;My BMW&lt;/li&gt;
&lt;li&gt;Google Pay&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Xamarin
&lt;/h3&gt;

&lt;p&gt;Xamarin, or should we say .NET for iOS/Android and .NET MAUI, are great for big enterprises — C# is an immensely popular language already. The ability to develop for a multitude of platforms using the same platform is a great benefit. Being highly opinionated is always a good aspect in environments, where your product will be developed by many developers over many years, often without documentation.&lt;/p&gt;

&lt;p&gt;One has to admit, however, that .NET isn’t as loved as the other two. Sure, .NET Core was the most loved platform in 2020, according to Stack Overflow. Xamarin, specifically, was not as lucky, placing much lower than Flutter (which came in third), and React Native. It was not particularly highly desired. &lt;/p&gt;

&lt;p&gt;Examples of apps developed using Xamarin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bitwarden&lt;/li&gt;
&lt;li&gt;The World Bank&lt;/li&gt;
&lt;li&gt;Fresh Direct&lt;/li&gt;
&lt;li&gt;Microsoft News&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;One thing is certain. No matter which one of these frameworks you pick, you will be able to develop a quality app, should you follow the appropriate process. If we are to make recommendations, we would definitely recommend React Native, and Xamarin, without hesitation. The nuances of all the approaches are far too deep to be discussed in a single article, however. If you have any more questions about the topic, feel free to contact &lt;a href="https://www.linkedin.com/in/marcin-dabrowski-itm/"&gt;Marcin Dąbrowski, our Chief Innovation Officer.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apps</category>
      <category>xamarin</category>
      <category>react</category>
      <category>flutter</category>
    </item>
    <item>
      <title>ITMAGINATION Is Certified As A Great Place To Work® For The Third Year In A Row!</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/itmagination-is-certified-as-a-great-place-to-workr-for-the-third-year-in-a-row-2ll1</link>
      <guid>https://dev.to/itmagination/itmagination-is-certified-as-a-great-place-to-workr-for-the-third-year-in-a-row-2ll1</guid>
      <description>&lt;h2&gt;
  
  
  Our team voted, and the results are in! ITMAGINATION is certified as a Great Place To Work® for the 3rd year in a row! 🎉
&lt;/h2&gt;

&lt;p&gt;The Great Place To Work Survey is an anonymous survey sent to our team every year around October, where we collect their feedback and see what we are doing well and what we can do better. This year, we have been awarded the Great Place to Work® certificate for the third time in a row, after becoming a laureate of the Best Workplaces™ award in Poland for 2021 — and we couldn't be happier!&lt;/p&gt;

&lt;p&gt;“The Great Place To Work survey is an essential part of our feedback collection and continuous improvement processes at ITMAGINATION” says Dawid Łaziński, Co-Founder and Board Member at ITMAGINATION.&lt;br&gt;
‍&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The Great Place To Work Certification is a clear indicator &lt;br&gt;
that we are listening to our team and improving based on concrete and anonymous feedback — as well as continuing to do what they appreciate in the workplace at ITMAGINATION.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a prestigious award from the American institute, which, as a result of assessing the feedback of our employees, shows that we have a great atmosphere and favorable working conditions in our House of Innovators. Similarly to last year, we will soon release more detailed results about areas where we excelled, as well as which areas we will be improving over the next year — stay tuned!&lt;/p&gt;

&lt;h2&gt;
  
  
  Join our team!
&lt;/h2&gt;

&lt;p&gt;Take a look at our open job opportunities &lt;a href="https://www.itmagination.com/careers"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>hr</category>
      <category>jobs</category>
      <category>work</category>
    </item>
    <item>
      <title>Meet the Innovators with Krzysztof Nowocin</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Fri, 05 Nov 2021 13:56:10 +0000</pubDate>
      <link>https://dev.to/itmagination/meet-the-innovators-with-krzysztof-nowocin-4b01</link>
      <guid>https://dev.to/itmagination/meet-the-innovators-with-krzysztof-nowocin-4b01</guid>
      <description>&lt;p&gt;In this podcast episode, &lt;a href="https://www.linkedin.com/in/krznowocin/"&gt;Krzysztof Nowocin&lt;/a&gt;, Data Developer at ITMAGINATION, joins us talking about his hobbies, work-life balance, remote work, and his career path moving from System Admin to Junior Data Developer and then to Data Developer.&lt;/p&gt;

&lt;p&gt;Interested in joining the team? &lt;a href="https://www.itmagination.com/open-jobs"&gt;We have many open opportunities available&lt;/a&gt; to develop unique data solutions!&lt;/p&gt;

&lt;h2&gt;
  
  
  Are you more of a podcast person? Listen to the episode on Spotify!
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="100%" height="232px" src="https://open.spotify.com/embed/episode/4GcKzuVeCGOEr9c28W5Y3L"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Read The Transcript
&lt;/h3&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;Aleksander: Hello, and Welcome. My name is Aleksander Jess. I am a marketing specialist at ITMAGINATION, and today I'm joined by KrzysztofNowocin, who is a Data Developer at ITMAGINATION.&lt;/p&gt;

&lt;p&gt;Hello,  Krzysztof. How is the sea today?&lt;/p&gt;

&lt;p&gt;Krzysztof: I hope that it's warm, probably today I will walk by the sea, so I can check the temperature.&lt;/p&gt;

&lt;p&gt;Aleksander: Warm by the Polish standards or by normal standards? Because that's a “warm” by the Polish ones is 15 [degrees Celsius]. And you're calling in from Gdynia, right now.&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah. I live here and I work from here.&lt;/p&gt;

&lt;p&gt;Aleksander: So, that's somewhat remote work for the win. If you had to describe yourself using three words, what would they be?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, the hardest question at the beginning?&lt;/p&gt;

&lt;p&gt;Well, I guess that I like to skill up. I don't like staying at home too much. As far as you said, I have a sea nearby, so I really like to walk [along the coast]; do all the other activities probably; also spend some time on my hobbies.&lt;/p&gt;

&lt;p&gt;Aleksander: Right. You like to spend time outside, so I guess that we're not playing any time soon…&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, unfortunately, I guess that's as [long] as the weather is fine, I would prefer to have fun, walk over [the neighborhood], by the city, go to [a café] outside, rather than staying home and just playing computer games. But I guess that in two months, I will join you.&lt;/p&gt;

&lt;p&gt;Aleksander: Ok, I'll take your word for it. So, you've been actually living by the sea, all your life. Are you doing any water sports after work?&lt;/p&gt;

&lt;p&gt;Krzysztof: Well, I have to say that I like to test everything, so I have an open water diver license; I've tried some water skiing by the lake and soon. But if I had to be honest, it didn't go as well. So, I prefer all the of the sports where you can wear your shoes rather than the water ones.&lt;/p&gt;

&lt;p&gt;Aleksander: Understood. Understood. You also are quite a photographer, aren't you?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, I think photography is a pretty cool hobby. You can do[a lot] with your camera… There are [many] possibilities. You can make a portrait… You can take a landscape… Sports… Long exposure… And so on. So, I like to have fun and [use] different, different, techniques, so, it's never boring.&lt;/p&gt;

&lt;p&gt;Nevertheless, I'm just an amateur photographer, so sometimes, from time to time, I go, and help my friends take the photos of their weddings, of their any other celebrations, and just having fun.&lt;/p&gt;

&lt;p&gt;Aleksander: I'm hearing [numerous] possibilities and a lot of different things going on because you do a lot of sports. You said you like outdoors, photography… Is your work life the same as your private life? Many things going on?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, I think [so], yes, my journey with [being a] data developer started with, I may say, like a back end where I was preparing some data warehouses, some ETL processes. One day, I've just had a chance to pick up a Power BI project where I had to prepare something more…some UI/UX skills and had to test it myself.&lt;/p&gt;

&lt;p&gt;So, I've done a report, done another report, and each [and every] next [was] a bit better. This tool gives you, just like in photography, many possibilities to present the data in many, many ways…&lt;/p&gt;

&lt;p&gt;Aleksander: …and getting better each time you prepare something?&lt;/p&gt;

&lt;p&gt;Krzysztof: Getting better and better. The tool is being upgraded [each]month, so you need to, well… Follow the latest updates, to, well… To prepare the best solution for the banks.&lt;/p&gt;

&lt;p&gt;Aleksander: How is the tool getting updated?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, so each month they bring some new tools and new features; some of them are just in preview, so you can test [them]. It's not the final release, but you can use [them] on the report.&lt;/p&gt;

&lt;p&gt;There is also… Each month, they present them in a cool YouTube video, so I try to follow them and know about the latest, the latest things. For example, last month, they added a new possibility; some conditional formatting which was missing and some visuals I was using. So, it's pretty fine. And stuff like this.&lt;/p&gt;

&lt;p&gt;Aleksander: Would you say you have a chance to use new features at work often or… How is it?&lt;/p&gt;

&lt;p&gt;Krzysztof: Well, it's not that often, I may say because some big features which were presented [towards the end] of 2020 which I was using. We were waiting with the client for the feature, which enabled two methods of work- which was connecting the live connection to the data and an import, which wasn't available but was really missing.&lt;/p&gt;

&lt;p&gt;We were waiting for this feature to be present for like three or four months because it was announced that it will [appear]. Finally, [the new release] came with it, so we had the chance to try it out.&lt;/p&gt;

&lt;p&gt;Aleksander: Ok, I see. So, you are now a data dev, and it seems like you're loving it, but you weren't a data dev to begin with because you actually began as a network admin.&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, I did. I was working in my previous job, as I may say, a System Administrator where I. Well, basically everything that should be connected to electricity and work was on my shoulders.&lt;/p&gt;

&lt;p&gt;So, I was doing stuff: from switching the keyboards up, [through] starting Windows [machines] up, [to] the administration of some small network, area storage and stuff like this. So if you are doing it for a few years, you are getting bored, I might say because you do things again, and again, and again, so you are looking for some new possibilities.&lt;/p&gt;

&lt;p&gt;That's why I was thinking about [making]  some change. And [when] my newest friend started [to work as] data developers, well, uh, I spoke with him. He told me about how does it look like. I decided that maybe I will try out myself at working in this profession as well.&lt;/p&gt;

&lt;p&gt;Aleksander: And you're at ITMAGINATION for three and a half years now, aren't you? How did it start? How did the journey at ITMAGINATION start?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah. Basically, the fact I was speaking about is one of the employees which is working a few months more than I am. So, he basically told me about the job, as I've said previously. So, I've just earned one Microsoft Certificate to [showcase]some skills in [presenting] data, and I've [sent my résumé]. That's how it started.&lt;/p&gt;

&lt;p&gt;Aleksander: Ok, I see so. He also received some monetary bonus for a referral. For a successful one.&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah. He did, that's why he was probably very pleased to grab my CV, but he described me as a good person, as I've heard from the manager[during the interview]. They found out that I was a good candidate, I hope. He also got the bonus.&lt;/p&gt;

&lt;p&gt;Aleksander: So you began as a Junior Data Dev, and now you are a DataDev. How was it? How was the transition?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, I had to say that I had an awesome, awesome team[when] I started, I had a few friends. I could really ask for help. They taught me a lot of different, different things about the data, about SQL, all about the SIS, which is this ETL [Extract, Transform, Load] tool I was speaking about, previously.So, I had the chance to skill up really fast thanks to the people I've met in the company. So it is pretty awesome.&lt;/p&gt;

&lt;p&gt;If I had to be honest, I started to be a Data Dev [starting out as a] Junior in just a few months, so it was quick. But I guess that I have to thank the people I've met here.&lt;/p&gt;

&lt;p&gt;Aleksander: Because from what I've read on LinkedIn, you have two recommendations and both of them are talking about being a team player. And you're a team player, both in private and in work life as well. Well, how important is a good team for you?&lt;/p&gt;

&lt;p&gt;Krzysztof: Yeah, I think that I think having a team is critical because it often happens that something doesn't go as planned in the project. If you have a good team, know how to shuffle your tasks between the people; some of them are really doing everything to make everything work or sometimes stay a bit longer to end the task, so you can end your tasks the next day, it's very, very important. Also, sharing the knowledge; solving the problems is everything that makes up way much easier when you have team members that can help you.&lt;/p&gt;

&lt;p&gt;Aleksander: Right. I totally agree with you. And on that note, it's time to end. Krzysztof, thank you so much for your time.&lt;/p&gt;

&lt;p&gt;Krzysztof: Thanks a lot. Have a good day.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;p&gt;Aleksander: It was a pleasure to talk to you, and have a good day as well. Cheers.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>bigdata</category>
      <category>career</category>
    </item>
    <item>
      <title>Next.js 12 - 5 Changes You Should Pay Close Attention To</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Tue, 02 Nov 2021 20:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/nextjs-12-5-changes-you-should-pay-close-attention-to-1n8n</link>
      <guid>https://dev.to/itmagination/nextjs-12-5-changes-you-should-pay-close-attention-to-1n8n</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zi4hXH8y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6181642e80c4c99322bef67a_NextJS%252012%2520Lighter%2520Smaller-p-500.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zi4hXH8y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/6181642e80c4c99322bef67a_NextJS%252012%2520Lighter%2520Smaller-p-500.jpeg" alt="Next.js 12" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When developing a website, configuring your framework or library used to be a headache. You used to have to enable numerous crucial features manually, which took some time and a whole lot of patience.&lt;/p&gt;

&lt;p&gt;Next.js was created to simplify the development process, and developers really appreciated that. It is the most popular framework in its category for React, and perhaps the most popular hybrid web framework in general. &lt;/p&gt;

&lt;p&gt;Last week, Vercel (the company behind Next.js) shared that they are releasing Next 12 — the next major upgrade. There are a few features that should make the Developer Experience (DX) even better, while there are also some novelties that allow for entirely new solutions to be developed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rust Compiler
&lt;/h2&gt;

&lt;p&gt;Compiling a big website can take a lot of time. Vercel realized it, and introduced a new compiler written in Rust, which is faster than the predecessor. Based on SWC this move is a part of a broader movement towards tools written in Go (e.g., esbuild), and Rust (the aforementioned SWC), as you can easily compile code in these languages to lightning-fast WebAssembly.&lt;/p&gt;

&lt;p&gt;The speed is something to admire. The company shares that Fast Refresh is now three times as fast, while builds take five times less time. Comparing SWC to Babel alone, the Rust-based tool is a staggering 17 times quicker. In case you were wondering what codebase was, the benchmark run on, the results were “from using the new Rust compiler with large Next.js codebases.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Middleware
&lt;/h2&gt;

&lt;p&gt;A new introduction to Next.js, Middleware, gives you an opportunity to call code before a request is completed. Thanks to that, you may modify the response by “rewriting, redirecting, adding headers, or even streaming HTML.”&lt;/p&gt;

&lt;p&gt;This gives you a lot of space to maneuver in, and a chance to do a lot, including: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A/B testing&lt;/li&gt;
&lt;li&gt;Bot protection&lt;/li&gt;
&lt;li&gt;If your site is non-compliant with GDPR, you may restrict traffic from the EU&lt;/li&gt;
&lt;li&gt;Analytics on the server side&lt;/li&gt;
&lt;li&gt;Much, much more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It all works out of the box, of course, and Middleware will work on the Edge as well, with few restrictions on what is available in this environment for you. For details, please refer to this page from the official documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Exactly Does “Edge” Refer To?
&lt;/h3&gt;

&lt;p&gt;Speaking of the Edge (no, not the guitarist from U2): in the simplest terms, it’s computing done near the request to cut down on latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native ES Modules Support
&lt;/h2&gt;

&lt;p&gt;ES Modules are nothing new. In fact, they were introduced all the way back in 2015. It took a while to adopt them, however. Node.js started to natively implement ES Modules in March 2021! Browsers were a bit faster. Firefox was the last major browser to adopt them in 2018 with Firefox 60.&lt;/p&gt;

&lt;p&gt;The new modules are a big deal because they enable developers to ship less code, making your apps snappier. ES modules also run in the “strict” mode, outputting some smaller errors that otherwise JavaScript would not mind. When using CommonJS modules, developers had a choice whether to use it or not. There are of course many other benefits of using ES Modules over CommonJS; however, an in-depth look is beyond the scope of this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic URL Imports
&lt;/h2&gt;

&lt;p&gt;At the first glance, many will miss this new feature. Seemingly unimportant, this does change a lot in the JavaScript &amp;amp; TypeScript ecosystem. While NPM as a central store for JS packages worked, and works, some developers might opt out of its monopoly, preferring to store their packages elsewhere. Here is where Content Delivery Networks (CDN) come in. &lt;/p&gt;

&lt;p&gt;In short, instead of pulling packages from the centralized store, you may now install them from wherever you want. Next.js then caches them, and they are ready to go.&lt;/p&gt;

&lt;p&gt;The only requirement is for you to let the framework know what is the domain of the CDN you want to use, and it’s done!&lt;/p&gt;

&lt;p&gt;This is how to do it:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OFO2sE9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/618160fdba0da58faf5bc49e_Ma4efwZLMhJrvAGBlLdZursPedrCPZQrmNBAKWTcLxS3yyKeemgI-KswjArnmUcpKjJt-49pBr3IpuPm_g5IBKbqKPoYLwF-2siEoBpzasKP2g2Ukyf6eS5uEHDvqR97kREmxC7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OFO2sE9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://global-uploads.webflow.com/601be0f0f62d8b2e2a92b830/618160fdba0da58faf5bc49e_Ma4efwZLMhJrvAGBlLdZursPedrCPZQrmNBAKWTcLxS3yyKeemgI-KswjArnmUcpKjJt-49pBr3IpuPm_g5IBKbqKPoYLwF-2siEoBpzasKP2g2Ukyf6eS5uEHDvqR97kREmxC7l.png" alt="Dynamic URL config" width="880" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing for React 18
&lt;/h2&gt;

&lt;p&gt;React 18 will bring numerous new features including Server Components, Concurrent Rendering, and Automatic Batching. All three of them aim to make React snappier, and lighter; the opponents of the library often said that Facebook’s (Meta’s) creation is too heavy and too slow for what it’s doing.&lt;/p&gt;

&lt;p&gt;If you want to take a look at the new features of React 18, go to our GitHub repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Server Components
&lt;/h3&gt;

&lt;p&gt;Perhaps the most “cryptic” change coming to the newest major update of the front-end JavaScript library are the Server Components. Vercel also mentioned them in their presentation as one of the main features. Why? What are the benefits? There are many. First, they reduce the bundle size. By quite a lot, actually. Let’s say you want to render markdown on your website. Simple enough. You need to sanitize markdown, and then render it. For markdown, we have “remark”, and for sanitation, we either have “sanitize-html” or “dompurify.” That used to require additional ~29 to ~66kb. With the server components, the additional JS size goes down to zero. &lt;/p&gt;

&lt;p&gt;Additionally, we can load data directly from the server. We don’t have to wait for the client to request some data, and later to load it. Web apps will become faster and respond quicker. This is a win for the internet. &lt;/p&gt;

&lt;p&gt;Although Server Components sound like Incremental Static Generation that Next.js allowed for, for some time now, ISR will most likely not get deprecated, and the two APIs will coexist together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Changes
&lt;/h2&gt;

&lt;p&gt;As is sometimes the case with major updates, there are some breaking changes the team behind Next.js decided to implement. Luckily, more often than not, they are not going to cause any problems to developers. &lt;/p&gt;

&lt;p&gt;The one change that might become an issue is updating Webpack from 4 to 5. As the team wrote on their blog, they have “worked closely with the community to ensure a smooth transition to webpack 5.”&lt;/p&gt;

&lt;p&gt;A few minor changes that should not impact you too much is that there is no need to set target in next.config.js anymore. The option had been introduced in Next 8, though the team quickly realized it was not ideal, creating @vercel/nft. It detects what code is necessary, automatically.&lt;/p&gt;

&lt;p&gt;The other two breaking changes is that next/image now uses a span as the wrapping element instead of a div, and the minimum Node.js is now 12.22.0. This is due to the native ES modules support.&lt;/p&gt;

&lt;p&gt;One thing that was not mentioned, is the breaking change in removing the possibility to switch React for Preact. It used to work without a problem in Next 11, while in Next 12 it may cause cryptic 500 errors. We do not recommend doing that, anymore.&lt;/p&gt;

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

&lt;p&gt;Next.js enables developers to write quality React apps quicker. The new major update won’t disappoint React developers, and it will most likely be accepted with open arms. Should you want to try out some new features yourself, we have a project you can clone in no-time. Visit our repository by clicking this link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Like developing React apps? We're hiring!
&lt;/h2&gt;

&lt;p&gt;Do you like writing React apps, and think you are one of the best in the area? Do you like new technologies? See our &lt;a href="https://www.itmagination.com/open-jobs"&gt;open jobs&lt;/a&gt; — we work with the biggest companies in the world to deliver great web apps.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>javascript</category>
      <category>programming</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Solutions for Creating Mobile Apps. Part 2: Native Apps</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Tue, 02 Nov 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/solutions-for-creating-mobile-apps-part-2-native-apps-5b15</link>
      <guid>https://dev.to/itmagination/solutions-for-creating-mobile-apps-part-2-native-apps-5b15</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7m1qJRtI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcv3cm6xr1qwik7dun1t.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7m1qJRtI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcv3cm6xr1qwik7dun1t.jpeg" alt="A phone on a laptop with phone's home screen visible" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern mobile app development began with the first iPhone. Even though &lt;a href="https://www.itmagination.com/blog/cross-platform-mobile-apps-pwa"&gt;Progressive Web Apps&lt;/a&gt; were the first to be proposed for the device, they had some pressing problems. They were sluggish, and it was hard to create native-looking interfaces.&lt;/p&gt;

&lt;p&gt;Apple released a remedy quickly after their announcement: an iOS Native SDK. Fast-forward to 2021, and creating native apps is the default. They are simply faster, and more performant than their non-native rivals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed = Better User Experience
&lt;/h2&gt;

&lt;p&gt;Speed is the ultimate feature of all apps. Mobile apps that can steadily maintain the steady 60 frames per second threshold without any rendering lags feel the best. &lt;a href="https://lawsofux.com/doherty-threshold/"&gt;One has to ensure any breaks are not longer than 400 milliseconds&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Naturally, the easiest way to achieve the goal is to use the programming language that will be evaluated directly by the phone’s OS. In other cases, your instructions have to be first translated to get picked up. This is a rather costly process, and it is not the fastest.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Generation of Languages
&lt;/h2&gt;

&lt;p&gt;Objective-C and Java are not the most well-liked languages in the world. In the most recent &lt;a href="https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved"&gt;Stack Overflow survey results from 2020&lt;/a&gt;, 44% of developers declared they “loved” Java, with Objective-C earning a measly 23%. Respondents count as loving the language if they are “developing with the language […] and have expressed interest in continuing to develop with it.” &lt;/p&gt;

&lt;p&gt;In comparison, Kotlin earned a respectable 62.9%, with Swift earning 59.5%. The language from JetBrains fixes many issues that plagued Java, such as the fact that the newer language handles “null” values much better, and the fact that one can avoid writing a lot of “boilerplate” code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift
&lt;/h3&gt;

&lt;p&gt;Swift can also be seen as a big step forward when comparing it to its predecessor, Objective-C. For one, the language is statically typed, which can catch bugs ahead of time. Furthermore, the company behind the language shares that the new language is &lt;a href="https://www.apple.com/swift/"&gt;up to 2.6 times faster&lt;/a&gt; than the previous one. &lt;/p&gt;

&lt;p&gt;Additionally, Apple is constantly improving the language. This year, during the WWDC, the legendary company from Cupertino has announced a few exciting features of the language and the wider iOS development ecosystem. The language utilizes memory better now. It will automatically reclaim memory quicker than before. &lt;/p&gt;

&lt;p&gt;You may now write async/await code, making non-blocking code easier to write. Three, and the “structured concurrency” (concurrency is referring generally to the execution of code at the same time), and the improvements around the area will surely excite all Swift developers. The new additions allow for safer, and problem-free implementation of faster apps. &lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin
&lt;/h3&gt;

&lt;p&gt;We have talked about Kotlin in the past — Jan Radzikowski, Android Developer at ITMAGINATION has shared his positive opinion on JetBrains’s programming language in the past &lt;a href="https://www.itmagination.com/newsletters/360-it-check"&gt;in our weekly series 360° IT Check&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would say that Kotlin suits me much better than Java, but I’m speaking from the Android Dev point of view. The first benefit that comes to my mind is legibility. Kotlin is quite concise and could be used in such a manner that you can read it almost as a novel.&lt;br&gt;
‍&lt;br&gt;
Another advantage Kotlin has over Java is that null references are controlled by the [Kotlin's type] system (NullReferenceException anyone?). You don’t have to annotate them at all.&lt;/p&gt;

&lt;p&gt;From the specifics, there are no raw types, which in my opinion makes the language more consistent. What else?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambdas and inline functions&lt;/li&gt;
&lt;li&gt;Extension functions! - they make a huge difference and improve  readability and coding speed (when used correctly, of course)&lt;/li&gt;
&lt;li&gt;The concept of primary constructors&lt;/li&gt;
&lt;li&gt;Data classes&lt;/li&gt;
&lt;li&gt;Objects and how Kotlin deals with Singletons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To end with, coroutines are a major benefit. They are a great way to replace the RxJava library and to be able to write easy-to-read and thread-safe asynchronous code.&lt;br&gt;
The takeaway from this section is simple — the native development experience is improving constantly, thanks to the new languages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Full Feature Set of Devices
&lt;/h2&gt;

&lt;p&gt;Not all APIs are available to developers writing PWAs or hybrid apps. Every so often, one has to find an alternative solution to their problem, or write native code. All in all, at the end of the day, if you are forced to develop natively, then you might as well go all in, right? Especially that we are not talking about access to advanced functionality. E.g., to implement calendar event creation in React Native, you have to call Swift and Kotlin code from your JavaScript — there is no other way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application of Native Interface Elements and Practices
&lt;/h2&gt;

&lt;p&gt;As we mentioned before, your users will be the most familiar with the design of other apps, not yours.  One can easily leverage that fact by designing your app to give users the same feedback, work similarly, and utilize the same visual patterns. Where do people spend the most time? Inside system apps, of course. &lt;/p&gt;

&lt;p&gt;If you are writing code, using native patterns is the default option. By default, your app will feel much more familiar; in-place. &lt;/p&gt;

&lt;p&gt;This is not so obvious when you are writing an installable web app, or a cross-platform app. Web apps cannot use native UI elements, while some cross-platform frameworks, such as Flutter, forgo the option of native elements, in favor of rendering custom components, using Flutter’s Skia engine. Of course, there is React Native, which uses native elements; however, it does not implement all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Double the Code, Double the Updates
&lt;/h2&gt;

&lt;p&gt;If you are planning to embrace a truly native approach, it means you will have to write the same app twice. Once using Swift, and once using Kotlin. Of course, algorithm implementations can be more or less the same across languages, and therefore you do not spend literally twice the time on development. You may experiment with using data that your apps receive from a server as a way to determine what’s on the screen.&lt;/p&gt;

&lt;p&gt;A few years ago, Airbnb &lt;a href="https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab"&gt;described how they have experimented with server-driven apps as part of a series on “[s]unsetting” React Native, and moving to the native development&lt;/a&gt;. Server-driven apps are apps that render screens based on the data that phones receive from the backend. As a result, your code on all platforms looks, and feels more or less, the same while cutting down a lot of time on development. That is about as far as good news goes. Platform-specific bugs still will occur, creating different problems on each OS, and the need to hire platform-specific developers still will drive the costs up.&lt;/p&gt;

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

&lt;p&gt;Native apps will be the fastest. They will also feel the most familiar to your users. It does not come without certain trade-offs. The development time will certainly be longer. They are also much more expensive to develop, as you need more people, and resources to write the same app twice.&lt;/p&gt;

&lt;p&gt;Native apps, Progressive Web Apps, or Hybrid Apps — &lt;a href="https://www.itmagination.com/services/custom-software-development"&gt;we are here to help you develop your app.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apps</category>
      <category>programming</category>
      <category>kotlin</category>
      <category>swift</category>
    </item>
    <item>
      <title>Creating Cross-Platform Mobile Apps. Part 1: PWAs</title>
      <dc:creator>ITMAGINATION</dc:creator>
      <pubDate>Thu, 21 Oct 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/itmagination/creating-cross-platform-mobile-apps-part-1-pwas-1o0c</link>
      <guid>https://dev.to/itmagination/creating-cross-platform-mobile-apps-part-1-pwas-1o0c</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FuzUEzQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ieavpcs6o04aw5ub9mz9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FuzUEzQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ieavpcs6o04aw5ub9mz9.jpeg" alt="A phone with its home screen displayed" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
With Mobile Phones increasingly speeding up over the years, we have long ago reached the point when they can run regular versions of websites without a hiccup. There is, however, a clear advantage of having your clients install your apps on their phones. For one, they are always one tap away.&lt;/p&gt;

&lt;p&gt;There are so many solutions to the problem of developing mobile apps, that we decided to go ahead and walk you through all of them one by one. The problem we will be solving is — your business wants to develop a cross-platform mobile app. What should you do?&lt;/p&gt;
&lt;h2&gt;
  
  
  Progressive Web Apps (PWAs)
&lt;/h2&gt;

&lt;p&gt;We know, we know. They are technically not mobile apps. We will count them as such, however, because an increasing number of native APIs are available for web apps, they are installable, and run offline. We are not the only ones to think that, too. Little do people know that PWAs is what Steve Jobs envisioned for iPhone apps during his presentation in 2007. Fourteen years ago, Apple’s CEO foresaw the future.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ZlE7dzoD6GA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Of course, we know how everything turned out — Apple did release an iOS SDK to develop “native” apps, with the App Store launching in 2008. The decision to initially double down on web technologies for apps was deemed a “blunder” by Forbes. Steve Jobs’ could have been seen as controversial, sure. At the time, phones were not powerful enough to do what developers envisioned using JavaScript, while the language was also not in the best shape back then.&lt;/p&gt;

&lt;p&gt;Fourteen years is a lot of time, however, and we do definitely see that — with phones often “rocking” eight cores, six gigabytes of RAM, and capable of running demanding software. Today they are now more than ready. Apple’s legendary CEO was simply ahead of his time — it’s a shame he did not live to see his vision become reality. A little glimmer of hope was Firefox OS — a niche and discontinued operating system that had apps written in JavaScript, only.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the benefits of PWAs, then?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Code Reusability To The Fullest
&lt;/h3&gt;

&lt;p&gt;There is often a key question — does one develop a web app or a mobile app first. The answer that PWAs provide is… &lt;strong&gt;why not both&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Creating apps that often share 100% of code is frequently a reality. There is simply no reason to adjust your code. You can prompt users to install your app in the same way on all platforms that Chrome runs on — Linux, Windows, macOS, Android, iOS… With one codebase. &lt;/p&gt;

&lt;h3&gt;
  
  
  No App Downloads
&lt;/h3&gt;

&lt;p&gt;The heading might feel misleading. How can it be that there are no app downloads, if clearly, one has to download the code for the website? That is true. Your users still have to download your website. There are a few key differences in this case, however. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are reducing the number of steps one has to take to install the app&lt;/li&gt;
&lt;li&gt;The size of the app is much, much smaller&lt;/li&gt;
&lt;li&gt;The app is easier to discover, and your users are not seeing your competition’s ads in Play Store, or App Store&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quicker Time to Market
&lt;/h3&gt;

&lt;p&gt;Before your product hits the market, there are very few metrics than the expected Time-to-Market. A true blessing is the ability to cut down on it, while not compromising on the quality of your solution too much. Especially, that all your team members can focus on one goal - completing the web app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform Independence
&lt;/h3&gt;

&lt;p&gt;Apple to a large degree (Google to a lesser one) has a monopoly on the market of software distribution on iOS devices via App Store, and Google Play Store. There are no real solutions to sideload apps on iPhones, in an effort to make the phones have airtight security for all. Installing apps on Androids from outside the official store is much easier, though the majority of users still choose the official way of getting apps.&lt;/p&gt;

&lt;p&gt;Companies big and small (Epic, Spotify, Basecamp, Protonmail, Deezer, OpenDataBot, and others) realized, and more than a year ago formed a “Coalition for App Fairness”. Its goal is to “advocate for freedom of choice and fair competition across the app ecosystem.”&lt;/p&gt;

&lt;p&gt;There is a way to distribute your app, that you control, from which you can collect all the profits, and which makes your app easily discoverable. What is it? Your website. PWAs do not face as many hurdles as native apps do, which is a big win. &lt;/p&gt;

&lt;h3&gt;
  
  
  Easy updates
&lt;/h3&gt;

&lt;p&gt;By having to run in a web browser, your apps can be updated each time your users connect to the internet whilst using them. This provides for an effortless and quick update process. You control the update policy through the cache (caching = saving your app in a temporary location for faster access) configuration. You can choose to serve your app: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache-only (not the best way)&lt;/li&gt;
&lt;li&gt;Network-only (not the best way)&lt;/li&gt;
&lt;li&gt;Cache falling back to the network (offline-first apps)&lt;/li&gt;
&lt;li&gt;Network falling back to the cache (apps that update frequently; the process can take a bit longer in case of a patchy internet connection)&lt;/li&gt;
&lt;li&gt;Cache then network (apps that update frequently; better user experience)
You may see the details, and example implementations of said approaches &lt;a href="https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Surely, the solution has to have some downsides, right? Yes, there are.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cons Of Using PWAs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Slower Than Native Apps
&lt;/h3&gt;

&lt;p&gt;The major reason why Steve Jobs and Apple backed away from embracing web technologies to the fullest was the lacking power. The speed was not enough. Developers had to switch to Objective-C instead. &lt;/p&gt;

&lt;p&gt;For Android, the language of choice was Java. The approach allowed for the creation of much faster apps, and, perhaps more importantly, opened up a steady stream of money to Google, and Apple.&lt;/p&gt;

&lt;p&gt;Even though the phones nowadays are on-par with performance with some desktop computers, native apps, or hybrid apps, are the more popular solution. One reason is the speed of execution, still. A website running on top of a browser will be slower even on the fastest of computers, anyway.&lt;/p&gt;

&lt;p&gt;With the interfaces running smoothly at 60fps, one has to wonder whether that still is a valid reason to forgo PWAs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Some Native APIs Still Not Built-In
&lt;/h3&gt;

&lt;p&gt;Even though Chrome can: access the contact book, access the native file system, implement NFC solutions (NFC is how, e.g., contactless cards work), and, handle Bluetooth connections;&lt;/p&gt;

&lt;p&gt;there are still numerous things it cannot do. Thanks to Project Fugu, the list of things that web developers cannot do is getting smaller, and smaller, luckily.&lt;/p&gt;

&lt;p&gt;Nevertheless, sometimes, developers have to pick up native SDKs to be able to solve their problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  People Are Not Used To Installing Apps In-Browser
&lt;/h3&gt;

&lt;p&gt;One “Law of User Experience” says that:&lt;/p&gt;

&lt;p&gt;Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know.&lt;br&gt;
In practice, this applies to the way you want users to install your app as well. If the majority of your competitors, or even companies that operate in an entirely different sector, have their apps working differently than yours, your users can be a bit confused.&lt;/p&gt;

&lt;p&gt;This is the biggest obstacle that companies have to face before fully embracing the web-first approach. There is no obvious solution to the problem, either.&lt;/p&gt;

&lt;h2&gt;
  
  
  When should I decide on PWAs?
&lt;/h2&gt;

&lt;p&gt;Startups have to be the biggest beneficiaries of Google’s attempt to make all significant native APIs usable through Chrome. Should you have a relatively small software development team, you will be the happiest. The same applies when your app will be rapidly updated; there is simply no way to update the apps faster than by creating a PWA.&lt;/p&gt;

</description>
      <category>apps</category>
      <category>pwa</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
