Let’s Log Everything!

June 18th, 2010 by Radar

The Australian Government has put forward a scheme which they wish to log the activity of every user of the internet. What. The. Fuck?

Must the government fear its citizens so much that it has to monitor their every movement? Lucky we have a lot of spare land to put the datacenters where to keep this new data they’ll be storing. This means data such as sixteen-year-old girls “liking” a picture on Facebook and writing comments like “omg hayley wat r u doing dere?”. Seriously, Australia? Fuck.

Again, it’s also a load of bullshit. Like the internet filter. People who want to keep their communications secret (VPN / SSL anyone?), will do it. The government must find an alternative solution that doesn’t involve tracking miniscule internet movements of the majority to capture such an infinitesimally small minority. One person’s a terrorist and suddenly we’re all suspected of it until proven innocent.

This is not the “democracy” I’ve grown up knowing. It’s, in the words of Muse, “demonocracy”.

It makes me sad that we have a bunch of old fogeys in their ivory towers scheming against the majority without asking it for their opinion. I thought that’s what democracy was about. I wish they’d climb to the highest level of their tower and defenestrate their pathetic ideas, followed shortly by theirselves.

You cannot protect everyone from everything all the time. Stop trying.

The book is…

June 9th, 2010 by Radar

Rails 3 in Action!

Yes, I am writing the Rails 3 in Action book that was originally called “Merb in Action” before the Merb+Rails merger. I was approached to join the team to be a co-author with Yehuda Katz at the beginning of April and the process with him & Manning has so far been wonderful! I’ve been writing the book from scratch since the end of April and so far I have five-and-a-half chapters written with the sixth one (Authentication & Authorization) probably finishing up this weekend.

We’re aiming to get the book done published by December 2010 in both paperback, PDF and (probably) eBook-reader formats too.

Watch the video for more information.

Bridging the Gap

June 7th, 2010 by Radar

The question is: How do we bridge the gap between “newbie” and “experienced” in such a way that we won’t suffer the talent drought we are currently facing. What are your thoughts as to how we can fix this?

This post was intended as a script for a videocast, but I’m a horrible actor.

Hello!

My name is Ryan Bigg. You may remember me from such hits like #rubyonrails, Railscamp or the Scottish Ruby Conference. I’m here today to talk to you about something that I perceive as a problem. Firstly though, a bit of backstory.

The Ruby (and Rails) communities are some of the most supportive and inviting communities on the planet. When I started with Rails, my first question in the #rubyonrails IRC channel was about an error I was getting, an undefined method “find” on a class called “Thread”. Little did I know back then that Thread is a reserved class in Ruby. As you can see from this example, I too was a noob.

Since then, my Ruby skills have flourished to where I think I’m growing to be a Ruby expert. I still hang out in IRC channels and sometimes I’m asked for advice and if I’m free I’ll help out. So why do I do help? I am not a religious person, but there are some certain aspects of particular religions I believe in, such as karma from Buddhism. To me, karma means that if I do something good to somebody, then eventually something good will happen to me and vice versa, I do something bad, bad things will happen. I also believe in “paying it forward”, that if I help somebody out, then perhaps they’ll see somebody else with the same or a similar problem and help them out, too. So I help out in the hope that 1) I improve somebody else’s life just that little bit, 2) I may improve my knowledge of a particular concept or problem and 3) eventually that good deed will come back to me.

I didn’t get good at Rails overnight. Nobody gets good at anything overnight, unless you’re Neo from the Matrix or Yehuda Katz. It’s taken me 3 and a half years to get to this point and I fully believe it was because I spent time helping people solve their own problems which allowed me to build up a great database of Ruby-knowledge that I could apply to any application I worked on. Working with a team of already-experienced developers greatly assists here too and I am thankful of the time I spent at SeaLink, NetFox and Mocra and freelancing. Before Mocra I didn’t even use Cucumber! Now I’m writing a book centered around using it to develop a Rails application! It’s great! The things you learn on the job are more important, than the things you do on the job. I got lucky. I attended a Ruby meetup back in April 2007 in my hometown of Adelaide where I was invited to work for either SeaLink, NetFox or another company Freerange Future. When I begun working for SeaLink, I had only been in the Ruby and Rails world for 8 months, and during 8 months at SeaLink, I learned a lot about Ruby, about Rails and about RSpec. Working with Rails has definitely been one of the greatest ways to learn about it.

