Skip to content

Instantly share code, notes, and snippets.

@Najaf
Created June 30, 2016 16:45
Show Gist options
  • Save Najaf/85a209e3d36c65a3ec04c13f41befb2e to your computer and use it in GitHub Desktop.
Save Najaf/85a209e3d36c65a3ec04c13f41befb2e to your computer and use it in GitHub Desktop.

Happy Bear Software - Apprentice Developer Role Definition

Preamble

This document is here to help make clear the expectations we have for Apprentice Developers. This role is a junior role, and in our experience we've found it to be beneficial to be explicit about the day-to-day expectations so that you have a clear idea of what's expected of you and can more easily tell if you're doing a good job.

As you develop skill, experience and good judgement, we can progress to a less controlled style of management and delegate tasks to you at a higher level with the confidence that you have the necessary ability to complete them with progressively less oversight.

Expectations

You are expected to:

  • Provide updates on your work activity at the end of each work day. This should be in the format of a short direct slack message to your manager (probably Ali). They should contain what you worked on during that day, any obstacles you faced, what you intend to work on the following day and any other information pertinent to the status of the progress you made on assigned work tasks.
  • Seek clarification on the requirements of any tasks that are assigned to you. Using trello, slack, GitHub, email or other forms of online communication, you will be expected to ask for clarification and confirm your assumptions about any development tasks that are assigned to you. This may take the form of repeating your understanding back to the assigner, considering edge cases and asking about them or anything else you need to understand requirements to a sufficient degree to implement them.
  • Outline an implementation plan before you start coding and discuss your plan with your assigner. This is to increase the likelihood of you successfully implementing the task on the first try and perhaps highlight any potential misunderstandings about the requirements that have been assigned to you.
  • Implement according to the plan you made. Follow the plan you outlined in the implementation planning step and deliver the software. For each development task you are expected to:
    • Inform the assigner that you've started implementation of a task (by e.g. moving a trello card into an "In Progress" list).
    • Create a new branch in whatever repository you are working on for the task.
    • User source control according to our [[Source control guidelines]]
    • Push any work on the task to the GitHub repo for it as you go (rather than all at the end).
    • When the work item is ready for your assigner to review it, open a pull request for it.
    • Once you have worked through any feedback on the pull request, merge it into master.
    • Deploy the change to an appropriate environment (staging if it exists or perhaps straight to production, depending on the project).
    • Confirm that the change you've made works and the production application isn't catastrophically broken.
    • Inform the assigner that the task is complete (by e.g. moving a trello card into a "Done" list).
  • Take steps to solve assigned development tasks on your own. Ask for help when you've exhausted your abilities. It's good to push yourself to be more self-reliant when solving technical problems. It's also good to hear how senior developers solve problems. It's up to you to strike a balance between the two ways of solving the problems you face as part of development.

At this stage you will not be required to:

  • Perform time-sensitive development tasks. It's understood that you will have a strictly lower level of task completion speed than a more senior developer. If a task has been assigned to you, you can safely assume that it is not time sensitive.
  • Do extensive research and requirements gathering. Requirements will be provided to you in a format that should form a good starting point for you to begin to conceive of an implementation.

How to tell if you're doing a good job

To tell if you're doing a good job as an apprentice developer, ask yourself to what degree you're meeting the above-outlined expectations. The more of the things you're doing above without prompting, the better you're doing.

We don't expect you to achieve all of the above perfectly from day one, but these are the guidelines we'll be using to assess your performance and to help you improve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment