{"id":68,"date":"2018-07-10T11:54:13","date_gmt":"2018-07-10T18:54:13","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/tips-for-a-maintainable-extensible-app\/"},"modified":"2025-06-11T08:07:56","modified_gmt":"2025-06-11T15:07:56","slug":"tips-for-a-maintainable-extensible-app","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/tips-for-a-maintainable-extensible-app\/","title":{"rendered":"Tips for making your apps more maintainable"},"content":{"rendered":"<blockquote>\n<p align=\"left\">\u00a0<\/p>\n<\/blockquote>\n<p>In this blog, we will go over 10 tips that I find useful when building apps with PowerApps. They help me keep my app easy to read, debug and maintain. Hope you find them useful as well.<\/p>\n<p><strong>1. Avoid Nested If\/Else statments<\/strong><\/p>\n<p>Suppose we have the following scenario: a news feed app with actionable cards. Pressing the card buttons can take you to another page, open another app, open your default browser or call a custom API.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"631\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"368\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>To accomplish the scenario. The OnSelect Button would have the following logic:<\/p>\n<p>\u00a0<a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/097339fd-cd95-4ddd-9ffa-582e795c730f.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"173\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/097339fd-cd95-4ddd-9ffa-582e795c730f.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"1063\"\/><\/a><\/p>\n<p>as you can see, the above can be hard to read, test and maintain. In general nested if\/else statements can makes it hard to read your code and therefore hard to debug and maintain. A possible simplification is to use a combination of Switch and LookUp as follow:<\/p>\n<p>\u00a0 <a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/00be8624-737b-4625-8a7e-224118e4861a.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"119\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/00be8624-737b-4625-8a7e-224118e4861a.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"1139\"\/><\/a><\/p>\n<p>The above code is easier to read, you can easily add different type of actions.\u00a0 As you can see Switch helped in this case with readability. LookUp also helped reduce the complexity as we will see in the next tip.<\/p>\n<p>\u00a0<\/p>\n<p><strong>2. Use Collections &amp; LookUps<\/strong><\/p>\n<p>\u00a0<\/p>\n<p>In the above example, we used a lookup to identify the correct screen to navigate to. Rather than doing an If\/else on screen name, we used a look up to a collection (value pair) where our key was the screen name and the value is an actual reference to a screen. With this approach, it becomes easy to extend your app as you are adding more screens without have to update your OnSelect logic.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/acd9fd13-3fed-4076-8c89-f4f4e3456712.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"100\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/acd9fd13-3fed-4076-8c89-f4f4e3456712.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"857\"\/><\/a><\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/850dbd85-1f75-420f-bf6e-65a902cc6490.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"42\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/850dbd85-1f75-420f-bf6e-65a902cc6490.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"669\"\/><\/a><\/p>\n<p>This approach works well in a number of scenarios. In our example, notice that the button style is different depending on the action type:<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/37b6ebd3-2fa4-4aff-aed7-126dc01e84b8.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"140\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/37b6ebd3-2fa4-4aff-aed7-126dc01e84b8.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"424\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>Here we define a collection locally but this can be obtained from an external source as well such as SharePoint or CDS.\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/1a1d20a0-bc01-47fd-9ef7-e7c9a32b6fb0.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"500\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/1a1d20a0-bc01-47fd-9ef7-e7c9a32b6fb0.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"262\"\/><\/a><\/p>\n<p>The logic that select the correct style becomes a simple look in your style collection rather than a complex if\/else statement:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fb64c14b-bea3-400c-b8b7-105a6db1fd7e.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"53\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fb64c14b-bea3-400c-b8b7-105a6db1fd7e.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"1280\"\/><\/a><\/p>\n<p><strong>3. Filter &amp; Searching<\/strong><\/p>\n<p>Search and Filtering can easily lead to complex formulas specially as you add more filters. Consider this simple example of a photo gallery where you can filter photos by \u201cMy Photos\u201d or \u201cAll Photos\u201d , \u201cPublic\u201d or \u201cPrivate\u201d and by a search parameter.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/cf6a76eb-5222-44bc-b328-3ccde816b45e.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"421\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/cf6a76eb-5222-44bc-b328-3ccde816b45e.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"270\"\/><\/a><\/p>\n<p>The typical implementation of the above example would be to be bind the Items property of a control to the following formula:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/8ccd48d9-5a6f-4e65-a2fd-b0a87e5d0831.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"209\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/8ccd48d9-5a6f-4e65-a2fd-b0a87e5d0831.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1087\"\/><\/a><\/p>\n<p>As you can see, this formulas above are becoming hard to read and maintain. Any additional filters will make things even more unreadable.\u00a0 Another option to reduce the complexity is delegate the filtering and searching operation to the individual dropdowns and search box respectively. In that case, our Items property will be bound to a simple and easy to read formula as follow:<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/4beb161e-8373-4742-8417-20865f43ab8c.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"91\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/4beb161e-8373-4742-8417-20865f43ab8c.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"662\"\/><\/a><\/p>\n<p>As you can, it becomes this is easier to read and maintain.\u00a0 We are constructing individual filtered collections and taking the intersection of the items to\u00a0 bind to our items property.\u00a0 Adding and removing filters becomes easy.\u00a0 In this example, publicPrivateFilteredPhotos is constructed in the OnSelect event for the corresponding dropdown. We are effectively breaking the complexity in chunks and assigning it to individual controls.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2024\/06\/1eb647a0-382e-4f4f-9e85-c418bc13abcc.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"225\" src=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2024\/06\/1eb647a0-382e-4f4f-9e85-c418bc13abcc.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1586\"\/><\/a><\/p>\n<p>It\u2019s worth noting that the above method has some drawbacks as well. First, it will only works if the filter operation returns less than 2k items (which is the max a clearcollect will hold for each API\/data source call). The second disadvantage is that you are allocating a collections for each filter. You have to ensure that those collections are properly initialiazed in the OnVisible or OnStart events.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><strong>4. Optimize formulas <\/strong><\/p>\n<p>Another area that is worth spending sometime optimizing is around formulas.\u00a0 Let\u2019s start with a simple example which I surprisingly see often in my code reviews:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/83bcd303-5790-498e-8bf8-377009ce6757.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"34\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/83bcd303-5790-498e-8bf8-377009ce6757.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"514\"\/><\/a><\/p>\n<p>The above can be optimized by nothing that doing filter operation and taking the first item is almost always equivalent to doing a LookUp<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/ff44e310-b624-4524-b530-2a4af3995840.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"43\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/ff44e310-b624-4524-b530-2a4af3995840.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"469\"\/><\/a><\/p>\n<p>The advantage of doing a LookUp is that only 1 item will result in a smaller payload from your data source which will result in a faster experience. Filter on the other hand might download a collection of items (larger payload size) for which you are only going be taking the first item which is not optimal. Other than the performance implication, more compact formulas can improve the readability of your app as well.<\/p>\n<p>\u00a0<\/p>\n<p><strong>5. Avoid API calls within your Filter or LookUp expressions<\/strong><\/p>\n<p>Another formula optimization consist of avoid nesting API calls in Filter or LookUp Operation. Here is an example where are performing filter operation width a condition requiring an API Call. In this case to the Office365 API.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/e71e8907-a839-4f0d-9c89-036bf3784283.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"36\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/e71e8907-a839-4f0d-9c89-036bf3784283.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1694\"\/><\/a><\/p>\n<p>A better approach that would result in better performance is to set a variable and then re-use it within your filter operation.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/9785b8c0-eeb3-44d4-848a-180c5a3fbba6.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"55\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/9785b8c0-eeb3-44d4-848a-180c5a3fbba6.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1635\"\/><\/a><\/p>\n<p>The above will be easier to read specially if you give your variable a meaningful name (currentUser reads better than Office365Users().MyProfile().Mail)<\/p>\n<p><strong>6. Avoid multiple calls to server<\/strong><\/p>\n<p>Along the same lines of the above 2 examples, caching a single item locally and referencing it will ended up improving your perf but will also result in more compact formulas. The following statements will perform poorly since we are making multiple calls to our backend to retreive the same object.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d65cb0d5-9706-40e0-aea6-df76294ffb5c.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"100\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d65cb0d5-9706-40e0-aea6-df76294ffb5c.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"707\"\/><\/a><\/p>\n<p>On the other hand, the first statement here will fetch the entire object and save it locally. Subsequent calls will simply refer to the local object.<\/p>\n<p><strong><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/b33e95d0-b727-413c-8acd-83dd22ec7b09.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"126\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/b33e95d0-b727-413c-8acd-83dd22ec7b09.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"530\"\/><\/a><\/strong><\/p>\n<p><strong>7. New\/Edit Pattern<\/strong><\/p>\n<p>Another way to simplify your app is to avoid using multiples screens to perform CRUD (Create, Update, Delete) operations.\u00a0 So if you come across something like this:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/c205d075-9a80-4a1b-a27b-9919ee925a6d.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"128\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/c205d075-9a80-4a1b-a27b-9919ee925a6d.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"243\"\/><\/a>\u00a0\u00a0<\/p>\n<p>you can take the following approach to combine the above to screens:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/2222a485-40d3-4d46-9251-cb856e95f2be.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"129\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/2222a485-40d3-4d46-9251-cb856e95f2be.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"323\"\/><\/a><\/p>\n<p>In your gallery (for example), notice how I am setting a variable depending whether I intend to do edit an item or create a new item.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d9e29475-77fd-4cb4-b78b-0e699ce4e523.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"259\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d9e29475-77fd-4cb4-b78b-0e699ce4e523.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1295\"\/><\/a><\/p>\n<p>I can then simply Patch my Customer table in this case as follow:<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7bd9031f-0b64-4771-9dfc-2f50a4783d42.png\" style=\"font-size: 13.008px;\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"366\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7bd9031f-0b64-4771-9dfc-2f50a4783d42.png\" style=\"border-color: currentcolor; border-image-source: none; display: inline; background-image: none;\" title=\"image\" width=\"1440\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>The controls in this screen are bound to the customer variable regardless of whether this is a new item (Defaults(\u2018Customer Issue\u2019)) in which case all the fields will be blank or an existing item in which case my controls default will be set automatically.<\/p>\n<p>\u00a0<\/p>\n<p><strong>8. Avoid hard coding app content<\/strong><\/p>\n<p>Hardcoding your content can also makes your app hard to read, maintain and localize. You can keep all of your content in an external source such as SharePoint or Common Data Service. If your content is static and unlikely to change, then embedding an excel sheet is going be the most performant option as you will avoid a network call to get your content.<\/p>\n<p>Here is an example of a long string. As you can see, the app becomes harder to read and you might see some performance issues in the maker experience (web authoring) as formulas and statements gets evaluated:<\/p>\n<p>\u00a0<\/p>\n<p><strong><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/feb4cd2c-9375-4c8d-908d-3d6108cd8623.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"338\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/feb4cd2c-9375-4c8d-908d-3d6108cd8623.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"853\"\/><\/a><\/strong><\/p>\n<p>Instead, you can put all your Settings in external source and use substitutions techniques detailed in this blog to inject contextual app data: <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/html-markup-with-dynamic-data\/\" title=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/html-markup-with-dynamic-data\/\">https:\/\/powerapps.microsoft.com\/en-us\/blog\/html-markup-with-dynamic-data\/<\/a> \u201c<\/p>\n<p><strong><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/75c09979-9d95-4079-9339-f2a4e849e7fb.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"149\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/75c09979-9d95-4079-9339-f2a4e849e7fb.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"1084\"\/><\/a><\/strong><\/p>\n<p>\u00a0<\/p>\n<p><strong>9. Passing Context Variable<\/strong><\/p>\n<p>When passing data between screens, I tend to use a context variable within the Navigate function as follow:<\/p>\n<p><em>HomeScreen -&gt; Gallery -&gt; OnSelect<\/em><\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/409d5440-8027-40a4-a631-a51f7f965f7d.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"40\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/409d5440-8027-40a4-a631-a51f7f965f7d.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"594\"\/><\/a><\/p>\n<p>I found that this approach leads to cleaner \u201ccode\u201d as you remove the dependency on UI elements (a gallery in this example) which might or might not be your only entry point to the next screen.\u00a0 For example, your app\u00a0 might need to enable deep-linking to detail screen as a result of a push notification. In that case, you would set the same context variable (selectedItem) and everything in the DetailScreen would remain the same (if you had relied on something like Gallery1.Selected,\u00a0 you would have to introduce some additional logic to enable the deep-linking scenario as well)<\/p>\n<p><em>HomeScreen \u2013&gt; OnStart<\/em><\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/04ad843d-ea5d-449d-b3b6-b05216ae61aa.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"90\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/04ad843d-ea5d-449d-b3b6-b05216ae61aa.png\" style=\"border: 0px currentcolor; border-image: none; display: inline; background-image: none;\" title=\"image\" width=\"742\"\/><\/a><\/p>\n<p><strong>10<\/strong>. <strong>Use a Gallery control when you can !<\/strong><\/p>\n<p>As mentioned in my previous blog post <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/performance-considerations-with-powerapps\/\" title=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/performance-considerations-with-powerapps\/\">https:\/\/powerapps.microsoft.com\/en-us\/blog\/performance-considerations-with-powerapps\/<\/a> under Control optimization section, reducing the number of controls in your app can lead to a better authoring experience but can also lead to an easier to read and maintain app. If you have a menu system in your app, then consider using a gallery control for that.\u00a0 If you are using a Canvas control, take another look at your data cards. Are they similar ? can you use a gallery control instead and toggle visibility of certain elements ?<\/p>\n<p><iframe loading=\"lazy\" allow=\"autoplay; encrypted-media\" allowfullscreen=\"\" frameborder=\"0\" height=\"400\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/BVFSUDKH8Q4\" width=\"720\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog, we will go over 10 tips that I find useful when building apps with PowerApps. They help me keep my app easy to read, debug and maintain. Hope you find them useful as well.<\/p>\n","protected":false},"author":101,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[3423],"job-role":[],"product":[3473],"property":[],"topic":[],"coauthors":[2051],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","audience-it-professional","content-type-tips-and-guides","product-power-apps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tips for making your apps more maintainable - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tips for making your apps more maintainable - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"In this blog, we will go over 10 tips that I find useful when building apps with PowerApps. They help me keep my app easy to read, debug and maintain. Hope you find them useful as well.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/tips-for-a-maintainable-extensible-app\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-10T18:54:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:07:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\" \/>\n<meta name=\"author\" content=\"Mehdi Slaoui Andaloussi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mehdi Slaoui Andaloussi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdi-slaoui-andaloussi\/\",\"@type\":\"Person\",\"@name\":\"Mehdi Slaoui Andaloussi\"}],\"headline\":\"Tips for making your apps more maintainable\",\"datePublished\":\"2018-07-10T18:54:13+00:00\",\"dateModified\":\"2025-06-11T15:07:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\"},\"wordCount\":1386,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\",\"name\":\"Tips for making your apps more maintainable - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\",\"datePublished\":\"2018-07-10T18:54:13+00:00\",\"dateModified\":\"2025-06-11T15:07:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage\",\"url\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\",\"contentUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tips for making your apps more maintainable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cb94deacde69a416821745caea3a4ea9\",\"name\":\"Mehdi Slaoui Andaloussi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=gee4168e8cdfe65faaf608acb5baeaed5\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g\",\"caption\":\"Mehdi Slaoui Andaloussi\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tips for making your apps more maintainable - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/","og_locale":"en_US","og_type":"article","og_title":"Tips for making your apps more maintainable - Microsoft Power Platform Blog","og_description":"In this blog, we will go over 10 tips that I find useful when building apps with PowerApps. They help me keep my app easy to read, debug and maintain. Hope you find them useful as well.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/tips-for-a-maintainable-extensible-app\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2018-07-10T18:54:13+00:00","article_modified_time":"2025-06-11T15:07:56+00:00","og_image":[{"url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png","type":"","width":"","height":""}],"author":"Mehdi Slaoui Andaloussi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Mehdi Slaoui Andaloussi","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdi-slaoui-andaloussi\/","@type":"Person","@name":"Mehdi Slaoui Andaloussi"}],"headline":"Tips for making your apps more maintainable","datePublished":"2018-07-10T18:54:13+00:00","dateModified":"2025-06-11T15:07:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/"},"wordCount":1386,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/","name":"Tips for making your apps more maintainable - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png","datePublished":"2018-07-10T18:54:13+00:00","dateModified":"2025-06-11T15:07:56+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#primaryimage","url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png","contentUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/fbf738e4-6bef-4bc2-8ecd-05e7f8474e81.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/07\/10\/tips-for-a-maintainable-extensible-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Tips for making your apps more maintainable"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cb94deacde69a416821745caea3a4ea9","name":"Mehdi Slaoui Andaloussi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=gee4168e8cdfe65faaf608acb5baeaed5","url":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g","caption":"Mehdi Slaoui Andaloussi"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdis\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":131055,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions\/131055"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=68"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=68"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=68"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=68"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=68"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=68"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}