finding out when Oracle changes the certification objectives

As Scott and I noted in the introduction of our book, Oracle tends to fiddle with the duration, number of questions and passing score of their certification exams. They also fiddle with the exam objectives themselves on occasion. And as you might imagine, these aren’t well publicized.

First attempt

I originally thought that I would use the ChangeDetection service to subscribe to receive an email when the relevant certification pages changed. This turned out not to work as the HTML is always the same. Oracle uses AJAX to fill in the data. For example, the objectives page for the OCA 8 is rendered using the XML on this page. My next thought was that I’d use the ChangeDetection site to monitor the XML page. No such luck, they don’t support XML.

Writing something myself

A differences program isn’t hard to write, so I created my own in a public github repository. It stores a copy of the “current” data for each exam it follows and checks for differences. (I have it running as a Jenkins periodic build so it checks for updates once a day.) I considered using Travis CI since it supports Java/Maven. However, Travis doesn’t yet support periodic builds. There is a third party site that can trigger your builds for you, but CodeRanch has a perfectly good Jenkins server. And since one of the goals of this project is to be able to announce certification changes on a timely basis in the forums, it seems reasonable to run it there.

How do you find out if there is a change?

For significant changes, we tend to mention them in the relevant certification forum. For the OCA 8 exam, we will also list objective changes on the book page. You can also look at the text files for each exam on github. The last modified date shows the last change. You can also click on the file to see the history/diffs to see what changed and approximately cool. You could even use the ChangeDetection service on the github pages since they aren’t XML. For example, this page is for the OCA 8.

If there is an exam you’d find useful to be tracked and isn’t already, please add a comment on this blog post.

Technologies used

  1. Maven
  2. Selenium (a tiny bit)
  3. HTML Parser
  4. JUnit/Parameterized test

why we can’t be replaced by 16 year olds

I mentor the programmers on a high school robotics team. There’s a range of skill levels. Some of them are completely new to programming. Some of them are really good at coding. So does that mean if someone is looking to hire a programmer, they can just hire a 16 year old? Well, not quite.

Tech skills

A teenager will take a Python course at Udacity and think he knows everything there is to know. (And I say “he” because girls tend to be more aware that there is so much out there to learn.) This means the new programmer will spend much time reinventing the wheel or “deriving” idioms.

Skill vs experience

I won’t dispute that a teenager can be a great coder. How there is more to development than coding. Solving the right problem is important. Asking the right question is important. Challenging assumptions is important. Knowing when to reuse code is important. Being able to sell your idea is important.

More reading

Peter Norvig has an excellent article titled “Teach Yourself Programming in 10 Years” which explains why the teach yourself X in 24 hours can’t hope to cover everything.

the art of being matrix managed (as a developer)

I was talking to someone about my experiences about being on multiple teams today and thought it would make for a good blog post. Note I said BEING on multiple teams. I did a bit of searching before writing this up and found most articles are from a manager’s point of view. This post is from a developer’s point of view.

My Background

I’ve spent the vast majority of my career to date on multiple teams simultaneously.  And I’ve had five different primary supervisors during that time (12 years). These situations have included:

  • 10-25% on one team and (most of) the rest on another
  • 40%-60% on one team and (most of) the rest on another
  • 95% on a short term project and 5% on my “primary” project
  • 5-10% on various small, short term projects

I’m going to focus on the first three scenarios as those are the most challenging to be an employee on. Small, short term projects tend to have more flexibility.

Now let’s look at what you should know if you have more than one boss.

Your primary manager doesn’t know what you do

Well, not really. Your primary manager, also known as your supervisor, knows SOME of what you do. He probably knows what you do on his project. And he probably knows the goals of your matrixed project. But not what you do from week to week.

I remember my first or second performance appraisal. My manager asked me what I did on my matrixed project. I was recently out of college and floored that the person I reported to didn’t know what I did. He said something I still remember. “As long as T isn’t complaining about you, I’m happy.” He was right. Obviously, this advice only applies if you are doing a good job. If I was causing problems T would have told my manager and he’d have know way more about what I was doing.

This means that you need to bring up the topic yourself. Tell your manager what it is you do. Write a paragraph before appraisal time as a reminder. Don’t just hope your manager reads minds or that the matrix manager shared what you think is important.

You manage your time

I’m very good at time management. If you aren’t, you are going to have to deal with it in a matrixed situation. This means you get to decide how to best divide your time. It depends on your tasks, deadlines and how you like to work. I would often batch my time. I may have only been on a project 10% of the time, but I used that as two 1.5-2 hour blocks and got a lot done in that time. If you work this way, communicate it so you don’t appear randomly unavailable.

Managing your own time is also nice because you get to choose the balance. If you are tired or frustrated with one thing, you switch to the other. This helped me with managing stress when I didn’t like one task.

It does come with the trade off of needing to be organized. You are the only one who has a full list of everything on your plate along with the priorities and due dates.

You are responsible for bringing up conflicting objectives/too much work/etc

Both/all of your managers know what work they gave you* and when they want it done. And they know that part of your time belongs to someone else.

*Well, maybe – it is easy to give someone you trust work and then forget about it. You know that type of person. Well, I gave it to C so I can consider it done. And by considering it done, I have forgotten about it. Remind your boss if you get conflicting objectives.