Now in 2010, as a writer of a book aimed at a wide range of Rails people (newbies and up), the experiences of new people is something I’ve been considering for a while. The way I have visualised the community for a long time now, is a pyramid. The bottom is, of course, wider than the top and the lower down the “pyramid” you are, the less skill you have and of course the higher up this “pyramid”, the more skill you have. The width of the pyramid at any level indicates how many people there are at that level and, because the Ruby community is growing, there’s a lot more inexperienced people than there are experienced. If the Ruby community was shrinking, you’d see the opposite effect where there’s a wider level at the top of the pyramid dwindling down to nothing at the bottom. No new people means a dying community. Ruby is not dying. So how are newbies to gain the experience required to work towards the top of this pyramid and get hired by the companies looking for “experienced Ruby / Rails developers”? It’s simple: they’re going to need a job. So it saddens me to see all these companies hiring “experienced” Rails developers.

There’s only so many “experienced” Rails developers. They’re being snatched up by companies quicker than they’re becoming available. I know this because the company I’m working for right now is trying to hire a new “experienced” developer and we’re having an absolute bastard of a time. We’re also down one developer because he has RSI, and another was just pulled off my team to work on the legacy application until the election. So we’re looking to hire an “experienced” Rails developer to fill the gaps. It’s almost as if there’s no more “experienced” developers left to hire in Sydney and I’ve seen this same situation in Brisbane, where I used to live and other people have talked to me about it too. We need an “experienced” developer because we’re looking to get this application done by the Federal Election. But there are seemingly none left. So what can be done about this? How can we and other companies find new members for the team?

Well, we could bring in a new person, but we (as a company), but not I (as a “teacher”), don’t want to spend time teaching new people when that time could be used for developing new features. Why should you pay somebody when you’re teaching them? Shouldn’t it be them paying you? Well, no. You’re paying them in the hope that they’ll stick around and provide another valuable resource to the company. Some do, some don’t. Give them the incentive to stick around and I’m sure they will. Job security is a great incentive. I think we need more companies who aren’t all just about the “gogogogo” and are actually conscious about the future of their business. If the future involves hiring a new developer and having to train them up in a language, why not do it? Sure, you’ll lose one developer’s time for a short while, but what you’ll gain in the long term is two developers’ time. Then that developer can teach more people you bring in. Eventually, you won’t be understaffed.

If you hire nobody, then that’s the worst thing that can happen. You’ll overwork your developers and you’ll think that they underdelivered because they didn’t do a good enough job, but the reality is it was because they were under-resourced. You put a magical deadline on them and expect it to be done but the harsh truth is: sometimes deadlines aren’t met. Budget some money, and some time, to bringing new people way before any major deadlines if that’s what it’s going to take to be successful in the long run. Over-estimate how many people you’re going to need to get the project done. That’s what you want, isn’t it? A completed project? Therefore, we shouldn’t be hiring “experienced” people only but rather people who can contribute back to the team, even if that involves having to teach them something first off.

Personally, If I were to hire a new person, there’s a couple of things I’d be looking out for. Before I list them, here’s a very good point of a conversation I had last night with a Rails developer based in California, kay-von. Kayvon got started with Rails in December. He said that in order to be good at Rails, he didn’t need the knowledge of the ins-and-outs and every single class and method. You just need to know how to do your research (aside: and not to cargo-cult!) and learn to learn. If you’re able to absorb the knowledge and make it into your own from the resources like people and the Internet, then you’ll go pretty far. Now Kay-von is doing Rails work for many clients and is gaining a reputation for his work. What I’m looking for in a person isn’t experience in a language, but rather the same ability Kay-von has. The ability to learn. The ability to understand. The ability to apply yourself to accomplishing something. These are the major concerns that I’d be for. Other things include the standard: good communication skills and good personal hygiene.

