- Company: Acme Computers Inc.
- Version Control platform(s): Many GitHub Enterprise instances installed throughout the company by different teams. Acme Computers is trying to standardize on GitHub Enterprise and consolidate their GitHub usage onto a single instance. The company has many instances of other Git hosting solutions installed as well. Some are fully supported applications. Other instances are on machines under peope's desks.
- Performance: The single instance of GitHub Enterprise occassionally has reports from users of being slow. There are 5,000 of the likely 20,000 total users on the instance at this point. There are a few problematic repositories that seem especially slow. One repository was shrunk from 70GB as a Subversion repository to 7GB as a Git repository after some cleanup. However, this repository is still taking very long to clone and for other simple Git operations.
- Customer requests:
Acme wants GitHub to help them shrink the large repository to a more manageable size that is performant for common Git operations. The large repo is a project that is high visibility with an aggressive roadmap. They request that we help them within the month.
ANSWER: The repository can be optimized in different ways. I would first do a review of what kind of files are in it and remove those that are unnecessary, e.g. database dumps, duplicate files, binaries. There may be also vendor code, which can be replaced by Git submodules. Lastly, I would split the big repo into small ones [1]. In my experience I have seen different teams using different directories in the same repository. This is an anti-pattern when the code of those teams are not related.
Acme wants us to help them test GitHub Enterprise perfomance on a test machine for 20,000 users (their anticipated peak). They don't want any surprises when they reach that user count. They have asked you to make them a testing suite to mimic the type of load they will see to be assured GitHub Enterprise can handle the load.
ANSWER: I would verify that the server specs are appropriate, enough CPU cores, RAM memory and network connectivity. Then I would write some script to create fake load on the server. I would use ab (Apache HTTP Benchmarking tool) or locust.io, which is a Python framework for load testing. Or I would ask my colleagues since they might have solved this problem already for other customers!
Acme wants you to tell them best way to move all the other teams, using GitHub Enterprise or other Git solutions, onto their consolidated GitHub Enterprise instance. They have asked you to give them five or six bullet points about how you would approach that initiative, both technically and culturally.
ANSWER:
- Schedule a presentation about GitHub Enterprise during working hours for all technical employees, with emphasis on why Git is better than other Version Control Systems and why particularly GHE is the best solution existing in 2018.
- Prepare one-day session on how to use Git (beginners and advanced)
- Prepare one-day session about GHE for developers, QA, and system administrators (introduction to GHE interface, Pull Request flow, integration with CI/CD)
- Workshop where some volunteers from every team start migrating repositories to GHE
- Q&A session, with emphasis on problems found and how they were solved
- Company: Dunder Mifflin Technologies
- Version Control platform(s): Dunder Mifflin has a legacy technology stack. They are trying to reinvent themselves. They currently use Gerrit, out-of-the-box Git, Subversion, and Team Foundation Server.
- Customer requests:
"Help us modernize our software delivery and become a technology company."
ANSWER: I would explain them the benefits of having all source code management (repositories, pull requests, code reviews...) together in a single product and help them define a roadmap to migrate their current stack to GHE.
"Helps us learn to deliver software more often to tighten the feedback loop on features and new direction. Developers that are on our team want to ship software faster. We are not really sure how we can do that with our outdated testing and infrastructure. Can you outline some steps for us to cut our release times in half (from every 2 months) in the next year?"
ANSWER: Once they are using GHE, help them to create or migrate their current CI/CD pipelines to any of the CI solutions supported in GHE (I would personally pick Travis-CI since it's the one I know the best). Besides that, I would also talk them about Agile methodologies and explain them how to use features like Issues Milestones and Releases/Tags in GHE and how to use them adequately when they do Sprint plannings.
"We really need to make the cultural shift with our employees as much as the technical changes. Especially with some of our tenured employees who built the original tech stacks."
ANSWER: For a cultural shift it is really important to show how the new stack makes things easier to employees and their collaboration is totally necessary. I would begin by sending a poll to all employees in order to detect possible reluctances against migrating from the old stack. Then, I would schedule presentations, trainings and workshops to solve any possible doubts.