Google+

Tip for success – Track your accomplishments

When it's time for your yearly performance reviews, how do you convey all of the great ideas you've had, the money you've saved the company, and the customers you've delighted? My suggestion is to start keeping track of your accomplishments. I think this is especially important in the software business where you may be seen as the guy that sits around at a computer all day.

Accomplishment-Target

I used to work for an incredibly huge (read: bureaucratic) company that required everyone to fill out a form every year, which was basically a resume. You were essentially going through the process of re-applying for your own job to determine your performance, and subsequently, your raise. Everyone hated doing it, but in hindsight I believe it was a good exercise. If I had been keeping a running list of my accomplishments, the process would have been much less painful.

In an ideal world, your boss would really understand your job and would know exactly how great you are. In fact, if you're a development manager reading this, I suggest you start keeping track of those types of things somewhere other than your head. It will help you evaluate your employees that don't listen to me!

If you're not keeping track of all of the amazing things you're doing throughout the year, there are a couple of obvious problems. First, there is usually a "dead" period right after a review in which your accomplishments are so distant from your next review that they slowly fade from everyone's mind. Second, you're just one of many employees that your boss has to manage. How likely is he or she to notice everything that you make look so easy? Not only that, but your career is more than just the accomplishments you had from the last year.

What should this list look like? Each line should be in the same format as an accomplishment on your resume. After all, you're trying to sell yourself just as you would when applying for a job.

Feb 09

  • Implemented a new CMS system for the finance department saving $5300 annually.
  • Shortened the project planning process by removing duplicate steps, allowing projects to be delivered an average of 10% faster.

Personally, I've already starting tracking my accomplishments. The next time I have a performance review coming up, I can send my boss the highlights for the past year, keeping them fresh in his mind. I hope I can motivate as least one other person to do the same. If I ever want to make a career move, I believe the list will also be very useful when updating my resume.

Do you already keep a list of your accomplishments? How have you found it useful?

Like this post? Please share it!

See a mistake? Edit this post!

Vista x64 Frequent Stuttering – Dell M6400

I recently got a new laptop at work (the details of which I'm saving for another day). It's a Dell Precision M6400. With a fresh install of Vista Enterprise x64, the whole machine would stutter/pause/stall every few seconds. It wasn't just the mouse, it was the display, the sound, everything. It was unbearably annoying, and I eventually fixed it.

When the stuttering started, I frantically searched Google for other people having the same issue. Apparently it's a frequent issue, and is often caused by NVidia drivers. In other cases, it's caused by hard drive issues. It was even occurring on all the other laptops we ordered with the same configuration.

I spent hours trying to fix it, including the following:

  • Updated BIOS
  • Switched the hard drives to performance mode
  • Enabled VT extensions (needed to do this anyway)
  • Forced all of the graphics options in the NVidia control panel to off.
  • Uninstalled NVidia drivers, reinstalled them. I also hacked some of the official NVidia drivers and installed them instead of using the ones that Dell supplies.
  • Turned off superfetch
  • Turned on readyboost and used a USB thumb drive
  • Full scandisk checking for bad sectors
  • Defrag
  • Disabled touchpad and eraser head
  • Turned off just about every service, and killed almost every process
  • Installed chipset drivers (SM Bus)

I had just about given up, when a colleague suggested a few things, including installing new SATA drivers for my RAID array (I'm running RAID 0). I grabbed the latest copy from Dell, instead of using the ones that came on the original CD. Sure enough, that fixed it.

Storage Manager Drivers (Middle One)

The irony is that I usually set up my own machines (I'm pretty specific about how I like it set up), but this time I let our IT guy set it up to save me some time. When I set up machines, I'm obsessive about getting the latest drivers from the web, because I've been through this type of problem before. From now on, I'm going back to setting up my own machines.

I get the feeling this will help someone out there!

Like this post? Please share it!

See a mistake? Edit this post!

Extension Methods & Single Responsibility Principle

Extension methods were a new feature in .NET 3.0 (they are also supported by the 2.0 CLR). The single responsibility principle (SRP) is a strategy for structuring our code to make it more maintainable and testable. In this post, I'm going to discuss how we can use extension methods to make our code easier to read and satisfy the idea behind SRP.

As I mentioned, extension methods were a new feature in .NET 3.0, and they're compatible with the 2.0 CLR. They're backwards compatible because they're simply a compiler trick. In fact, you may already have methods that are only one step away from being considered extension methods.

Here is a method that is not an extension method (we'll come back to those in a bit):

public static Report GenerateReport(ReportData data)
{
    //Create a report from the report data
}

A method like this is useful because it avoids cluttering another class with unrelated functionality. Imagine the opposite situation in which case the report data class is responsible for the data in the report, as well as the formatting of the report. The single responsibility principle tells us that we should separate the operations so that each class has only one reason to change. In practice, I have personally seen the advantages in code maintainability, readability, and testability. I won't delve deeply into the supporting information in this post.

So how do extension methods come into play? As I mentioned, they're simply a compiler trick. If we wanted to convert the aforementioned static method into an extension method, we simply add the "this" keyword before the first parameter, which is the type that our method is acting on:

public static Report GenerateReport(this ReportData data)
{
    //Create a report from the report data
}

Now we've added an additional way to call our method:

var reportData = new ReportData();

//Old way of calling - still works in either case
var r = GenerateReport(reportData);
//New way of calling with extension method
var r = reportData.GenerateReport();

Our method still works the way it always did when it was static, but now we have an additional way to call it. It's also important to note that the extension method doesn't have any extra permissions in regards to accessing the other class. It has to use its publicly exposed interface. In fact, if we wanted to rely simply on the interface instead of the implementation, we could modify our extension data to work on an interface such as IReportData.

The entire reason that extension methods exist is to make the calling syntax easier to read. The driving force was the new LINQ functionality. In particular, chaining the old static method syntax quickly becomes cumbersome.

The new extension method syntax allows us to make the calling code more elegant, and yet organize our methods so that there are clear boundaries between the pieces of functionality that we're wiring together. Extension methods are obviously not always the best way to follow SRP, but they certainly give you a new tool in your toolbox.

Like this post? Please share it!

See a mistake? Edit this post!

Jason Young I'm Jason Young, software engineer. This blog contains my opinions, of which my employer - Microsoft - may not share.

@ytechieGitHubLinkedInStack OverflowPersonal VLOG