{"id":502,"date":"2023-05-23T08:00:22","date_gmt":"2023-05-23T15:00:22","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/?p=502"},"modified":"2023-10-31T16:18:54","modified_gmt":"2023-10-31T23:18:54","slug":"dev-box-for-microsoft-engineers","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/dev-box-for-microsoft-engineers\/","title":{"rendered":"Microsoft Dev Box for Microsoft engineers"},"content":{"rendered":"<p style=\"font-weight: 400;\">\n  We\u2019re in an exciting time for technology. But to take advantage of the opportunities, it\u2019s critical for developers to have access to the tools and resources that can help them stay productive and do their best work. At Microsoft, we\u2019re migrating many of our developers to highly productive, cloud-based developer environments to help deliver exciting new innovations across the portfolio of our products. Over the last 5 years, many teams at Microsoft have experimented with various solutions, but in January of 2022, we started piloting Microsoft Dev Box with our Office 365 organization. Now, we\u2019re excited to say that over 9,500 Microsoft engineers are using Dev Box.\u00a0 <a href=\"https:\/\/aka.ms\/dev-box-build-2023-blog\">Microsoft Dev Box will be publicly available on July 2023<\/a>. Here, we want to share our journey with Dev Box and the key learnings we\u2019ve discovered along the way.\n<\/p>\n<p style=\"text-align: center;\">\n  <iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/p8MxCMuEtao\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe>\n<\/p>\n<h2>The challenge: Improving the productivity of hybrid developers using legacy development environments<\/h2>\n<p style=\"font-weight: 400;\">\n  The Development Environment is where developers spend most of their time, and as such, it has a profound effect on their productivity and satisfaction. But at Microsoft, the diversity of our products and services has resulted in thousands of unique and complex development environments. Developers often need the ability to move across different coding environments easily and quickly, to utilize build cache artifacts, and to keep their tools and packages updated and in sync with their project repository and associated CI\/CD pipelines. Historically at Microsoft, developers maintained a high-powered, local desktop machine as their development environment. While this has given developers a sense of autonomy and control, it comes with a cost:\n<\/p>\n<ul style=\"font-weight: 400;\">\n<li>\n    Desktop configuration is left to individual engineers, requiring them to read through team- and project-specific guidance to configure and maintain their environments. Initial startup time often takes several hours or days and can result in small but significant differences across machines.\n  <\/li>\n<li>\n    Individual developers are responsible for ongoing maintenance to stay in sync with tooling, OS and library updates, and configuration changes introduced by the repository and CI\/CD pipeline. This introduces added work for the developer, with larger repositories taking 3+ hours per week just to get current source and building artifacts.\n  <\/li>\n<li>\n    Niche and legacy tooling adds to the complexity of maintaining a development environment\n  <\/li>\n<li>\n    Developers must seed their local build environment with build artifacts. Typically this is done by initiating a \u201cclean\u201d local build, which can take upwards of 40 minutes depending on project size and local processing power.\n  <\/li>\n<li>\n    The cost is further increased when developers need to work across multiple repositories or projects which have different tooling and compliance requirements. At Microsoft, 50% of developers contribute to more than one repository every month.\n  <\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">\n  Unfortunately, it\u2019s not just the productivity loss and developer frustration that makes these machines a problem\u2014every one of the independent environments must also be secure and compliant. Our teams are consistently innovating to face these challenges, but it\u2019s not simply a matter of priority or resources. To address these issues, we need to change the fundamental approach to development environments.\n<\/p>\n<h2>What we have learned about hosted development environments<\/h2>\n<p style=\"font-weight: 400;\">\n  Across Microsoft, organizations have been looking at ways to migrate developer environments to the cloud, hosting environments on Microsoft VDI solutions. These services provide great solutions for virtualized environments but miss a few key capabilities crucial for developers:\n<\/p>\n<ul>\n<li>Building and keeping an image up-to-date with everything a developer needs (configuration, source, packages, binaries) is the key to improving developer productivity and is not a process that most teams have the resources to deliver.<\/li>\n<li>The image needs to be as secure as source code and cannot drift from GitHub or ADO permissions. This results in significant initiatives outside developers\u2019 core scope and skillset.<\/li>\n<li>Teams have to contend with unique behaviors for each tool for hardware SKU availability, region support, administration and resource cleanup, governance, and abuse controls.<\/li>\n<\/ul>\n<h2>Our journey from early Dev Box pilots to a company-wide rollout<\/h2>\n<p style=\"font-weight: 400;\">\n  We started piloting <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/dev-box\/\">Microsoft Dev Box<\/a> with a few Office teams in January 2022. Our goal was to learn what it would take to address the core challenges our engineers face and tailor Dev Box into a product that <strong>enables developers to do what they love most\u2014writing code!<\/strong> Initially, we ran into many of the same challenges as other teams that were using virtualizing desktops. We had to develop an imaging pipeline, instruct teams on configuring networks, and ensure access to appropriate internal resources. <span class=\"ui-provider gl b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\" dir=\"ltr\">We learned a lot during this period, but a lot of those lessons have been incorporated into the Dev Box roadmap, with Infrastructure-as-code(IaC) <a class=\"fui-Link ___1idfs5o f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1hu3pq6 f11qmguv f19f4twv f1tyq0we f1g0x7ka fhxju0i f1qch9an f1cnd47f fqv5qza f1vmzxwi f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh ftqa4ok f2hkw1w fhgqx19 f1olyrje f1p93eir f1h8hb77 f1x7u7e9 f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/aka.ms\/dev-box-config-as-code\" href=\"https:\/\/aka.ms\/dev-box-config-as-code\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link team customizations\">team customizations<\/a> as just one example (which you can sign up for the preview <a class=\"fui-Link ___1idfs5o f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1hu3pq6 f11qmguv f19f4twv f1tyq0we f1g0x7ka fhxju0i f1qch9an f1cnd47f fqv5qza f1vmzxwi f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh ftqa4ok f2hkw1w fhgqx19 f1olyrje f1p93eir f1h8hb77 f1x7u7e9 f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/aka.ms\/dev-box-config-as-code\" href=\"https:\/\/aka.ms\/dev-box-config-as-code\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link here\">here<\/a>).<\/span>\n<\/p>\n<p style=\"font-weight: 400;\">\n  What we started noticing was that even in this early-stage developers were excited to use the product, they already knew what was possible with Dev Box. The real challenge became how we scale this out to the rest of Microsoft.\n<\/p>\n<p style=\"font-weight: 400;\">\n  We started by tying our Dev Box deployments directly to teams and the services\/products they build:\n<\/p>\n<ul style=\"font-weight: 400;\">\n<li>\n    Dev Centers were assigned to an &#8220;organization,&#8221; a group of teams like the Developer Division, Office, or Intune, that anyone in that organization could use to access a bare minimum set of tools, source, and packages. It wouldn&#8217;t represent the full environment, but it provided enough to cut out a few hours of work for any developer.\n  <\/li>\n<li>\n    Projects were assigned to a &#8220;service group,&#8221; a smaller group of teams responsible for a product like Visual Studio Code. This is where we would define a &#8220;ready-to-code&#8221; image that could have a developer coding within just a few minutes.\u00a0 The permissions applied to the project ensure we maintain appropriate access to the source available on the image.\n  <\/li>\n<li>\n    We set up networks for each Dev Center to ensure users would have secure access to whatever resources they needed, in a region close to their developers, significantly reducing latency. We will be sharing our recommendations for network configuration in an upcoming whitepaper.\n  <\/li>\n<li>\n    Lastly, we set up the pools under each product so that the developers in each region had access to the image and SKU(definition) to meet their needs.\n  <\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">\n  That might sound like a lot of work, but that\u2019s the great thing about Dev Box. We approached both image creation and deployment using IaC. To set up a project, all a team needs to do is create a pull request (PR), and we create all the Dev Box resources they need automatically. The adoption rate demonstrated how effective this approach can be\u2014in just the last four months, we have increased our usage from 400 developers to just over 9,500.\n<\/p>\n<h2>How Microsoft developers have responded to Dev Box<\/h2>\n<p style=\"font-weight: 400;\">\n  The most important success criteria for Dev Box at Microsoft is the feedback we get from developers. Is the product helping them to enjoy doing their job or not? In the initial survey, overall satisfaction numbers topped 80%. That isn&#8217;t just individuals kicking the tires, over 65% of responses indicated that Dev Box was being used as the primary development environment. Here are a few examples of what we have been hearing:\n<\/p>\n<ul>\n<li>\u201cReally liked that the machine was available so fast and <strong>it had the enlistments I needed!\u201d<\/strong><\/li>\n<li>\u201cThanks for this exciting dev box infrastructure! In general, I really enjoy them\u2014performance is great, and there is <strong>less for me to manage in general\u201d<\/strong><\/li>\n<li>\u201cDev Box finally made me give\u00a0up my physical machine. It&#8217;s an\u00a0amazing service.\u201d<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">\n  We have so many more opportunities with Dev Box and would love to add your voices to our own on where we take the product next. <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/dev-box\/\">Click here<\/a> to learn more about Dev Box.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019re in an exciting time for technology. But to take advantage of the opportunities, it\u2019s critical for developers to have access to the tools and resources that can help them stay productive and do their best work. At Microsoft, we\u2019re migrating many of our developers to highly productive\u2026<\/p>\n","protected":false},"author":119301,"featured_media":720,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"video","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4,31],"class_list":["post-502","post","type-post","status-publish","format-video","has-post-thumbnail","hentry","category-engineering-at-microsoft","tag-1es","tag-dev-box","post_format-post-format-video"],"acf":[],"blog_post_summary":"<p>We\u2019re in an exciting time for technology. But to take advantage of the opportunities, it\u2019s critical for developers to have access to the tools and resources that can help them stay productive and do their best work. At Microsoft, we\u2019re migrating many of our developers to highly productive\u2026<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts\/502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/users\/119301"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/comments?post=502"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts\/502\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/media\/720"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/media?parent=502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/categories?post=502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/tags?post=502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}