HW2: Reflections on software engineering practices

The Complexity of Software and Its Evolution

Software is, by definition, complex. Frederick P. Brooks, in his article “Essence and Accidents of Software Engineering,” describes the essence of a software entity as “a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions.”

This week’s readings reminded me of the sheer amount of moving pieces that drive software and how this complexity connects to its other characteristics. For instance, a constant need to change. Each “interlocking concept” evolves in its own right; the software has to keep up to keep from breaking. This comes with complications because when a change is made, all of the dependencies have to be considered. For instance, take something as simple as a developer reconfiguring a database, renaming columns and changing their order; any file referencing that database may need to be reworked. I witnessed this scenario at my job in technical operations and found it incredible how much planning went into adding a few new columns to a data source that populates the user interface! Given the complexity of changing software, it becomes dangerous to merge personal changes against code that’s not up-to-date. In his article, “Cherry-Picking and the Scientific Method,” George V. Neville-Neil, writes that “the real work” is periodically merging whatever code we are working against. If we keep the tip of the git, as he calls it, from straying too far without our work, we can prevent a lot of unnecessary trouble reworking it to accommodate the latest version.

Lessons from Google: Productivity, Reliability, and Simplicity

Given how quickly complex software can become a “monster” - in Brooks’ words - with bad practices, it’s no surprise what a great emphasis is put on healthy software practices. I first read the three words productivity, reliability, and simplicity mentioned together in “Essence and Accidents of Software Engineering.” The author suggests that the antitheses of these create software costs, thereby suggesting that we should strive for productivity, reliability, and simplicity in our work as software engineers.

While reading about Google’s codebase systems in the article “Why Google Stores Billions of Lines of Code in a Single Repository” by Rachel Potvin and Josh Levenberg, I kept these attributes on my mind. What better company to analyze for lessons on successful software practices?

The first characteristic I noticed in Google’s systems was simplicity. According to the article, Google stores one billion files, a history of approximately 35 million commits, and 86TBs of data in a monolithic repository. I was shocked by this! The single repository is by no means small, which prevents its own challenges, but its monolithic nature allows for simpler tooling with just one system of reference. I think that this is one of the biggest takeaways going into our team project - if Google can keep things simple, we certainly can - and it’ll probably help us in the long run.

Google also implements a number of systems to support code reliability. Particularly, they’ve implemented sophisticated automated testing which covers each dependency impacted by the change at hand. They have also automated the reversal of the unlikely changes that do cause breakage. As Neville-Neil writes in “Cherry-Picking…,” “no part of working on software should be based on gut feelings, because, after all, software is supposed to be a part of computer science, and science demands proof.” Google’s automated testing work to “prove” the safety of each change, maintaining the reliability of a codebase worked on by thousands of developers on a daily basis.

The third and final attribute, productivity, is primarily supported by Piper and CitC architectures. These tools allow the developers to work on such a large database as the Google repository through their own synced local “workspace.” By only storing modified files, workspaces consume a relatively small amount of storage while giving developers quick access to anything they need from the distributed cloud repository. Through the trunk-based development model, engineers work from the most recent version of the code, making changes through “single, serial ordering.”

2021

Meeting Charleston

2 minute read

Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...

Chapter 9

2 minute read

The journey does not end after a software project has gone live. This week’s reading was “Continuing the Journey” - Chapter 9 of Client-Centered Software Dev...

Chapter 6

3 minute read

“Databases reside at the heart of most software applications” (SD Chapter 6, pg 168). This week’s readings cover Chapter 6 of our textbook, Client-Centered S...

Chapter 5

2 minute read

This week’s reading (Chapter 5 of Client-Centered Software Development) covers domain classes and unit/system testing. According to the text, “domain classes...

Release early and often

2 minute read

Proper documentation for both internal and external users of a software application is crucial to its sustained success after deployment. This week, we read ...

Stupid or Solid?

2 minute read

This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are co...

What’s Happening?

2 minute read

This week, our class chose and reflected on articles from Software, Computer, or CoACM magazines. While perusing software magazines (finding good ones was an...

This bugs me

4 minute read

6.4. Exercise - Find the Oldest Bug Find the oldest bug that’s still open in your chosen project. Write a blog entry describing the problem, with a theory ab...

Reflections on Open Source in Today’s World

2 minute read

This week, our assignment was to explore http://opensource.com/, reading at least two medium-length articles from the site and blogging about what we learned...

Reflections on FOSS

3 minute read

This class, CSCI 462, is centered around contributing to an open-source software project through bug fixes, documentation fixes, and other improvements. Befo...

Introduction

1 minute read

Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.

Back to top ↑

2020

HW21: Chapter 24

1 minute read

24.6 Explain why program inspections are an effective technique for discovering errors in a program. What types of error are unlikely to be discovered throug...

HW20: Team Progress II

1 minute read

I feel like our team made great progress on the most recent deliverable (deliverable 4)! We met via Zoom more often than we did between any other two variabl...

HW19: Chapter 23

less than 1 minute read

23.6 Figure 23.14 shows the task durations for software project activities. Assume that a serious, unanticipated setback occurs, and instead of taking 10 day...

HW18: Chapter 21 and Chapter 22

2 minute read

21.4 Explain why an object-oriented approach to software development may not be suitable for real-time systems.

HW17: Team Progress I

2 minute read

This is my first reflection on our team’s testing project. I think this will be a helpful exercise as we move into the final stages of building our testing f...

HW16: Chapter 20

2 minute read

20.10 You work for a software company that has developed a system that provides information about consumers and that is used within a SoS by a number of othe...

HW15: Chapter 19

1 minute read

19.3 Why is it impossible to infer the emergent properties of a complex system from the properties of the system components? In the words of Ian Sommerville,...

HW14: Chapter 18

less than 1 minute read

18.4 Define an interface specification for the Currency Converter and Check Credit Ratings services shown in Figure 18.7.

HW13: Chapter 17

2 minute read

17.10 Your company wishes to move from using desktop applications to accessing the same functionality remotely as services. Identify three risks that might a...

HW12: Chapter 16

less than 1 minute read

16.9 Design the interfaces of components that might be used in a system for an emergency control room. You should design interfaces for a call-logging compon...

HW11: Chapter 9

2 minute read

9.8 Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them? Fault repairs to fix bugs and v...

HW10: Chapter 15

2 minute read

15.10 The reuse of software raises a number of copyright and intellectual property issues. If a customer pays the software contractor to develop a system, wh...

HW9: Chapter 8 and reflections on testing

5 minute read

8.7: Write a scenario that could be used to help design tests for the wilderness weather station system. Context: According to Chapter 7, Design and Implemen...

HW8: Mythical Man Month

3 minute read

Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late ...

HW7: Chapter 5 and 6

1 minute read

5.3: You have been asked to develop a system that will help with planning large-scale events and parties such as weddings, graduation celebrations, and birth...

HW6: Chapter 2

1 minute read

2.1 Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain ...

HW5: Chapter 4 and reflections

6 minute read

4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the fo...

HW4: Reflections on software failures

3 minute read

Our readings this week began with a focus on several software engineering failures which resulted in devastating incidents such as plane crashes (Space Craft...

HW3: Chapters 11 & 12

3 minute read

11.4: What is the common characteristic of all architectural styles that are geared to supporting software fault tolerance? Architectural styles geared to su...

HW1: Chapter 1

3 minute read

1.3: What are the four important attributes that all professional software should possess? Suggest four other attributes that may sometimes be significant.

HW0: Introduction

less than 1 minute read

Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.

Back to top ↑