I want to see that drive in people, that willingness to learn. Another example. Will A friend of mine, Bo, introduced me to a .NET developer friend of his, Lucas. One day last year, we showed him what Rails can do. Lucas attended the ActionHack events that are held monthly in Brisbane as well as the last two Railscamp events. Not because he had to. Because he wanted to. He attended these events because he wanted to learn, and that’s precisely what he’s done. He’s learned Rails, learned BDD concepts and now knows enough to be hired by a Rails shop. Lucas is in the same group of people as Keyvan.

I know there’s a vast group of these people out there, just looking for some company to give them a chance at developing Rails, but all the companies out there are hiring “experienced” developers. I haven’t seen a single job posting in the past couple of months on the rails-oceanic list looking to hire people that they’re willing to teach. Because everyone wants things done now. Nobody is willing to invest in the future of the community. What we need is some… group to invest time teaching these new people. That’s what I’d love to do. I love seeing people’s faces light up when they discover something or hearing that “oohhhhhhh” when something clicks. For now, I’m doing the best I can. I am personally considering after I’ve finished writing this book to approach some universities or TAFE colleges and asking them about how I can go about teaching them, hopefully they can give some pointers.

So in summary: this has been a question that’s been floating around in my head for ages: How do we bridge the gap between “newbie” and “experienced” in such a way that we won’t suffer the talent drought we are currently facing. What are your thoughts as to how we can fix this?

Using Cucumber tables to specify associations

June 4th, 2010 by Radar

How many times do you use Cucumber to seed data by using a step such as this:

And there is a list:
  | name          |
  | GetUp people! |

Probably a lot, right? Good. Then this post is probably for you.

How many times have you done it and needed to specify an association in there too? Like this:

And there is a list:
  | name          | parameters[email_contains] |
  | GetUp people! | getup                      |

Probably a couple of times.

So what can be done?

As you may know, by using this syntax in Cucumber you get a variable which I always call “table” in my steps. You may call it something else. What matters is that it’s a Cucumber::Ast::Table object that has a method called hashes on it. This will return a Hash object for every single row minus one in your table. The minus one is the first row — the header row — which provides the keys for the hash. The remaining rows are the values for each of the hashes. In the first example, our hash is:

{ :name => "GetUp people!" }

In our second example, our hash is:

{ "name" => "GetUp people!", "parameters[email_contains]" => "getup" }

Bah! This won’t do!

Enter to_query

There’s a lovely method on Hash that will allow you to convert any Hash object to query parameters. It’s called to_query. The second Hash to_query output is this:

"name=GetUp+people%21&parameters%5Bemail_contains%5D=getup"

Eeew!

Query strings are not pretty

So to deal with query strings, Rack parses them into a Hash object (and Rails, a HashWithIndifferentAccess object) using the lovely Rack::Utils.parse_nested_query method. This forms the query string into the params hash which we have come to know and love. The very same params hash you use to create objects with.

See where I’m going with this? Great!

So we define our step like this:

Given /^there (is|are)\s?a?\s?lists?:$/ do |is_or_are, table|
  table.hashes.each do |hash|
    List.create!(Rack::Utils.parse_nested_query(hash.to_query))
  end
end

The regular expression is to match “there is a list:” or “there are lists:”, in case we want to create more than one. By passing in the parsed hash (and because we’re using accepts_nested_attributes_for, the model is actually ListParameters), we’re able to create not only the new List record, but also assign the ListParameter record too.

Not only for belongs_to

You can also assign has_manys through this too, although the syntax is a little bit more uglier. Again, providing you’re using accepts_nested_attributes_for for the has_many association, this should work just as well as if you posted it from a real form.

  And there is a link:
    | url               | clicks_attributes[0][user_id] |
    | http://google.com | 1                             |

How about that?!

Rails 3 Book Week 6/7

May 29th, 2010 by Radar

I have posted another quick update about how the book is going. Check it out! Super special request inside.

The Rails 2.3.x Release Process

May 25th, 2010 by Radar

