My and other teams from the Tools for Software Engineers group @ Microsoft have started accepting applications for graduate level internships for the Summer of 2018. We design most of our research projects to result in a publication, which is especially valuable for PhD students. However, all our projects also focus on internal impact for Microsoft, that means solving real world industry problems.
Accepted applicants will receive a competitive offer to join Microsoft USA in Redmond for the period of 12 weeks. Microsoft will cover travel expenses, provide corporate housing, and offers competitive salaries. During your internship you will be able to work with a team of high quality and experiences software engineers and researchers from Microsoft Research. More details will be provided once we receive your application. Internships at Microsoft last 12 weeks.
Below are some of the projects for this year. The list is not complete and we will update the list periodically, please check the TSE site for the latest project list. We desgined each project to give our interns a right balance of research exploration and hands-on experience with the product or service group. You can also read more about the projects from last year to get an idea of the kind of problems our interns embark on during the course of their internship.
How to apply
Send an email to tseinterns @ microsoft.com, including your resume and, if possible, project preference. To increase your chance to get invited to an interview loop, make sure you specify the project(s) that interest you the most and a short paragraph explaining why you are a good fit for that project and why you chose it / them. Good luck!
- Data-driven Productivity Analysis :: Use data we collect from our engineering system to study team behaviors that lead to increased productivity. Give teams visibility into their process and provide productivity recommendations to project leaders and individual engineers. Use qualitative and quantitative methods to study a link between productivity and satisfaction.
- Static Analysis at Cloud Scale :: Work inside Microsoft’s internal engineering pipeline on the next generation static analysis. Do a root-cause analysis of post-release failures to find new common patterns. Help build cloud-scale system for low cost injection of new analysis into our coding, build and testing workflow, efficient execution, and effective presentation of the results to all internal developers.
- Prediction Models for CloudTest Resource Allocation :: The distributed testing solution of Microsoft’s One Engineering System, CloudTest, is used by thousands of engineers at Microsoft and runs tens of millions of tests daily. CloudTest has to balance fairness and utilization of resources (machines) assigned to test sessions it runs. You’ll have the opportunity to build resource demand prediction models to automatically ingest the system’s usage history, predict incoming resource demand based on that, and allocate resources to the sessions accordingly. The challenge would be to optimize resource utilization, while ensuring no tests sessions are starved. The internship will give you an opportunity to do impactful work on a cutting-edge large-scale engineering system while applying state-of-the-art machine learning techniques.
- Effectiveness of Regression Testing in Modern Systems :: Our build and test workflows are described as large graphs of tasks. Some nodes in the graph (tasks) describe compile and link phases and some execute tests. The edges describe dependencies between tasks. When source code of one project is changed, we re-execute all downstream tasks including all tests. Sometimes it is a lot of tests that are far (# of edges) from the change itself. In theory, these tests all have a potential of uncovering bugs. But do they? How far out from the changed project do we have to retest to get a bug detection rate indistinguishable from “retest all impacted” strategy? We will change our execution scheme to avoid extra costs and measure the efficiency gains.
- Accurately Identify Causes of Slowdowns in a Distributed Build System :: is hard as build times depend on many influencing factors. At the same time, such performance analyses are critical for the build system engineering team to improve the performance of the build systems. Build system customers benefit from such analyses allowing them to keep track of build duration and to identify reasons of build slowdowns. A build duration slowdown can be caused by build engine performance regressions, an increased complexity of the system under build, or a combination of both of the previous reasons. To debug a build duration increase, it is most essential to pinpoint the main reason for the increase. The main goal of internship is to develop and evaluate a cost model capable of providing a detailed picture of where build time is spent during builds, to answer questions about who is responsible for an increase and to provide details to identify the cause of a slowdown.
- Visualization for Differences Between Build Executions :: Every day Microsoft’s internal cached distributed build system, CloudBuild, emits gigabytes of data associated with build sessions. The internship’s focus will be on developing an interactive web-based visualization for analyzing differences between build sessions and identifying deviations (or possible regressions) from an average performance of a build. You will have an opportunity to work with voluminous and complex data and apply creativity in developing sophisticated visualization solutions.
- Predict Build Times for Improved Developer Experience :: As the field of software engineering progresses, build systems are becoming smarter and moving towards incremental, cached and distributed builds. Under such optimizations, it only becomes more useful and important to estimate upfront how long a build session will execute for, and the probability of its success/failure. Although seemingly simple, various performance optimizations in the build workflow, not only make the problem interesting but also a challenging one to solve. The goal of this internship project is to leverage historical build telemetry data for a variety of systems and model useful build properties (e.g. build time, success/failure of a build), primarily as a function of code changes. The overall motivation of this project is to inform developers early of the potential impact of their code changes on reliability and performance of subsequent build executions.