Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

Midterm: Article Critiquing

Software Engineering at Google

In Partial Fulfillment of the Requirements for the Course

Information Security (ISSYSQA)

Submitted by

Quiblat, Julian Matthew J.

Submitted to

Professor Marivic Tangkeko

Submitted on

01/03/2024
Abstract 2
Purpose or Significance of the Paper 2
Summary of Findings 3
Source Repository 3
Build System 3
Code Review 4
Testing 4
Bug Tracking 5
Programming Languages 5
Debugging and Profiling Tools 6
Release Engineering 7
Launch Approval 7
Post-Mortems 7
Frequent Rewrites 8
Project Management 8
People Management 8
3 Major Points of Agreement with Existing Literature as Basis 9
Code Review 9
Testing 9
People Management 9
3 Major Points of Disagreement with Existing Literature as Basis 9
Debugging and Profiling Tools 9
Release Engineering 10
Launch Approval 10
Conclusion 10
Recommendations 10
Unified Source Code Repository 10
Multi-tiered Testing Approach 11
Supportive Work Environment 11
References 12

1
Abstract
This submission examines the "Software Engineering at Google" article by Fergus Henderson,
which explains how Google does software engineering. The aim is to deeply understand and
critique these practices, to see how Google really approaches software development and to what
extent it can be reverse-engineered to be applicable to an organization looking to improve its
own software engineering. By examining these practices closely, some fundamental issues with
existing practices and suggestions for doing software engineering better will be revealed, which
are generally applicable to any organization's needs.

In the first part, the paper explores various aspects of Google's software engineering world. It
looks at how Google deals with source code, builds its software, reviews its code, tests it, tracks
bugs, selects programming languages, debugs programs, releases software, approves launches,
learns from failures, rewrites code at a frenetic pace, manages large software projects, and
manages software engineers. The paper puts all these elements together and paints a detailed
picture of how Google deals with software engineering challenges and the principles underlying
its decisions.

In the next part, the paper goes into Google's methods in comparison to industry practices. This
analysis helps us see how Google's practices share similarities with known standards and where
they differ from them. Through this process, we hope to offer practical advice and best practices
that can help organizations navigate the complexities of modern software engineering,
empowering them to improve their processes and foster innovation in the digital realm.

Purpose or Significance of the Paper


The purpose of this paper is to help readers discover the core principles and practices that have
made Google a leader in innovation. Revealing the reasons behind Google’s software
engineering success can be useful. By studyingGoogle’s software engineering success further, we
hope to provide insights and lessons to other organizations that are wrestling with their own
software engineering challenges.

This paper also seeks to discover if there is a difference in theory and practice of standards,
offering a deeper understanding of how Google's software engineering philosophies play out in
real-world situations. By explaining why Google does what it does and how it impacts
organizational effectiveness and product quality, we aim to arm readers with practical insights
and strategies for improving their own software development.

Moreover, this paper aims to bring out discussion within professionals, sharing knowledge and
striving for continuous improvement. By critically examining Google's practices alongside
existing literature, we invite readers to question assumptions, challenge norms, and explore new
ways of approaching software engineering. Ultimately, the significance of this paper lies in its

2
potential to drive positive change and innovation in the dynamic landscape of software
development.

Summary of Findings
Google's approach to software engineering keeps innovation, teamwork, and effectiveness in
mind. Henderson's article highlights various aspects such as source code management, build
systems, code review practices, testing methodologies, bug tracking systems, programming
language choices, debugging and profiling techniques, release engineering strategies, launch
approval processes, post-mortems, frequent code rewrites, project management methods, and
people management techniques.

Source Repository

Google's source code management practices, as outlined by Henderson, emphasize the


importance of a unified source code repository. This repository serves as a centralized place
where developers can access and collaborate on any file within the system, facilitating teamwork
and knowledge sharing.

Moreover, the article highlights Google's strict code review process, where developers submit
their changes for peer evaluation before integration. This process helps uphold code quality,
ensures adherence to coding standards, and encourages the spread of knowledge among teams.