In my When Rails 3 is due post, I note all the dates where the Rails versions have been released. Since it’s posting, have updated my prediction for a release candidate of Rails 3 to be RailsConf. It all makes logical sense that at Rails’ biggest event they would do this. But can we, as a community, get it polished before then? I hope so!

This post is not about Rails 3, however.

It’s about the release process of the 2.3.x versions of Rails, specifically the process behind the latest four releases for this particular branch. The latest version, as of this writing is 2.3.7 and is unusable. 2.3.8-pre1 is out, and I suggest trying your applications on that and seeing if anything breaks. As a recap: 2.3.5 was released in November of last year, 2.3.6 this weekend just gone,2.3.7 yesterday and 2.3.8.pre1 shortly thereafter.

Let’s begin with what pre-releases are for: they are for people to test them to ensure that the final release is “smooth”. If you want to contribute to Rails: spend some time from your week ensuring your application runs on the latest version of Rails and report any problems. It’s not hard to create a branch and do this. If you are one to ignore pre-releases, then you are not one who should be complaining when things break in the final version of your application. In almost every case, your application will work. You may get the “off-suit draw” and something breaks. Report your problem.

A problem occurs when patch releases are made without any pre-releases at all.

2.3.6 was released without a pre-release. Whilst this is may be perceived as a catastrofuck for some people, it was a long time due. The prior release, 2.3.5, was released almost dead-on six months ago. Six months between releases, in the Rails world, is a long time. Things have been progressing rapidly, and a lot of people will benefit from the changes introduced by these new versions, including support for rack and thin 1.1.0. Yes, now you’ll be able to run your Rails app by using Thin.

However, 2.3.6 broke HAML which Nathan Weizenbaum tweeted about. He later said he had worked around it and contributed back to Rails in these three commits. Jeremy Kemper (bitsweat) then thought that there should be a 2.3.7 release.

Unfortunately this first commit broke Rails view helpers — such as form_tag — for those who didn’t have the rails-xss plugin installed. Jeremy missed this, and I spoke with him earlier and from what I could determine he missed the bug because he had rails-xss installed. When people upgraded to 2.3.7, there was an outcry started. A few people announced this issue, and therefore 2.3.7 was broken.

Whilst Rails is pretty exceptionally tested, it’s not 100%-watertight. Would this have happened if there was a pre-release? Yes and no.

On the yes side of the fence, people generally view pre-releases as “potentially unstable” and won’t upgrade their application, therefore they won’t upgrade. I implore you: upgrade your application locally to these new versions and run your tests. You do have tests, don’t you? Then if it breaks: report your problem. Patches very, very, very welcome.

On the no side, there is that handful of people who do test new releases when they come out. Therefore, this issue may have been raised if there was a pre-release. We can’t know for sure.

2.3.8 was released a couple of hours ago and Jeremy has apologised for the rushed releases and promised to follow the “same methodical drumbeat” for every release, regardless if it’s major, minor or patch. He is an absolute legend for working on this issue pretty consistently since the weekend and for getting a push out as quickly as possible.

With this release, now we’ve got an up-to-date stable 2.3.

Ladies and gentlemen, upgrade your apps!

The Present

May 22nd, 2010 by Radar

About 6 months ago, Dr Nic and I were in the local-to-work bookstore for a reason I can’t recall. What do I recall though is the good Doctor ripping a book off the shelves and saying “You’re buying this book. Then you’re going to read it.”. This book was “How to Win Friends and Influence People” and it is in my (and millions of other’s) opinion(s) one of the greatest books ever written. It was written by Dale Carnegie in the 1930s and the wisdom in the words still holds true to this day. The foundations of human interaction has not changed much since those days, and it should not. I read the book, and it changed my perception of human interaction. I’m currently in the process of reading it again.

When I was in Scotland, I think on the Saturday before I left, I did to Sam what the Doctor did to me: pulled the same book off the shelf and said “You’re buying this book. Then you’re going to read it.” Sam whinged about paying for a book, so I paid for him. Then we took it home and it sat on the bookshelf in my temporary room for the next couple of days.

