{"id":12812,"date":"2020-07-15T14:01:31","date_gmt":"2020-07-15T19:01:31","guid":{"rendered":"https:\/\/www.mrc-productivity.com\/blog\/?p=12812"},"modified":"2022-11-22T16:10:39","modified_gmt":"2022-11-22T22:10:39","slug":"10-essential-elements-of-low-code-software","status":"publish","type":"post","link":"https:\/\/www.mrc-productivity.com\/blog\/2020\/07\/10-essential-elements-of-low-code-software\/","title":{"rendered":"10 essential elements of low-code software"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-725\" src=\"https:\/\/d4ey5ve3eb27c.cloudfront.net\/img\/icons\/development.png\" alt=\"development\" width=\"76\" height=\"100\"><span style=\"font-size: 14px;\"><em>Summary: As the low-code market grows, so does the confusion. Potential low-code users find that comparing options is like comparing apples and oranges. What key elements should you look for in a low-code development platform? We explore some &#8216;must-have&#8217; features in this article.<\/em><\/span><br \/>\n<a name=\"20180321\"><\/a><!--more--><br \/>\n<img decoding=\"async\" src=\"https:\/\/mrccdn.s3.us-east-2.amazonaws.com\/img\/blog\/developer.png\"><br \/>\n<span><em>Photo by <a href=\"https:\/\/unsplash.com\/@flysi3000?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Simon Abrams<\/a> on <a href=\"https:\/\/unsplash.com\/s\/photos\/coding?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Unsplash<\/a><\/em><\/span><br \/>\n<br \/>\n<a href=\"https:\/\/www.mrc-productivity.com\/products\/index.html\">Low-code development software<\/a> has a problem. Since the phrase was coined back in 2014, we\u2019ve seen an explosion of low-code tools. These days, you\u2019ll find over 200 options. <\/p>\n<p>The problem: They\u2019re all different. Since \u201clow-code\u201d is such a vague term, low-code software is all over the map. <\/p>\n<p>For instance, some low-code tools focus on specific functions. Others let you create anything. Some are basic. Others are enterprise-class. Some require a fair amount of coding. Others need no coding at all but still provide the option. <\/p>\n<p>To make matters worse, software vendors slap the term on anything remotely related to low-code. If their offering has any low-code element, they market it as a low-code solution.<\/p>\n<p>The result: Confusion. Low-code software buyers must wade through a jumbled mess of options. Different low-code solutions offer different approaches and capabilities. They find that comparing options is like comparing apples and oranges.<\/p>\n<p>Today, I\u2019d like to cut through some of this confusion. Sure, most low-code tools are different. But, what should you look for? What are the \u201cmust-have\u201d elements that every low-code platform should include? While I\u2019m sure the list could be longer, I\u2019ve rounded up the top 10 below.<\/p>\n<h3>1. Transparency<\/h3>\n<p> Low-code tools let you create web applications without coding. They should provide a clean, point-and-click interface. <\/p>\n<p>But, they shouldn\u2019t be a \u201cblack box\u201d. <\/p>\n<p>What does that mean? A good low-code tool provides transparency. It lets you \u201cpull back the covers\u201d, giving you access to the generated code if needed. You should be able to edit and customize your applications through the interface, or at the code level. <\/p>\n<p>Why is this so important? As explained below, transparency improves trust, provides more flexibility, and helps you troubleshoot issues should a problem arise.<\/p>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cThe absolute most important feature of low-code software is transparency,\u201d says Jesse Spencer-Davenport, Marketing Director at <a href=\"https:\/\/www.bisok.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"color: red; font-weight: bold;\">BIS<\/span><\/a>. \u201cThe defining value of low-code is easier results but if the validity of results is uncertain, or worse, they are proven to be wrong, the solution won\u2019t be trusted. So by providing a layer of transparency, results are verifiable, and users gain an understanding of how the tool works in the background. This enables users to learn the platform better, and what \u201cknobs\u201d and \u201cbuttons\u201d to use to achieve desired results.\u201d\n<\/p><\/blockquote>\n<h3>2. Automation<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/d4ey5ve3eb27c.cloudfront.net\/img\/blog\/workflow-interface.jpg\"><br \/>\n<br \/>\nIn a digital world, automation is the name of the game. It improves efficiency. It reduces errors. Automation is often the difference between top performing companies and those that lag behind.<\/p>\n<p>Yet, a recent study found that inefficient processes are the biggest source of wasted time in the average workday. <\/p>\n<p>Why do so many businesses struggle in this area? It usually boils down to the fact that their applications and processes weren\u2019t built for a digital era. Their applications don\u2019t integrate with each other. They don\u2019t use data changes to trigger workflows. The result: Employees must fill in the gaps manually.<\/p>\n<p>That\u2019s why automation is such a critical part of modern low-code tools. They must be able to pass data between other applications and services. They must be able to trigger workflows when data is added or changed. <\/p>\n<p>Most importantly, they must include a workflow automation designer. Workflow designers let users automate business processes using a drag and drop interface. They let users set workflow triggers that fire when data is added or changed. These triggers can start all types of workflows, ranging from email notifications to API calls and everything in between. <\/p>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cThe tool should be intuitive enough to be able to execute automation workflows based on event-generated triggers, drastically reducing human intervention,\u201d says Murali Palanisamy, chief solutions officer, <a href=\"https:\/\/www.appviewx.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"color: red; font-weight: bold;\">AppViewX<\/span><\/a>. \u201cAny tool can perform linear task automation, but only truly intelligent tools can accomplish end-to-end process orchestration with minimal prodding.\u201d\n<\/p><\/blockquote>\n<h3>3. Environment flexibility<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/mrccdn.s3.us-east-2.amazonaws.com\/img\/blog\/cloud-onprem.png\"><br \/>\n<br \/>\nWhere\u2019s the best place to host your low-code platform? On-premise or in the cloud? <\/p>\n<p>There\u2019s no one answer that applies to every situation.<\/p>\n<p>Rather, I believe in development freedom. If that calls for on-premise hosting, so be it. If that means you move your application development to the cloud, that\u2019s fine too. <\/p>\n<p>Environment flexibility is a critical aspect of low-code platforms. Applications should deploy anywhere and port easily. Be wary of any platform that locks you into their cloud, or a single deployment location. A good low-code platform gives you options. <\/p>\n<p>Here are a few questions to ask the vendor before licensing a solution: <\/p>\n<ul>\n<li><strong>How portable are the applications you create?<\/strong><\/li>\n<li><strong>Will applications work outside of the development platform, or are they tied to the platform?<\/strong><\/li>\n<li><strong>Does this platform give us the flexibility to move from the cloud to in-house, and vice-versa?<\/strong><\/li>\n<\/ul>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cMost low-code tools work on a SaaS model, which automatically qualifies them for cloud deployments,\u201d says Palanisamy. \u201cHowever, some industries prefer to host their data center on-premises, and it\u2019s a major win if the tool can be integrated into their existing framework. Ideally, the low-code tool should be capable of working across on-premise, hybrid-cloud, and multi-cloud platforms.\u201d\n<\/p><\/blockquote>\n<h3>4. Customizable UI and UX with white-labeling options<\/h3>\n<p>In my experience, customization (or the lack thereof) is one of the most common fears about low-code tools. Many assume that low-code platforms limit your ability to customize generated applications.<\/p>\n<p>While this might be true for some tools, it certainly doesn\u2019t apply to all of them. How can you tell the difference before you choose? Here are a few questions to ask the vendor:<\/p>\n<ul>\n<li>How do you customize the generated applications? Does the tool include a graphical editor? Does it let you modify the HTML\/CSS if necessary?<\/li>\n<li>Do you allow white-labeling? Can you customize the output to match your company\u2019s look and feel?<\/li>\n<li>Can you create\/modify application templates? This is important because it lets you customize the look\/feel of every generated application without manually changing each one.<\/li>\n<\/ul>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cThe tool should provide extensive customization capabilities for the applications that are developed on it,\u201d says Palanisamy. \u201cThis includes provisions to build HTML pages based on end-user specifications for easy accessibility, white-labeling of apps for more personalization, etc. The tool should provide low-code elements to accomplish all of the above, too, apart from workflow automation.\u201d\n<\/p><\/blockquote>\n<h3>5. Custom code<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/mrccdn.s3.us-east-2.amazonaws.com\/img\/blog\/coding.png\"><br \/>\n<span><em>Photo by <a href=\"https:\/\/unsplash.com\/@clark_fransa?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Arnold Francisca<\/a> on <a href=\"https:\/\/unsplash.com\/s\/photos\/coding?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Unsplash<\/a><\/em><\/span><\/p>\n<p>Low-code platforms are built to eliminate much of the tedious coding required for web applications. But, every business is different. They have different business rules and requirements. A single low-code platform cannot account for every single business.<\/p>\n<p>That\u2019s why the ability to add custom code is so important to a low-code tool. What do I mean by custom code? It boils down to a few questions:<\/p>\n<ul>\n<li><strong>Can you add custom business logic when you build applications? <\/strong><\/li>\n<li><strong>Is there a way to call external code from the applications? <\/strong><\/li>\n<li><strong>Can you customize the generated code if needed?<\/strong><\/li>\n<li><strong>Can you create rules\/logic so the applications fit your business processes?<\/strong><\/li>\n<\/ul>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cWhen solving a problem with a low-code platform, you&#8217;ll often run into a wall of something that the tool just wasn&#8217;t designed for,\u201d says Blake Burch, Co-Founder of <a href=\"https:\/\/www.shipyardapp.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"color: red; font-weight: bold;\">Shipyard<\/span><\/a>. \u201cYou want to find a platform that allows you to write and execute custom code when needed, so you aren&#8217;t stuck creating poorly designed workarounds or waiting around for feature requests.\u201d\n<\/p><\/blockquote>\n<h3>6. Granular permissions <\/h3>\n<p>Does everyone in your organization have the same application permissions? Does everyone have access to all of your data? Probably not. That\u2019s why permission control is so important to a low-code platform.<\/p>\n<p>What do I mean by \u201cpermission control\u201d? Any enterprise-class low-code platform should let you manage user permissions on a few levels:<\/p>\n<p><strong>Application-level<\/strong>: Application-level permissions let you control application access on a per-user role or per-user basis. This typically includes a role-based menuing system, which displays different menu options to different users based on their role.<\/p>\n<p><strong>Row-level<\/strong>: A critical aspect of B2B, BI, and reporting applications, row-level permissions (or multi-tenant) controls data access within a single application at the row level. Multiple users can access the same application, but only view the data they\u2019re authorized to see.<\/p>\n<p><strong>User privileges<\/strong>: User privilege parameters are used to personalize features and security to individual users or user roles. They can control an application\u2019s look and feel, add or hide user options, limit user capabilities, and more. <\/p>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cYou want a tool that lets you manage user permissions for almost every action and element within the platform,\u201d says Burch. \u201cAvoid platforms that have sweeping application-level permissions. While you may not be able to envision a reason for those permissions today, you&#8217;ll thank yourself later when you run into a unique use case.\u201d\n<\/p><\/blockquote>\n<h3>7. Security<\/h3>\n<p><figure id=\"attachment_9493\" aria-describedby=\"caption-attachment-9493\" style=\"width: 300px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.mrc-productivity.com\/blog\/wp-content\/uploads\/2015\/09\/hack-813290_640-300x168.jpg\" alt=\"\" width=\"300\" height=\"168\" class=\"size-medium wp-image-9493\" srcset=\"https:\/\/www.mrc-productivity.com\/blog\/wp-content\/uploads\/2015\/09\/hack-813290_640-300x168.jpg 300w, https:\/\/www.mrc-productivity.com\/blog\/wp-content\/uploads\/2015\/09\/hack-813290_640.jpg 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-9493\" class=\"wp-caption-text\">photo credit: <a href=\"https:\/\/pixabay.com\/en\/hack-hacker-elite-hacking-exploits-813290\/\">JavadR<\/a> via <a href=\"http:\/\/pixabay.com\/\">pixabay<\/a> <a href=\"http:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/deed.en\">cc<\/a><\/figcaption><\/figure>Web application attackers are becoming more sophisticated. But, application security isn\u2019t keeping pace. Poor application security is an epidemic. A recent report found that half of all web applications contain a high-risk vulnerability.<\/p>\n<p>Why do so many businesses struggle with security? <\/p>\n<p>Many businesses assume application security in the developer\u2019s job. Of course, that\u2019s in addition to everything else they do\u2013and the fact that businesses regularly impose tight deadlines on development projects.<\/p>\n<p>How can developers address these growing security requirements while still meeting their tight deadlines? This is a big selling point for low-code. Many low-code platforms come with enterprise-class security baked in, like encryption, white-lists, black-lists, IP access restrictions, encoding, parameterized queries, edit checking, and more. These built-in features let your developers keep pace with security requirements and meet their deadlines.<\/p>\n<p>While those security options are important, it doesn&#8217;t end there. Beyond those standard security features, here are a few advanced options look for:<\/p>\n<p><strong>Flexible authentication options<\/strong>: Business-focused application development software should offer flexible authentication options\u2013letting you authenticate your applications using whatever authentication sources you already have in place.<\/p>\n<p><strong>Single Sign-on<\/strong>: Single sign-on (SSO) is a session\/user authentication process that lets users enter their name and password in only one place, and access multiple related applications.<\/p>\n<p><strong>Application activity auditing<\/strong>: Application activity auditing lets developers log end-user activity for signon\/signoff activities. This lets IT departments quickly see when a user has logged in, which application they accessed, and when they logged off.<\/p>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cAs good as it sounds low code development really makes the job easy but one thing to look for is data security especially if the application is designed to store users&#8217; information,\u201d says Anas Ahmed Siddiqui, Founder &#038; CEO of <span style=\"color: red; font-weight: bold;\">TechoGhetto<\/span>. \u201cIt is always a good practice to manually check the code of the application to confirm and to make sure that all classes are rightly named as public, private and protected accordingly.\u201d\n<\/p><\/blockquote>\n<h3>8. Reusable &#8220;code&#8221; blocks<\/h3>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cIf you break down the most complicated math problem, you always come back to the four basic operations: addition, subtraction, multiplication, and division,\u201d says Shayne Sherman, CEO of <a href=\"https:\/\/techloris.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"color: red; font-weight: bold;\">TechLoris<\/span><\/a>. \u201cMany algorithms are the same way. They use the same operations in different ways.  <\/p>\n<p>A good low-code solution come with these basic operations ready to drag into your process out of the box.<\/p>\n<p>A great solution will give you the ability to save your own, more complicated operations for reuse in your system.\u201d\n<\/p><\/blockquote>\n<p>It\u2019s a great point. Great low-code platforms take a building block approach to application development. But, I\u2019d like to take it even a step further.<\/p>\n<p>Great low-code platforms let you reuse applications (or parts of applications) in other applications. They let you create reusable functions and capabilities that can be added to any other application. It provides the basic building blocks and lets you combine them however you wish.<\/p>\n<p>The result: A fast development process that improves over time. As you create more and more reusable \u201cblocks\u201d, development time improves.<\/p>\n<h3>9. Friendly licensing<\/h3>\n<p>Not all licensing structures are created equal. Some seem cheap upfront but pile on the fees as you use it. Before licensing any low-code platform, understand the fees. Here are some of the common fees to ask about:<\/p>\n<p><strong>Developer seat fees<\/strong>: These fees are charged based on the number of people who will be building apps with the platform.<\/p>\n<p><strong>End-user seats<\/strong>: These fees are charged based on how many people are using the applications created by the developers.<\/p>\n<p><strong>Run-time fees<\/strong>: While I don\u2019t see run-time fees that often anymore, it\u2019s something to watch for. These are fees that occur every time the generated applications are run.<\/p>\n<p><strong>Distribution fees<\/strong>: This is an important point to consider if you plan to distribute or sell the generated applications. Many vendors charge a distribution fee per application, which can get expensive quickly.<\/p>\n<p><strong>Maintenance fees<\/strong>: Is maintenance and support included in the license fees, or is that an extra charge? If they charge a maintenance fee, understand what\u2019s included in the plan. Ideally, any good maintenance plan will include expert support and all product enhancements.<\/p>\n<h3>10. Integration<\/h3>\n<p><figure id=\"attachment_7343\" aria-describedby=\"caption-attachment-7343\" style=\"width: 240px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.mrc-productivity.com\/blog\/wp-content\/uploads\/2014\/01\/small_6147270119.jpg\" alt=\"\" width=\"240\" height=\"183\" class=\"size-full wp-image-7343\" \/><figcaption id=\"caption-attachment-7343\" class=\"wp-caption-text\">photo credit: <a href=\"http:\/\/www.SeniorLiving.Org\">kenteegardin<\/a> via <a href=\"http:\/\/photopin.com\">photopin<\/a> <a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/2.0\/\">cc<\/a><\/figcaption><\/figure>One of the most important aspects of low-code software is also one you can\u2019t see: The architecture. While application architecture might be invisible to the users, the impact that architecture has on your overall application is enormous.<\/p>\n<p>Why should you care so much about architecture? It plays a major role in your overall experience with low-code platforms. It impacts portability, security, flexibility, and more. <\/p>\n<p>Most importantly, architecture plays a massive role in a low-code tool\u2019s integration capabilities. With any low-code platform, you\u2019ll need to answer two questions:<\/p>\n<ul>\n<li>How easily can we integrate this with our existing systems?<\/li>\n<li>How easily can we integrate this with third-party services?<\/li>\n<\/ul>\n<p>Before you license any low-code platform, understand its integration capabilities. Does it support RESTful web services? Is it built using open technologies? What kind of code does it generate? These questions will save you from many integration headaches down the road. <\/p>\n<blockquote style=\"line-height: 1.7em; background-image: none; margin-left: 0; padding-left: 18px; height: auto;\"><p>\n\u201cIntegration capabilities are top of the list for us,\u201d says Brett Downes, Founder of <a href=\"https:\/\/harohelpers.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"color: red; font-weight: bold;\">HARO Helpers<\/span><\/a>. \u201cThis should always be among the top priorities when companies are weighing up which low-code platform to use. <\/p>\n<p>Presently it has become more important to have incredibly strong integration capabilities that are bi-directional, fast, secure, and powerful. It is key to be able to tap into your company&#8217;s data wherever it might be is necessary in order to be agile, flexible, and easily adaptable to change.\u201d\n<\/p><\/blockquote>\n<h3>Summary<\/h3>\n<p>These are just a few essential elements of low-code software, but I&#8217;m sure the list could be longer. Would you add anything to this list? Feel free to comment below!<\/p>\n<div id=\"sendgrid_nlvx_widget-2\" class=\"widget widget_sendgrid_nlvx_widget\" style=\"padding-bottom: 10px;width: auto;text-align: center;background-color: #edeff4;border: 1px solid #d1d1d1\">\r\n\r\n<h3 class=\"widget-title\" style=\"font-size: 18px;margin-top: 28px;font-weight: 400;margin-bottom:25px\">If you enjoyed this article, sign up for email updates<\/h3>\r\n<p>Sign up below, and we'll notify you of new blog articles via email. We value your privacy and will never share or sell your information. To learn more about how we handle data, please review our <a href=\"https:\/\/www.mrc-productivity.com\/about\/privacy.html\">privacy policy<\/a>.\r\n\r\n\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: As the low-code market grows, so does the confusion. Potential low-code users find that comparing options is like comparing apples and oranges. What key elements should you look for in a low-code development platform? We explore some &#8216;must-have&#8217; features in this article.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","slim_seo":{"title":"10 essential elements of low-code software - mrc&#039;s Cup of Joe Blog","description":"Summary: As the low-code market grows, so does the confusion. Potential low-code users find that comparing options is like comparing apples and oranges. What ke"},"footnotes":""},"categories":[8],"tags":[13,62,111,90],"class_list":["post-12812","post","type-post","status-publish","format-standard","hentry","category-education","tag-application-development","tag-development-tools","tag-low-code","tag-web-application-development-platform"],"_links":{"self":[{"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/posts\/12812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/comments?post=12812"}],"version-history":[{"count":9,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/posts\/12812\/revisions"}],"predecessor-version":[{"id":14229,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/posts\/12812\/revisions\/14229"}],"wp:attachment":[{"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/media?parent=12812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/categories?post=12812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/blog\/wp-json\/wp\/v2\/tags?post=12812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}