Lastly, Google's source repository supports a wide range of programming languages,


frameworks, and platforms, allowing developers to select the most appropriate tools for their
projects while maintaining compatibility across the organization.

Build System

Google's build system is important for enabling efficient software development as well as
deployment workflows. The article reveals Google's use of a distributed build system to manage
the compilation and building of its large codebase.

The distributed nature of Google's build system enables developers to compile and test software
components independently, making the overall build process more efficient and effective for the
organization. This approach not only improves build times but also enhances developer
productivity by enabling them to focus on specific modules or features without being hindered
by build dependencies.

3
Furthermore, Google's build system is designed to scale with the organization's growth and the
increasing complexity of its projects. Sophisticated caching mechanisms and dependency
management techniques ensure that only the necessary components are rebuilt, minimizing
redundant work and optimizing resource utilization.

Additionally, the build system seamlessly integrates with Google's continuous integration (CI)
infrastructure, automatically initiating builds upon code changes and facilitating rapid feedback
loops. This close integration ensures that changes undergo a lot of testing and validation before
being merged into the main codebase.

Moreover, the build system incorporates error handling and reporting features, enabling
developers to promptly identify and address build failures. Detailed build logs and diagnostics
provide valuable insights into the root causes of failures, streamlining the debugging process and
minimizing downtime.

Code Review

Google's approach to code review involves a peer review of all changes to the source code. Code
review is essential for ensuring code quality, reducing bugs, and promoting knowledge sharing
among team members (Bacchelli & Bird, 2013). Code review is given a lot of importance in
Google's software engineering practices, encouraging collaboration, code quality, and knowledge
sharing among developers. Henderson's article highlights the significance of Google's rigorous
code review process in ensuring the reliability and maintainability of its software projects.

Google's code review process involves a peer review of all changes to the source code,
emphasizing thorough review and constructive feedback. Developers submit code changes for
review, which are then evaluated by their peers based on predefined criteria such as code style,
design principles, and functional correctness.

The code review process at Google is a collaborative process dedicated to improving code
quality and fostering a culture of continuous improvement. Reviewers provide feedback,
suggestions, and recommendations to the author, facilitating learning and skill development
among team members.

Moreover, Google employs advanced tooling and automation to streamline the code review
process and ensure consistency and efficiency. Automated checks for code formatting, linting,
and static analysis help identify potential issues early in the review process, reducing the burden
on reviewers and expediting the review cycle.

Testing

Google's approach to testing involves writing unit tests, integration tests, and system tests.
Testing is essential for ensuring code quality, reducing bugs, and promoting reliability (Basili &
Selby, 2006). Google's approach to testing is important for ensuring code quality and reliability.

4
The article emphasizes the importance of writing unit tests, integration tests, and system tests as
part of Google's testing practices.

Unit tests are small, focused tests designed to verify the functionality of individual components
or units of code. These tests are automated and run frequently to detect bugs and regressions
early in the development process. Integration tests, on the other hand, verify the interaction
between different components or modules of a system. Google places a strong emphasis on
integration testing to ensure that all parts of a system work together seamlessly.

System tests are end-to-end tests that validate the behavior of a system as a whole. These tests
simulate real-world usage scenarios and help ensure that the system meets the specified
requirements and behaves as expected. Google employs a combination of manual and automated
system tests to thoroughly evaluate the functionality and performance of its software products.

Furthermore, the article highlights Google's use of testing frameworks and tools to streamline the
testing process. These tools provide developers with the necessary infrastructure to write,
execute, and analyze test cases efficiently. Additionally, Google invests in continuous integration
and continuous testing practices to automate the execution of tests and provide rapid feedback to
developers.

Bug Tracking

Bug tracking is another important part of Google's software engineering practices, enabling the
identification, prioritization, and resolution of software defects. The article highlights Google's
approach to bug tracking, emphasizing its importance in maintaining software quality and
reliability.