On the Monday, Sam had to take care of a couple of things for his new job and left me to my own devices. I took the book, a (“borrowed”) pen and my camera and went around town taking photographs. When my fingers got too numb from the cold, I stopped in at Costa for a hot chocolate and decided to write in the cover of the book. I’ve decided to post it here too because I feel some parts could apply to a greater “audience”. Here’s what I (hand)wrote:

[page 1]
To Sam,
Be decisive!
Smile!
Enjoy life & friends

Please read this cover to cover. It is not intended as a slight on your awesome personality, but rather intended to suggest more ways you can be [much more] awesome. After reading it, you may realise you have done “the wrong thing”. This is not the case, usually. We all do “the wrong thing” without realising it, and after reading this I often find myself thinking of how to be more patient and courteous to those around me, defusing otherwise emotional battles with people.

I have greatly enjoyed my time in Scotland with you and your family. Such generosity is rare and absolutely priceless in today’s world. If any of you wish to visit Down Under, I will do anything in my power to help you enjoy it.

[Page 2]
“He who can do this, has the whole world with him.”

Process what other people say before formulating a reply, and never interrupt them. Think of how you’d feel if the tables were turned.

[Page 3] I trust by now you are already bored of my scrawl. I would just like to say thanks again.
And again.
And again.

We all have the potential to be great/fantastic/awesome, so why not? Why not try improving somebody else’s day? Give them a compliment (hint: girls like compliments on what they are wearing. A wolf whistle is not a compliment!). Perhaps if you improve their day, it may improve your day, or even your life. Take advice. Embrace the world’s knowledge. Use it to your and everyone around you’s advantage. This includes your parents who quite obviously love you very much. Just remember what I said.

[Page 4]
Your parents have been around for twice as long as you have and have a great deal of knowledge. You may find, like I did, that co-operating with them is much easier than arguing. They only have your best interests in mind. They are great, but also as mortal as the rest of us. They will not be around forever. Enjoy as much time as you can with these fabulous people before you are unable to!

  1. Be kind (aka, keep going)
  2. What can you give others
  3. Take advice and use it!
  4. Read this book!

So long, Sam.

After I finished writing it, I put my spare travel money card in the middle and then snuck it into Sam’s bookshelf. When I left for home, I told him where I left it. He’s read it already cover to cover and appreciated my “foreword” and the book itself.

I really enjoyed Scotland and I wish Sam (and his family) all the best.

Recruiters: Know Thy Recruitees

May 21st, 2010 by Radar

I suppose I’m well-known (at least in the Australian community) on my stance on bad recruiters. To me, their job is to perform the most minimalistic effort possible to get people for other companies and in doing so, they line their pockets with a nice pay packet. I even wrote what I look for in a job posting. It’s not difficult to “bait the line”. Spend that little bit of effort.

Recruiting sounds like quite the fantastic job and I’m sure that if I wasn’t teaching/coding at GetUp or writing a book, I would be “farming” people and then getting them hired at companies looking for developers and getting a nice pay packet from these companies from providing them with valuable people. In theory, anyway. I really feel there is a nice market here. It would be a bridge between those looking for Ruby on Rails training and those looking for experienced people.

I honestly appreciate those companies that have gone out of their way to contact me personally with job advertisements or offers. These companies know that if they want the best talent, that they’re not going to get it through some recruitment firm. The company knows what they are looking for, and therefore will (or at least, should) be actively involved enough in the community to know who’s available when. Sometimes I have not been able to consider them because I have been employed at the time, and others would have caused large changes, such as moving to another continent! When I announced I left Mocra, I had a lot of people contact me directly for job offers. I’m sure that if, today, I was to announce that I’m leaving GetUp (clarification: I’m not. At least not in the next month.), these same people and perhaps more would contact me with further work. Being in demand is a great feeling. I haven’t had to stress about job security because I know that if one job doesn’t work out, there’s always more.

You’re probably thinking I’m not very loyal. I am, but there are certain conditions that apply. For instance, you cannot buy my loyalty. If your job sucks, then I’m not going to enjoy myself doing it and will probably be looking for a way out. Give me something to do that I enjoy along with enough money for me to be able to pay the rent and enjoy my chosen lifestyle, and that’s how you can have my loyalty. Mocra kind of did this (I hear the situation has improved). GetUp does this.

