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

Chapter 33 of Code Complete mentions studying successful software projects. It is helpful to keep some successful open source projects as references in this regard. What open source projects do you hold as references?

Ideas

This answer is task and language specific, but here are a few ideas:

  • Scientific Python libraries (scipy, numpy, scikit-learn, scikit-image) are great examples
  • Django and flask are good examples of Python for web development
  • OpenCV is popular and mature C++ library for image processing

Consider also this collection of volumes that describe many architectures of popular libraries.

Exercise 3

During onboarding, you should have been added to a private Notion page titled “Career Growth”. This page 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 4

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 5

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 6

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 7

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 8

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 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 9

Write down potential solutions to the examples above.

Answer

Here are a few examples, 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 responsibilities 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 expanded 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-device industry 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 10

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

Exercise 11

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

Exercise 12

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

Continuous Lesson Improvement

Please help us make these lessons as relevant and up-to-date for future engineers as possible!

You can help in several ways:

  • Shorten or clarify the writing. We're all busy and less is more.
  • Ask if the purpose of the lesson is unclear. We want all of the lessons to seem useful.
  • Remove exercises or learning material that aren't useful.
  • Add more exercises, exercise answers, or learning material as appropriate.

You can quickly open the lesson page in the GitHub editor. Create a new branch and pull request and assign it to David.