<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Agile Data N’ Info: AgileData Product]]></title><description><![CDATA[Posts about the AgileData Product]]></description><link>https://agiledata.info/s/agiledata-product</link><image><url>https://substackcdn.com/image/fetch/$s_!ErtR!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8892c64-a0c7-4c7b-9f49-a73be5280f22_1280x1280.png</url><title>Agile Data N’ Info: AgileData Product</title><link>https://agiledata.info/s/agiledata-product</link></image><generator>Substack</generator><lastBuildDate>Sat, 23 May 2026 21:08:04 GMT</lastBuildDate><atom:link href="https://agiledata.info/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Agile Data Limited]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[DataNInfo@agiledataguides.com]]></webMaster><itunes:owner><itunes:email><![CDATA[DataNInfo@agiledataguides.com]]></itunes:email><itunes:name><![CDATA[Shagility]]></itunes:name></itunes:owner><itunes:author><![CDATA[Shagility]]></itunes:author><googleplay:owner><![CDATA[DataNInfo@agiledataguides.com]]></googleplay:owner><googleplay:email><![CDATA[DataNInfo@agiledataguides.com]]></googleplay:email><googleplay:author><![CDATA[Shagility]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Can we use an Information Product Canvas image to start the data design process?]]></title><description><![CDATA[What would happen?]]></description><link>https://agiledata.info/p/can-we-use-an-information-product</link><guid isPermaLink="false">https://agiledata.info/p/can-we-use-an-information-product</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Wed, 19 Feb 2025 21:44:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ecc0bb9a-cfed-4d4b-8cd6-336d567e4c5e_183x137.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A while ago we added the ability to upload an image to AgileData Disco, it was so customers could upload screenshots of their Dashboards and we could get Disco to document their Data Environments based on those images.<br><br>Talking to few a people yesterday reminded me I was going to test uploading an image of a completed Information Product Canvas to AgileData Disco and see if it would add any value in initial designs for the data environment.</p><p>So the hypothesis was:</p><div class="pullquote"><p>Can completed Information Product Canvas image help with the initial design of the data environment to deliver that Information Product.</p></div><p><br>To test out the hypothesis I uploaded one of the canvas that I collaborated on to is being used as an example in the upcoming &#8220;an Agile Data Guide to Information Product Canvas&#8221;  book.<br><br>As this canvas was based on a real world example of an Information Product somebody had already created for one of their customers, and I only facilitated the population of the cavas, this would reduce the bias in the experiment compared to me creating one from scratch just for this purpose.<br><br>Here is an interactive demo / guide showing the results of the experiment:<br><br><a href="https://guides.agiledata.io/demo/cm7c9gj7h0jr49ujfhaymm0um">https://guides.agiledata.io/demo/cm7c9gj7h0jr49ujfhaymm0um</a><br><br>It is a quick and dirty interactive demo, where I test the process and then make notes on what I think worked and what we need to iterate.</p><p></p><blockquote><p>An aside on the value of interactive demos</p></blockquote><p>I have started using this interactive demo format a lot, much better than making disconnected notes, and also much better to see what each note relates to.<br><br>I can quickly document something and then share it with <a href="https://www.linkedin.com/in/nigelvining/">Nigel Vining</a> and he can view it whenever he has time, great for our remote only, work from anywhere in the world way of working.<br><br>I have also been using this interactive demo pattern to log support calls with other vendors when I have a problem with their product.<br><br>As they say seeing is believing.</p><p></p><blockquote><p>Back to the result.</p></blockquote><p><br>Overall the Disco outputs were not good enough to be used as a data design (not sure it ever will be perfect), so some more iteration to be done.<br><br>But the output it did generate was an encouraging start.</p>]]></content:encoded></item><item><title><![CDATA[#06 - DataOps Notifications]]></title><description><![CDATA[Why do your data work with the equivalent of a blindfold on? When you can observe everything that is going on in the AgileData Platform, as it happens!]]></description><link>https://agiledata.info/p/06-dataops-notifications</link><guid isPermaLink="false">https://agiledata.info/p/06-dataops-notifications</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Wed, 18 Dec 2024 20:12:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rCMq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>Observe everything that is going on in the AgileData Platform, as it happens.</p><p>Stay connected and observe every important change within the AgileData Platform with real-time notifications. Designed to keep you informed, this feature ensures you never miss critical updates or changes to your data.</p><p>Whether it&#8217;s a completed data refresh, a new data Tile becoming available, or an alert about an issue with Trust Rules, notifications provide instant insights into every key data flow in the platform.</p><p>Integrated seamlessly into the AgileData App, notifications empower you to act quickly, maintain data trust, and stay constantly informed about your data work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rCMq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rCMq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 424w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 848w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 1272w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rCMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin" width="1456" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rCMq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 424w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 848w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 1272w, https://substackcdn.com/image/fetch/$s_!rCMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Feature Requirement</strong></h2><p>The system must provide real-time notifications to data users, keeping them informed about significant changes, updates, or alerts within the AgileData Platform that directly impact their data tasks.</p><h2><strong>Requirement Rationale</strong></h2><p>Notifications ensure data users stay connected and informed about critical events, such as data refreshes, data quality alerts, or the availability of new data assets. This empowers them to act promptly, maintain trust in their data, and complete their data tasks efficiently without missing key updates or changes.</p><h2><strong>How</strong><br></h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;f77b72b6-8f64-4f89-a3a6-6c329fa7fd17&quot;,&quot;duration&quot;:null}"></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/notifications/&quot;,&quot;text&quot;:&quot;View Interactive Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/notifications/"><span>View Interactive Demo</span></a></p><p></p><p></p><h2><strong>Why</strong></h2><p>This was another scale the machine not the Nigel, driven feature.</p><p>In the early days of the AgileData App, when something didn&#8217;t seem to work properly I had to go into the Google Cloud Console and search the logs to see what had happened.</p><p>As you can imagine I didn&#8217;t do this, I just slacked Nigel and asked him to have a look</p><p>As you can also imagine Nigel wasn&#8217;t a fan of this approach so he built the Notifications feature.</p><p>The key to this feature is it shows everything that happens in the AgileData Platform.</p><p>Again as you can imagine this causes a signal vs noise problem, which has been a major focus of iterating this feature over the years.</p><p>Real-time notifications are visible at a glance at the top menu of the app. This means when I do a data task, for example uploading a manual csv file, or manually running a data flow, I can quickly observe it happening at a glance.</p><p>This removes the need for me to go to the Notifications screen to watch things run, I can stay in the screen that does the data task I need to do, while still observing the process.</p><p>To provide this real-time view of the Notifications was a major piece of platform engineering, as it required the use of a Websockets component to provide the pub/sub pattern.</p><p>Real-time notifications are great, but you have to have the AgileData App open in a browser to see them.</p><p>Often I want to check all the Notifications for a Customers Tenancy that I am not currently logged into.</p><p>So we built the Notifications screen.</p><p>This screen shows all the Notifications for the Tenancy.</p><p>The initial versions of this screen hit the signal vs noise problem, in multiple ways.</p><p>First was the fact that there are lots of notifications and loading them for all time was slow. So we defaulted it to only show the last 24 hours, and then provided an easy way to extend the time window to show older notifications.</p><p>It&#8217;s interesting how rarely I need to extend the time window, most times a snapshot of notifications over the last 24 hours is enough for me to get the data task done.</p><p>As I mentioned earlier the Notifications screen shows everything that is happening on the AgileData Platform.</p><p>We display when Tiles are created, new data is loaded, Change Rules are iterated, data fails Trust Rule validation.</p><p>Nigel is constantly adding more events to the Notifications as we find more things we want to be able to easily observe and investigate.</p><p>We also show every successful event and every event that is treated as a failure.</p><p>This amplifies the signal vs noise problem,</p><p>First thing we did was to apply a DataOps scorecard pattern at the top of the screen that allows you to see the number of Notifications within a specific category.</p><p>The key categories we found valuable.</p><ul><li><p>Success vs Failure</p></li><li><p>System identified Anomalies</p></li><li><p>Trust Rule identified anomalies</p></li><li><p>Data Freshness anomalies</p></li></ul><p>This scorecard is interactive, click on Anomalies indicator and the Notification list will filter to only those Notifications.</p><p>Saves a few clicks and as I have mentioned in previous articles, a few clicks and seconds saved in a data task you do repeatably all add up to minutes and hours saved overtime.</p><p>We added search to enable you to filter the Notifications based on any freeform text.</p><p>The next thing we found useful was adding Context to a Notification type.</p><p>For example in the Tile load notification we show a small bar graph showing the number of records loaded and a red line which shows the average load volume for that Tile. This allows me to quickly confirm at a glance that the load volume is within the expected threshold, without needing to click the Notification to see more details.</p><p>These glance widgets are context sensitive to the Notification type.</p><p>At any time I can click on the Menu Anywhere (3 dots) for a Notification and drill down to more detail.</p><p>For example drill down to the Trust Rule that has generated an anomaly, or the Change Rule that was used to load data into the Tile.</p><p>I can also see the detail behind any Notification.</p><p>Again we provide context sensitive details based on the Notification Type.</p><p>For Tile Load Notifications we will show the load stats for the historical loads for that Tile.</p><p>For an error Notification we used to show the BigQuery error.</p><p>As you can imagine, as soon as I saw one of those I would just message Nigel to have a look at it and tell me what I needed to change.</p><p>And again as you can imagine Nigel automated that task, so he doesn&#8217;t have to do it for me.</p><p>We now pass the error to the Google Gemini LLM and get it to return both a description of what the error is likely to mean, and a suggestion on how to resolve it.</p><p>Unsurprisingly this has resulted in me resolving a lot of the issues myself.</p><p>We also broadcast some of the Notifications to Private slack channels for a Tenancy. This allows us to view Notifications from multiple AgleData tenancies in one place, without the need to login to each Tenancy and check the Notifications screen.</p><p>I have a backlogged feature to create a new cross tenancy capability where we can see Notifications for multiple tenancies in an AgileData App screen, a cross tenancy portal so to speak.</p><p>As we have AgileData Network Partners starting to support multiple customers in multiple tenancies, this feature will become important in reducing the time they spend monitors and managing their customers data, and also remove the need for us to use Slack for this purpose.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;be66d947-2682-4552-a639-f38339e6e0a0&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#05 - Data Search]]></title><description><![CDATA[Why use complex query tools to find the data you need? When you can just search for your data values like Google Search.]]></description><link>https://agiledata.info/p/05-data-search</link><guid isPermaLink="false">https://agiledata.info/p/05-data-search</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Wed, 04 Dec 2024 22:50:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6Yu7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>Search your data as effortlessly as using Google Search, finding the exact data you need in seconds.</p><p>Simply type in any data value you want to find in a Tile (table) and the AgileData App will automagically search every row and every column in that Tile and it returns the rows that have that value.</p><p>Data Search enables Data Persona to look beyond metadata and dive into the actual content of datasets, finding the specific data values or patterns directly within the cataloged data.</p><p>This makes finding and using relevant data faster, removing the need to write query code or the need to use a third party query tools to find the data they need to complete their current data task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Yu7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Yu7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Yu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg" width="1456" height="1054" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1054,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59378,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6Yu7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Yu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Feature Requirement</strong></h2><p>The system must allow users to perform data search within the catalog, enabling them to search not only metadata but also the actual content of datasets for specific values or patterns.</p><h2><strong>Requirement Rationale</strong></h2><p>Catalog data search enhances the ability to find relevant information quickly, supports deeper data exploration, and improves the efficiency of data analysis by allowing users to locate specific data points directly within the cataloged datasets, and minimising the need to write code or use third party query tools.</p><h2><strong>How</strong><br></h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;bc6ef303-9f9f-4d82-b0bd-7b8948ec917a&quot;,&quot;duration&quot;:null}"></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/data-search/&quot;,&quot;text&quot;:&quot;View Interactive Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/data-search/"><span>View Interactive Demo</span></a></p><p></p><h2><strong>Why</strong></h2><p>This feature was built out of Nigel&#8217;s frustration with me asking him to write and run queries for me all the time.</p><p>Like Track N Trace, it is another one of those small micro features that we built to remove a frustration that ended up being one of the surprise features I use a lot.</p><p>As I often joke &#8220;I can't code, won&#8217;t code, don&#8217;t code&#8221;.</p><p>This statement is not quite true, while I can&#8217;t sit at a blank screen and write code from scratch, I can read and edit other peoples code, Im ok at googling and reusing code snippets and with the advent of LLM co-pilots I am even more proficient with cobbling code examples together to get a data job done.</p><p>But one of our core principles is if I have to write code in our AgileData App, or heaven forbid I have to write and execute code in BigQuery Studio in the Google Cloud Console, then we have some work to do to make the no/low code experience magical.</p><p>To be clear, a magical no code solution is nirvana for us.</p><p>The analogy I often use is the &#8220;Magic Sorting Hat&#8221;, stealing a pattern from Harry Potter. If we could build a magic sorting hat that would allow us to dump any of our customers data, of any complexity, into that hat, and it then did all the data work we have to do manually, automagically, then we are Done Done. I don&#8217;t believe that I will see that in my working lifetime, but then again, I wouldn&#8217;t have believed a tool like ChatGPT would have existed in my lifetime either.</p><p>As we are bootstrapping, so don&#8217;t have billions of VC money to build the magic sorting hat, and are not young enough anymore to couch surf and subsist on 2 minutes noodles, we are taking a softly softly catchy monkey approach to this, implementing AskAI, AssistedAI and AutomatedAI patterns where they add value.</p><p>We are iteratively moving towards the magic sorting hat, one small step at a time, knowing we are unlikely to get to the final end we desire, but still getting massive value and reducing the complexity of managing data on every step of the journey.</p><p>An interesting point from the three AI patterns lens is that we decided to use a Search pattern to solve this problem, not an AskAI chat pattern.</p><p>Back to Data Search.</p><p>I use this feature in a few different ways, often in combination with Track N Trace.</p><p>One use case is when I want to see the Details that relate to a specific Concept.</p><p>For example I have a Concept of Customer and I have some Details about the Customer, attributes such as name, date of birth, phone number etc. For a specific customer record there is a problem with the data, maybe the phone number isn&#8217;t what is expected.</p><p>So I will go into the Catalog Detail screen for the relevant Tile and search for that Customer, maybe based on their customer id, maybe on their customer name. I will get back a row (or rows) for any row/column that has that value, and I can then peruse all the values on that row.</p><p>Or maybe I want to search for a specific phone number to find which Customer(s) it is stored against.</p><p>Nothing that can&#8217;t be done using a SQL query tool, but remember I won&#8217;t code and I never want to have to leave the AgileData App to get the data work done.</p><p>And Nigel doesn&#8217;t want to write and run queries for me, hence this feature appearing.</p><p>Before this feature it was either Ask Nigel, use the BigQuery Studio Console or push the data to a Consume Tile and use Looker Studio on it.</p><p>The Data Search feature reduces the time, my effort and my cognition to find the data I need, which is what we are all about.</p><p>After using this feature for a while, there are a few things we need to iterate.</p><p>It would be good to be able to have more control on the columns that are searched and to be able to search for two different values at the same time. Of course those iterations will start us down the journey of building a query tool in the app, not sure that is something we want to do.</p><p>And I would love to be able to search every Tile for a data value, a bit like Track N Trace.</p><p>One of the secrets of Data Search is we are leveraging a BigQuery SEARCH() function for this, we are not writing and running a custom SQL query.</p><p>For now I will keep saving time when I need to find a data value by using it, and sleep well knowing I haven&#8217;t had to Ask Nigel to &#8220;write me another quick query&#8221;.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;49c5a3c8-50fd-4a9d-8317-4238cf713feb&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#04 - Track 'N' Trace]]></title><description><![CDATA[Why do you need to use a complex data lineage graph to work out where specific data goes in your data platform? When you can track n trace that data just like you track and trace your courier parcel]]></description><link>https://agiledata.info/p/04-track-n-trace</link><guid isPermaLink="false">https://agiledata.info/p/04-track-n-trace</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Tue, 19 Nov 2024 19:46:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y4L9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>Track n Trace provides end-to-end visibility of your data journey, allowing you to trace every step from source to consumption with ease, as if you were tracking the delivery of a physical package.</p><p>This enables Data Personas to understand where data originates, how it transforms, and where it is used, ensuring full transparency and a reliable audit trail. Whether for troubleshooting, compliance, or optimisation, Track n Trace delivers the clarity needed to manage your data flows effectively.</p><p>With its simply magical interface, Track n Trace empowers data teams to maintain trust in the data and streamline their data operations with ease.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y4L9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y4L9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y4L9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg" width="1456" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191505,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y4L9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y4L9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Feature Requirement</strong></h2><p>The system must provide capabilities to track and trace data lineage for a specific data value, enabling users to follow the flow of data through various transformations, sources, and destinations within the platform.</p><h2><strong>Requirement Rationale</strong></h2><p>Tracking and tracing data ensures transparency and accountability in data processing, supports compliance with regulatory requirements, and enhances&nbsp; in data by allowing users to understand the origin, transformation, and usage of their data.</p><h2><strong>How</strong><br></h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;0c4ef6f0-8400-4fba-a70e-55690329c8fe&quot;,&quot;duration&quot;:null}"></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/track-n-trace/&quot;,&quot;text&quot;:&quot;View Interactive Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/track-n-trace/"><span>View Interactive Demo</span></a></p><p></p><h2><strong>Why</strong></h2><p>This feature was built out of my frustration with the typical pattern for tracking and understanding lineage of data.</p><p>One of the benefits of working in a dedicated data team for an organisation, or only working for one customer, is over time you get tacit knowledge of all the data flows.&nbsp; If you want to understand how the data is or isn&#8217;t flowing through the data platform, you already have an idea and you typically just want to validate your understanding.</p><p>If you are a Fractional Data Team, you are often switching Customer context on a regular basis and that increases the level of data cognition you need.&nbsp; You have to tune into that Customers data flows so to speak, or &#8220;see the matrix&#8221;.</p><p>Often part of that cognition is the need to trace the lineage of a particular data flow for a Customer.</p><p>It might be for the dreaded statement from a Stakeholder, &#8220;that number doesn&#8217;t look right&#8221; which requires you to trace it from the Consume Tile the Last Mile tool is using, back to the Change Rules that are applying business logic to the data and potentially all the way back to the History Tile and System of Capture that generated that data.</p><p>It might be to trace the impact of a Systems of Capture change that you have been told is happening in the future, or more likely has happened and broken the current Data Contract. So you need to trace forward to see all the transformation logic that relies on that data and the Consume Tiles that use it.</p><p>Or you need to investigate the effort to &#8220;just make a small tweak to the business logic on how we calculate xxx&#8221;&nbsp; and you need to start in the middle of your data flow and move both left and right at the same time.</p><p>One of the first features we built in the AgileData App, was the Data Map, our version of the typical lineage graph.&nbsp; You can of course click on a Tile in the map and see the lineage both forward and back to visualise the flow of data.&nbsp; From there you can simply view the Change Rules that transform the data or view Tiles that hold the data as a result of each transformation step.</p><p>But if you are trying to trace an individual column this process is far from magical.&nbsp; </p><p>We could have implemented a column level view of the Data Map, but that would have resulted in a complexity of lines and flows I like to call &#8220;mad persons knitting&#8221;.&nbsp; And I would still have to click on each node or line to understand what was actually going on within that Data Flow.</p><p>One of the things we often do to understand the flow of the data is to try and trace a single data value.&nbsp; For example, pick the Id of an order in the System of Capture, or the name of a Supplier and trace that value through the Data Flows.</p><p>And that led us to the development of Track N Trace.</p><p>You enter a data value for a specific Tile and it will return with every Tile in the Data Map that is related to that Tile and has that specific value in it.&nbsp; And it will tell you the number of times that value appears in each dependent Tile.</p><p>It seems like a simple process, but as always creating simplicity from complexity is a bit like a duck floating on top of the water while peddling madly under the water.&nbsp;&nbsp;</p><p>Here is what the AgileData Platform is doing under the covers to achieve this magic:</p><ul><li><p>You start with a Tile in the AgileData App and you search for a specific data value.&nbsp;&nbsp;</p></li><li><p>It automagically traverses the Data Map in the background to harvest each transformation rule that is dependent on the Tile you started with.</p></li><li><p>It identifies each target Tile that each of the identified rules populate.</p></li><li><p>It then searches all the data in each of those Tiles for that data value.</p></li><li><p>It returns the name of the Tile and the number of times the data value appears as a simple list</p></li><li><p>You can click on any of the Tile names to drill through to the Change Rule that populates that Tile.&nbsp;&nbsp;</p></li></ul><p>With our Track N Trace feature we adopted the same pattern you use when you are tracking the delivery of a physical parcel.&nbsp; It&#8217;s just a little faster and a lot more reliable.</p><p>Again this feature saves me minutes every time I need to understand the lineage of the data.&nbsp; And when you do that data task multiple times a day, those minutes saved all eventually add up to hours.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;44fe884f-727c-4e4d-b0af-af2a21eb6690&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#03 - Catalog Browse and Search]]></title><description><![CDATA[Data Persona&#8217;s can use the Catalog to quickly search, find and access the Data Assets (Tiles) they need to complete a data task]]></description><link>https://agiledata.info/p/03-catalog-browse-and-search</link><guid isPermaLink="false">https://agiledata.info/p/03-catalog-browse-and-search</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Mon, 11 Nov 2024 19:12:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KDkP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>Data Persona&#8217;s can use the Catalog to quickly search, find and access the Data Assets (Tiles) they need to complete a data task, such as supporting the development of Information Products or using the data for analysis.</p><p>Topic Tags and Dynamic Filtering allows Data Assets to be easily found using the Organisations business terminology.</p><p>With the Menu Anywhere capability they can drill out to any other screen in the AgileData App, retaining the context of the Tile, removing the need to go to the screen and manually searching for that Data Asset again.</p><p>Any time a data user performs a data task in the AgileData App, or an automated data task is executed on the AgileData Platform, the Catalog is automagically updated.&nbsp; The Catalog data is treated as a first class citizen, not as data exhaust.</p><p>The Catalog is part of a wider ensemble of features that let them search or browse to locate essential Data Assets quickly, view comprehensive details for each set of data, and track the flow of data similarly to parcel tracking.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KDkP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KDkP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 424w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 848w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 1272w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KDkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png" width="1456" height="1055" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1055,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KDkP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 424w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 848w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 1272w, https://substackcdn.com/image/fetch/$s_!KDkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Feature Requirement</strong></h2><p>The system must include a comprehensive data catalog that allows users to organise, search, and manage metadata for all data assets within the platform.</p><h2><strong>Requirement Rationale</strong></h2><p>A data catalog enhances data discoverability, improves governance by providing clear documentation of data assets, and supports efficient data management by enabling users to easily locate and understand the available datasets.</p><h2><strong>How</strong></h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;378a79bf-05c3-4935-be2e-fa4edaed33e1&quot;,&quot;duration&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/catalog-search/&quot;,&quot;text&quot;:&quot;View Interactive Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/catalog-search/"><span>View Interactive Demo</span></a></p><p></p><h2><strong>Why</strong></h2><p>This is the one feature I use the most, I use it everyday when I am doing data work, because it is typically where I start from to do that data work.</p><p>It&#8217;s also one of the first features we built when we started developing the AgileData App.</p><p>We designed the Catalog based on the patterns for browsing and searching within Netflix. &nbsp; We treat a table or view of data as if it was a movie, we present each as a Tile.</p><p>We had three choices when we designed the Catalog feature:</p><ol><li><p>Use the typical data Catalog pattern that is adopted by most data catalog tools, a row per Data Asset and lots of detail about that asset in each row, what I think of as a library pattern.&nbsp; For me this was always orientated at hard core data people.</p></li><li><p>Use a Google search pattern, a blank screen with search, and then present a row per data Asset with a subset of detail as a result of that search.</p></li><li><p>Netflix browse or search pattern, which is what we went with.</p></li></ol><p>One of the problems with the search only patterns for Data Catalogs is it assumes you know what you are looking for.&nbsp;&nbsp;</p><p>We had a hypothesis that users would want to browse the Data Assets that were available.&nbsp;&nbsp;</p><p>I am a great fan of looking at consumer products and patterns and seeing if applying them to the data domain reduces complexity (or increases it).&nbsp; Netflix seemed to have the best pattern for browsing large volumes of movies to find what might interest you, so we implemented this as the primary UX in the Catalog to browse across large volumes of data sets.</p><p>This browse hypothesis was proven wrong, not because Information Consumers don&#8217;t want to browse, but because they just want to access the answer.  They want to find and access the Information Product that quickly answers their Business Question and lets them get on with the Action they need to take once armed with that answer.&nbsp; They don&#8217;t want to browse for sets of data that might or might not answer their Business Question and then have to do a whole bunch of data work themselves to get that answer.</p><p>We added the Marketplace feature to solve this problem, the Marketplace feature reuses all the browse and search capabilities of the Catalog, another great example of our Define Once, Reuse Often (DORO) principle.</p><p>After using the Catalog for quite a while, we found immense value in the browse pattern ourselves.&nbsp; One of the interesting things about being a Fractional Data Team is you switch Customer context on a regular basis.&nbsp; The ability to be able to land into the Catalog for a Customers Tenancy and quickly browse the data Tiles that are available, helps with reorienting oneself quickly.</p><p>If I know what I am looking for I often find browsing is still the quickest way to get to that data.</p><p>But not always.</p><p>So thats why we added search.</p><p>We started off with the typical search capability, text box at the top of the Catalog screen, type some text, hit enter and wait till the search results, in our case the Tiles, were returned.</p><p>It worked but it didn&#8217;t seem very magical.&nbsp;</p><p>One of the useful micro interaction patterns common in web based applications these days is the idea of type-ahead.&nbsp; You start typing text and the machine starts to makes suggestions for completing those words for you.</p><p>We applied an iteration of this pattern to provide Dynamic Filtering in the AgileData App.&nbsp; As you start typing in the search box we are automagically filtering the Tiles in the Catalog screen based on your search criteria. &nbsp; Small interaction pattern, but one that is magical.</p><p>One of the problems we have experienced with previous generation of Data Catalogs is they treat data and metadata as exhaust.</p><p>By this I mean other tools create the data and the metadata and the Data Catalog then &#8220;harvests&#8221; this on a scheduled basis.</p><p>We use a completely different pattern at AgileData.&nbsp;&nbsp;</p><p>When you do the data work in the AgileData App, or it&#8217;s automagically done for you by the machine in the AgileData Platform, the data work is immediately available in the Catalog.</p><p>This is because we flip the standard pattern for a Data Platform.</p><p>Instead of the pattern being:</p><ul><li><p>create Code &gt; create Metadata &gt; populate Catalog</p></li></ul><p>Our pattern is:</p><ul><li><p>Create Metadata &gt; store in Catalog &gt; create/execute Code</p></li></ul><p>We call this our Config Driven pattern, others call it Active Metadata.</p><p>When you use the AgileData App, or the machine does something automatically in the AgileData Platform, every step in the data tasks is stored in Config.&nbsp; The Catalog screens are then just surfacing this Config.</p><p>With this pattern there is no way the Catalog can get out of sync with the Data and/or Metadata.</p><p>We then use that Config time and time again to generate and execute the code we need, before deleting the code. We treat the Code as Cattle and the Config as Pets in DevOps parlance.</p><p>From day one we also allowed the creation and management of Topic Tags in the Catalog.</p><p>These Tags are freeform, you can create a Tag with any name for any use.&nbsp; They are purposely not stored in Config as a set of restricted or regulated &#8220;lookups&#8221;.&nbsp; The reason is you often need to quickly iterate the use of those Topic Tags.</p><p>When you go into the Catalog you will see the data Tiles in the relevant row for their Data Design role, ie History, Concept, Detail, Event, Activity, Consume.</p><p>You will also see a row for every Topic Tag that has been applied.</p><p>Want to see a row with data Tiles that relate to &#8220;Sales&#8221; add a Topic Tags called &#8220;Sales&#8221; to one or more Tiles and that row will automagically appear in the Catalog.&nbsp;</p><p>The Tags are also &#8220;active&#8221;, click on a Tag that is shown on the Tile and the Catalog screen will Dynamically Filter to only show Tiles with that Tag.</p><p>This way of navigating to quickly find Tiles has saved many hours over the years.</p><p>The other part of the Catalog feature I use every day is the Menu Anywhere.</p><p>On each Tile in the Catalog there is the Menu Anywhere option, 3 dots (&#8230;).&nbsp; Click on this and it will provide the list of things you can do that relates to this Tile, for example show the Change Rule that populates it, or the Trust Rules that validate it.</p><p>This means you can punch out to the Change Rule Step screen in one click, without needing to go to the Rules List screen, search for that Tile and then click to open the rule.</p><p>Interaction patterns like Menu Anywhere might save a few clicks and just a minute or two, but those clicks and minutes soon add up when you do them day in and day out.</p><p>We also present the Catalog screen from different parts of the top menu that are again context aware.&nbsp; If you click on the History Tiles menu under Collect, you will be taken to the Catalog screen already Dynamically Filtered by Data Design type of History.</p><p>Again it&#8217;s only a few clicks to open the Catalog screen, type History in the search box, and then the Catalog is dynamically filtered.&nbsp; But saving those clicks, by just clicking on a single menu option, just makes sense.&nbsp; Especially when you do that interaction multiple times everyday.</p><p>The Catalog feature started its life as a feature built for Information Consumers, because that was what everybody else did, they brought and implemented a Data Catalog for their end users (and then wondered why they never came).</p><p>Over years of iteration we have made it a tool for ourselves to help make the data work we do less complex.</p><p>Remember we are We are building a product that is focused on:</p><ol><li><p>taking a data task that takes me an hour and making it 10 minutes.</p></li><li><p>taking a data task that I have to think about how I can do it, and getting the machine to recommend what I should do, reducing the need for cognition.</p></li><li><p>automating the data task so we don't have to do it, getting the machine to do the work for us.</p></li></ol><p>We have added a small bit of personalisation into the AgileData App as well.</p><p>The Catalog screen is where every Data Persona starts when they login to an AgileData Tenancy,&nbsp;</p><p>A Consumer Personas automagically starts with the Marketplace screen.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;59bd72a1-bf83-4519-87e8-57a77c1d21ae&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#02 - Single Sign In]]></title><description><![CDATA[Streamline access with Single Sign-In, providing secure and seamless entry to the AgileData App and Platform with just one login.]]></description><link>https://agiledata.info/p/02-single-sign-in</link><guid isPermaLink="false">https://agiledata.info/p/02-single-sign-in</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Thu, 07 Nov 2024 01:23:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oHl8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>With Single Sign-On (SSO), users gain streamlined access to the AgileData App, eliminating the need for repeatedly logging in and reducing friction in their data day.&nbsp;</p><p>This feature leverages Google Identity and Access Management (IAM) to provide seamless and secure authentication, ensuring that users can easily connect to the platform using their existing credentials.&nbsp;</p><p>AgileData's SSO is not only secure but also scalable, designed to meet the needs of growing teams while maintaining the highest standards of data protection and access control.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oHl8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oHl8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 424w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 848w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 1272w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oHl8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif" width="1456" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128805,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oHl8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 424w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 848w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 1272w, https://substackcdn.com/image/fetch/$s_!oHl8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Feature Requirement</strong></h3><p>The system must support Single Sign-On (SSO) integration, allowing users to authenticate through a centralised identity provider to access the platform without needing separate credentials.</p><h3><strong>Requirement Rationale</strong></h3><p>SSO enhances security by centralising authentication management, improves user convenience by reducing the need for multiple logins, and streamlines access control across different systems and applications.</p><h2><strong>How</strong></h2><p></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;73196dcb-e22c-4508-9e91-d0bb3414849f&quot;,&quot;duration&quot;:null}"></div><p><strong><br></strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/single-sign-in/&quot;,&quot;text&quot;:&quot;View Interactive Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/single-sign-in/"><span>View Interactive Demo</span></a></p><p></p><h2><strong>Why</strong></h2><p>When we started building the AgileData Platform, we used Google Identity and Access Management (IAM) by default from day one, it just made sense.</p><p>We also use Google IAM to provide both Authentication capability and Single Sign On (SSO) capability for the AgileData App.</p><p>A quick definition of Authentication vs SSO:</p><ul><li><p>Authentication verifies a user&#8217;s identity to grant access to a specific system.&nbsp;</p></li></ul><ul><li><p>SSO enables a user to log in once and access multiple systems without re-entering credentials.</p></li></ul><p>There were a few reasons why using Google IAM made sense to us.</p><p>We used GSuite for our internal systems, email, Google Docs, Google Sheets etc.&nbsp; As a result Nigel and I already had Google Accounts.</p><p>When you start using the Google Cloud platform you typically start by accessing it via a Google Account to use the cloud services, which is what we did.</p><p>Our initial interface for Change Rules leveraged Google Sheets, so again we could easily access this via our Google Accounts.</p><p>When we started to build out the AgileData App on top of the AgileData Platform, we needed to decide how we would authenticate users to the App and how we would support SSO.</p><p>We had a few choices:</p><ul><li><p>Keep using Google IAM</p></li><li><p>Introduce the capability for us to store usernames and passwords in the AgileData Platform</p></li><li><p>Use a third party OAuth provider, for example Okta or Microsoft Active Directory</p></li></ul><p>For us creating and storing usernames and passwords directly in the AgileData Platform was not a pattern we wanted to adopt, we didn't want to store Passwords in the AgileData Platform.</p><p>It introduces a massive amount of risk when you directly hold those passwords, a risk we did not want to incur.</p><p>That left as with the option of using Google IAM or a third party provider such as Okta or Microsoft Active Directory (or whatever Active Directory is called by Microsoft these days)</p><p>Both of those products are aimed at Enterprise Customers and at that time we had not identified what our ideal customer type was.&nbsp; Plus there was an additional and quite substantial cost to both licence those products and to integrate them within our product.</p><p>One of our core Principles we operate at AgileData is to leverage serverless capabilities available within the Google Cloud Platform wherever possible.&nbsp; So naturally that led us to keep using Google IAM as our primary authentication method.</p><p>We also started using Google Groups as a foundational service for managing Authorisation and role level security, i.e controlling who could access what.&nbsp; That felt like a pretty weird pattern, but it is what the Google Cloud Platform uses itself to control role based access, so was the logical pattern for us to adopt.</p><p>One of the downsides of using Google IAM is each AgileData User has to have a Google Account to be able to login.&nbsp; Luckily Google provides an easy way to link a Google Account to an external email address, which meant our customers could log into the AgileData App using their standard corporate email address and didn&#8217;t need a gmail address.</p><p>A downside of this linked Google Account pattern has been the fact they can&#8217;t use the password they use for their corporate email (well they can, but it is not automagically sync&#8217;d) to login. We always thought we would eventually integrate Google IAM with our customers' Microsoft Active Directory environments when needed, a pattern that is well documented.&nbsp; But we have yet to have a customer where that integration was required.</p><p>We did think about opening up the SSO capability to allow users to login into the AgileData App via their social media account, i.e Meta (well Facebook back then) X, (well Twitter back then) etc.&nbsp; But we felt that most customers would not be comfortable with their users accessing their organisational data via these personal social media accounts.</p><p>One of the other benefits of using Google IAM as both our SSO and Authentication service is we automatically inherit the scale and might of Google to identify and mitigate threats.&nbsp; Something we couldn&#8217;t afford to do well ourselves.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;80bf9064-2cf2-4a23-952e-bda5a2cc4641&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#01 - Marketplace]]></title><description><![CDATA[Information Consumers can quickly search, find and access the Information Products they need to answer their business questions.]]></description><link>https://agiledata.info/p/01-marketplace</link><guid isPermaLink="false">https://agiledata.info/p/01-marketplace</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Sun, 03 Nov 2024 20:51:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b40400f3-34e2-4d3c-b6f2-e60df0ed2cc0_2556x1830.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What</strong></h2><p>Information Consumers can quickly search, find and access the Information Products they need to answer their business questions.</p><p>This feature enables Information Consumers to search and find all the available&nbsp; dashboards, reports and analytical models in the AgileData App, regardless of what third party Last Mile tool they are created in.</p><p>It also enables the Information Consumer to quickly open that report or dashboard directly from the Marketplace, when those reports are accessible by a web URL</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tgG-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tgG-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 424w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 848w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 1272w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tgG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png" width="1456" height="1042" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1042,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:339193,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tgG-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 424w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 848w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 1272w, https://substackcdn.com/image/fetch/$s_!tgG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb753b97d-3165-43a6-89d1-b18c537b2762_2556x1830.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>Feature Requirement</strong></h3><p>The system must include an Information Product Marketplace, where users can browse, discover, and access a curated selection of Information Products.</p><h3><strong>Requirement Rationale</strong></h3><p>An Information Product Marketplace facilitates the sharing of information assets, enhances collaboration across teams, and provides users with easy access to valuable insights and tools, driving data-driven decision-making and innovation.</p><h2><strong>How</strong></h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;40398852-065b-4cb3-8e64-40c853ffc791&quot;,&quot;duration&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/project/marketplace/&quot;,&quot;text&quot;:&quot;View Interactive demo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/project/marketplace/"><span>View Interactive demo</span></a></p><p></p><h2><strong>Why</strong></h2><p>One of the core principles we decided on when we started building AgileData, was we wouldn&#8216;t focus on building the last mile reporting visualisation tools.&nbsp; The Visualisation market was very crowded and the cost of developing the table stake features were too high, there were more valuable areas of complexity we could focus our development effort on making simpler.</p><p>We also had a bet that most organisations would already have a Visualisation tool of choice and wouldn&#8217;t want to use the basic version we would create.&nbsp; This bet turned out to be wrong as we started to focus on helping organisations who didn&#8217;t already have a data team, and typically they also didn't have a visualisation tool.</p><p>In this scenario we started using Google Looker Studio to deliver these visualisations as it was a good tool for the basic stuff, it had no licence cost, it ran as a serverless / SaaS product and lastly it was tightly integrated with Google BigQuery which we use to store the data in AgileData.</p><p>The Marketplace feature came as a result of watching how our Customers used, or in this case did not use the AgileData App.</p><p>Over the years we have spent a bit of time extending out the Catalog capability in the Agiledata App.&nbsp; We use the Catalog capability extensively ourselves, as the launching point for most of the Data Work we need to do.</p><p>But when an Information Consumer from a&nbsp; Customer went to use the AgileData App for the first time, they got confused.&nbsp; They could see a bunch of Tiles that related to the Data Work we were doing for them.&nbsp;&nbsp;</p><p>There were the History Tiles in the Catalog where we stored an immutable and histories copy of the data we had collected from their Systems of Capture.</p><p>There were Concept, Detail and Events Tiles in the Catalog which represented tha data in a way that matched was Designed to match their Business Language and make it fit for purpose</p><p>There were Consume Tiles in the Catalog, these were the sets of data that could be used to create the visualisations, reports etc.</p><p>But the final thing that they actually consumed, the Information Products, were not there and the Information Consumers found that confusing.</p><p>We also had a problem were there was no real portal capability in Looker Studio, so it was difficult for Information Consumers to find and use the Looker Studio reports they needed.&nbsp; We found ourselves constantly emailing URL links to the reports to them.</p><p>To solve this our first bet was to enable third party URL&#8217;s to be created In the Catalog, as Info App Tiles.&nbsp; This allowed you to paste a URL to a report and give it a name and a Tile would appear for it in the Catalog.</p><p>This resolved some of the issues for the Information Consumer, but they still found the Catalog confusing as Info App Tiles were just one of the many Tiles they could see.</p><p>We had a choice where we could have used personalisation to default a filter for the Information Consumer user types when they viewed the Catalog, and only showed them Info App Tiles by default, but instead we decided to break it out to its own top menu, which we named Marketplace.</p><p>This was based on a bet that we will extend out the Information Product sharing capabilities in the AgileData App in the future.</p><p>When a user who is an Information Consumer logs into the AgileData App, they are now taken directly to the Marketplace screen and are presented with the Information Products they can consume.</p><p>From there they can search, find and access any Information Product they need to answer their business question with data and take the action they need based on that data.</p><p>All the other user persona&#8217;s still get shown the Catalog when they login to the AgileData App.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;337560e9-6d1c-4161-b064-301d63a84158&quot;,&quot;caption&quot;:&quot;I love building the AgileData Product with Nigel Vining. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#42 - Time for a little AgileData App feature show and tell&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T22:30:21.657Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/time-for-a-little-agiledata-app-show&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148384576,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[#42 - Time for a little AgileData App feature show and tell]]></title><description><![CDATA[42 AgileData Features]]></description><link>https://agiledata.info/p/time-for-a-little-agiledata-app-show</link><guid isPermaLink="false">https://agiledata.info/p/time-for-a-little-agiledata-app-show</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Wed, 30 Oct 2024 22:30:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4d69e95e-2913-4234-8e86-8114b74e0122_1719x1251.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I love building the AgileData Product with <strong><a href="https://www.linkedin.com/in/nigelvining/">Nigel Vining</a></strong>. I love the fact that we are building something that makes the complex data work we do for our customers simpler and quicker.</p><p>We are literally building the product we have always wanted and needed to do data work, faster, easier and cheaper.</p><p>We are building a product that is focused on:</p><ol><li><p>taking a data task that takes me an hour and making it 10 minutes.</p></li><li><p>taking a data task that I have to think about how I can do it, and getting the machine to recommend what I should do, reducing the need for cognition.</p></li><li><p>automating the data task so we don't have to do it, getting the machine to do the work for us.</p></li></ol><p>Nigel and I have a specific set of complimentary skills which means we are pretty good at building the product we need.</p><p>The thing that neither of us are good at is Product Marketing. We have fallen into the old start-up trap of building it, rather than selling it.</p><p>Thats not such a bad thing, our current business model is to provide our customers with a Fractional Data Service.  For $5k a month, they are buying a data team, that comes with a data platform and continuous data outcomes, not just our AgileData App &amp; Platform.</p><p>Our product is designed to enable us to scale the Fractional Data Service. The goal is a single data person should be able to sustainably support at least 10 different organisation's at the same time.</p><p>As part of trying to achieve this scale we have built a pretty amazing product, when I show people they often comment at the breadth and depth of what we have built.</p><p>So I am going to try an experiment.</p><p>I am going to create 42 posts, one that outlines each of my favourite AgileData App feature we have built and why we built it.</p><p>At the end I will post a Google Sheet with the description of those 42 features (and a few more) as a recommended list of requirements for a data platform.</p><p>Each post will have the same structure:</p><ul><li><p><strong>The What</strong>,  short overview of the the feature;</p></li><li><p><strong>Feature Requirement</strong>, if you were asking a vendor for that feature what would you ask for;</p></li><li><p><strong>Requirement Rationale</strong>, if you had to justify to the powers to be why you needed this feature, you would use this;</p></li><li><p><strong>The How</strong>, a short interactive click through video of how it works in AgileData (seeing is believing);</p></li><li><p><strong>The Why</strong>, the story behind why we built that feature and what we learnt.</p></li></ul><p>We have built these features because we needed them, so if you are looking to build or buy your own data platform, those are the features I would recommend you look for.<br><br>At the end of the 42 posts I will give you a shopping list of features, with the Feature Requirement and the Requirement Rationale which you can use as a requirements document or evaluation whenever you need it.  I will also aim to add the features into that list that we know we need but haven&#8217;t built yet.</p><p>I will update this post as I go, to create a table of contents for the features so to speak, or you can click on the &#8220;42 Features&#8221; menu above to get a list of features/articles I have already posted.<br><br></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;454ae7cf-68fc-4243-80a8-d808fba0ff0b&quot;,&quot;caption&quot;:&quot;What Information Consumers can quickly search, find and access the Information Products they need to answer their business questions.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#01 - Marketplace&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-03T20:51:31.007Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b40400f3-34e2-4d3c-b6f2-e60df0ed2cc0_2556x1830.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/01-marketplace&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:149334622,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;57701556-dedd-46bf-a911-45296aeb7f1b&quot;,&quot;caption&quot;:&quot;What With Single Sign-On (SSO), users gain streamlined access to the AgileData App, eliminating the need for repeatedly logging in and reducing friction in their data day.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#02 - Single Sign In&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-07T01:23:23.596Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b1e1f4-2ebc-46f6-b560-efd082562189_3426x1962.gif&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/02-single-sign-in&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:149456194,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;442fb92c-8c9d-4368-9919-b3d366e6512a&quot;,&quot;caption&quot;:&quot;What Data Persona&#8217;s can use the Catalog to quickly search, find and access the Data Assets (Tiles) they need to complete a data task, such as supporting the development of Information Products or using the data for analysis.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#03 - Catalog Browse and Search&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-11T19:12:44.955Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959abcbc-8c8f-4e68-b25f-2f2116e3dfee_1719x1245.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/03-catalog-browse-and-search&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:151467317,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;565105b4-f29a-44cd-b078-6a1c61f5e148&quot;,&quot;caption&quot;:&quot;What Track n Trace provides end-to-end visibility of your data journey, allowing you to trace every step from source to consumption with ease, as if you were tracking the delivery of a physical package.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#04 - Track 'N' Trace&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-19T19:46:42.209Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e84267-ba78-4efa-85ab-0002c4d449f4_2150x1559.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/04-track-n-trace&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:151888657,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:3,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;693eef57-3473-4cbf-ae14-596f552bfaca&quot;,&quot;caption&quot;:&quot;What Search your data as effortlessly as using Google Search, finding the exact data you need in seconds.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#05 - Data Search&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-04T22:50:02.683Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b80403-4055-4770-95e1-bc62ff6c1f16_1718x1244.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/05-data-search&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:152589900,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;96a77357-d594-4555-a06c-ae6ec19b9573&quot;,&quot;caption&quot;:&quot;What Observe everything that is going on in the AgileData Platform, as it happens.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#06 - DataOps Notifications&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2774203,&quot;name&quot;:&quot;Shagility&quot;,&quot;bio&quot;:&quot;I help data teams work in a Simply Magical Way&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f09a2d19-6707-4ef9-a4e3-a5e770fb640f_1406x853.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-18T20:12:35.712Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76e1009-47a4-41dd-a80e-008bb682fb23_2150x1559.bin&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://agiledata.substack.com/p/06-dataops-notifications&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153329145,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Agile Data N&#8217; Info&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd205855a-2c1e-418a-a9bf-7fece54f2d76_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Still to come:</p><ol><li><p>Catalog Details</p></li><li><p>Data Map</p></li><li><p>Design Map</p></li><li><p>Disco</p></li><li><p>Answer  Quick Question</p></li><li><p>Ask ADI</p></li><li><p>Trust Rules Roll Up</p></li><li><p>Custom Trust Rules</p></li><li><p>File Upload</p></li><li><p>API&#8217;s</p></li><li><p>Change Rule</p></li><li><p>Explore</p></li><li><p>Catalog Review</p></li><li><p>Menu Anywhere</p></li><li><p>Opinionated Data Architecture</p></li><li><p>Topic Canvas</p></li><li><p>Shared Tiles</p></li><li><p>Trust Rules Results</p></li><li><p>ADI assist</p></li><li><p>Events</p></li><li><p>Explore in Looker Studio</p></li><li><p>Share Google Sheets</p></li><li><p>Data Preview - Profile</p></li><li><p>Catalog - Business Context</p></li><li><p>Rule Data Diff</p></li><li><p>Rule version</p></li><li><p>Concept / Event Matrix</p></li><li><p>Renamed consume fields</p></li><li><p>Rule Step Wizard</p></li><li><p>Data sync</p></li><li><p>Natural Language</p></li><li><p>PII detection</p></li><li><p>Orchestration of dependent code</p></li><li><p>Data Contract</p></li><li><p>Export / Import rules</p></li><li><p>Data Match</p></li></ol>]]></content:encoded></item><item><title><![CDATA[No product idea survives the first customer engagement]]></title><description><![CDATA[And that is ok]]></description><link>https://agiledata.info/p/no-product-idea-survives-the-first</link><guid isPermaLink="false">https://agiledata.info/p/no-product-idea-survives-the-first</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Tue, 03 Sep 2024 19:28:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U-7B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We have just made some changes to the menu structure of the AgileData Discovery App.</p><p>One of the main changes was moving from a menu structure that had a subset of the Outputs as sub menus under the Outputs category:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U-7B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U-7B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 424w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 848w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 1272w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U-7B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png" width="1456" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U-7B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 424w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 848w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 1272w, https://substackcdn.com/image/fetch/$s_!U-7B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6b3d0c-03c9-4761-9c3c-eba6462fedb2_2048x1485.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To a single Outputs menu that had all the outputs listed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9yKh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9yKh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 424w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 848w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 1272w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9yKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png" width="1456" height="1054" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1054,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9yKh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 424w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 848w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 1272w, https://substackcdn.com/image/fetch/$s_!9yKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F969f5d14-e42a-4994-8518-90d155768edd_1723x1247.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few other changes:</p><ul><li><p>We also moved the Upload and Notifications menus to the the top menu, to make them easier to find. </p></li><li><p>We extended the Output version dropdown from only showing the date/time to include a combination of the Input used and the date/time, to make it easier to find the output version you want.</p></li><li><p>We provide a link from each notification to the Outputs screen.</p></li><li><p>We broke the Physical and Reporting models to include options for model patterns, i.e Dimensional vs Data Vault.</p></li><li><p>We automated the creation of a Zip file with all the Outputs, so you can easily download them in one go.</p></li></ul><p>All these changes were all based on feedback from our first user.</p><p>I knew which Output was under which Output Type, as I defined them, our first user didn&#8217;t.  So they couldn&#8217;t easily find the Output they needed.</p><p>A simple change of menu solves that.</p><div><hr></div><p>When I started out my journey into the product domain, I was that typical product novice.<br><br>I always thought our product wasn&#8217;t easy enough for others to use ( I was right, but thats not the point), and so I held off letting others use it.<br><br>This wasn&#8217;t that much of a problem for us, as our initial goal was to reduce the effort of doing the data work for our customers.<br><br>We were building a product that focused on:</p><ol><li><p>taking a data task that takes me an hour and making it 10 minutes.</p></li><li><p>taking a data task that I have to think about how I can do it, and getting the machine to recommend what I should do, reducing the need for cognition.</p></li><li><p>automating the data task so we don't have to do it, getting the machine to do the work for us.</p></li></ol><p>There were a bunch of table stake features we needed to deliver the basic data tasks required to collect, combine and consume data.</p><p>Every new customer we onboarded gave us new data complexity, and we needed to create the features that made that complexity simple.  Each time we added these features it made it quicker to do the work next time.<br><br>As we were bootstrapping the product, we would often use ugly things to deliver the first cut of the features, initially  our Change Rule logic was typed into a Google Sheet cell, with no validation.</p><p>And so I convinced myself that the product was never ready to let somebody else lose on it.<br><br>That was a mistake.<br><br>If I had of done that I would have got feedback earlier that would have been useful.</p><p>Would those initial users have continued to use the product, probably not.  But that would have been ok, as our goal was and still is to use our Product to provide a Service in a way nobody else can.</p><p>But that feedback would have helped us design a better product.</p><p>A lesson learn&#8217;t, and one I am applying to the AgileData Discovery App.<br><br>So if you are interested in using the initial version and providing some feedback, let me know.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://agiledata.io/disco/#contact&quot;,&quot;text&quot;:&quot;Get in touch&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://agiledata.io/disco/#contact"><span>Get in touch</span></a></p><p></p><p><br><br><br></p>]]></content:encoded></item><item><title><![CDATA[The 3 patterns of AgileData AI]]></title><description><![CDATA[And how I think about them]]></description><link>https://agiledata.info/p/the-3-patterns-of-agiledata-ai</link><guid isPermaLink="false">https://agiledata.info/p/the-3-patterns-of-agiledata-ai</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Mon, 29 Jul 2024 20:19:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6d97db08-5ff4-46e1-9305-550ddef6ed79_3073x1020.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In one of our regular catchup sessions with an AgileData Network Partner they mentioned that in the conversations they were having with prospective customers, the question of AI in data was being constantly raised.</p><p>Having AI embedded in your product have become table stakes it seems.</p><p>I have been thinking about our approach to AI in our product for a while and landed on 3 patterns that I use as a reference.</p><ol><li><p>Ask AI</p></li><li><p>Assisted AI</p></li><li><p>Automated Ai</p></li></ol><p><strong>Ask AI</strong></p><p>Ask AI is where a human asks a question and the machine replies, this is repeated until the human gets what they need, then the human goes and undertakes the data work.</p><p>This is the now typical &#8220;ChatGPT&#8221; pattern.&nbsp; The user starts a conversation, asks a question, gets a reply and asks the next question.</p><p>Lets use two examples, answering business questions and understanding data to highlight this pattern.</p><p>For the answering business questions , the typical example is the Text to SQL pattern, where the Information Consumer asks how many customers there were last month using natural language and the machine creates some SQL, runs it and returns the answer.&nbsp; Then the Information Consumer asks their next question and gets the next response.</p><p>Then they move on to take the actions required to create an outcome and hopefully that outcome results in business value.</p><p>For understanding data , an example would be a Data Engineer collecting the data from a System of Capture, the Data Engineer passes the schema for all the tables to the LLM and asks it to indicate which system the data comes from and the LLM responds with something like Shopify.&nbsp; The Data Engineer can then ask what is the likely Ontology for this data and then what is the likely Taxonomy all based on that schema.</p><p>They then move onto the manual data work of Designing the Data Model, creating the code to transform the data to load it into the data model.</p><p>The key to this pattern is the human asks a question, gets some information, asks another question, gets more information and finally the human does the data work themselves.</p><p>The value of the pattern is it reduces the cognition required to do the data work.</p><p><strong>Assisted AI</strong></p><p>Assisted AI, is where the machine helps the human do the data task that is required, without the need for the human to ask.</p><p>Lets use the same two examples, answering business questions and understanding data.</p><p>For answering business questions, an example is an Information Consumer using a Viz tool to graph data.&nbsp; The tool looks at the shape of the data and suggests the best graph type that should be used to visualise data of that shape.&nbsp; The Information Consumer can accept that recommendation and use that graph type or override it and create whatever graph type they want.</p><p>For understanding data, an example is a Data Engineer who needs to create transformation code to define new Concepts.&nbsp; The machine looks at the schema and data examples from the Systems of Capture and suggests that the Data Engineer creates Concepts for Customers, Orders, Products, Order Lines and Payments.&nbsp; It also suggests the unique business keys that can be used to define each of those Concepts.&nbsp; The Data Engineer can accept those recommendations and the transformation code is created for them to review and publish.</p><p>The key to this pattern is the machine is making a recommendation which the human can accept or ignore during the process of doing the data work.</p><p>The value of the pattern is it reduces the time and the cognition required to do the data work.</p><p><strong>Automated AI</strong></p><p>Automated AI, is where the machine does the work, the human is no longer involved.</p><p>For answering business questions, an example would be where the machine observes all the business questions that are asked and answered overtime, determines what the intent and outcome of those questions are, and then generates and sends answers to new questions directly to the Information Consumer or an action directly to the System of Action.</p><p>For example it might determine that Information Consumers are constantly looking for # of abandoned carts and so it will send a daily alert with the number of abandoned carts on the ecommerce store to the relevant Information Consumer. Or it might go one step further and push the abandoned carts to the System of Action that will send the customer an email reminding them that they have left something in the cart.</p><p>For understanding data, an example would be the first time data has been collected from a new System of Capture the machine will determine the relevant Concepts that should be created, automatically create the Data Model and Transformation code to create them, publish that code and execute it so the data is ready for consumption.</p><p>The key to this pattern is the machine is doing the data work, the human is not involved at any step in the process.</p><p>The value of the pattern is it removes the need for the human to&nbsp;spend time doing the data work and removes the need for the human to have the experience and the cognition required to do the data work.</p><p><strong>An AgileData Platform and App view of these three patterns.</strong></p><p>I often joked in the old waves of Data Mining and then Data Science that 90% of all analytical models were "Group By&#8217;s", 5% were linear regression and then a small percentage were advanced techniques like neural networks etc.</p><p>I still think the same is true in the AI wave.</p><p>We did some work a while ago in the AgileData Platform using KMEANS to determine load anomalies.&nbsp; We found that using some Group By patterns we were able to detect the same load anomalies, but at a much cheaper compute cost.&nbsp; Obviously we need to keep experimenting and testing this and at some stage we will find the use case where we need to move to more advanced patterns.</p><p>So here is where my thinking is at with the 3 patterns of AI in the AgileData Product and App.</p><p><strong>AgileData Ask AI</strong></p><p>We have experimented multiple times with this pattern over the five years we have been building out AgileData.</p><p>Initially using some NLP patterns, then leveraging&nbsp;Google Clouds alpha Q&amp;A service.&nbsp; Each time the level of effort and cost to build this was higher than we wanted to spend and so it was deprioritised.</p><p>Like most companies who provide data tooling and technology we are now of course experimenting with LLM&#8217;s to see how we can embed automated text to sql capabilities, and more importantly experimenting to see how we can ensure it does not hallucinate and give the Information Consumers invalid answers to their Business Questions.</p><p>The emergence of LLM&#8217;s and Generative AI tools and patterns means we can finally implement this capability in the AgileData App, at a lower level of effort and cost.&nbsp; We built the first version leveraging OpenAI and ChatGPT, and as we are closely bound to Google Cloud we have implemented the latest experiments using Vertex AI and Bison.</p><p>We are also experimenting with how we can use Ask AI to help understand where to go in the AgileData App to get a data task done, and to reduce the cognition needed to use the App.</p><p>We will keep iterating these to improve the usability, expand its use cases and also reduce the chances of the dread hallucinations (aka when the machines makes shit up and provides answers the user cannot trust)</p><p><strong>AgileData Assisted AI</strong></p><p>We have had ADI, our version of a chat bot, in the AgileData App, since day one.&nbsp; Originally she was your typical chatbot &#8220;phone menu&#8221;, where she presented a bunch of menu options.</p><p>Then she became a feedback loop, when you are doing a task in the AgileData App, she explains what will happen next and asks you to confirm.&nbsp; If the thing you are about to do is semi destructive she will explain the impact in more details and ask you to confirm again.</p><p>We will move her to provide more recommendations and assistance over time, so when you are doing a data task in the AgileData App, she will recommend things that will reduce the time or cognition you need to complete that task.</p><p>The balance will be making her useful and not useless and annoying like Microsoft Clippy was.</p><p><strong>AgileData Automated AI</strong></p><p>Again we have been automating data tasks in the AgileData Platform and App since day one.</p><p>We do automated anomaly detection to notify you when the data collection looks out of whack.</p><p>We automatically check the Data Design is still valid whenever new data is loaded into it.&nbsp; For example we check that the unique business keys for all Concepts are still unique.&nbsp; Originally you used to have to manually add a Trust Rule for this each time you define a new business Concept, now we do it automagically in the Platform, so you don&#8217;t need to do that effort (or remember to do it).</p><p>You can also ask for the Concepts and Details to be automatically designed, generated and loaded from a System of Capture table, and the AgileData Platform will automatically do that Data Work with no input required from you.&nbsp; We will extend this out to enable it to do the same automated work across multiple tables from a single System of Capture and then across multiple systems.</p><p><strong>Group By vs Deep Learning</strong></p><p>Often the automation we have built is based on simple patterns, simple code, simple group by&#8217;s, not large complex deep learning models.</p><p>But in my view that's not the point, who cares what the kitchen looks like as long as I get the meal and experience I wanted.</p><p>And that is why we focus on the three patterns of AgileData AI:</p><ol><li><p>Ask AI</p></li><li><p>Assisted AI</p></li><li><p>Automated Ai</p></li></ol><p>Each of these are bound by the way a user interacts with the machine, asking questions, getting recommendations, having the work done for them (aka no interaction needed).</p><p>How we build the magic in the backend is our problem.</p><p><a href="https://agiledata.io/blog/agiledata-product/the-3-patterns-of-agiledata-ai/">https://agiledata.io/blog/agiledata-product/the-3-patterns-of-agiledata-ai/</a></p>]]></content:encoded></item><item><title><![CDATA[We are working on something new at AgileData, follow us as we build it in public #AgileDataDisco]]></title><description><![CDATA[This post will be updated daily]]></description><link>https://agiledata.info/p/we-are-working-on-something-new-at</link><guid isPermaLink="false">https://agiledata.info/p/we-are-working-on-something-new-at</guid><dc:creator><![CDATA[Shagility]]></dc:creator><pubDate>Wed, 05 Jun 2024 23:05:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9d003782-1b80-4220-9bab-c84441acd5af_2726x2958.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p>My doesn&#8217;t 30 days fly by when your having fun #AgileDataDisco</p><p>30 days ago Nigel Vining  and I decided to do a 30 day experiment.</p><p>We wanted to extend our McSpikey to see if using a LLM to do discovery on a legacy data warehouse was a feasible, viable and valuable product idea.</p><p>And we decided to do it in public, posting daily about our journey.</p><p>Time is up!</p><p>And the answer is &#8230;&#8230;. yes.</p><p>We confirmed it was feasible to build, we confirmed it was viable to build with just the two of us.</p><p>And we have just got our first paying customer and a verbal yes from a second, so I think we can say it&#8217;s valuable.</p><p>There is still a lot to do, but I will revert to my usual posting process of writing whenever something comes to the top of my mind.  No doubt some of that will be about AgileData Disco.  So keep following along if you are interested.</p><p>And we have sponsored a stand at Big Data London in September, so if you want to see the product, pop along to stand Y760 and say hi.</p><p>Those that know me well, know I have a thing for t-shirts.</p><p>And given we have a new product, I thought it was only fitting that we got a new ADI for this product.</p><p>I give you &#8230;..</p><p>AgileData Disco!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F5vC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F5vC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 424w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 848w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 1272w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F5vC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png" width="1456" height="1580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1580,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1053596,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F5vC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 424w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 848w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 1272w, https://substackcdn.com/image/fetch/$s_!F5vC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968b597f-cb4b-4379-9656-ef5b7f2167ca_2726x2958.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><p><strong>2024/07/05</strong></p><h2>Product Market Fit is wow </h2><p>#AgileDataDisco</p><p>As in wow that is frickin cool, not as in Way or Working.</p><p>For AgileData we have a simple sales message.&nbsp; It will cost you at least $600k per annum in salaries for a data team.&nbsp; We (and our AgileData Network Partners) will deliver that as a Fractional Data Team for $60k a year.</p><p>You will also need to pay for a bunch of data technology, data collection, data storage, transformation tool, catalog etc, and then all the ongoing storage and compute costs to run that technology.&nbsp; We provide all that in the $60k (yes you read that right, that includes the storage and the compute costs, we pay for it not you)</p><p>You will be amazed at the lack of wow we get from this sales message.</p><p>I have been socialising the AgileData Disco prototype and outputs a lot over the last 30 days.</p><p>I am constantly hearing people say wow.</p><p>And then they do one of two things.</p><p>They say, the prototype didn't automagically create it, did it? You did some manual turking to produce that. To which I demo uploading a query log from a BI tool, hitting generate and a few minutes later showing them the output, seeing is believing.</p><p>Or they stop and think, and then they come back with a use case they could apply it to right now.</p><p>I think that wow is what Product Market Fit looks like.</p><p>Next let&#8217;s close the 30 days experiment out #AgileDataDisco</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/07/04</strong></p><h2>Where is my moat?  </h2><p>#AgileDataDisco</p><p>TL;DR </p><p>There is no moat!</p><p>You know when you buy a car.  You think oh that's a little different, and then after you buy it you notice hundreds of them on the road.</p><p>This is different, everybody is building an AI product, you don&#8217;t even need to look around to find them.</p><p>It&#8217;s so bad I wouldn&#8217;t be surprised if when I visit my 74 year old mother next I find she is building an AI product on her new laptop.</p><p>Every data vendor is embedding AI into their current products.</p><p>Every data consultancy I talk to is using bench time to build an AI powered consulting product.</p><p>VC founded AI startups are emerging from &#8220;stealth&#8221; on a daily basis.</p><p>The big LLM providers are releasing capabilities that eat these start-up ideas daily and then provide them as part of their fixed monthly fee or pay per token offering.</p><p>The cost of access to these LLM capabilities is so low there is little if any barrier to entry.</p><p>In fact you can use a LLM to help you build your LLM based AI product, reducing the barrier to entry even more.</p><p>I talk to lots of people and I am finding AI products being built for so many different use cases over and above data.</p><p>Our AgileData Disco experiment is based on a language, patterns and pattern templates I have been iterating on for over a decade.  </p><p>But that is no moat.</p><p>I reckon I can use somebody's LLM powered product for a little while and then reverse engineer the majority of their prompts and RAG patterns to have a clone quickly created.</p><p>We are using a lot of the AgileData capabilities we have already already built for AgileData Disco, things like private tenancy&#8217;s, file upload, Google Gemini API&#8217;s integration etc.</p><p>But lots of other data vendors have these things.</p><p>Our AgileData Network is growing, but it&#8217;s not big enough to deliver access to a market that nobody else has, it&#8217;s not big enough to give us (and them) a flywheel motion (yet).</p><p>There is no moat.</p><p>Not for us, and not for most other companies building something using GenAI and LLM&#8217;s.</p><p>And I am ok with that.</p><p>I see enough potential value in what we are doing, to keep investing our time in experimenting with AgileData Disco.</p><p>I see ways we can help customers reduce the complexity of their data in a simply magical way.</p><p>I can see how it will help us achieve our vision of working with people we respect, who can work from anywhere in the world (we think of it as working from any beach), who get paid well for their expertise and experience, to support the lifestyle they want.</p><p>Next my second to last post in the #AgileDataDiscover series.</p><p>My doesn&#8217;t 30 days fast when you are having fun!</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p></p><p><strong>2024/07/03</strong></p><h2>Let&#8217;s think about the pricing options </h2><p>#AgileDataDisco</p><p>Here is when the chicken and the egg pattern hits again, without defining the GTM channel its going to be difficult to define a pricing strategy.</p><p>Time to brain dump via writing to collate the jumble of thoughts in my head.</p><p>A key Product Management pattern for pricing is to focus on the value delivered to the customer not the cost it takes to deliver it.</p><p>The problem I have with this is we end up with that ridiculous behaviour I outlined where I would get &#8220;custom&#8221; pricing for a bottle of milk in a supermarket.</p><p>While being profitable is important, we are boostrapping and so need to be profitable as we don&#8217;t have VC funding to spend money while bleeding money, Nigel Vining  and I want to build a sustainable business we can run for 20 years not a &#8220;growth engine&#8221; we can flick quickly and move on to the next shiny thing.</p><p>Our core values and our vision leads us to a pricing model that means we make good money, but fair money.</p><p>We will probably leave money on the table with this approach but I am ok with that.</p><p>With that in mind lets list the options we could use to charge for AgileData Disco.</p><ul><li><p>Pay per token used</p></li><li><p>Pay for a set of tokens in advance</p></li><li><p>Pay per input uploaded</p></li><li><p>Pay per input used</p></li><li><p>Pay per output created</p></li><li><p>Pay each time its run to produce an output</p></li><li><p>Pay a fixed monthly fee</p></li></ul><p>I tested these with the leader of a data team asking what their preferences was for paying for the outcomes AgileData Disco delivers, they responded with:</p><p>1. Pay per output</p><p>2. Pay for a bunch of tokens in advance</p><p>3. Pay per token used</p><p>4. Pay each time it is run to produce an output</p><p>One problem is I am not doing robust research by asking that,  I gave a predefined list of options and asked for an answer, rather than explored the problem and value space.  </p><p>I am clear research skills is a small T for me.  But we decided that part of this experiment is a Way of Working that means it's only Nigel or me working on this, so we use the T Skills we have.</p><p>If I link this answer back to the GTM channels I thought of in the last post.</p><p>#1 Pay per output &amp; #4 Pay each time it is run to produce an output.</p><p>Equal some risk to us, we set the price and we wear the overs and unders.  We can partially mitigate this by limiting the size of the Inputs, we know the size of the Prompts and the likely Output size so we can estimate the potential cost per Output or cost per Run.</p><p>#2 Pay for a bunch of tokens in advance &amp; #3 Pay per token used.</p><p>Much easier and less risky for us, we already provide a guesstimate of the number of tokens to be used in the prototype , so we can just times this by a unit rate and wallah.</p><p>#1 &amp; #4 seem to align in my head with our current Channel led GTM and #2 &amp; #3 seem to align with a PLG GTM.  But I think I am just making shite up with those mappings.</p><p>So no closer to a decision.</p><p>Next let&#8217;s think about the dreaded moat #AgileDataDisco</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/07/02</strong></p><h2>Next let&#8217;s review our GTM channel options for </h2><p>#AgileDataDiscover</p><p>I was going to call this post &#8220;lets pick our GTM channel option&#8221; but I am not at the stage where I have enough certainty on which option to pick, so I am going to hold off on this decision yet again.</p><p>I would love to hear from any Product Leaders who have any suggestions on the patterns they use to make this call.</p><p>One of the benefits of building in public and these posts, is the writing forces me to clarify my thoughts.  It helps me take the jumble and try and make some sense of it.  So let's get that jumble written down.</p><p>When I think about the channel options I think about three patterns.</p><p>First, we are great at building, ok at selling, crap at marketing.</p><p>So I naturally levitate towards Product Led Growth and Growth Marketing, it seems like the nirvana option.</p><p>This would require us to make #AgileDataDisco a no touch SaaS product.</p><p>We would auto provision, which is ok, we have a pattern for that already.  Sign-up is ok, we use Google Identity Manager for this already.</p><p>Onboarding would be a lot less complex than the full AgileData capability, we would have a simple flow of uploading a file (query log etc), pick your output types (Information Product Canvas, Conceptual Model, Data Dictionary etc) and then hit generate and wallah!</p><p>We would need to build out the subscription management, but we would use a SaaS subscription management solution for that and integrate it, rather than build our own.</p><p>That would still leave the marketing problem (unless we hit the magic viral nirvana from listing on Product Hunt which is unlikely).  As we are bootstrapping we don&#8217;t have the dolleros to spend big on ads and outbound email spam (which we wouldnt do anyway)</p><p>Second, we are already building out an AgileData Network of Consulting partners around the world.</p><p>We have learnt that providing them with a Swiss Army knife selection of things they can offer their customers, over and above the Fractional Data Service has value.  For example the ability to offer the AgileData Courses to their customers.</p><p>We could add AgileData Disco to this toolkit so they would be the only people who can use it.</p><p>When I talk to new potential partners one of the most common questions (after how much) is who finds the new customers.  </p><p>This GTM pattern means that effort still sits with them.</p><p>Which takes me onto the third pattern.</p><p>We offer Agiledata Disco using a freemium pattern. </p><p>Same work to be done as the PLG pattern, but we limit how much of the product a customer can use and if they want to carry on, we pass them over to an AgileData Network partner.</p><p>This approach would be good for us and the partner, not sure how a customer would feel about it.  I need to test that.</p><p>Of course it doesn&#8217;t solve our fiscal marketing constraint.</p><p>So I am no closer to a decision on this one.</p><p>Next let&#8217;s think about the pricing options #AgileDataDisco</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/07/01</strong></p><h2>There must be patterns I can use to help us decide our GTM for </h2><p>#AgileDataDiscover</p><p>I spent a short amount of time searching Google and browsing the Reforge templates, but in the end I reverted back to the help of the LLM, this time ChatGpt.</p><p>It&#8217;s interesting how much easier I find the ubiquitous ChatGPT app which can I access on both my iPhone, IPad and MacBook compared to the browser based interface of Google Gemini when I want to use an AskAI capability for something.</p><p>On the subject of GTM, after a bit of prompting ChatGPT replied with:</p><p>&gt;o&lt;</p><p>Top 7 Steps to Define a SaaS GTM Strategy</p><p>1. Identify Target Market and Segments</p><p>Conduct market research and create detailed buyer personas.</p><p>2. Define Unique Value Proposition (UVP)</p><p>Clearly articulate what makes your product unique and develop compelling messaging.</p><p>3. Choose the Right Channels</p><p>Select and utilise the most effective channels for reaching your target audience.</p><p>4. Develop a Pricing Strategy</p><p>Offer tiered pricing and consider a freemium model or free trial.</p><p>5. Create a Demand Generation Plan</p><p>Produce valuable content, optimise for SEO and SEM, and engage through email and social media marketing.</p><p>6. Implement Customer Onboarding and Success Programs</p><p>Develop a seamless onboarding process and provide robust customer support.</p><p>7. Measure, Analyse, and Iterate</p><p>Track key metrics, collect feedback, and continuously improve your product and strategy.</p><p>&gt;o&lt;</p><p>Target market is any organisation that has a legacy or current data platform and no adequate documentation for it, which is a bit broad.  Will need to refine this market a lot more as we get deeper into validation using the MVP.</p><p>For persona&#8217;s I have identified three main data personas that I think the AgileData Disco product will help, a Head of Data, a Data Governance Manager and a Data Consultant.  All of these of course have various different roles and titles depending on the organisation they work for.</p><p>Funnily enough only the Data Governance Manager is a new persona for us, so there is a risk that I have brought in a bunch of bias for these, time will tell.</p><p>For the Unique Value Proposition current draft is:</p><p>&gt;oo&gt;</p><p>For the Head of Data (or Data Governance Manager or Data Consultant)</p><p>Who needs to discover, document and understand their current Data Platform so they can rebuild it or augment it.</p><p>The AgileData Disco is a Product</p><p>Which automagically discovers and documents a data platform, producing actionable outputs in less than one hour.</p><p>Unlike the current manual task that takes multiple people multiple months.</p><p>The AgileData Disco Product will:</p><p>- Accept multiple input files</p><p>- Output multiple pattern templates that are actionable</p><p>- Not require a direct connection to the data platform</p><p>- Provide outputs that can be stored offline</p><p>&gt;oo&gt; </p><p>Next let&#8217;s pick the GTM channel option for #AgileDataDisco</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/29</strong></p><h2>GTM, Houston we have a problem </h2><p>#AgileDataDiscover</p><p>While I have worked in the Data Domain for over 3 decades I am fairly new to the Product Domain.  There are a bunch of product patterns I have not found or used.</p><p>I feel like defining a Go to Market approach is one of those.</p><p>I have a myriad of things buzzing around in my head.</p><p>Do we go SLG, PLG, CLG, ELG?  Are there other LG&#8217;s I haven&#8217;t found.  Are these LG&#8217;s strategies, patterns or tactics (and do I need to care about the distinction?)</p><p>How do tactics like Freemium fit into it, I am assuming you can only apply a Freemium tactic when you are using a PLG motion, is this true? I have done free consulting in the past as a loss leader, isn&#8217;t that freemium?</p><p>Is Freemium a tactic?  </p><p>I think I know why they call PLG a motion, it&#8217;s all about the flywheel, do I need to care about the definitions?</p><p>I have strong opinions on what I prefer and what I don&#8217;t prefer, I have strong opinions on how AgileData will behave and how it won&#8217;t behave.</p><p>There are patterns that although they are known to be effective, I am adamant AgileData won&#8217;t use them.</p><p>For example the whole GTM SLG pattern using SDR&#8217;s and AE&#8217;s, making pricing opaque, so they can make a price up to extract the most value out of the customer.</p><p>I dislike that pattern.</p><p>I posted this on another LinkedIn thread the other day that was discussing software vendors pricing tactics.</p><p>&gt;oo&gt;</p><p>I went into the Supermarket the other day to buy some bread and milk #SnarkyMcSnarky</p><p>I perused the aisles and found a bottle of milk I liked, I went to grab it but one of the supermarket staff told me to stop.</p><p>They took me to a counter where I was asked why I wanted to buy milk, when I was likely to buy the milk, how many people at home were going to drink the milk, how much everybody in the house earned, who&#8217;s name was on the credit card I was going to use and had they signed off on the credit card expenditure.</p><p>After I had answered those questions I asked how much the bottle of milk was.</p><p>I was told to take a seat and wait.</p><p>A second person eventually came along with the bottle of milk I wanted.</p><p>They brought out a glass, poured some milk into it, swished it under my nose, they took a drink of it and told me how good the milk tasted.</p><p>They asked would I like to buy some milk.</p><p>I said yes I would, how much is the bottle of milk.</p><p>They told me to sit down again and wait.</p><p>Eventually the second person came out with a sealed envelope.  In it was the price of the bottle of milk.</p><p>The price was $10,000</p><p>I didn&#8217;t buy the milk.</p><p>This is the process some vendors take a potential customer through.</p><p>Does that sound ridiculous to you?</p><p>&gt;oo&gt;</p><p>While I have strong opinions, can make a decision and can self justify how I made it, this build in public process is as much about the learning as the outcome.</p><p>There must be patterns I can use to help me decide our GTM.</p><p>Let&#8217;s explore patterns that are available.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/28</strong></p><h2>Current AgileData Go to Market </h2><p>#AgileDataDiscover</p><p>I was talking to somebody the other day and they made a comment about startup founders who build the best tool in the world that nobody ever knows about.</p><p>When you are building a product you have to care as much about how you will sell it as you do about building it.</p><p>I much prefer building over selling.</p><p>For AgileData we did a bunch of experiments with our Go To Market (GTM) last year to see where we would place our bet for this year.</p><p>The experiments were based on the usual GTM patterns:</p><p>Sales Led Growth (SLG)</p><p>We have a team of people who find and sell direct to our customers.</p><p>Product Led Growth (PLG)</p><p>We let our customers serve themselves, they sign up, subscribe and use the product with minimal assistance.</p><p>Partner/Channel Led Growth (CLG)</p><p>We work with other organisations who sell our product to their customers.</p><p>EcoSystem Led Growth ( ELG)</p><p>We piggyback on a large technology vendors ecosystem/marketplace and customers find and buy our product via that.</p><p>Each of these GTM requires some sort of investment:</p><p>For SLG we hire a team of Sales Development Representatives (SDR&#8217;s) who do outreach and qualify the opportunity&#8217;s before handing it to an Account Executive (AE) who closes the deal.</p><p>For PLG we need to spend money advertising so people can find the product, we need to ensure the product is so easy to use that they don&#8217;t need any human assistance to use it and they get value out of it quickly so they don&#8217;t cancel.</p><p>For CLG we need to figure out how to find potential partners, convince them there is value for them if they partner with us, upskill them in our product and then wait until they find and onboard customers.</p><p>For ELG we need to pick a large vendor, integrate our product with theirs, validate our product so we can be listed on their marketplace, then wait for the deal to rolling in, or not as the case maybe.</p><p>All of these GTM pattens need a way to fill the top of the sales funnel, which is another set of patterns.</p><p>Most companies use a combination of these GTM patterns and investments, which becomes complex.</p><p>We are always focussed on simplicity over complexity.</p><p>So we decided that for 2024 we would place a bet on Partner / Channel Led Growth.</p><p>The logic and reasons behind placing this bet will require a much longer post, but one of the key reasons comes back to the vision Nigel and I have for AgileData:</p><p>&#8220;working with people they respect, who can work from anywhere in the world (we think of it as working from any beach), who get paid well for their expertise and experience, to support the lifestyle they want.&#8221;</p><p>Now we have the context for the current AgileData GTM bet, lets think about the GTM options for #AgileDataDiscover</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/27</strong></p><h2>Whats happening in the Data &amp; GenAI / LLM space, an #AgileData #Podcast with Joe Reis &#129299;  </h2><p>#AgileDataDiscover</p><p>The latest AgileData Podcast has hit the airwaves:</p><p><a href="https://agiledata.io/podcast/agiledata-podcast/ai-data-agents-with-joe-reis/%0A%0A">https://agiledata.io/podcast/agiledata-podcast/ai-data-agents-with-joe-reis/</a></p><p>As part of the 30 day experiment we are doing I wanted to understand whats going on in the wider Data / GenAI / LLM space.</p><p>A great way to understand this is chatting to Joe Reis to hear what he is seeing and hearing.</p><p>Then I thought why not record it as a podcast so we can share his insights.</p><p>So thats what we did.</p><p>Thank you as always to Joe Reis &#129299; for being so generous with his time!</p><div><hr></div><p><strong>2024/06/26</strong></p><h2>Opps where did that pesky data come from? </h2><p>#AgileDataDiscover</p><p>We are hyper paranoid about our customers' data, as any data platform provider should be.</p><p>We run a private data plane for our customer tenancy&#8217;s as part of our agile-tecture design. </p><p>So we of course adopted this pattern for the inputs we used in the Discover prototype to keep them secure.  </p><p>Even though the input files are secured in a private tenancy we made sure that we only used Metadata as inputs into the Prototype not actual data records.</p><p>We believe we can get the outputs that are needed without having to pass the LLM actual data and we know from experience the barrier requiring data has on a product&#8217;s adoption. </p><p>One of the inputs we tested was using query logs from the BI tools querying the data.</p><p>Imagine our surprise when we started seeing actual data values in the LLM&#8217;s outputs!</p><p>Lots of thoughts surging through the brain, until we realised where the LLM had got them from.</p><p>In the Consume view the reports were using we had a case statement.  The case statement was being used to map some reference data.  </p><p>It was an old pattern we used before we built the ability to dynamically collect and manage reference data via Google Sheets.</p><p>So of course this reference data mapping was in clear text in the query logs and that is where the LLM was getting it from.</p><p>We will have to think about a pattern for scanning the LLM output for data values.  Not sure how far we should take that.</p><p>The platform is secure, we are using Google Gemini within a private tenancy, rather than passing the inputs over the internet to OpenAi&#8217;s API like most other products so we know any data values are secure.</p><p>But should we surface them in the output or not.  </p><p>We will need to get some feedback when we test the MVP for this one.</p><p>Feel free to post a comment if you have an opinion.</p><p>Next let&#8217;s think about our ideal go to market #AgileDataDiscover</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/25</strong></p><h2>Whats happening in the Data &amp; GenAI / LLM space, an <strong>#AgileData</strong> <strong>#Podcast</strong> with <strong><a href="https://www.linkedin.com/feed/#">Joe Reis &#129299;</a></strong> </h2><p><strong>#AgileDataDiscover</strong></p><p>The latest AgileData Podcast has hit the airwaves:</p><p><a href="https://agiledata.io/podcast/agiledata-podcast/ai-data-agents-with-joe-reis/">https://agiledata.io/podcast/agiledata-podcast/ai-data-agents-with-joe-reis/</a></p><p>As part of the 30 day experiment we are doing I wanted to understand whats going on in the wider Data / GenAI / LLM space.</p><p>A great way to to understand this is chatting to Joe Reis to hear what he is seeing and hearing.</p><p>Then I thought why not record it as a podcast so we can share his insights.</p><p>So thats what we did.</p><p>Thank you as always to <strong><a href="https://www.linkedin.com/feed/#">Joe Reis &#129299;</a></strong> for being so generous with his time!</p><div><hr></div><p><strong>2024/06/24</strong></p><h2>Let&#8217;s look at the new patterns we need to move from Prototype to MVP</h2><p>#AgileDataDiscover</p><p>We have been able to use a lot of the patterns we have built into the AgileData Platform and App as part of the Discover prototype.</p><p>To move it from Prototype to MVP and add the initial list of features we need, a number of new patterns need to be implemented under the covers, including:</p><p>1. Logging of prompt tokens so we can keep track of how many are being used each time we send a prompt off to the LLM</p><p>2. Logging of responses from the LLM so we don&#8217;t need to make unnecessary requests, we can just show the latest response if its is still applicable</p><p>3. Uploading multiple input files and including them in the prompt sent to the LLM, this turns out to have the most complexity as the documentation is very light, and is currently skewed towards processing multiple image and video files</p><p>4. Lightly modelling the most extensible pattern to hold configuration data, ie bite size prompts that can be combined to produce different outcomes</p><p>5. Parsing and storing the raw markdown responses into separate buckets so they can be surfaced separately in the app.</p><p>Most of this activity happens in our API layer as thats where the AgileData magic happens. We add new endpoints when required or augment existing endpoints to deliver additional functionality for the web application.</p><p>In this case we re-use our existing file upload pattern but send discovery files to a separate bucket where we can access them from the new interfaces.</p><p>We re-use our existing LLM wrapper, but extend it slightly to provide the option to choose which model is called . We use different models depending on their strengths and weaknesses, some are better at &#8216;texty&#8217; stuff, while others are better at &#8216;codey&#8217; stuff.</p><p>So a few bits of behind the scenes plumbing we need to do to make the product scalable.  It&#8217;s tempting to bypass some of these for the MVP, but we already know after spending some time using the prototype, that without them we would end up in a world of manual effort hurt.</p><p>Scale the machine, don&#8217;t scale the team!</p><p>Next we will talk about a little surprise we encountered with the prototype.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/23</strong></p><h2>Let&#8217;s review the feedback so far and the use cases that have started to emerge</h2><p>#AgileDataDiscover</p><p>After talking through the product idea with a few people and showing them the prototype the feedback has been positive.</p><p>The uses cases that have come out of the conversations look something like:</p><p><strong>Understanding a legacy data platform</strong></p><p>An internal data team or a data consultant(cy) wants to understand the current data platform and the human effort to do so is large and time consuming.</p><p>This might be supporting a green fields data platform, or making a change in the current data platform.</p><p>All the people who have built it have left and there is no upto date documentation.</p><p>An interesting variation is the senior leaders in the organisation have left and the new leaders have no idea what was built or why.</p><p>In a number of conversations I was asked if we could produce data lineage back to source systems.  </p><p>The typical approach to do this would be to parse the ETL code or execution logs for the code.  I can potentially see how the LLM might be able to create the lineage if we gave it a bunch of the inputs, but I am worried about the level of hallucination it will give back.</p><p><strong>Data Governance</strong></p><p>This is effectively the same pattern of documenting the data platform, but with slightly different use cases.</p><p>A lot of Data Governance teams have been reduced in size and the technical BA team members have been laid off, meaning the Data Governance Managers no longer have people available to manually document the data.</p><p>Or the Data Governance Managers have relied on the technical BA skills in the data teams, those teams have been downsized and can no longer do this work for them.</p><p>A lot have tried to do the work using a Data Catalog and that work has failed to deliver any results.</p><p>An interesting pattern emerged in this space.</p><p>Can we upload regulations or policies and determine if the data platform is complying with them?  I am going to have to experiment with this one, as I can&#8217;t think of a pattern we can use to deliver this use case yet.</p><p><strong>Automated Data Migration</strong></p><p>As with all things AI there are a myriad of startups experimenting in this space.  </p><p>As part of the conversations I have stumbled across a bunch doing similar things outside of the data domain.  And talked to people who know people who are doing similar things in the data domain.</p><p>A use case that came up a couple of times was automating Data Migrations from one data platform / technology to another data platform / technology.</p><p>Overall there seems to be a bunch of use cases that people have said will have value to them, let&#8217;s carry on and invest some more time and effort into it.</p><p>Next let&#8217;s look at the new patterns we need to move from Prototype to MVP.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/22</strong></p><h2>One response to rule them all, not!&nbsp; </h2><p><strong>#AgileDataDiscover</strong></p><p>As I started showing people the prototype one bit of feedback I consistently got was that having all the outputs in one screen was confusing.</p><p>There are a few other problems with the single output model we have initially built into the prototype.</p><p>The number of output tokens the LLM will generate is limited, which means the LLM reduces the number of words used as it moves through the output types.&nbsp;</p><p>We want the definition of the Data Dictionary to be as verbose as the Information Product, even when the LLM produces it as the last part of the output.</p><p>We want to be able to regenerate just one of the output types in isolation, not all the output types.&nbsp; A single output response type makes this difficult and costly.</p><p>We want to make it easy to copy and paste one of the output types to another medium, right now I have to copy the entire output and then remove the bits I don&#8217;t want.</p><p>The single output pattern we have built into the prototype won't allow these things to happen easily.</p><p>And also scrolling down a long list of output text to find what you are looking for is just a bit of a pain in the arse.</p><p>So we need to break the various output types into their own unique objects.</p><p>Luckily its an easy enough change to experiment with (well Nigel made it look easy enough ;-).&nbsp;</p><p>We have already decided to break the Discover menu for the prototype out into its own menu for now, so it&#8217;s &#8220;just&#8221; a case of adding new menu options that only display the response for that output type.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UTcb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UTcb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 424w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 848w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 1272w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UTcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png" width="1258" height="860" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1258,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:278960,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UTcb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 424w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 848w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 1272w, https://substackcdn.com/image/fetch/$s_!UTcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f69bde-e393-40c5-8927-e3a45a31c59c_1258x860.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>We have split the outputs into the following screens / menus / output types:</p><p>Information Product</p><p>Models</p><ul><li><p>Business Model</p></li><li><p>Conceptual Model</p></li><li><p>Physical Model</p></li><li><p>Reporting Model</p></li></ul><p>Glossaries</p><ul><li><p>Business Glossary</p></li><li><p>Data Dictionary</p></li></ul><p>Metrics</p><ul><li><p>Facts</p></li><li><p>Measures</p></li><li><p>Metrics</p></li></ul><p>Matrix</p><ul><li><p>Bus Matrix</p></li><li><p>Event Matrix</p></li><li><p>Concept Matrix</p></li></ul><p>One of the interesting benefits of this change is it makes it much clearer to explain to people what we are producing and what they can be used for.</p><p>I have spent the last decade finding and iterating pattern templates that have value in the data domain.&nbsp; That knowledge and content has been instrumental in defining these output types.</p><p>And that clarity has resulted in getting much clearer feedback on what output types we are missing.</p><p>Next let&#8217;s review the feedback we have had so far from surfacing the prototype.</p><p>Follow <strong>#AgileDataDiscover</strong> if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/21</strong></p><p>Let's sort out that menu problem, for now anyway&nbsp; <strong>#AgileDataDiscover</strong></p><p>It&#8217;s not a big thing, and I know I shouldn&#8217;t be sweating the small stuff but I also know that if I don&#8217;t it's going to really needle me until I scratch this itch.</p><p>And this is where I would normally hand the problem off to our UI designer to use their experience and expertise to solve the problem by using their dark design arts.&nbsp; But with our experiment in our new Way of Working it&#8217;s either Nigel or me, or both of us.</p><p>A problem shared and all that, so a Slack huddle with Nigel it is.</p><p>When talking through the problem Nigel mentioned what I had done to the header area in our marketing website.&nbsp; I have iterated it to use each of our core colours depending on what part of the AgileData product we are talking about, Network, Wow, Platform or App.&nbsp; Why can&#8217;t we do that for the App header?</p><p>Intriguing thought, we use those core colours heavily in our course material as well to indicate a transaction from one course module to another.</p><p>We could spin on this decision for months if we let ourselves, but one of the key things a Product Leader has to do is make decisions quickly if they can, and I can.</p><p>So we will introduce a pattern where the App header changes colour when you are in the Discover area.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8fAK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8fAK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 424w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 848w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 1272w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8fAK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png" width="1316" height="754" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:1316,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152484,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8fAK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 424w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 848w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 1272w, https://substackcdn.com/image/fetch/$s_!8fAK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d6a3b2e-4679-4932-a2f6-774e6123bc08_1316x754.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Now how to get to it?</p><p>Well we always talk about Personas, and again we teach data and analytics teams how to apply the persona pattern in the data domain (hell it might even become the second AgileData Guide book ;-)&nbsp;</p><p>Let's add the ability to quickly change personas in the app and as a result change the menus that are presented to us so that we can get the job that personas needs to do, done.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DWA1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DWA1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 424w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 848w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 1272w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DWA1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png" width="1456" height="536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:536,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DWA1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 424w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 848w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 1272w, https://substackcdn.com/image/fetch/$s_!DWA1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c5e840-22f2-4c01-b84d-1c9afc3a78b6_1522x560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And speaking of jobs, on the menu options, job done (for now)</p><p>Now let&#8217;s move on and sort out the usability of the one big prompt response.</p><p>Follow <strong>#AgileDataDiscover</strong> if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/20</strong></p><h2>Protect my top menu at all costs, or not?</h2><p>#AgileDataDiscover</p><p>One of the patterns I have been focussed on since the first day we started building the AgileData product is trying to retain simplicity in the top menu of the AgileData App.</p><p>I have been in the software world long enough to remember the days when we had text only screens.&nbsp; I remember when the Graphical User Interface was introduced and we got the little icon instead of text for menus, and then funnily enough we got text as a mouse-over on the icons so we could know what they did.&nbsp; It still makes me giggle when a UI has the diskette icon as the save icon.</p><p>I have seen the complexity of menuing systems that come with enterprise products such as SAP and Oracle.</p><p>From day one I wanted to try and retain a simple top menu structure, again influenced by Xero.&nbsp; Originally I thought we would need to move the Manage menu to a left menu option at some stage to allow a myriad of options but we haven&#8217;t been forced to do that yet.&nbsp; We also haven&#8217;t needed to extend the top menu to more than a single level of sub-menu.&nbsp; I love this simplicity.&nbsp;</p><p>However we have extended the number of top menu items as we expanded the capabilities of the app.&nbsp; We introduced the Design menu option a while ago, we moved the Collect menu option out from Manage to its own top level position.&nbsp; And we are about to introduce Marketplace as a new top level menu.&nbsp; This will result in 7 menu options at the top and this in my view is the limit.&nbsp;</p><p>As part of the introduction of the Markekplace option I am rejigging the order of the menu&#8217;s as well.</p><p>Until now the order was:</p><p>Catalog | Consume | Design | Rules | Collect | Manage</p><p>It will become&nbsp;</p><p>Marketplace | Catalog | Collect | Design | Rules | Consume | Manage</p><p>Previously I had the Catalog and Consume on the left as those were the two menus designed to help Information Consumers.</p><p>The introduction of Marketplace is designed to help Information Consumers find the Information Products they need, while the Catalog will continue to help Data Magicians find the Data Assets they need.&nbsp;&nbsp;</p><p>As part of this change I have reordered the other menu options to follow the right hand side of the Information Value Stream flow that we teach, i.e Design &gt; Build &gt; Deploy &gt; [Value] &gt; Maintain.</p><p>So what to do about the AgileData Discover menu option?&nbsp;</p><p>The Discover option takes us into the left hand side of the Information Value Stream flow, i.e Problem &gt; Idea &gt; Discover &gt; Prioritise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rho0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rho0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 424w, https://substackcdn.com/image/fetch/$s_!rho0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 848w, https://substackcdn.com/image/fetch/$s_!rho0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 1272w, https://substackcdn.com/image/fetch/$s_!rho0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rho0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png" width="1456" height="1017" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1017,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:292582,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rho0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 424w, https://substackcdn.com/image/fetch/$s_!rho0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 848w, https://substackcdn.com/image/fetch/$s_!rho0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 1272w, https://substackcdn.com/image/fetch/$s_!rho0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1fe0c68-0f9d-4388-9b08-09f97ba328aa_2388x1668.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>I can predict we may need to break the Discover option out into a series of sub menus, so that means it can not become a sub level menu under Design. Plus Discover is in the left hand side of the Information Value Stream and Design is in the right hand side.</p><p>That leaves it becoming a top level menu and that would make 8 and that&#8217;s a no.&nbsp;</p><p>Ok we need to find a different solution for my menu problem.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/19</strong></p><h2>Let&#8217;s show a few people the initial prototype and see what feedback we get.</h2><p>#AgileDataDiscover</p><p>I am lucky to have a network of talented data peeps across the world, people I have connected with over the years, people whose opinion I respect.</p><p>As part of the No Nonsense Agile Podcast we have a series of awesome guests on the show, and one of those was Teresa Torres.&nbsp; One of the key takeaways I got from that chat was the pattern of continuous discovery, my key takeaway was talk to 3 people a week, and ask them about one thing that has popped up for me that week.&nbsp; Something I have been trying to do for a while now.</p><p>I combined those two things and started asking people about their data problems and showing them the prototype to elicit some feedback.</p><p>The conversations were enlightening, I can see a few problems we might be able to solve with this thing.&nbsp; Ill explore those in more depth later.</p><p>One bit of feedback I got as I started showing people the prototype was that having all the outputs in one screen was confusing, we need to iterate that.</p><p>Another thing that frustrated me from day one with the prototype was trying to find the url to demo it.&nbsp; Especially when we have a couple of different demo Tenancy&#8217;s.&nbsp; It&#8217;s a small thing, but it&#8217;s one thing that has caused me frustration and a surprising amount of wasted effort and time in the past, so i'm very conscious of it.</p><p>We were always going to have a bunch of decisions to make about where this fits in our current product Information Architecture aka our menuing system.</p><p>Let&#8217;s deal with that menu problem next.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/18</strong></p><h2>Let&#8217;s build an initial prototype. </h2><p>#AgileDataDiscover</p><p>We have already done some prototyping as part of the initial McSpikey. </p><p>We can provide specific inputs into the LLM, we can give it a specific language to use, we can get the outputs we think have value.</p><p>But in the McSpikey we did that manually.</p><p>Next step is building out a prototype app that allows customers to do that with or without us.</p><p>Here is the first cut of what we built:</p><p>https://guides.agiledata.io/demo/clx2hlkru0ibi35xebw371v0f</p><p>In this demo example I used a file that contains the Consume query log for my demo AgileData Tenancy.</p><p>As part of this step we learnt a lot about the feasibility of building the potential product.</p><p>Application Framework:</p><p>We need to build, deploy and run a browser based application, this capability is a core part of the AgileData App.</p><p>Secure Sign-in:</p><p>We need to allow customers to securely sign in, this capability is a core part of the AgileData Platform.</p><p>File Upload:</p><p>We need to upload input files and store them for use by the LLM, this capability is a core part of the AgileData Platform and App.</p><p>Data Security / Privacy:</p><p>Even though we wouldn&#8217;t be using Customers actual data for the prototype we would be using their logs etc at the MVP stage, we need to make sure whatever we use is stored securely.  The AgileData Platform architecture provides a Private data plane for every customer tenancy, we can reuse this for the prototype and deploy a new AgileData Tenancy for each MVP customer in the future.</p><p>LLM:</p><p>We need to access an LLM via API so we can run it from within the protoype app.  AgileData is built on Google Cloud, Google Gemini is the obvious choice of LLM service for this.</p><p>We have already used Google Gemini as part of the Customer Trust Rules feature we recently released, we have a lot of the plumbing (engineering) patterns in place for it already.</p><p>Prompt Storage:</p><p>We need a way to store the prompts we are using so they can be used across all prototype Tenancy&#8217;s.  The AgileData App stores everything in Google Spanner which is then accessed by the AgileData Platform, so we can use this to store the prompts.</p><p>We were presently surprised how many reusable patterns we had built as part of the AgileData, that we could reuse for this protoype and the fact they are all production ready.</p><p>Let&#8217;s show a few people the initial prototype and see what feedback we get.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><p></p><div><hr></div><p><strong>2024/06/17</strong></p><h2>Let&#8217;s experiment with our Way of Working while we do this product experiment. </h2><p><strong>#AgileDataDiscover</strong></p><p>In response to my last post on Research led vs Solution led <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:7208215515851292673/#">Chris Tabb</a></strong> replied with:</p><p>&#8220;Do both &#129335;&#8205;&#9794;&#65039;<br>Bet on two horses &#128014;<br>Increase your chance of winning.<br>Similar to the difference of</p><p>&#128073;Logical vs creative&#8221;</p><p>To which my responses was:</p><p>&#8220;funnily enough we have been using a hybrid pattern of the two for a while. We didn't end up with the worst of both worlds, but I'm not sure we ended up with the best of both worlds. So it&#8217;s time to try something new and see what happens.&#8221;</p><p>Until now we have been building something to solve a series of data complexities that we have experienced as data professionals over the last 3 decades.</p><p>In the beginning the target user for the product was me. If I could do the data work on my own, without having to ask <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:7208215515851292673/#">Nigel Vining</a></strong> to write code, then that was the initial goal achieved.</p><p>As we achieved that goal we started focussing on three measures of success:</p><ul><li><p>If we could reduce something that takes me 1 hour of effort to 10 minutes of effort, that would be a good thing</p></li><li><p>If we could reduce the cognition, expertise and experience required to do the data work, that would be a great thing</p></li><li><p>If we could automate the data work so the machine did it, not a human, that would be a magical thing</p></li></ul><p>As an engineer <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:7208215515851292673/#">Nigel Vining</a></strong> doesn&#8217;t really care how our product looks and behaves, but I do.</p><p>Having worked at Xero briefly in its early days I got to see the benefit of great UX and UI design. So early on we started working with an awesome product designer in <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:7208215515851292673/#">Kris Slazinski &#9774;&#65039;</a></strong></p><p>Being a fractional team working in the different timezones, we found the process of great design upfront started to slow us down and we got impatient.</p><p>Over the years we had built out a design system with a lot of reusable components and we found we could experiment by cobbling those components together and see if it helped us achieve one of our measures of success.</p><p>We started moving more and more towards the MVP pattern for how we built and tested new product features ideas.</p><p>So which pattern should we lean into for this product experiment.</p><p>Let&#8217;s look at the summary from ChatGPT again:</p><ul><li><p>User Research vs. Market Testing:<br>UX research perfects user experience; MVP tests market demand.</p></li><li><p>Development Time:</p><p>UX takes longer; MVP is faster.</p></li><li><p>Risk Management:</p><p>UX aligns with user needs; MVP quickly validates the market.</p></li><li><p>Iteration Approach:</p><p>UX iterates on design; MVP on product-market fit.</p></li></ul><p>Based on our journey todate we naturally lean towards MVP.</p><p>We are boostrapping which means we are cash constrained, and we have put a 30 day limit on this experiment so we are also time constrained.</p><p>Which naturally leads us to lean into our MVP bias with all the work being done by Nigel and Myself.</p><p>Let&#8217;s build a prototype to learn what we don&#8217;t know and have something to test with potential customers.</p><p>Follow <strong>#AgileDataDiscover</strong> if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/15</strong></p><h2>Research led vs solution led </h2><p>#AgileDataDiscover</p><p>Being a co-host on the No Nonsense Agile Podcast I have been lucky to speak to some of the worlds best product people.</p><p>I have come up with a hypothesis that there are two different Product Value Streams an organisation can adopt.</p><p>One is being research led the other is MVP or solution led.</p><p>Research led is where the organisation starts by researching the problems that exist in the world, identify problems that could be solved, ideate how they might solve those problems, and then discover whether those ideas do indeed solve it.  Only after all that do they build something.</p><p>Solution led is where you start with a problem you know or believe exists, you build a minimal viable product that you think solves that problem, then you test the MVP.  You are testing both problem space and the solution space and the value space all in one go.</p><p>Given #AgileDataDiscover is based on using an LLM I thought I would ask ChatGPT to given me more details on the differences between research and MVP led.</p><p>ChatGPT Prompt:</p><p>Whats the difference between a SaaS product company that takes a UX research approach vs a mvp lean startup approach?</p><p>Reduce it to 1000 characters</p><p>ChatGPT Response:</p><p>UX Research Approach</p><p>1. Focus on User Experience:</p><p>Goal: Excellent user experience.</p><p>User-Centric Design: Extensive research on user needs and behaviours.</p><p>2. Research Methods:</p><p>Qualitative &amp; Quantitative: Interviews, usability testing, surveys, and analytics.</p><p>3. Design Process:</p><p>Iterative Design: Continuous refinement based on feedback.</p><p>Prototyping: Detailed prototypes for validation.</p><p>4. Development Cycle:</p><p>Longer Initial Development: Extensive research and testing.</p><p>High Fidelity: Aligns closely with user needs from the start.</p><p>MVP Lean Startup Approach</p><p>1. Focus on Speed and Learning:</p><p>Goal: Quickly validate business ideas.</p><p>Build-Measure-Learn: Rapid development, market measurement, and learning.</p><p>2. Development Methods:</p><p>Rapid Prototyping: Functional versions to attract early adopters.</p><p>Lean Testing: Experiments and metrics for viability assessment.</p><p>3. Product Features:</p><p>Minimum Feature Set: Core functionalities for quick market entry.</p><p>Incremental Improvements: Based on feedback and market response.</p><p>4. Development Cycle:</p><p>Shorter Initial Development: Quick launch.</p><p>Pivot or Persevere: Adjust based on feedback.</p><p>Key Differences</p><p>User Research vs. Market Testing: UX research perfects user experience; MVP tests market demand.</p><p>Development Time: UX takes longer; MVP is faster.</p><p>Risk Management: UX aligns with user needs; MVP quickly validates the market.</p><p>Iteration Approach: UX iterates on design; MVP on product-market fit.</p><p>So which approach are we going to take for #AgileDataDiscover</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/14</strong></p><h2>Should we experiment with our Way of Working while we do this product experiment.</h2><p>#AgileDataDiscover</p><p>When I coach data and analytics teams, I coach them to reduce uncertainty as much as possible, make things simple and don&#8217;t boil the ocean.</p><p>This is going to be a case of do as I say not do as I do.</p><p>We have a massive amount of uncertainty in what this product is or will be, so the last thing we should be doing is introducing additional uncertainty by changing the way we work while experimenting with the product.</p><p>When we designed our product development Way of Working a few years ago we had to design it based on a fractional development team that worked in different timezones.&nbsp; That led us down to a value stream flow of work that was asynchronous and chunked down into UI Design, Backend Engineering and UI Build steps.</p><p>We were careful to not create a waterfall process, a process based on large requirements upfront, no discovery and a high cost of change.</p><p>But given the need to work asynchronously we naturally adopted a flow based way of working.&nbsp; And the initial flow was UI Design, then Backend build and then UI build.</p><p>Overtime we realised this linear flow wasn&#8217;t working for us.&nbsp; We were over investing in UI Design upfront, which we then discovered wasn&#8217;t feasible to build in the backend or the UI.</p><p>We ended up with multiple value stream flows depending on the level of uncertainty in what we were planning to build.</p><p>Sometimes we will do a very light UI design, build a MVP backend service, then build the UI, use it for a while to see if it had value and identify what we want to iterate,</p><p>Sometimes we will do a light UI design, then stubb a backend service, then loop back what we have learnt into the UI design process.</p><p>Sometimes we will build the backend service to reduce some uncertainty in what data structures we need and how we can model it, and then move onto the UI design process, then into UI build.</p><p>Sometimes we will build a backend service and cobble together a UI with our current components and no UI design work, to help us reduce some uncertainty on the problem we actually want to solve.</p><p>The key to all of this is Nigel and I were the key users, we were the customer for our product.</p><p>We knew the data problems we wanted to solve, we had lived with them for over 3 decades.</p><p>We were focussed on reducing the time it took us to do data work, reducing the cognition it took us to do it, or automating it completely so the work was done without us.&nbsp; We could measure how well we were delivering these.</p><p>For this product we are building it for somebody else, we have a high level of uncertainty, we want to do a high level of experimentation, so we might as well experiment with changing the way we work.</p><p>Let&#8217;s aggressively iterate the way we work while we do this.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/13</strong></p><h2>If this new capability becomes both viable and feasible, where does it fit with our current product strategy. </h2><p>#AgileDataDiscover</p><p>We have a few simple choices:</p><p>Treat it as a completely separate product, give it a new name, a separate pricing model and separate Go To Market strategy.</p><p>Treat it as a separate module in our current product, give it a new main menu name, add a separate pricing model (unbundling the current pricing strategy).&nbsp; Retain the current GTM&nbsp; strategy for this module or create a new one.</p><p>Treat it as a bunch of features in our current product, make it part of the current pricing, make it a feature in our current GTM patterns.</p><p>There are a few other drivers I haven&#8217;t thought about as well.&nbsp; I immediately start diving down a rabbit hole into a complex multidimensional decision model, and want to reach out to Google Sheets to create a pivot table to manage it.</p><p>Sure sign that ugly complexity has appeared, so we need to move back to simplicity.</p><p>Lets ignore the Pricing and Go To Market options, we can deal with those later.</p><p>Still leaves us with a choice between a separate product, new module or a set of features.</p><p>As I have mentioned, we are technologists at heart, we have a small team, don&#8217;t plan to ever have a massive team, and as a result of these two things we are great at building, we are ok at selling, but we really struggle at marketing.</p><p>Introducing a whole new product would mean we would need to split our limited time and skills across two products.</p><p>For that reason alone the separate product option is out, for now.&nbsp;&nbsp;</p><p>This is not a decision that is set in stone, this is just a decision made quickly, so we can move onto the many decisions we need to make next.&nbsp; We can always change this decision as we learn more, but the cost and consequences of that change will be greater as we progress further into this process.</p><p>Also there is a massive amount of bias embedded in this decision.</p><p>I don&#8217;t want to have to design and build yet another website, which I would need to do if it was a separate product.</p><p>I have seen dual product strategies before, Tableau &amp; Tableau DataPrep, Wherescape Red &amp; Wherescape 3D, and I was never a fan of those strategies.</p><p>There are probably a bunch of other unconscious bias reasons why I have discounted this option.</p><p>That leaves a decision between a separate module, or just a bunch of features.</p><p>For some reason I am reluctant to make this call at the moment, I feel like I need some more certainty before we make the decision.</p><p>And that&#8217;s ok, there is so much uncertainty in everything we are doing for #AgileDataDiscover right now, we can afford to delay some decisions.</p><p>So before we make the decision on seperate module or a bunch of features, I want to explore where does building this fit in our current AgileData Way of Working?</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/12</strong></p><h2>Next we need to see if we should  adjust our current product strategy, or is this just product business as usual. </h2><p>#AgileDataDiscover</p><p>We are lucky at AgileData that we are purely a product company (even though we bundle services as part of our Fractional Data Team offering) and so our business strategy and our product strategy are closely aligned if not one and the same.</p><p>We made a conscious decision when we started out to reduce the complexity of our business as well as providing a product that reduces the complexity of managing data.</p><p>This aligns with Nigel and my personal goals of building a profitable and sustainable business, which we can work within from anywhere in the world, and which we can be part of for the next 20 years.</p><p>Part of our business strategy is to bootstrap our company and keep our team, processes and costs ridiculously lean.</p><p>As a result we have always gone for simplicity over complexity, and as a result have a single Product Strategy, and a single pricing model.</p><p>We know that most SaaS product companies choose to unbundle their products so they can &#8220;upsell&#8221; their customers to the next &#8220;tier&#8221; or by adding access to an &#8220;advanced&#8221; set of features.  To these companies revenue growth within their current Customer base is as important to their reporting metrics as new customer acquisition metrics.</p><p>Our view has always been that if the product capability makes the data work less complex, why wouldn&#8217;t we make it accessible to our partners, after all that's what we are promising them.</p><p>We don&#8221;t charge extra for more users consuming the data, we don&#8217;t charge more to use the Catalog features etc.</p><p>Each time we decide to experiment with something new, we need to review our current business and product patterns and see if we want to change them.  </p><p>So yes, it&#8217;s a good time to review our product strategy and see where this might fit within it, or if we need to iterate it.</p><p>Next up is where does it fit in our current AgileData product strategy?</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/11</strong></p><h2>Next we need to explore the initial viability of the product idea a little bit more.&nbsp; </h2><p><strong>#AgileDataDiscover</strong></p><p>I am lucky I have a network of people I&#8217;ve met over the 3 decades I&#8217;ve been working in the data domain.&nbsp; They span a breadth of backgrounds, skills, roles, organisations and locations.</p><p>Even more valuable is they are very giving of their time, something I am very conscious of and try not to waste.</p><p>We really want to explore the viability of the migration to the AgileData platform use case, but we have a hypothesis that Data Governance / Enablement might be the most valuable use case.&nbsp;</p><p>There is a growing trend for Data Governance teams to move towards being Data Enablement teams, a trend that was reinforced by an excellent presentation at the Wellington Data Governance Meetup I attended recently where somebody was playing back the key themes from the DGIQ conference in Washington DC last year.</p><p>The next step is to see if we can get some quick market validation on the value of the product supporting Data Enablement.</p><p>I reached out to a couple of people I know in the Data Governance space to &#8220;pick their brains&#8221;.&nbsp;</p><p>I know I should have taken a more structured product research approach to this rather than just reaching out to people I know.</p><p>We are a small team, we don&#8217;t have a researcher in the team, I don&#8217;t have those research skills, I make do with what I have and what I know.&nbsp; Then I live with an&nbsp; imposter syndrome most founders live with everyday, when I do something that is not a strong T-skill.</p><p>Here is what I think I heard:</p><p>Data Governance Managers are losing their BA team members as a result of the fiscal downturn, or they are losing access to those skills in other teams as a result of downsizing.&nbsp; They need to do the discovery work themselves.&nbsp;&nbsp;</p><p>How can they create this info as a team of one?</p><p>Data Governance Managers who get a new role in a new Organisation, are faced with a standing start. If the outputs they need do not already exist, they are blocked until they can get them created.&nbsp;&nbsp;</p><p>How can they quickly document what already exists?</p><p>How can they create insights into what exists, without directly accessing their source systems or internal data networks?</p><p>Starting a conversation with a blank piece of paper is always harder than starting with some known state.</p><p>How can they generate insights into the Org and its data, as research for themselves, before starting a conversation with stakeholders?</p><p>Data Policies and Procedures often exist but there is a lack of visibility if they are being complied with.&nbsp;&nbsp;</p><p>How can they compare what is actually happening with what should be happening?</p><p>These seem like problems we can help with.</p><p>We have quickly validated the feasibility of the product idea and we think we have quickly validated there may be a market and demand for the product.&nbsp;&nbsp;</p><p>Next up is where does it fit in our current AgileData product strategy?</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/10</strong></p><h2>Next we want to explore the initial feasibility of the product idea a little bit more.&nbsp; </h2><p><strong>#AgileDataDiscover</strong></p><p>As technologists at our core <strong><a href="https://www.linkedin.com/feed/#">Nigel Vining</a></strong> and I always err towards understanding the feasibility of building something, before we work on the viability of building it.&nbsp;&nbsp;</p><p>There is joy in building something that works, compared to getting a constant &#8220;no&#8221;, or even worse a shoulder shrug, to what you think is a great idea.</p><p>To stop us boiling the ocean and spending too much time validating the feasibility of the wrong thing, we have a process where we do internal research spikes, which we call McSpikey&#8217;s, to time box the feasibility research and force us to quickly swap back to the viability.&nbsp;</p><p>As part of the Greenfields Data Warehouse Rebuild research spike we did for a customer, we tacked on an internal McSpikey we had been thinking about for a while.</p><p>For this McSpikey we tested the LLM based on using these inputs:</p><ul><li><p>Screenshots of reports</p></li><li><p>Exports of report definitions</p></li><li><p>Query logs from the BI tools</p></li><li><p>Query logs from the ETL loads</p></li><li><p>The ETL code</p></li><li><p>DDL for the data warehouse schemas</p></li><li><p>DDL for the source system</p></li><li><p>550 page word document that contained a data warehouse specification</p></li><li><p>Sets of gherkin templates for transformation/business rules</p></li><li><p>Sets of data by example templates</p></li></ul><p>Then we created a series of tailored prompts, based on the shared language we have crafted and use when we are teaching via our AgileData Courses, coaching Data and Analytics teams or helping our AgileDataNetwork partners with their Way of Working.</p><p>Last we used the LLM to produce these artefacts:</p><ul><li><p>Information Product Canvas</p></li><li><p>Business Model</p></li><li><p>Conceptual Model</p></li><li><p>Physical model</p></li><li><p>Reporting model</p></li><li><p>Business Glossary</p></li><li><p>Data Dictionary</p></li><li><p>Definitions for Facts</p></li><li><p>Definitions for Measures</p></li><li><p>Definitions for Metrics</p></li></ul><p>The outputs the LLM produced were much better than we expected, the key seemed to be the quality of the shared language we used, which we have been crafting and refining for over a decade.</p><p>Another interesting discovery was the report screenshots cost us twice as much to process compared to the text based inputs.&nbsp; That's the value of McSpikeys, you always learn something new.</p><p>This product idea looks feasible, we should explore the viability of it some more.</p><p>Or put it another way, now we think we can build it, will anybody buy it or use it?</p><p>Follow <strong>#AgileDataDiscover</strong> if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/09</strong></p><p>Some background on what led us to the decision to do this 30 day bet on #AgileDataDiscover</p><h2>#3 Greenfields Data Warehouse Rebuild</h2><p>One of the things we have found our customers value, is the speed and cost which we can execute Data Research Spikes using AgileData.</p><p>We fix the delivery time period to 3 months and fix the cost for the work.</p><p>Often customers already have a data team and data platform, but the team is under the pump with higher priority data work and cannot do the research work anytime soon.</p><p>The goal of the research work is to reduce uncertainty, or show the art of the possible.&nbsp;&nbsp;</p><p>Often a business stakeholder has an idea and wants to know what is feasible, before they decide to invest in it fully.&nbsp;&nbsp;</p><p>The Head of Data wants to deliver the research work, but the data team has no spare capacity to do it.&nbsp; The Head of Data prefers the business stakeholder does not independently engage yet another data consulting company with whom the organisation does not already have a relationship and that often treats the work as a black box delivery where they only provide the answer but not the workings, so they engage us.</p><p>We have just finished one of these Research Spikes.</p><p>The organisation's data team is building a new greenfields data platform to replace their legacy data warehouse.</p><p>The legacy data warehouse currently provides over 1,000 separate reports all built in a legacy BI tool.&nbsp; The reports and data warehouse all have variable levels of documentation.&nbsp;&nbsp;</p><p>The team knows that a lot of the reports are slight variations on each other, where they have been copied and a filter added, or a different time period hard coded.</p><p>But the team is stuck with manually reviewing and comparing each report to see what it does, if it can be consolidated or decommissioned.</p><p>The research spike we did was to answer this question:</p><p>&#8220;Can we use a LLM to compare exported report definitions to reduce the manual comparison work required?&#8221;</p><p>We received a subset of the report defintions as XML.&nbsp; We received a cluster where the data team had already reviewed them and they were slight variations on each other.&nbsp; We received a second cluster that was based on a seperate set of core business processes.</p><p>We then used Google Gemini to compare the report definitions.</p><p>The answer to the research question was yes, the LLM approach could reduce the manual work required but could not automate it fully.</p><p>When we asked the LLM to merge some of the XML report definitions it politely responded with:</p><p>&#8220;I can't do that. The reports are complex XML documents that define the data source, layout, and other properties of a report. Simply combining three separate report XMLs will result in an invalid structure.&#8221;</p><p>There must be a better way to automate this data discovery work.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/08</strong></p><p>Some background on what led us to the decision to do this 30 day bet on #AgileDataDiscover</p><h2>#2 From Data Governance to Data Enablement</h2><p>As we are bootstrapping AgileData, every now and again I do a side hustle consulting gig to refill the AgileData funding / runway bucket.</p><p>I did a side hustle earlier this year that involved a lot of collaboration with an enterprise organisation&#8217;s Data Governance team, well they were called a team by name, but in reality it was a team of one.  That one person was frickin awesome, but that is a different story for a different time.</p><p>The organisation was migrating from a legacy Data Warehouse to a &#8220;Modern&#8221; Data Platform.</p><p>The Data Governance lead was attempting to enable this to happen as quickly as possible, while putting in place the data Principles, Policies and Patterns that were lacking when the legacy Data Warehouse was created.</p><p>As you can imagine being a team of one meant that they could not actually do a lot of the work themselves, and by having no team members they had to ask for other data teams to help with the work. Those data teams were head down, bum up trying to rebuild everything on the new platform so the old one could be decommissioned. They didn&#8217;t have a lot of time to put into the Governance data work, and they treated it as not being their work to be done, but work the Data Governance team should do.</p><p>We decided to flip the model and move from being a Data Governance team of one trying to get the work done, to being a Data Enabler of one, helping the other data teams collaborate together to share and leverage the data Principles, Policies and Patterns they had each created independently.</p><p>We also focussed on helping to unblock those teams when they were stuck with something outside their control and also started a series of capabilities to increase the data fluency across the entire organisation, again to improve the ability for the data teams to have conversations with their stakeholders.</p><p>One area that was a real blocker for the data teams was the ability to document the current state of the Data Warehouse, especially based on a pattern of Information Products, identifying what was already available, what was being used, what was adding business value, what could be decommissioned and the effort / feasibility to rebuild those that had ongoing value.</p><p>As you would expect, the organisation tried to implement a data catalog solution, which had failed to produce these useful outputs.</p><p>The typical pattern of getting five business analysts to spend six months reverse engineering the legacy platform and engaging with business stakeholders to discover this information wasn&#8217;t a viable option.</p><p>There must be a better way to automate this data discovery work.</p><p>Follow #AgileDataDiscover if you want to follow along as we build in public.</p><div><hr></div><p><strong>2024/06/07</strong></p><p>Some background on what led us to the decision to do this 30 day bet on #AgileDataDiscover</p><h2>#1 Legacy Data Platform Migration to AgileData</h2><p>One of the blockers our #AgileDataNetwork partners hit when talking to organisations about becoming their Fractional Data Team, is the theory of sunk costs.</p><p>The organisation may have already invested in a data platform and maybe a permanent data team to build that platform and deliver data assets.&nbsp; Or they may have already paid a data consultancy to build a new modern data platform for them, and then continue to pay the consultancy for the ongoing data work.</p><p>Even when our partners offer to reduce the organisations annual data costs from $600k a year to $60k, the theory of sunk costs still seems to remain.</p><p>One of the barriers is the cost / time to rebuild the current data assets and Information Products in the AgileData Platform.</p><p>So we have always been keen on finding a way to remove or markedly reduce the time and that cost for that migration data work.</p><p>The way we think about it is this:</p><p>How do we automate that migration so it is automagic, so that it removes all human effort to do that data work.</p><p>We know that 100% automation is probably not achievable but it&#8217;s the vision we wanted to strive for.</p><p>In reality we would be happy with 80% of it being automated and human effort for the last 20%.</p><p>The obvious answer is we just migrate the organisation&#8217;s code and we run it on our platform.</p><p>The problem with this pattern is we lose all the secret sauce of what we have built in AgileData that allows our partners to reduce an organisation's data cost from $600k to $60k.</p><p>So we need to automate the process of discovering the core data patterns in the organisation's current data platform, map those to the core data patterns we have built into AgileData, then automagically generate the AgileData config to apply those patterns.</p><p>There must be a way to automate this data work.</p><div><hr></div><p><strong>2024/06/06</strong></p><h2>We are working on something new at AgileData, follow us as we build it in public </h2><p>As part of our constant experimentation we have stumbled on an interesting use case in the data domain.&nbsp;&nbsp;</p><p>It's a data use case that has got Nigel Vining&nbsp;and myself so excited that we have decided to dedicate the next 30 days to experimenting with it.</p><p>It might turn out to be nothing valuable.</p><p>It might turn out to be a set of features in AgileData, or a new module.</p><p>It might turn out to be a completely new product.</p><p>We have no idea, but we are interested enough in it to bet 30 days effort to find out the answer.</p><p>As part of this we are also going to completely change the way we do our product build, for this idea we are going to change the way we work.</p><p>As part of this process we are also going to post daily as we decide and execute each step of the product process.</p><p>If you want to follow along as we build in public, checkout this post on a regular basis, we will add each days update to it so you can watch as we build and learn.</p>]]></content:encoded></item><item><title><![CDATA[Upgrading Python: A Plumbing Adventure in the Google Stack]]></title><description><![CDATA[Time for an upgrade]]></description><link>https://agiledata.info/p/upgrading-python-a-plumbing-adventure</link><guid isPermaLink="false">https://agiledata.info/p/upgrading-python-a-plumbing-adventure</guid><pubDate>Sun, 06 Aug 2023 23:34:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ErtR!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8892c64-a0c7-4c7b-9f49-a73be5280f22_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Time for an upgrade</strong></p></blockquote><p>As the AgileData journey continues, we find ourselves facing an interesting challenge &#8211; an email from Google urging us to upgrade our Python version. With the current version&#8217;s support ending next year, it&#8217;s time to embrace the latest and greatest, &#8230;. yeah, upgrade time !</p><p>If you&#8217;ve been following our previous posts, you know the AgileData Platform is built on the Google stack, relying heavily on Google Cloud Spanner as our backend config database and Google App Engine / Python for our API layer, Web-Sockets Service and AgileData App.</p><p>Cloud Functions serve as the glue holding everything together, providing a pay-as-you-go and scalable and cost-effective solution. We love this Functions as a Service (FaaS) pattern, it lets us run the AgileData App and API&#8217;s for a fraction of the cost of using dedicated servers or containers.</p><p>However, with the Python upgrade on the horizon, it&#8217;s time to ensure that our system remains robust and reliable.</p><blockquote><p><strong>Upgrading Python: The Plumbing Essentials</strong></p></blockquote><p>The AgileData Platforms backbone is built on Python 3.7, but it was time to transition to the newer Python 3.11 version.</p><p>The process is not without its challenges, as we must ensure that all our client libraries and dependencies are compatible with the latest Python version.</p><p>One critical aspect we knew we needed to address is a change in the client library&#8217;s handling of JSON data, which could potentially break one of our core functions.</p><p>So we decided we needed to bring the spanner library up to the latest version at the same time we did the python upgrade.&nbsp;</p><pre><code># before the python upgradegoogle-cloud-spanner==3.11.1