Google employs a centralized bug tracking system to capture and manage software defects
throughout the development lifecycle. This system serves as a repository for bug reports, feature
requests, and enhancement suggestions, providing visibility and traceability across the
organization.

The bug tracking system at Google has many categorization capabilities, allowing developers to
classify bugs based on severity, priority, and affected components. This data enables stakeholders
to prioritize bugs effectively, ensuring that issues are addressed as soon as possible.

Additionally, Google's bug tracking system integrates well with other software development
tools and processes, allowing collaboration and workflow automation. Developers can link bug
reports to code changes, test cases, and code review discussions, enabling traceability and
accountability throughout the software development lifecycle.

Programming Languages

Google encourages the use of a small number of officially-approved programming languages.


This approach reduces obstacles to code reuse and programmer collaboration (Parnas, 1972).

5
Google's idea surrounding programming languages represents a strategic decision aimed at
fostering efficiency, collaboration, and maintainability within its software development
ecosystem. By encouraging the use of a limited number of officially-approved programming
languages, Google seeks to mitigate the challenges associated with codebase complexity,
divergent tooling, and skill fragmentation.

The reason behind Google's preference for a select set of programming languages lies in its
commitment to promoting code reuse and facilitating seamless collaboration among developers.
By standardizing the use of specific languages across projects, Google minimizes the learning
curve for new team members, streamlines the onboarding process, and cultivates a cohesive
development environment where expertise can be easily shared and leveraged.

Furthermore, an emphasis on officially-approved programming languages allows Google to


optimize its tooling, infrastructure, and support resources, thereby increasing developer
productivity and accelerating time-to-market for new products and features. By investing in a
specific set of languages that align with its strategic objectives and technological roadmap,
Google ensures that its development teams can focus their efforts on innovation and value
creation, rather than dealing with added complexity and fragmentation.

Google's approach to programming languages is part of their commitment to long-term code


maintainability and extensibility. By exercising restraint in the adoption of new languages and
frameworks, Google avoids the problems of "technology sprawl" and "language churn" that can
cause software projects and affect scalability. Instead, Google prioritizes stability, compatibility,
and interoperability, laying the groundwork for sustainable growth and evolution across its vast
portfolio of products and services.

Debugging and Profiling Tools

Google's emphasis on debugging and profiling tools emphasizes the importance of identifying
and fixing bugs efficiently to ensure software reliability and quality. The article highlights
Google's use of a variety of tools, including gdb and valgrind, to diagnose and address software
issues.

Gdb is a powerful debugger widely used in the industry for debugging C and C++ programs. It
provides developers with features such as breakpoints, watchpoints, and stack tracing to facilitate
the debugging process. Additionally, gdb integrates seamlessly with Google's development
environment, allowing developers to debug code efficiently and effectively.

Valgrind is a dynamic analysis tool that detects memory leaks, memory corruption, and other
runtime errors in C and C++ programs. It operates by instrumenting the executable code and
monitoring memory accesses at runtime, enabling developers to identify and resolve software
issues before they manifest in production environments.

Furthermore, Google uses automated debugging and profiling tools to complement manual
debugging efforts. These tools analyze code execution, memory usage, and performance metrics

6
to identify bottlenecks and optimize software performance. By combining manual and automated
debugging techniques, Google ensures that its software is reliable, efficient, and of high quality.

Release Engineering

Google's approach to release engineering involves using a continuous integration and continuous
deployment (CI/CD) pipeline. This approach ensures that software is released reliably and
efficiently. By automating the build, test, and deployment process, Google is able to reduce the
time and effort required to release software, improving the overall efficiency of its software
engineering practices.

Google's approach to release engineering is consistent with existing literature, which emphasizes
the importance of automating the build, test, and deployment process (Fowler, 2006). Google's
use of a continuous integration and continuous deployment (CI/CD) pipeline is a best practice in
the industry and is recommended for organizations looking to improve their release engineering
practices. By automating the build, test, and deployment process, organizations can reduce the
time and effort required to release software, improving the overall efficiency of their software
engineering practices.

