| Moving up from simple coding means learning how to plan the actual project. |
Taking this to an extreme, I would go so far as to say that in order to earn yourself a promotion, these factors are just as important—and may even be more important—than how good you are at the work you do. Consider that architects don't need to be as good at pouring cement or making rivets as construction workers.
In this blog post, I share some strategies I've used to eyeball my workload, set appropriate deadlines, and stick to them. Additionally I'll make an argument for why these skills supersede others when being considered for a promotion.
Quality vs. Quantity: Why LOC is not a Good Measure of Productivity
| GitLab helps programmers track LOC and, more importantly, overall development milestones. |
So what is?
If you're working as a developer, you'll often (hopefully always) be working off of a set of requirements. This checklist serves as your list of assignments, and can also serve as a measure of your performance. A decent programmer or project leader will be able to gauge the difficulty of any given requirement, and so submitting which requirements you contributed to will be a good tell of your productivity. Don't rely on this to assess your work effectiveness.
Tracking Your Work Effectiveness: Weekly Reporting...
A Portland-based senior software engineer I spoke with some time back told me that one thing he always remembers when assessing interns is whether they report their activity. Since then I've always spent the last 15 minutes of each day writing a short report on what I did, and about how long I spent doing each thing. I do this in bullet format, something like:
Monday
- Project Name development (specific assignment)—3 hr
- Project Name research (topic and purpose)—2.5 hr
- Project Name development meeting—1 hr
- Project Name dev discussion w/ Coworker (topic)—30 min
- Project Name testing—30 min
- Email and clerical tasks—30 min
And it's very important not to lump research into something like development, even if it's directly related. Consider that law firms consider research to be non billable hours for their clients. Your workplace may do the same, depending on the work environment.
Additionally, separating these will help demonstrate how much thought you put into your work, and can help you track your improvement as you learn more and grow (and need less research for some assignment). Tracking these sorts of things will help you learn to gauge your own work effectiveness, and can help you track your progress towards a personal performance goal.
...and Requesting Feedback
At the end of each week, I write a paragraph-form summary of my work and its results. Try to be succinct and not too verbose, and keep it impersonal. Remember, this is for your own sake as well as your employer, so be mindful of that as you write.Finally, send a PDF of this report to all of your relevant coworkers and ask for feedback on your performance. Do this consistently, even if you don't get any feedback—even if they're not responding, they're noticing. If you ask for feedback and stay positive, remember that silence can be a good thing because it means they think you're doing fine.
| Pair programming is one way of getting immediate feedback on your performance, and is a tool used by those who follow the Agile Development model for software development. |
It's very important not to be shy about this. Don't justify silence from yourself by thinking "they'll say something if they feel like I need to change how I work," or "they can look at my commit history if they want to see what I'm doing," or even "I don't want to waste work time talking about work—I'd rather just work."
Remember that professional development is work, and it's very important.
It's a sort of meta-work, in that it's work regarding the assessment of your work, but doing this will help keep you mindful of your progress and goals, which will improve the quality if your work. And quality is very important.
Taking Initiative by Setting Goals and Deadlines
If you report your activities weekly, and consistently seek feedback on your performance, you will be noticed as someone who takes initiative in the workplace. These reports serve a dual purpose besides letting your employers see what you're up to, and helping you grow as a worker: additionally, these reports will help you learn to gauge your own pace of work, which will then help you set reasonable goals and deadlines for yourself.
| You can avoid being the punchline in this joke if you track your performance well. |
As an added bonus, the goals and deadlines you then set are synergized by the fact that you're reporting your performance, which then lets you track your progress on them. (Pardon the white-collar buzzword.)
When given an assignment and deadline, practice setting your own deadlines by breaking the assignment into smaller chunks, and setting deadlines for yourself in each of those things. Include these in your reports, especially if your assignment spans more than one week. Also be sure to track the official assignments and deadlines on top of your personal ones.
Eventually, you may also be given charge of your own project, as I have in my internship. This can be very scary, especially for those who fear failure (read: everyone). But if you set mini-deadlines for yourself, and report your activities each week, it shouldn't be that difficult to set your own bigger deadlines based on your performance with given deadlines, and personal deadlines.
Try to break down the bigger project into a series of assignments, try to eyeball how long each one will take, and assign them to yourself (or others if you're allowed) and then, of course, track performance.
Even if you fail to meet the deadlines, that's okay: it's your first shot at doing it yourself, and you probably aren't going to be fired for it. In fact, you may be praised for your candor.
Why These Skills Supersede Actual Programming Skills
The header for this section is a trick. The reason these skills supersede programming skills is because your impression of programming skills may very well be wrong. When you think of programming skills, you may think of how fast you can write a switch statement, or how many macros you know, or how well you can use your IDE. You're right in that these definitely are programming skills. And they're important, too.
| A spendy keybord and hotkeys will help you code quicker, but are you really getting the project done faster? |
But the skills mentioned in this article supersede those programming skills because the skills mentioned here are programming skills. They're the big ones, in fact.
Assessing your growth as a programmer is the biggest programming skill because it requires objectivity honesty, and goal setting. A good programming environment is one where those involved are object, honest, and goal-oriented. This helps get work done.
Also, once you start assessing your own performance, you will watch as your performance increases. You'll be able to quantifiably measure it. You can objectively prove it if needed, and you're much more likely to get feedback from your mentors if you ask for it, which will help you grow as a programmer (mentor or senior programmers actually know things, believe it or not!)
Conclusion
Managing yourself is not only a great way to develop as a programmer and professional, but a great way to build management skills that will prepare you for promotions later in your career. Or sooner, if you grow quickly. And as you move higher in the software development ladder, you'll start to notice that you spend less time coding, and more time doing this sort of work to make sure your project is on track. That's because project management is a vital skill for managers. Notice that lexical correlation?
In order to manage yourself effectively, it is important to closely track your activities and performance, so you can measure changes in those areas. It also allows you to provably demonstrate your changes to the right people.
Additionally, taking the initiative to seek feedback reflects well on you and will help you learn from the right minds.
When you begin to manage yourself, you will almost immediately see an increase in performance, because you'll develop an insight into knowing what needs to be done in order to complete a task, and how long it will take. This will help you plan strategically, and make the most effective choices.
And if you get really good at these skills, you'll see yourself working less overtime near a project's deadline, because you've been on top of it since the beginning. Remember to ask yourself, "If I can't get my job done in 8 hours a day, what am I doing wrong?"
A bit later in your career, these skills will come in handy as you move to positions that require fewer code-writing tasks, and more that require code-managing tasks. And regardless, project management skills are integral programming skills that will also increase your immediate performance.
No comments:
Post a Comment