# after the after upgradegoogle-cloud-spanner==3.36.0</code></pre><blockquote><p><strong>The Query Spanner Function: Unveiling the Core</strong></p></blockquote><p>One of the most crucial functions in our backend is query_spanner(). It allows us to query data from Spanner using a simple SQL query and returns a JSON result payload.</p><p>This function serves as a pivotal connector, providing access to our data and ensuring smooth operations.&nbsp;</p><pre><code>query = &#8220;select table_id,topics,state from catalog where project_id = @project_id&#8221;results = query_spanner(query)</code></pre><blockquote></blockquote><pre><code>[&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8220;table_id&#8221;: &#8220;consume.cars&#8221;,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8220;topics&#8221;: [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8220;Cars&#8221;,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8220;Vehicles&#8221;,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;state&#8221;: &#8220;active&#8221;&nbsp; &nbsp; }]

# ========================== query_spanner ========================

def query_spanner(query):

&nbsp; &nbsp; &nbsp;&#8220;&#8221;&#8221;&nbsp; &nbsp; Simple function that takes a sql query and executes it&nbsp; &nbsp; &nbsp;&#8220;&#8221;&#8221;

&nbsp; &nbsp; &nbsp;schema = []

&nbsp; &nbsp; &nbsp;output = []

&nbsp; &nbsp; &nbsp;# remove line breaks (we may have formatted for readability)