So why don’t recruiters bait their lines when they go fishing for new people? Take this email I received on the 18th of May from a recruiter from an American recruiting company:

Hi Ryan, I’m recruiting for [list of big companies], and others. I ran across some of your Open Source work and wondered if you would be interested in chatting about a new opportunity. Having published open source code is a big plus for all of these companies! If you’re interested in discussing, please let me know.

Where’s the bait? What in this email is supposed to make me want to drop absolutely everything I’m doing now, start hyperventilating and type a response to this email? It’s sadly absent. I sent a reply anyway (typical nerd, desperate for more human interaction).

Yes I’m interested in discussing this with you, always good to talk to people who know what’s out there. When would you like to talk?

I say I’m interested (just window shopping for now) and ask when would be an appropriate time for them to speak to me. Business 101: cater to the other person. Think of what you can do to benefit them and then go about doing it.

So by now you may have realised that the 18th of May was 3 days ago. Which is ancient in email world. It had scrolled right to the precipice of my inbox and last night I saw it sitting there, mixed in with all the lighthouse notifications. They hadn’t replied in those 3 days. Maybe they sent it out to a lot of people and were busy. Whatever the reason, I decided to write again:

Hi [name], I’m still interested in discussing this with you. I am disappointed that you have not yet gotten back to me. Hope to hear from you soon, Ryan Bigg

And within 4 hours of my reply, they wrote back:

My apologies for not getting back to you. Are you interested in relocating out to Silicon Valley, or for a telecommuting opportunity?

I sleep with my iPhone in my bed running the Sleep Cycle app. I’m a stats fanatic. This morning I slept well. But I digress. Because my iPhone is so accessible and my computer is all the way on the other side of the room (about 1m from the end of my bed), I read my emails on my phone. The email that they wrote fit all on one “screen”. Again. No bait. Oh, “Silicon Valley” is supposed to be bait? Nah uh. I leapt (well, more of a roll) out of bed and almost tore open my macbook lid. I am in the mood for writing. Can you tell? So I wrote them back the kind of sized reply which I think is reasonable.

Hi there,

I am going to need more information before I can give a solid reply on that. Here’s some thing’s I am interested in about finding out about a job before making any decisions:

* The name of the company interested in hiring me. Unless [their company] is going to hire me to work for them directly, this is not you. It could be one of the companies you are doing the recruiting for, in which case I scouts-honor-cross-my-heart-and-hope-to-die promise you I won’t give away the name.

* What kind of work I would be required to do (For example, I am more keen on teaching people who are new to Ruby on Rails more than doing the coding myself. The open source work I have done is because it was something I was interested in at the time and I never intend for them to become successful viable products. Anyone who does open source and hopes for this to happen is, in my opinion, crazy.)

* The language I would be required to program in. I am proficient in Ruby on Rails (and therefore, by extension, just Ruby itself) but I am willing to learn other languages. If I had to learn another language would I be provided with on the job training?

* Are there any other skills require to perform this task? For example, at my current job (a contract that expires next month, fyi) I simply do not just teach Ruby. This of course means that I have to have the ability to work closely and patiently with other people on a project in order to meet deadlines. Then there’s the database work which involves data integrity, really fast database inserting and so on. Then there’s the “magnum opus” of the system which is getting that data from the database and into 500,000 emails which are to be sent out in under an hour. All of which I feel I’m very capable of doing.

* If I were to relocate to the Silcon Valley, would the company I relocated for cover my all my relocation costs, part of them, or none of them?

And of course the final point which anyone would be stupid not to ask:

* The fancy word is “remuneration package”. I’d like to call this “The number that determines what can I afford to eat, do and play”. I am of course talking about a salary. Would I be paid a competitive salary, or would I be on enough to afford half a packet of ramen noodles for dinner each night and maybe the flavour packet if I was feeling really hungry? If you are concerned that you cannot answer this question clearly, given that “competitive” means very little in this context, I am currently on around [pay]. Can you do that, or, preferably, better?

Looking forward to hear back from you once more,
Ryan Bigg