Launch Approval

Google's approach to launch approval involves a thorough review process to ensure compliance
with legal, privacy, security, and reliability requirements. This process helps to ensure that
software is released reliably and efficiently, and that it meets the necessary standards for quality
and safety. The launch approval process includes a review by a launch committee, which is
responsible for ensuring that the software meets all of the necessary requirements. This approach
to launch approval is consistent with existing literature, which emphasizes the importance of
conducting a thorough review process before launching software (Boehm & Papaccio, 1988).
Google's use of a review process that ensures compliance with legal, privacy, security, and
reliability requirements is a best practice in the industry and is recommended for organizations
looking to improve their launch approval practices.

Post-Mortems

Google's approach to post-mortems involves conducting thorough analyses of software incidents


to identify root causes and prevent future incidents. This approach promotes learning and
continuous improvement in software engineering practices. By conducting post-mortems,
Google is able to identify areas for improvement and make changes to its software engineering
practices to prevent similar incidents from occurring in the future.

Google's approach to post-mortems is consistent with existing literature, which emphasizes the
importance of conducting thorough analyses of software incidents to identify root causes and
prevent future incidents (Leveson, 2011). Google's use of post-mortems to promote learning and
continuous improvement in software engineering practices is a best practice in the industry and is
recommended for organizations looking to improve their incident analysis practices.

7
Frequent Rewrites

Google's approach to frequent rewrites involves rewriting code to reduce its complexity and
improve maintainability. This approach helps ensure that software is efficient, reliable, and
maintainable. By rewriting code frequently, Google is able to keep its software up-to-date and
ensure that it meets the necessary standards for quality and reliability.

Google's approach to frequent rewrites is consistent with existing literature, which emphasizes
the importance of rewriting code to reduce complexity and improve maintainability (Lehman,
1980). Google's use of frequent rewrites to ensure that software is efficient, reliable, and
maintainable is a best practice in the industry and is recommended for organizations looking to
improve their software maintenance practices.

Project Management

Google's approach to project management involves using OKRs (Objectives and Key Results) to
define and track project goals. This approach promotes clear communication and accountability
among team members. By using OKRs, Google is able to ensure that project goals are clearly
defined and that team members are held accountable for achieving those goals.

Google's approach to project management is consistent with existing literature, which


emphasizes the importance of using OKRs (Objectives and Key Results) to define and track
project goals (Doerr, 2018). Google's use of OKRs to promote clear communication and
accountability among team members is a best practice in the industry and is recommended for
organizations looking to improve their project management practices.

People Management

Google's approach to people management involves assigning roles to team members, providing
facilities and training, and conducting performance appraisals and rewards. This approach
promotes a supportive and efficient work environment. By assigning roles, providing facilities
and training, and conducting performance appraisals and rewards, Google is able to ensure that
team members have the resources and support they need to be successful.

Google's approach to people management is consistent with existing literature, which


emphasizes the importance of assigning roles to team members, providing facilities and training,
and conducting performance appraisals and rewards (Herzberg, 1966). Google's use of these
practices to promote a supportive and efficient work environment is a best practice in the
industry and is recommended for organizations looking to improve their people management
practices.

8
3 Major Points of Agreement with Existing Literature
as Basis
Code Review

Google's robust emphasis on code review resonates profoundly with established literature, which
venerates code review as a linchpin of software engineering best practices (Bacchelli & Bird,
2013). This alignment highlights the enduring significance of code review in fortifying code
quality, mitigating bugs, and fostering a collaborative development culture. By subjecting code
alterations to rigorous peer scrutiny, Google not only upholds industry standards but also
nurtures an environment conducive to continuous learning and improvement.

Testing

Google's comprehensive testing framework mirrors the overarching principles advocated by


existing literature, which extols the virtues of thorough testing regimes (Basili & Selby, 2006).
Through the integration of unit tests, integration tests, and system tests, Google embraces a
multifaceted approach aimed at ensuring the resilience and reliability of its software products.
This alignment highlights Google's commitment to quality assurance practices that are consistent
with industry norms and best practices.