&nbsp; &nbsp; &nbsp;query = query.replace(&#8220;\n&#8221;, &#8221; &#8220;)

&nbsp; &nbsp; &nbsp;try:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;with spanner_database.snapshot() as snapshot:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;results = snapshot.execute_sql(&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;query,&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;params={&#8220;project_id&#8221;: project_id},&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;param_types={&#8220;project_id&#8221;: spanner.param_types.STRING},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;json_columns = []

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;for row in results:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;# first read &#8211; pickup the schema for the results

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;if not schema:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;for field in results.fields:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;schema.append(field.name)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;# create a list of json columns we need to parse

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;if &#8220;JSON&#8221; in str(field.type_):

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;json_columns.append(field.name)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;# combine the two lists (schema and result row)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;output.append(dict(zip(schema, row)))

&nbsp; &nbsp; &nbsp;# load json payloads

&nbsp; &nbsp; &nbsp;if json_columns:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;for rec in output:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;for json_column in json_columns:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;json_payload = rec.get(json_column)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;if isinstance(json_payload, JsonObject):

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;# Updated 15.07.2023&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;# Spanner library now returns json columns as a JsonObject

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;json_string = json_payload.serialize()&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;rec[json_column] = json.loads(json_string)

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;else:

&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;rec[json_column] = []

except Exception as e:

&nbsp; &nbsp; &nbsp;logging.error(query, e)

return output</code></pre><blockquote><p><strong>Adapting to the Change</strong></p></blockquote><p>Fortunately, the necessary code changes are minimal. The only modification required is to check if we are reading a JSON object from Spanner and then serialise it before passing it through json.loads() for our response payload. A smooth adjustment that keeps our plumbing intact!</p><blockquote><p><strong>Deployment and Beyond</strong></p></blockquote><p>With the code tested and validated, it&#8217;s time to deploy the upgrades.</p><p>For App Engine, a simple update to the app.yaml file, specifying the latest Python version, does the trick.&nbsp;</p><pre><code>runtime: python311</code></pre><blockquote></blockquote><p>Likewise, for Cloud Functions, we update the deployment template, ensuring the right Python version is set for each service.&nbsp;</p><pre><code>gcloud functions deploy bigquery_job_completed &#8211;runtime=python311 &#8212;source=cloud_functions &#8211;trigger-topic=biquery_job_completed &#8211;memory=512MB &#8212;timeout=540s &#8211;entry-point=bigquery_job_completed</code></pre><blockquote></blockquote><p>Our system is now upgraded and ready to take on the future with confidence!</p><blockquote><p><strong>Finally, the critical service we NEVER need to upgrade</strong></p></blockquote><p>Finally, there&#8217;s one service that stands tall, immune to the need for upgrades, the databases in our Customers private tenancies!</p><p>We rely on the mighty Google BigQuery, a server-less and cost-effective enterprise cloud analytics database that effortlessly scales with our customers data.</p><p>Put the data in, query the data out &#8211; it&#8217;s as simple as that.</p><p>No upgrading, no migrations, no worrying about disk space or temp space or log space or memory or release version or any of the hundred and one things my DBA friends spend all their time worrying about, BigQuery proves to be the indispensable backbone of our plumbing infrastructure.</p><p>Why wouldn&#8217;t you use a service like that ?</p><blockquote><p><strong>Flowing Ahead with Upgraded Plumbing</strong></p></blockquote><p>By adapting our code, upgrading the necessary libraries, and deploying with precision, we ensure that our customers data continues to flow seamlessly.</p><p>Leveraging the power of Google&#8217;s infrastructure, we maintain our momentum, confident that our data plumbing will stand the test of time.</p><p>And as we look to the future, we rest easy knowing that BigQuery will always have our back, ensuring a smooth and cost-effective journey through the data waters.</p><p>Onward and upward!</p>]]></content:encoded></item></channel></rss>