Performance Reviews

There was a time I enjoyed doing performance reviews. It was a time to reflect on past and future goals, to measure progress, to give and receive feedback.

Not so anymore.

Our performance reviews are coming up and I have little motivation to do them. I specifically chose to work at a place with little office politics; everything is very systematic. Performance reviews seem to be for the specific scenarios of very exceptional cases when there are serious problems, which should be dealt with in other ways anyway.

Self-assessment is always a fun problem. It’s unlikely that your manager is going to mark you higher than what you have marked you. And marking yourself higher than what your manager would, well, that’s an interesting game. Self-assessment is more “assessing myself as if I was the manager.” Which is not a bad idea, however, the fact that you have to share your answers can lead to some awkward moments. Sharing the manager’s feedback is important, however, sharing a self-assessment seems so personal.

I once had a co-worker who went ahead and marked himself as “Exceptional” in every category (versus ‘On Target’ or ‘Above Average’). I was made privy to that performance review; my boss ultimately rated the guy ‘Needs Improvement’ in nearly every category. Imagine how that review must have gone in person.

The importance of giving compliments freely

Last week, I indicated that a co-worker and I were on two different sides of the coin: I wanted Plan A and he wanted Plan B. We tried the “compromise” and it epic failed. Now it was time to pick one. Another co-worker suggested trying out each others shoes. Now it was time to make a decision.

I, and everyone in that room, was pleasantly surprised that no swords were pulled out during the discussion. We were apparently both professional, logical; we discussed needs versus preferences. We never went personal.

It went so well, that after the meeting an email was sent to our CEO, HR, VP, and Director complimenting us on our behaviour. It’s rare to see technical arguments that don’t end up heated or personal, apparently.

This is the first time I’ve been given a compliment on my professionalism. No one has ever said that. This comes at a time where I believe little in myself or my ability to control emotions. I was shocked.

For me, it was easy to not get personal: I already trust my co-worker (who I was in disagreement with) and have zero doubts about his priorities or competency. He is highly competent. I have a great deal of respect for him. Getting personal was never an option. The only option was to understand him and his position, and try and figure out why he couldn’t see my side 🙂 So it was always about that, about listening, understanding, and explaining. And it worked well.

Woohoo!

Trying out the shoes of another

We are developing a new product at work and have the pleasure of choosing the technologies we want to work with. Having worked with only legacy code before, these choices is quite an exciting endeavor. But of course, with choices come preferences, and with preferences come debates…

We are using MVC for server side and AngularJS for client side. Except I am finding that AngularJS and MVC conflict more than they work together. They compete rather than complement. The more and more I work with AngularJS, the more frustrating I find it to be — it’s way more of an application than it is a toolkit!

Suppose I want to present the user with a list of items, and I want them to be searchable client-side. AngularJS requires me to create a controller, retrieve the model via an API, and then all this functionality of filtering, etc. is free to me. However, suppose I wanted to use MVC because we’re using Display Templates extensively to keep consistent how we show a user on every page (with an icon and a link? who knows)…well, now its pretty hard to use AngularJS. You’ve got to use some sort of ng-init hacks. It’s kind of silly.

I am convinced that we are not using AngularJS the way it was designed to be used; AngularJS seems to be oriented for single-page-applications and we are not developing one and we’ve already decided that we don’t want to.  However, a co-worker disagrees….

The beautiful part from all of this is how civil our disagreements are. I know that the interactivity that AngularJS brings us leads to a much more beautiful UI and even better UX. Either there was a realization that it’s not AngularJS that brings us all those things but instead just plain ol’ Javascript; or they were just really civil. The discussions were just that: discussions. They weren’t an argument. They were very civil.

In the end when we couldn’t reach an agreement, a mediator suggested that we both try to implement a small subset of our code with the way other wants to do it to understand the benefits the other is trying to explain…

At a previous work place, it would’ve been a heated debate with probably some name calling hidden behind some awkward laughter. It’s great to be out of such a toxic environment and into a healthy one.

Bootstrap

Bootstrap is completely new to me. I hadn’t even heard of it until my mentor, Chris Howlett mentioned it to me. I was more familiar with the skeleton framework which is based on Eric Meyer’s reset framework. While I like the idea of bootstrap, I find it clunky. It removes semantics and has me defining things as “col-8” instead of something more descriptive such as “main-content.” The way bootstrap is used is akin to seeing this in code:

vs.

MinutesInOneDay don’t really describe how you intend to use that parameter, or what it represents. But the latter are the reasons constants exist — for you to easily change the lockout duration. If you needed to change the lockout duration to 2 days, you’d now need to not only change the value of the constant, but also the name. Bootstrap is similar with the way it describes its classes…it’s easy to use, but it feels like it’d be a maintenance nightmare. Unfortunately, its community is large, themes are freely available, so I’ll be sticking with it until we find a Visual Designer — then he/she can decide.

 

 

Razor Editor Templates

Being the solo developer, I inevitably had to write front-end code. Razor is beautiful — especially in how it generates forms. Forms are incredibly tedious to develop; there is a reason there are entire companies built around doing forms. But with Razor, once you’ve got a View Model defined, forms are as easy as:

And that’s it for the “HTML.” That’ll spit out the appropriate input field for each property in the view model (AFancyModel). The problem, of course, arises when you want to customize small things — such as showing an asterisk next to a required field, or adding your own CSS markup, especially if you’re using bootstrap. Microsoft uses its own markup for validation, etc., which well, isn’t the same as bootstrap. There are many libraries designed to bring together .NET MVC and Bootstrap together, but I felt it was overkill. All I want are editor files that change Microsoft’s markup to bootstrap’s markup. Why? Then when I decide to stop using bootstrap, I am not going around changing my code in a dozen or so places.

So what’s wrong then? Documentation on editor templates and how to use them is so sparse. I found only one, which is great, but I would have loved to see more examples.

Enter your date of birth

I sponsored my father for permanent residence in Canada in….2009. Or 2008. It was far back enough that I can’t recall the exact year anymore. I’ve married since then, had kids, changed jobs, bought a house…either way. As most applicants waiting, I check the status of the application obsessively. Recently, CIC changed their website by making it more “modern.” It means that it takes me more clicks to get to the page I need to and I have to resort to bookmarks, but hey, their page looks better now.

Except they forgot to update some things around the website.

CICDOB
Year first or month first?

I always wondered who is responsible for testing this kind of stuff. Frankly, I don’t know how a developer missed it. My guesses are:

  • They are using some kind of a templating system which generates date fields, and they just changed the view in a central place (or a big search and replace?)
  • Since they have to be bilingual, they probably have their label values in a separate file — so when the date field was updated in code, the label value wasn’t visible in code, and hence, missed.
  • There is only so much a QA team can test.

I am not sure if this is something you can or even should write test cases for. Not sure if it’s even worthy of a bug report. It’s just unprofessional due to lack of attention to detail.

 

 

 

Solo developers at Startups

This is my first gig at a startup — a company that has less money than an average developer’s yearly salary and less employees than my nuclear family.

I’ve worked at companies with varying amount of employees, from 50 to 20,000. Naturally they were all different experiences, but still similar. You come to work, do some work, mingle some, learn some, and then go home. Sometimes you stay late, sometimes you leave early. You have things like benefits, vacations, and if it’s a decent company, profit sharing or RRSP matching.

But a startup where you are the solo developer. That’s different.

I find myself thrown into an environment working with non-technical people. They don’t care whether we should use Rackspace or Heroku or Azure for our “hosting” plans. They don’t care if it’s .NET or Rails or Python or a language I make up. They don’t even care whether I work on a laptop or desktop, whether it is Windows or Linux. Nothing. The decisions are for me to make and me to care about.

Sounds great?

Perhaps. Until you realize that all the decisions you make are limited to the knowledge you have. There is no more insights to be gained from a team with diverse knowledge. You can google some, read the thousands of blog posts with reviews to make the “right” decision for your particular case, until well, you realize you don’t have time.

There is no one to turn to when you are working on a design and just want a second set of eyes. There is no pair programming. There is no code reviews. There is NO CODE REVIEWS! There is no “oh wow, why didn’t I think of doing it that way?” when going over someone else’s stuff. Learning from coworkers has been replaced by stackoverflow and pluralsight.

It’s mostly scary. All in all, the experience is best defined as Brenda from Tacit Innovations described: “I shit my pants everyday.”