All of this information should have been provided as the bait from the original email. Now I am slightly annoyed that I have had to spend time helping them do their job correctly.

About an hour later, they replied with an email that answered my questions to the best of their ability. A nice big (seriously) non-sarcastic bravo! this is the kind of effort I’m talking about!

Hey Ryan, good questions! I’ll try to answer them all.

I mentioned the name of some of the companies in my first email. I am currently working with: [big companies]. I’m working with a few other companies as well but the ones mentioned are hiring the most. I look for the same thing for of these companies: Strong OO Development skills and a genuine interest in technology.

What you would be doing depends on the company and position. My approach here is to get you in touch with company and the engineering teams directly. That way you can discuss your interests and their requirements without a non-technical recruiter (me) getting in the way! ;). Strong OO development skills, strong interest in technology, ability to write “elegant” code that scales. These are the same requirements I have from most of my clients. In the case of [big company] for example, what you would actually be working on is not pre-determined but will be figured out during the interview process.

The languages vary. I will say that in the companies I’ve mentioned, none of the positions state Ruby or RoR as a requirement. C++/Python would be the most common combination in terms of requirements. Javascript is also pervasive throughout all of these companies. Most of these companies want people who can adapt quickly to new languages.

Knowledge or understanding of what makes code expensive (in terms of resources) and how to make applications scale is the single most important additional skill.

Relocation expenses. This again depends. This is part of what we would help to negotiate for you. In most cases, some sort of relocation packing would be included.

Compensation. Yes, if you were made an offer by one of these companies, I would expect it to exceed [rate] USD. Again, this will depend on your interview. Salary negotiations are something we can assist with as well. Average salary for a software engineer with 5+ years of experience is between $90,000 and $130,000 USD per year.

The next thing I would need is your CV/Resume. You’re[sic] github profile looks great! Once I review your resume I can give you more specific info on what companies and positions I think would be best.

Now we’re talking.

When I was initially contacted to write this book, this is the email they sent me:

I am writing you as an [position] with [company]. We are currently looking for a writer to [contribute to] our book on Rails 3. I came across your blog and thought you might be a good fit.

[redacted awesome things that may give away too much information]

Would you have any interest in joining this project? Please let me know. I look forward to hearing back from you, and would be happy to speak with you further about the book.

Bam! Straight to the point! I just about damn near well bounced off the walls when I read this email the first time. I still get giddy now reading it. We played email ping pong for about 5 volleys with the slowest turnaround being about 12 hours (because, occasionally, I sleep) This is the kind of recruitment I want to see more of! Be proactive and entice the people you want to hire. Bait the line.

Recruiters: know thine recruitees. When you go looking for new hires, give them a reason to leap out of bed and feverishly reply to your email. Just FYI: if I receive another email of this first email’s “standard” again, I’m not going to feel like replying as quickly as I did when I read the book email. If you’re not going to spend the time to write something detailed, then I am not going to spend the effort to write something back.

Do your job, and do it well or go away.

Do It Again

May 19th, 2010 by Radar

Today was utter crap.

It wasn’t crap when I woke up. It was just another day. What woke me up at the semi-pleasant hour of 5am was my publisher calling. We had scheduled a call for 6 but I think he may have suffered from an “off-by-one” error. People make mistakes and I silently forgave him for this and talked business for 21 minutes. We’re making fantastic progress. I really felt good after this morning’s conversation.

Then I spent the next 3 and a half hours before work exhausting all my news sites and chatting with Sam Elliot (lenary) for an hour about a multitude of things. Hyper Numbers came up. I wrote them and posted it on Reddit and they replied later on in the day. I do see their point and I wish them well. Shame about the “code bukkake” though.

Then I went to work on my boss’s boss’s bike (loaned to me last Friday) and ding’d my bell at a couple of pedestrians and had the usual “not looking where I’m going so I’m just going to walk straight towards your bike in the hope that you swerve and miss me” occasions. This is what happens when you ride on footpaths. Oh, I should ride on the road? Have you seen Sydney peak hour? I value my life.