Adding a second manager to the equation increases the chance of this happening. When it does, you have a few options:

  1. Trading time. “Normally, I’m 25% on this project. This week I can work 40% to get us past this deadline and then next week, I’ll only be available 10%. Does that work for you?” I’ve done A LOT of this over the years. It works really well for a production problem or short term deadline. As long as you don’t miss deadlines on your other project, you don’t even have to get permission from the manager you are borrowing time from. You must pay it back for this to work. If you get a reputation for missing deadlines, this trust is gone and you no longer have the flexibility. It wasn’t a secret that I was doing this – I did it in both directions. I just didn’t ask the manager loaning time each and every instance of borrowing.
  2. Ask what the priority is within the amount of time you are assigned to that manager. And I know what you are thinking – the manager will just say everything is a priority. Push back when this happens. Insist on an answer. Give an example “since everything is the same priority; I can just pick randomly what doesn’t get done, right”. Of course not! It’s a great way to start a conversation. Then insist more on an answer. Seriously – as long as you are insisting nicely, it should be ok. Even if your manager gets a little annoyed about the discussion, it is worth it. Because the alternative is your manager being a lot annoyed that the decision your made on your own wasn’t the one he/she wanted.
  3. Ask to temporarily change your distribution of time to each project. This is different than #1 as it requires you to talk to both managers. This is not borrowing time. It is one manager (possibly grudgingly) agreeing to give up some of the time they had you to the other manager. It works if you need to be on the other project more to meet a priority that is important to both managers (or their common boss.) If both of the people you are matrixed too are in the same chain of command, this approach is more likely to work.

Notice how long these three points are. This is really important. In all fairness, it is important when you are on only one team too. But it becomes exponentially more important when you have more information about what you are doing than the person you report to.

Meetings

I found meeting “conflicts” to be harder to deal with than too much work/conflicting priorities. I think that was because I had less control over them. And because it was easier to make someone unhappy. And because it becomes a game of 20 questions to find out the information you need to know what to do.

I used a loose set of “rules” to determine what happened when I got the meeting conflicts:

  1. If the meeting was scheduled by someone important go to that (figure out how your company defines the word “important”)
  2. If both meetings were with someone of roughly equal importance (and are important enough that you can’t say no), ask what to do. Ideally ask your manager. I already agreed to meet with X about bunnies at 3pm and now Y wants to meet then about birds. What should I do?
  3. See if someone can represent you at one of the meetings.
  4. See if you can skip one of the meetings. Do you really need to go to that status meeting?
  5. See if you can reschedule one of the meetings. Maybe you can meet with your two teammates later?
  6. Tell the person to schedule the meeting second that you have a conflict and propose a new time.
  7. Ask what to do if you aren’t sure. I didn’t have to fall back to this one often, but it was helpful when I did.

“Urgent” priorities

These are fun. Notice how “urgent” is in quotes. This is because not everything is urgent that is called urgent. Even urgent things have to be prioritized. Let’s look at a few levels of urgent:

  1. “The sky is falling and your company will be in the newspaper if you don’t deal with this right now.” – This is the easiest one. You tell the manager without the emergency that you are working on Project A’s problem and have to drop everything for it. If the problem is urgent enough to make the news, your other manager will understand with just one sentence emailed/instant messaged/texted.
  2. You are agree it is urgent and more important than anything else you are doing. – Again easy. Tell the other manager what you are doing and when you expect to be available again. It might be a range. “I’ll be available in a few hours.” Or it might be “I don’t know how long this will take, but I’ll give you an update tomorrow.”
  3. It isn’t really urgent, but it will take a short time so it isn’t worth arguing about it. – A task of an hour or less often falls in this category. If it doesn’t conflict with something else you have committed to, just do it.
  4. It isn’t really urgent and doing it would prevent you from completing some other work, attending a meeting you need to attend, etc – Tell the requestor something like “I’m working on X right now and can work on your task right after this. Can it wait?” or suggest alternatives “I’m working on X right now; maybe S can do it if you need it right away”.  I was surprised how many times a direct question turned something “urgent” into something that wasn’t.
  5. If you aren’t sure, ask. – Really. “Urgent” doesn’t always mean right away. Sometimes you can provide the answer to an “urgent” question a couple hours later. But you won’t know unless you ask. And your manager won’t know you had something else important from the other manager unless you bring it up.

If all else fails

While you are learning how to work with your two bosses, some general tips:

  1. Ask your primary boss (the one who writes your performance appraisal) what to do.
  2. Get both your managers together (in person or over email) and bring up the issue.
  3. Communicate like crazy. Getting everyone to have the same expectation is critical.
  4. Know when you will be busy on each project and plan accordingly.
  5. Repeat. You know you told your manager something. He/she is busy. Just because you said you have a meeting every Wednesday at noon doesn’t mean your manager remembers that. And just because he schedules a meeting on Wednesday at noon doesn’t mean you can’t suggest it be another time. One manager scheduled a weekly status meeting during the slot our company uses for it’s Toastmasters chapter. (a public speaking club). I looked at everyone’s calendar, found another time we were all free and asked my manager if we could meet then. He said yes.

 

Remember the advantages

Your company trusts you to work in a matrixed managed style. This is good. It is more work on your part, but it is also rewarding. You get to experience multiple styles. And you get to advocate different points of view on your “other” project. After all, who knows more about your primary project than you?