{"id":7432,"date":"2023-01-06T12:33:31","date_gmt":"2023-01-06T12:33:31","guid":{"rendered":"https:\/\/www.version1.com\/en-us\/?p=7432"},"modified":"2023-01-06T12:33:31","modified_gmt":"2023-01-06T12:33:31","slug":"lessons-learned-in-low-code","status":"publish","type":"post","link":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","title":{"rendered":"Lessons Learned In Low Code"},"content":{"rendered":"<h2><b>OutSystems Partners<\/b><\/h2>\n<p>At Version 1 we have been working with <a href=\"https:\/\/www.outsystems.com\/\"><strong>OutSystems<\/strong><\/a> since 2019 \u2013 and have recently had a series of large public sector projects go live.<\/p>\n<p>Whilst every project has its own challenges, this blog explains some of the <strong><a href=\"https:\/\/www.version1.com\/application-modernisation-integration\/low-code-platform-solutions-services-support\/\">low-code<\/a>-specific challenges<\/strong> that have popped up along the way, despite our best efforts.<\/p>\n<p>We get it, developers move fast with OutSystems. That\u2019s fantastic, and typically results in 30-50% less development time than traditional coding.\u00a0 But invariably our projects have fixed deadlines and a set of minimum viable product requirements that must be delivered for the first release. The danger we see is in a few areas, as highlighted below.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/logo-c-fc-outsystems2x-e1668686669949.png\" alt=\"\" loading=\"lazy\"><\/p>\n<h2>Perfect is the <b>Enemy<\/b> of Complete<\/h2>\n<p>Can the customer\u2019s product team keep pace with the changes, and keep a backlog for future sprints, that is not just a constant iteration cycle around some of the main screens?\u00a0 This requires a step back after each sprint, to look at the progress against MVP, and strong control over what is \u2018good enough\u2019 for this release, knowing things can always improve.<\/p>\n<p>Sometimes it takes an experienced agile business analyst to really lean in and help prioritise; sometimes it takes strong and active project management or governance, that really leans into the content of each sprint.\u00a0 But the focus should be in making all required features work, and then improving them \u2013 instead of trying to really optimise one at the expense of others.<\/p>\n<h2>Negating the <b>Admin Users<\/b><\/h2>\n<p>Are we spending enough time outside the main happy path \u2013 with the role of administrators, helpdesk operations, and supervisors to act on behalf of any one of the other actors in the scenario?\u00a0 Especially with large public sector customers, people sometimes just don\u2019t get the technology, so we need to make sure we can troubleshoot and support effectively.<\/p>\n<p>One pattern we often surface is to make all the system data available to a supervisor role in the super-easy \u201clist and details\u201d routine. In this way, at least one end user can trace a problem through the tables, if it\u2019s not obvious on the main user interface for some reason.\u00a0 We do not want to have to rely on direct database access for routine data tracing and investigation.<\/p>\n<h2>Short-Circuiting the <b>Testing<\/b><\/h2>\n<p>It\u2019s really easy at the start of a project to just get into feature-factory mode, and churn out screens at a speed that is really exciting.\u00a0 But testing those properly takes time, partly to look at the described feature and validations to ensure it works as expected \u2013 but also to look at the different end-user personas, and then do some exploratory testing to see how robust the solution is, and if strange data or click combinations come up with something unexpected.<\/p>\n<p>One option for handling that is to include the functional testing in the developer\u2019s definition of done \u2013 building up the regression suite<\/p>\n<h2>Trying to Solve Everything with <b>One Platform<\/b><\/h2>\n<blockquote><p>When all you have is a hammer, everything looks like a nail.<\/p><\/blockquote>\n<p>Never was a truer word spoken than when you invest in a massively capable development platform like OutSystems.<\/p>\n<p>But the reality of it is, that no solution exists in isolation.\u00a0 From the basics like email and SMS integration to location and map services, and then integration with the rest of the application and desktop infrastructure, there is a range of internal and external components that need to be connected to complete your architecture picture.\u00a0 Some common options we see are:<\/p>\n<ol>\n<li>Identity \u2013 early on a single sign-on solution is seen as desirable but frequently overlooked. But at least the authentication should be integrated with Active Directory, Okta, or another provider.\u00a0 It\u2019s worth putting the effort in early on to get this done, as there will never be a good time to switch over.<\/li>\n<li>Data Warehouse \/ Analytics \u2013 whilst we love a good dashboard view in OutSystems, that\u2019s probably best for the operational reporting, and the day-to-day. In customers where we\u2019ve had the option to connect to a separate data tool by exposing APIs, we\u2019ve been able to tap into a different skill set and a different view when it comes to progress reporting, benefits realisation, and even help troubleshoot potential data errors.<\/li>\n<li>API Management \u2013 either Integration PaaS options like Boomi or Workato, or Azure \/ AWS \/ GCP API management tools \u2013 with public sector customers, something is normally required to help manage traffic through a firewall and connect to on-premise solutions from a cloud-hosted instance.<\/li>\n<li>SaaS options \u2013 the world is well connected now, and many things have leading SaaS options that are just easy for the end user to consume \u2013 think about email &amp; SMS (e.g. Twilio, or UK\u2019s Gov.Notify solution). Maps, location, and distance calculation \u2013 Google \/ Bing Maps, ArcGIS.\u00a0 Document storage if needed (we often keep ours as binary content in the database).\u00a0 It\u2019s often worth leaving a budget for these at the start to help MVP, and if you want to improve later, well, there\u2019s a clear cost-benefit for that.<\/li>\n<\/ol>\n<p>Hopefully these come up naturally in a discovery or architecture conversation at the project scoping stage.\u00a0 But even if you bootstrapped a standalone MVP, at some point it\u2019s worth opening the door to see where your low-code applications fit with the rest of the stack. <a href=\"https:\/\/www.version1.com\/services\/#form\">Talk to our experts today about our OutSystems software solutions<\/a>.<\/p>\n<p><strong>About our OutSystems&#8217; Experience<\/strong><\/p>\n<p><em>Version 1 is proud to be an\u00a0<a href=\"https:\/\/www.outsystems.com\/\">OutSystems Partner<\/a>. As a long-term market leader, OutSystems are focused on constantly improving the developer experience and platform operation. This allows partners like Version 1 to focus on our customers\u2019 needs and experiences \u2013 helping them achieve a faster ROI, and getting through more of the\u00a0<a href=\"https:\/\/www.version1.com\/services\/\">digital transformation<\/a>\u00a0backlog, with leaner, more effective teams.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>OutSystems Partners At Version 1 we have been working with OutSystems since 2019 \u2013 and have recently had a series of large public sector projects go live. Whilst every project has its own challenges, this blog explains some of the low-code-specific challenges that have popped up along the way, despite our best efforts. We get [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":7433,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[101],"tags":[124,109],"industry":[],"class_list":["post-7432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-cloud","tag-digital"],"acf":[],"translations":[{"blog_id":1,"post_id":7432,"name":"Europe","code":"EN-GB","hreflang":"en-gb","url":"https:\/\/www.version1.com\/blog\/lessons-learned-in-low-code\/","is_current":false},{"blog_id":13,"post_id":7432,"name":"Americas","code":"EN-US","hreflang":"en-us","url":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","is_current":true}],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lessons Learned In Low Code | Version 1 (US)<\/title>\n<meta name=\"description\" content=\"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lessons Learned In Low Code | Version 1 (US)\" \/>\n<meta property=\"og:description\" content=\"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/\" \/>\n<meta property=\"og:site_name\" content=\"Version 1 (US)\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-06T12:33:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1068\" \/>\n\t<meta property=\"og:image:height\" content=\"639\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Lessons Learned In Low Code\",\"datePublished\":\"2023-01-06T12:33:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/\"},\"wordCount\":957,\"publisher\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Outsystems.png.webp\",\"keywords\":[\"Cloud\",\"Digital\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/\",\"name\":\"Lessons Learned In Low Code | Version 1 (US)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Outsystems.png.webp\",\"datePublished\":\"2023-01-06T12:33:31+00:00\",\"description\":\"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Outsystems.png.webp\",\"contentUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Outsystems.png.webp\",\"width\":1068,\"height\":639,\"caption\":\"person coding on laptop\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/lessons-learned-in-low-code\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lessons Learned In Low Code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#website\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\",\"name\":\"Version 1\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\",\"name\":\"Version 1\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.version1.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-Favicon-2.png\",\"contentUrl\":\"https:\\\/\\\/www.version1.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-Favicon-2.png\",\"width\":512,\"height\":512,\"caption\":\"Version 1\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lessons Learned In Low Code | Version 1 (US)","description":"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","og_locale":"en_US","og_type":"article","og_title":"Lessons Learned In Low Code | Version 1 (US)","og_description":"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.","og_url":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","og_site_name":"Version 1 (US)","article_published_time":"2023-01-06T12:33:31+00:00","og_image":[{"width":1068,"height":639,"url":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#article","isPartOf":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/"},"author":{"name":"","@id":""},"headline":"Lessons Learned In Low Code","datePublished":"2023-01-06T12:33:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/"},"wordCount":957,"publisher":{"@id":"https:\/\/www.version1.com\/en-us\/#organization"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#primaryimage"},"thumbnailUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp","keywords":["Cloud","Digital"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","url":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/","name":"Lessons Learned In Low Code | Version 1 (US)","isPartOf":{"@id":"https:\/\/www.version1.com\/en-us\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#primaryimage"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#primaryimage"},"thumbnailUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp","datePublished":"2023-01-06T12:33:31+00:00","description":"Whilst every project has its own challenges, this blog explains some of the low-code specific challenges that have popped up along the way.","breadcrumb":{"@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#primaryimage","url":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp","contentUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/01\/Outsystems.png.webp","width":1068,"height":639,"caption":"person coding on laptop"},{"@type":"BreadcrumbList","@id":"https:\/\/www.version1.com\/en-us\/lessons-learned-in-low-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.version1.com\/en-us\/"},{"@type":"ListItem","position":2,"name":"Lessons Learned In Low Code"}]},{"@type":"WebSite","@id":"https:\/\/www.version1.com\/en-us\/#website","url":"https:\/\/www.version1.com\/en-us\/","name":"Version 1","description":"","publisher":{"@id":"https:\/\/www.version1.com\/en-us\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.version1.com\/en-us\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.version1.com\/en-us\/#organization","name":"Version 1","url":"https:\/\/www.version1.com\/en-us\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.version1.com\/en-us\/#\/schema\/logo\/image\/","url":"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-Favicon-2.png","contentUrl":"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-Favicon-2.png","width":512,"height":512,"caption":"Version 1"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts\/7432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/comments?post=7432"}],"version-history":[{"count":0,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts\/7432\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/media\/7433"}],"wp:attachment":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/media?parent=7432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/categories?post=7432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/tags?post=7432"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/industry?post=7432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}