Wednesday, August 13, 2014

How to Take Initiative and Keep Up With Deadlines—Professional Advice

New and veteran programmers alike struggle consistently with keeping initiative up, and meeting deadlines—doubly so when you're a new worker and also happen to be in charge of your own deadlines, as I am.

Moving up from simple coding
means learning how to plan the
actual project.
When you are an intern like I currently am, performance and effectiveness are two key factors to impressing those in power, and earning yourself a full time job (or at least a good recommendation in the case of temporary internships). While many employers will forgive a young professional's struggle and occasional stumbles, good performance in these factors reflects positively on you, and will help you develop quickly in the professional world.

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.
A wise programmer and instructor at PCC once gave sound advice to his students: "It's not about the number of lines you commit, but the quality of those lines." Especially in big projects, high-quality code is important for collaboration, and so just tracking the number of code lines you commit is not necessarily an accurate measure of one's performance.

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

Endeavor is an open-source solution for managing
software development projects, and includes a
place for reports. Your workplace may use something
like this to help track progress, to be sure to submit
reports regularly.
It's important to be fairly specific here, so that you can come back to these reports if necessary to calculate how much time you've spent on any specific task. If your workplace uses GitLab or something like it to track commits, it's a good idea to link your commits to tasks, for your own convenience as well as for those who will be reading the report.

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.
And if you get concerned, ask your boss directly for an assessment. Whenever you get feedback, be sure to set a goal for yourself regarding that feedback, and track your progress carefully in coming reports. This will demonstrate your commitment to professional development, and responsiveness to feedback.

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