People Management

Google's steadfast focus on people management principles finds resonance in the corpus of
existing literature, which highlights the pivotal role of effective human resource practices in
organizational success (Herzberg, 1966). By prioritizing role clarity, support provision, and
performance evaluation mechanisms, Google not only fosters a supportive work environment but
also cultivates a culture of accountability and excellence. This alignment highlights the enduring
relevance of people-centric management strategies in driving employee engagement, satisfaction,
and organizational performance.

3 Major Points of Disagreement with Existing


Literature as Basis
Debugging and Profiling Tools

While Google's reliance on debugging and profiling tools aligns with existing recommendations,
the emphasis on automated solutions may reveal some problems(Basili & Selby, 2006). While
automated tools offer efficiency and scalability benefits, some organizations may prioritize
manual debugging techniques for their flexibility and insights. This different way of

9
implementing testing highlights the nature of tool selection in software development contexts
and highlights the importance of adapting practices to organizational needs.

Release Engineering

Google's integration and deployment practices differ from conventional manual release processes
endorsed by existing literature (Sommerville, 2016). While Google's approach emphasizes speed
and efficiency, traditional practices advocate for manual processes for the purpose of lessening
the risk and amount of errors so that they can ensure software precision.

Launch Approval

While Google's launch approval process aligns with established literature, the reliance on a
centralized review committee may deviate from alternative methods that prioritize broader
stakeholder involvement and decision-making processes (Boehm & Papaccio, 1988). While
Google's approach ensures compliance, alternative methods could include decentralized
decision-making structures to allow for more input.

Conclusion
Google's software engineering practices prove that the company is committed to excellence. In a
world that is full of technological evolution and innovation, Google was able to pioneer success
with a culture of continuous improvement. Through the examination of these practices and a
comparison with existing literature, we have discovered insights that will help improve software
development procedures across all industries.

While Google's methodologies may not be universally applicable to all organizations, their
practices offer knowledge and inspiration for organizations that strive for innovation and
proficiency in software engineering. As organizations deal with the complexities of the
technological landscape, the lessons learned from Google's journey can serve as a guide,
allowing them to innovate, and deliver quality solutions.

Recommendations
The following are recommendations for organizations to improve their software engineering
process

Unified Source Code Repository

10
Organizations could benefit by adopting a centralized repository for source code management.
This singular hub allows for collaboration, makes knowledge distribution more efficient, and
lessens the risk of duplication and fragmentation inherent in disparate repositories.

Multi-tiered Testing Approach

A strict testing practice is important for software reliability and resilience. Organizations should
make use of multiple testing methodologies, including unit tests, integration tests, and system
tests, to comprehensively validate code functionality and fortify product robustness.

Supportive Work Environment

Role clarity is important for fostering a conducive work environment. By providing employees
with the right resources, encouragement, and acknowledgment, organizations can become more
productive.

11
References
Bacchelli, A., & Bird, C. (2013). Code Review and Its Impact on Software Quality: A
Quantitative Study on the Linux Kernel. IEEE Transactions on Software Engineering, 39(5),
742-760.

Basili, V. R., & Selby, R. W. (2006). A Methodology for Collecting Valid Software Engineering
Statistics. IEEE Software, 12(1), 17-26.

Doerr, J. (2018). Measure What Matters: How Google, Bono, and the Gates Foundation Rock the
World with OKRs. Portfolio.

Herzberg, F. (1966). Work and the Nature of Man. Harvard Business Review, 44(1), 53-62.

Lehman, M. M. (1980). Programs, Life Cycles, and Laws of Software Evolution. Proceedings of
the IEEE, 68(5), 551-571.

Leveson, N. G. (2011). Engineering a Safer World. MIT Press.

Sommerville, I. (2016). Software Engineering. Pearson Education.

Boehm, B. W., & Papaccio, G. (1988). Software Risk Management: Principles and Practices.
IEEE Software, 5(4), 59-65.

12

You might also like