The first half of work, usually called “morning”, was good. We finished a feature yesterday and begun working on a new one, refunding donations, today. New features are always good to get rolling. The idea was to have the full refund done by the end of the day. What we’re currently working on is called “v3″ or “version 3″ or, if you’re keen on the buzzwords, “MVP” for “Minimal viable product”. What this acronym and term means varies from person to person, day to day and even weather condition to weather condition. It effectively means the application needs to be “good enough” for us to run an election campaign on. I won’t bore you with the technical details and only mention that it’s been in planning as early as January this year. With the election not yet having a set date (there’s rumours which boss^2 likes parading about), it’s hard to know when we’re going to have to release this thing. For as long as I’ve worked there, it’s been “before the election”.

Last week we were given a deadline. A specific time at the end of June. Right, that’s still a while off, right?

Boss^2 looks panicky.

“Are we going to get this done by that date?”

“How long do you think this will take?”

“What can we cut out of this to make it by then?”

All questions he asks. As a developer, I can say “that’s going to take “.

Boss^2 takes it as gospel. It has to be done by that date. Otherwise, disaster. The world is exploding. Next he knows, Tony Abbott will be PM.

Boss^1 acknowledges there is a deadline and also acknowledges that our estimates are… estimates, and that things can go wrong and things can get delayed and we can make up the time later on by developing it smarter (by writing tests).

I like Boss^1.

But Boss^2 is a realist. He feels that if this project doesn’t get off the ground that he may have to scrap it. Yes, this project that I’ve worked so diligently on for the past 3 months will be scrapped in favour of their old, kludged-together (but functional, kinda like my old VL Commodore) PHP system. Yeah.

So this afternoon we had an hour long meeting. An hour of time that could, in my opinion, have been better spent developing. We knew what needed to be done. We knew there was a deadline. All information conveyed in that meeting could have been done through an email exchange or, Hell, on Google Wave. I took notes. Especially of Boss^2′s lines. Such as “let’s assume we have design” and “let’s just park that issue”. Another golden one from this morning “I want you to work on that operationally”. Speak. Clearly. Please.

The other non-developer in the meeting, a senior campaigner, wore what I’ll refer to as his “sadface” throughout the meeting. I don’t like seeing people in that state. They want this new system, and we are working bloody hard to develop it.

As for the first line: We cannot must not assume we have anything at the moment. What if our designer is unavailable?

At the end of the meeting (at 5:15pm) I was drained. Did I mention I woke up at 5am? That probably didn’t help things. So I packed my things and headed home, it was the end of my day. I wheeled out the bike and took it down the elevator. Then I rode down Foveaux Street and waited at the lights to cross to go past Central. I hopped the traffic island on my bike and the back tyre blew. I checked it and it was a clean tear. I hadn’t bought a spare. Hindsight’s a bitch.

That was it. I’d had enough. I put the bike up against one of the columns and threw down my helmet and put both hands on the column and bowed my head for a couple of seconds. What a crap day. I phoned Francois (one of the ex-PHP coder’s who’s coming along well!) and thankfully he was still in the office. Took the bike back up Foveaux street (it’s a hill) to the office and left it in the “foyer” and took the stairs down to ground.

Then I caught a cab from the taxi “station” nearby, only to realise peak hour traffic is crap. You’d think with me walking alongside a main road just about every night for the past couple of months I’d know this. I got the driver to drop me off near Broadway supermarket. There they have a butcher that sells a “New York” steak. It’s the perfect size. I bought one and some potatoes, and now if you excuse me I’m going to go make the best fucking steak ever, eat it, and then just sit and think for some time. Think that, if I could do this day again with the knowledge I have now, what would I do differently? How can I make tomorrow better? And then just not think at all.

tl;dr: Book is going awesome. This week: work has sucked. Boss^2 is great source of buzzwords. My bike back tyre blew. I’m eating awesome steak to recuperate.

Railsbridge Bugmash

May 15th, 2010 by Radar

About a month ago I posted that not enough people are helping with Rails. If you’re keen to get into it, come jump on irc.freenode.net #railsbridge where the May Bugmash is underway. I’ll be around for the next couple of hours until I head to bed and all of tomorrow helping people out with issues. Come jump in!