About a week ago I put together a micro project called NaPicIt. Weirdly enough it stands for Name that Picture.
While posting some pictures online I found it difficult to remember the name of certain locations to describe the image. A thought came to mind. Wouldn’t it be great if someone else could help me describe this picture?

You can login via Twitter oauth authentication, where you don’t actually have to provide your credentials to anyone but twitter. Once you upload your picture, others can describe it. Once at least two descriptions match it shows up on the site.
Not sure how far I will take this, but I thought it was an interesting idea and a neat way to play with Twitter’s oauth.
A friend of mine, Davis Cabral helped me with some of the oauth implementation.
It took me a while to come to terms with the high ticket price of Amazon’s electronic book reader, the Kindle 2.
After almost two weeks with the device I have to say I am extremely pleased with the purchase.
Purchasing and reading books on the Kindle is a blast. The books are often less expensive than regular paperback and hardcover books. You also get the instant gratification of reading it instantly.
One of my favorite features of the kindle is text-to-speech (enabled for most books). The Kindle 2
will read the book to you out loud. You can also plug in headphones or into your car’s auxiliary jack. This is useful for me specially as I drive a long way to work. I get to read a chapter of my favorite book before I leave the house, then when I get in the car it The Kindle continues to read while I drive. It is not narrated by a professional but read by a computer using a human voice (you do miss a bit of intonation and emphasis).
I also really enjoy that I can convert my collection of PDF books to the Kindle, either free of charge via the USB cord, or via Amazon’s Whispersync technology (nominal charge for the transfer applies). When you convert a PDF not made for the the kindle the table of contents or any no non justified text can occasionally look a bit funky.
Overall I am very pleased. Great battery life, easy to read and full featured. You can even search your favorite tech books.
Sidenote: Kindle books are better for the environment.
If you need to have your employee sitting at his cubicle daily to trust that he or she is accomplishing their job properly, you may have a bigger problem. Perhaps the issue here is hiring competent and trustworthy adults. When that is the case they rarely need to be babysat. Of course common sense plays a big part on this subject. If you are hiring an anesthesiologist, it is very unlikely he would be able to do his work remotely. Obviously he knew this going into school for the chosen profession. The same applies to any other professions restrained by virtue of the basic differences between atoms and bits.
This post has been a long time in the making. Perhaps not in the shape of words and sentences, but in my head. I spend about 2 hours per day in the car driving to and from work. I often use the time efficiently to make phone calls or to listen to an audiobook. Regardless of the actual activity at hand I am always expending brain cycles around a vast array of topics. Most recently one topic that aggravates any awaken neurons in my head related to outdated company policies. Allow me to elaborate.
Two distinct approaches came to mind. First, there are common excuses as to why remote workforce does not work. Secondly often simple misconceptions as to why it is simply not as effective. A common argumentative response I hear too often: “Well if you get to work from your front porch, so will John, and Mary, and Susan.” As I mentioned above, Susan, the office’s receptionist, may have a difficult time teleporting herself every time someone rings the doorbell; just guessing. Need I say more? Obviously if your physical presence is required in the office because your daily activities can’t be performed while removed from the building, stop reading right now.
Another interesting response I have heard in the past comes in the form of a question. “How will I know people are actually working if I can’t see them?” This is when transparency plays a huge part. If your technology department works inside a cave (cave mode), with no transparency into what they are accomplishing, it will become very difficult for the director/boss/manager/chief to know what is getting done. It starts with accountability. To me, a person is either accountable by nature or not. There is no in-between. Picking up the phone when your seven year old calls you from school is not being accountable. Accountability is about “following-through” with your commitments in a timely manner, attention to detail and proper communication with the involved parties. That may be very far from the dictionary definition but I am OK with that.
Transparency in the other hand is the responsibility of those in charge. Providing your department with an easy way and a clear channel into the current status/progress of a given project/task is imperative. This is by far one of the most important initiatives towards a decentralized office environment.
With the proper level of transparency it becomes very easy to measure effectiveness. You know you have that gut feeling about how effective a person is. At least to me, I can quickly tell if someone is slacking or performing fruitful work. Be honest with yourself. If you feel like subpar work is getting accomplished, approach the person, remotely or not, and have a one-to-one discussion.
I do see value of “face time”. In the past I have worked with teams where developers were 100% remote, 100% of the time. Water-cooler conversations in that case are held around the digital watercooler and online such as Campfire or daily phone call.
Meetings tend to be another topic most managers seem to bring up. How could I possible have a meeting with both collocated staff and remote staff? I will let a good friend of mine, and ex-coworker explain as he puts it best:

http://twitter.com/cwsaylor/status/2804309361
Chris Saylor is the Director of Development at Todobebe. While working at Todobebe, we hired two very talented remote developers in Brazil (Roberto and Dante). The entire experience proved to be a great success. We had just adopted to conduct development in a more Agile manner. This experience goes to show that the proof is in the pudding, and hiring competent and committed people is more important that their physical location.
Employee will not be around to be appreciated/reprimanded. Sure they will. Just as a distance family member would when you want to wish them a happy birthday or collect the money he owns you. More often than not, email and phone conversations are more effective than in person meetings. You do have to be careful with this one. I tend to prefer to chat over phone or skype if the topic is even slightly off-topic. People tend to be slightly more bravado over email/chat than over voice.
I hear of the old days, when computers were as big as a house, and every time you placed a long distance phone call a mental clock ticked to remind you how expensive the call was. Fortunately for us, that is no longer the case.
There is a wealth of highly qualified resources out there, limiting yourself to a tiny local radius seems foolish and counterproductive. There are very few obstacles that can’t be dealt with. Communication barriers, time-zone differences and lack of physical presence are not enough to justify passing out on extremely talented team members.
Finally, if you do come to terms with your demons, here are a couple tips that will help you and your remote employees succeed:
Have a quiet home office. I can’t emphasize enough the importance of having a quiet place to work. Somewhere you can go, close the door and concentrate.This means you get to avoid interruptions that are commonplace in the traditional office space. Developers tend to take about 30-45 minutes to get in the zone, a simple co-worker interruption can knock them out of the zone. If this happens once an hour, you can literally lose an entire day. It has happened to me, I am sure it has happened to you as well. Arrive at the office, engage co-workers, help them with their questions and issues and by the time you realize it is six o’clock and it it’s time to go home.
Establish a stable schedule that includes at least 70% of shared core hours between remote and collocated staff. Make sure everybody is in the same virtual “room” and can be reached at all times.
Campfire is great for team collaboration chating. At Hoodiny, we have all of our tools posting regular status updates into our campfire room. The team’s standup is at 10:30am. Git commit notifications are posted into campfire. Deployments and Continuous Integration results are also automatically posted into the room. We use NewRelic’s RPM tool to track our application’s performance or potential abnormalities. Performance stats are brought up side-by-side and a list of current referrer links is posted into campfire so that we can keep track of daily patterns. At any point, company executives can access the campfire room and catch up on all the work that has been done, current status of the build, performance and analytics information. This works beautifully. Developers are only notified of new messages when someone mentions their names. The chat room’s log is persistance and it always there, if you are late, or happened to miss a day, you can always read the log. Periodically during the day at your own pace, you can pull up the chat room window and catch up on the team’s progress.
I could go on for days on personal experiences and my opinion about hiring the best regardless of where they are. I realize this is not one-size-fits-all but I hope to shed some light into the subject. In this global market, don’t limit yourself to your own backyard. Get out there and prosper.
Note: I wrote this about 2 years ago and forgot to publish it, it still applies.
While working on a client application I was faced with the challenge of storing recurring events.
The problem with recurrence is the database, linear sequential data is what the db is built for, recurrent events are not necessarily sequential. One might argue that they occur in order so therefore some sort of sequence exists. In my opinion that is both right and wrong.
Say for example you need to schedule and event that occurs today and reoccurs every week on the same week day at the same time for next 12 weeks. You could write a method to iterate through and save all instances of this event as recurring items in a table.
There are a couple of problems with that take. Let’s say you need not only to record the dates the events will happen on, but also the times. Suppose those date/time combinations also inforce “unicallity” scoped to a specific location, therefore not allowing other events to be scheduled for the same time/date. Say you have an event that happens every weekday at 1, 3, 4 and 7 o’clock for the next six months. You just added 500+ records to your database each to hold that date/time/location spot.
Iterating through those events later on, in order to sanely display them in a calendar format will be as much fun as poking yourself in the eye with a sharp #2 pencil. This method not only may cause your database to grow immensely unnecessarily, it may also cause you much headache and grief in the future when an recurring event is updated and/or deleted.
Martin Fowler has provided great insight into this issue. He introduced the idea of using temporal expressions for scheduling of recurring events.
Using temporal expressions to specify the recurrence of a recurrent event is a step in the right direction. The schedule needs to figure out if and which events happen on a given at a given time. A recurrence can be referred to as a schedule element. A schedule element is created for each event recurrence “with the ‘when’ part delegated to a temporal expression” [Fowler]. The temporal expression has an instance method to whether a date/time lies within the temporal expression. With that we can separate event matching from date/time matching.
I just got back a few days ago from an incredible vacation to London, France and Barcelona. It is though to adapt to the daily grind again.
One of the most predominant things I have noticed is how much time and attention I spend daily on online communication. Some will say “necessary evil”, or even include it in the “cost of doing business”, does that mean it is good?
Between Skype, Campfire, AIM and email roughly 70% of the day is consumed with communicating. Is it the message that is so complex? Or are we spending time going in circles in order to achieve a sense of self-fulfillment?
Let’s spend a few seconds thinking about a car factory assembly line. By virtue of the loud machinery, employees rarely communicate with each other. An unwelcome interruption on the factory floor could become life threatening. How much more are they accomplishing by concentrating on the task ahead instead of randomly attending to pop-us on each corner of a computer screen?
This post will come to it’s demise with no clear solution, I truly wish I had one. Other than: “Close all communication tools and get some work done” I draw a blank.
