Improving at all Levels

Purpose

We strive to empower everyone to improve:

  1. themselves
  2. their project’s processes
  3. the entire company.

In this lesson, we discuss how.

Individual Level Improvement

Individual improvement relies on your personal goals and motivation. Whether you spend your time reading technical books, contributing to side projects, or working extra hours, the foundation for your advancement is your commitment. To help accelerate your progress and reward growth, we provide the following tools and benefits:

Chapter 33 of Code Complete (2nd edition) discusses personal character and individual improvement. We think it is a worthwhile read (there is a copy of the chapter in the Google Drive library.

Exercise 1

Write down a few takeaways from chapter 33 of Code Complete. Did you disagree with anything he said?

Exercise 2

During onboarding, you should have been added to a private Google Drive folder that contains your employment agreement as well as a Google Doc titled “Career Growth”. This file is a log of your performance reviews, one-on-one meetings, etc. Find this file (if you don’t have one, ask David or Yujan to make it). In it, write down the following:

These last three questions help us place you on projects that will let you improve the skills you are interested in.

Exercise 3

Read this short article about dotfiles. Do you customize your dotfiles? Do you store them in version control? If not, consider setting up a repository for your dotfiles.

Hint

David has been iterating on his vim configuration for a while. His vim dotfiles are online as are his general dotfiles.

There are a variety of approaches for configuring dotfiles. The one used there is simple and is described in the README.

Here is David’s git configuration. It saves him from needing to configure git each time he buys a new computer. Also, sometimes we need to work on multiple computers, and keeping this information in source control ensures you have all of your customizations wherever you are working.

Exercise 4

If you don’t have a system for organizing notes and learning material, consider creating one.

Ideas

Everyone has their own system that works for them. Here are a few ideas that other people on the team use:

  • A folder with various Google Docs
  • Mac notes
  • A personal wiki
  • A single large text file (e.g., David has a bash alias that opens a single large markdown file that is synced with iCloud)

Exercise 5

Once or twice each year everyone shares new productivity tips during our 10x time. Consider storing your favourites in the tool you set up in the previous question so you can share them during these meetings.

Exercise 6

Our standup Slack channel is a great way to get to know the skillsets of other employees. Skim through the last few weeks of standup, and get a sense of what others work on.

Exercise 7

Our ask-advice Slack channel is a great place to ask questions to the team. Think of a personal-growth related question and ask the team!

Project Level Improvement

Each project and team is different. On some projects, we work side by side with our client’s engineers, while other projects are purely internal. Some projects must conform with United States (and other country’s) medical device regulations, while other projects do not have to adhere to any regulatory guidelines. Since there are many differences between each project’s requirements, every team is given the authority to determine, and improve upon, their own development processes.

As an integral member of your team, we are counting on you to speak up when you see room for improvement, or think an activity is a waste of time, or if you believe there is a better way to ensure patient safety. There is usually room for refinement, even on heavily regulated projects.

Here are a few examples of situations which could be improved:

Trust is a fundamental component of group improvement. Unlike individual improvement, which depends primarily on your own motivation, team, or project level improvement requires you to have confidence that all team members will listen and work to advance together. Changing a client’s process can be even more formidable, and communicating the need for altering operations can be a difficult conversation to have. In particularly challenging cases, you can trust that leadership will back you and put pressure on the client to make the necessary changes.

Exercise 8

Write down solutions that you would pursue to address each of the examples above.

Provided Answer

Here are a few example solutions, taken from real projects. Note that a given solution may not always be appropriate. If you have real solutions from your own projects, please feel free to suggest adding them!

Unclear roles and responsibilites result in lost effort

Poorly communicated deadlines cause client strife or block development

A weekly meeting often feels like a waste of time

On one client project, the team-lead, our client, and the managers from another contractor met every week for a status update. These weekly update meetings rarely required any discussion or decision making. Thus, we first moved them to every other week. Then, we eventually moved them to weekly status update emails.

Your team doesn’t ever pause to consider whether the current process could be improved, and as a result, changes are only suggested if there are serious problems

On one project, during an internal Innolitics meeting, we started asking “what can we do to improve our process” every week. Often, there was nothing to change. But sometimes people would make small suggestions which had a big impact. For example, we added a GitHub Label called “deployment-steps”, which we applied to any GitHub Issue that required manual deployment steps (like babysitting long-running database migrations).

Unprioritized backlog tickets leads to developing low-value, nice-to-haves rather than core requirements

Missing documentation makes it difficult to onboard new developers or for current team members to contribute across features.

Innolitics Level Improvement

Other improvements occur at the Innolitics business level. As is the case with team and project level improvements, we want you to be open to discovering better ways to do things and to trust that Yujan and David will listen to your feedback and take action to improve.

During our annual company retreats, we discuss our company mission and values. From time to time, we adjust both. For example, we have considered expanding our domain from “medical imaging” to “medical devices”. Additionally, as discussed in our handbook, we have revised our values before. Remember, part of our mission is to develop tools to help others in the industry, so be on the lookout for ways to improve the medical imaging field in general.

While improvements to our mission and values are rare, improvements to our business processes are much more common. We are always tweaking and improving our company policies. Suggestions and ideas for improvements are welcome and encouraged. Here are a few examples of improvements we have made to our company processes based on team member contribution:

Exercise 9

Can you think of any ways we can improve our hiring process?

Exercise 10

Can you think of any ways we can improve our onboarding process?

Continuous Lesson Improvement

Open the lesson page in the GitHub editor.

Remove any exercises or learning material that are not useful to the intended audience. Find ways to shorten and clarify the writing. Add generally useful exercises, responses, or learning material. Your improvements will make our training program great!

Create a new branch and pull request and assign it to your lesson mentor. The available lesson mentors are included in the YAML front matter of the lesson. They will set up a time to review your suggested changes and to talk through your exercises for the lesson.

After the review add your self to the "completed" property in the lesson's YAML front matter and merge in your changes!