Titulo Estágio
A New Build System (remunerado)
Áreas de especialidade
Engenharia de Software
Local do Estágio
Linda-a-Velha (Lisboa)
Enquadramento
OutSystems wants to revolutionize the way software applications are developed.
Using a visual programming language, the OutSystems platform allows developers to create state-of-the-art web and mobile applications, without having to worry about the several complex technologies that implement those applications. Application development with OutSystems is much faster and easier than with traditional software development methods and is being increasingly adopted all throughout the world.
The OutSystems platform itself is being developed in Portugal, by a R&D team of more than 100 engineers, using mainly C# but also other programming languages such as Java, Typescript, Javascript and the OutSystems visual language itself.
The OutSystems R&D team depends heavily on automation for performing all tasks needed to validate the platform, including build, deploy into test environments, or running tests. We also have the need to perform those tasks in different environments (e.g. developer’s workstation, continuous integration system) and over different stacks (e.g.: Windows, Linux).
Currently, our automation system is based on multiple technologies and languages (e.g.: batch scripts, makefiles, python scripts), and for some situations we have multiple different ways of performing the same task depending on where it is being executed (e.g.: developer’s workstation vs CI system).
The OutSystems platform is very complex and to be able to scale it to our future needs we are evolving its architecture to be more component based. We need to do the same for our build system, which is currently too monolithic.
Our goal is to have autonomous R&D teams working on and evolving different platform components separately. This includes all the automation tasks needed to build and validate each component. To achieve that we need to be able to properly define dependencies between components that might be implemented in different languages/technologies (e.g.: c#, Java, Javascript, REST APIs, XML) and have our automation system be able to deal with them.
With the growing focus on Continuous Delivery, there have been a lot of new developments on automated build systems that are able to respond to the needs of very fast and reliable automated builds. Systems like Buck from Facebook, Bazel from Google, Nebula from Netflix are just some of the examples of a list of technologies that just keeps growing. For managing dependencies there are also several solutions such as Maven for Java and NuGet for .Net.
Objetivo
The goal of this project is to research the requirements of the OutSystems R&D automation system and to propose a “holistic automation build system” to be used by all OutSystems R&D teams in the future. This new system should be based on industry standards or an adaptation of one of the many build automation systems that already exist.
The following are some of the high-level requirements that we believe the automated system will need to satisfy, each of which should be analysed in detail during the project:
- Ability to deal with different languages and platforms;
- Support very fast incremental builds, independently of the location where they are executed;
- Ensure the same task is always done in the same way and produces the same results, independently of the location where it is executed;
- Must be easy to extend in order to adapt to each team’s changing needs. The teams themselves must be allowed to easily create new automation tasks when needed.
- Must be able to cope with component dependencies independently of the technologies they are implemented in and take that into consideration when executing the automated tasks needed to validate those components incrementally (build, test);
- Needs to support cache mechanisms to ensure there is no need to build the same component for the same code revision multiple times.
If successful, this project will have a huge impact on the OutSystems product development process and on the daily lives of more than 100 software engineers.
Plano de Trabalhos - Semestre 1
1 - Detailed analysis and understanding of the current build system being used by OutSystems R&D, its challenges, shortcomings and requirements. The deliverable should be a detailed problem definition report.
2 - Study the state-of-the-art and do small proof-of-concept’s for 2 or 3 build systems using as examples concrete automated tasks from the OutSystems build system.
3 - Study the dependencies between the major OutSystems platform components and its implications on the segmentation of the build process.
4 - Study the state-of-the-art of dependency management tools.
Plano de Trabalhos - Semestre 2
1 - Design the solution for the new build system. Validate with R&D developers.
2 - Prototype Implementation
3 - Evaluate the results
4 - Write final project report
Condições
O estagiário receberá uma bolsa de investigação para licenciados de acordo com as tabelas da Fundação Para a Ciência e Tecnologia. Poderá também ser atribuído um subsídio de transporte, cujo valor será definido caso a caso.
O estagiário terá as mesmas ferramentas de trabalho que qualquer outro Engenheiro da OutSystems, incluindo um laptop, e acesso total às instalações da OutSystems e todos os seus benefícios (cozinha, café, ténis de mesa, snooker, entre outros).
Orientador
Miguel Antunes
miguel.costa@outsystems.com 📩