Skip to content

Latest commit

 

History

History
51 lines (33 loc) · 3.17 KB

WORKING_WITH_ME.md

File metadata and controls

51 lines (33 loc) · 3.17 KB

Working with me

I work as a freelance/consulting software engineer, augmenting product development teams. This file provides an outline of how I work with clients.

If instead you're looking for an overview of my work history, please see my main GitHub profile page here:

https://github.com/Najaf

If you have any further questions please email me at ali.najaf@gmail.com

Written communication

I write, a lot. On a development team this extends to status updates, wiki pages, trello cards, and GitHub PR descriptions.

My goal in doing so is to:

  • Keep everyone up to date on what I'm doing, how I'm doing it, and why
  • Leave a record of my thinking so future developers (especially myself) can understand my current decision-making process
  • Ensure that if I get hit by a bus, other developers can take over in-flight work

Feature Development

When implementing changes to any given system, my process is roughly as follows:

  1. Gather as much information as possible about the existing system and the intentions behind the proposed changes
  2. Collaborate with product, other developers, and anyone else involved to make decisions about requirements, then document those requirements
  3. For larger features, make an implementation plan and have another developer review it
  4. Implement the feature, preferably with tests and minimal incidental complexity, then have other developers on the team review the changes in a PR
  5. Deploy the changes
  6. Ensure that the feature meets the requirements in production

Working this way, no one should be surprised by anthing I do. I try to get buy-in from relevant people on the team on what I'm going to build and how I'm going to build it.

Bug fixing

My bugfixing process is similar to my development process:

  1. Get clear about the difference between expected behaviour and observed behaviour
  2. Gather information about the environment the bug was observed in
  3. If the cause isn't readily apparent, gather further information, conduct experiments, have discussions etc until the the cause of the bug becomes clear
  4. If there are multiple options for a fix, weigh them up and decide on a fix for now, potentially after speaking to other developers or product managers
  5. Implement and deploy the fix
  6. Confirm that the fix works on production

Productivity

Staying productive (especially when working remotely) is a challenge for all developers. Here's what I do so that I can put in focused work every day:

  • Planning and communication. In order to keep forward momentum I try to break larger projects down into smaller pieces and communicate before, during, and after implementation.
  • Time management and logging. I try to keep detailed logs of exactly what time I spend and how I spend it while doing development work. This helps to keep me focused and also makes providing status reports a great deal easier.
  • Staying generally healthy. This includes maintaining a sensible sleep cycle, staying hydrated, lifting weights 4-5 times a week, and trying to stick to an overall healthy diet. While these things aren't directly related to programming, I find that the amount of time I can spend doing deep work drops if I don't keep these fundamentals in check.