The Workspace of a Modern Programmer

Ten years from now software developers will commute to work only if they’re invited to a corporate party or they have to work for an old fashioned client. Software professionals (not the average 9-to-5 workers) will have a freedom to equip home office to their taste. In our company we already work in this mode trying to minimize/eliminate the commute time as much as possible, and I’d like to share with your the home office setups from three concrete people of our company, circa April 2013.

But first I’ll touch on the monitor connectivity solutions that might be useful for some of you. Computer professionals should be having computers with more than one monitor. Hooking up the monitor number two is easy. Your laptop has this video output (VGA, mini DVI, etc.) that presenters use while delivering their powerpoints via projectors.

Every time I was working on a project for a Wall Street firm I got envy passing by these traders sitting in front of four monitors. So I decided to switch to the multi-screen mode in my home office too. I’m using a single MacBook Pro for everything I do (I do only a light programming these days). I’m not one of these geeks having a basement with a bunch of Linux servers buried under a pile of wires, connectors, and adapters. My MacBook Pro has CPU with 4 cores, lots of memory, and a large hard disk. It’s a two-year old machine, but so far Apple didn’t give me enough reason to give it as a gift to my wife and buy a new one for myself.

Now I have in my home office an 24″ Apple’s monitor plugged into my notebook, and I’m using a very inexpensive solution that allowed me to hook up yet another 22″ monitor that was collecting dust in my basement. This is how my desk looks today (click to enlarge).

SONY DSC

That little thingy to the left of my MacBook is a $39 Sabrent’s USB adapter with DisplayLink chip. It simply connects yet another monitor via the USB board (go to their Web site and update your visual driver). That’s all. It works. With this solution you may experience some flashes during the video plays on that monitor, but my colleague told me that they are working on the hardware acceleration for their MAC driver and Windows users shouldn’t experience this issue.

My setup is a relatively inexpensive solution, but I’m planning to upgrade my set up to be more inline with what’s right for working more productively. Being able to have more quality monitor real estate is important. The word quality is the key here. you can live with less CPU cycles, but poor quality monitor affects your eyes. So let’s not be cheap and earn some cash for a high-resolution 27″ monitor(s).

Let me show you a setup of my colleague at Farata Systems. He’s a team lead and heavy-hands-on developer. This is what he built in his home office.

my_setup_3
Is this nice or what? He’s connecting two Apple displays via the thunderbolt interface, and a Dell monitor via another inexpensive USB adapter based on the same DisplayLink chip. A 13″ notebook MacBookPro has enough juice to bring life to three screens. It’s a very neat and professional setup, and can serve as an exemplary desktop of a serious hands-on software developer.

Finally, I’ll show you a couple of more photos that were taken today in the home office of our top-notch software pro, my business partner Anatole. Don’t try to repeat this at home cause even if you will be able to replicate all this power, you might not know what to do with it. Luckily, Anatole knows, or so he says :).

DSC_0012

He likes MacBook Pro as a good solution if he’s going on vacation and needs to have a computer that fits in a briefcase. Anatole runs 20+ virtual machines on that box that you see under the table (2 CPUs, 8 cores, 32MB, 20TB raid storage). Having multiple monitors allows him to monitor most of the VMs without the need to use the mouse.

There is a drawback in such multi-monitor-multi-os setup though. When I call Anatole on Skype, there is a latency between the moment when he’s getting the call and finds the right instance of Skype to use. I forgot to tell you that the above photo reflects just the right side of Anatole’s home office. The left side is more compact, cause it’s about mobile development, so these screens are smaller by definition. If you are not sure what’s that thing between two iPads, it’s a 3D printer with the roll of plastic for printing 3d constructions.

DSC_0015

Once in a while I find myself in a corporate environment, where managers frown at developers who want to work from home complaining that they don’t have working environment as good as a typical cubicle where the employee could stay focused on work and be productive.

One manager told me that he hates when during the conference call a person dials in from home and the dog is barking in the back. Well, when Anatole will be dialing a meeting from his home office, you might be hearing the sound of Atlantic ocean. If this bothers you, hire someone who fits nicely in the cube.

e-Commerce with Hybris: 10 Million Product Catalog?

Last month a prospective customer called our office.
“We know that you have a team of software developers that build e-commerce applications with Hybris software. Can you help us with developing our online store?”
“Sure we can – we have a solid expertise in developing e-commerce applications with Hybris software”.
“But our store will have pretty large catalog: ten million products”.
“We didn’t have a chance to develop online stores that have more than a million products. We know how to approach such a project to minimize your risk, but so far we didn’t deploy such an application in production.”

After this conversation we’ve never heard from this person again. We know why: he was looking for another answer like, “Sure, we did it before and will do it again!” This is not to say that creating a responsive online store with 10M products is not possible with Hybris, but we didn’t do it. In any online store product catalogs have to be indexed from time to time. For example, a store needs to add a new line of products. How much time is required to re-index a store with 10M with Hybris software? How about importing of the CSV product data and synchronization? We simply don’t know.
Hybris does several passes over these IMPEX to resolve referential integrity, in fact – many passes. In may take a day and finish or a day and break/start over. Then either SOLR (Lucene) or Endeca full text search index will need to be built. Then, there is a task of synchronizing the staging catalog with its production version. Indexing of itself is not Hybris specific, but the import and synch are. Hybris has yet to show that it’s a high performing solution and publish the appropriate case studies.

In fact, if you do not provide indexing information, importing of a mere half million records may never finish on Hybris server. We do not have any metrics of the synchronization process yet, but the good news is that Hybris is build on Java servers and careful clusterization, cacheing, and fine-tuning of the database will produce acceptable solution to large inventories. Wall Street application written im Java handle huge amounts of data in timely fashion. But Wall Street managers understand that they have to hire the right people. Large-scale e-Commerce projects have the same level of complexity.

We’d be happy to set up a lab (parallel merging while loading, finding deltas, proper Java clustering, stress tests) with the appropriate hardware and create a pilot to answer these questions and to optimize the process to get rid of the bottle necks, but this prospect customer is gone.

What will happen next? I’ll tell you: the deja vu of IT consulting. Some brave salesman of another consulting company will explain to this customer that working with large product catalogs is their bread and butter and will get this project. Six months down the road the customer will see a lot of hours billed to the project and detailed explanations of “unforeseen circumstances” followed by new promises.

We’ve seen this scenario several times – it doesn’t depend on the technology in use. Today it’s e-commerce, but six years ago I wrote a blog about a similar scenario, but that time it was about redesigning a portal for a major publisher. Software developers hate working on such projects. They don’t know that the customer has these unrealistic expectations because of some over-promising salesman.

What’s the moral of this story? We value a moral dimension to consulting, which costs us dearly.

Fired 15% and Don’t Feel Bad

Back in 2006 I was resigning from a large IT consulting firm to become a partner in a newly created company Farata Systems. During my resignation meeting with a top manager of that firm I asked if he could give me any advice with the new company. He said, “I’ve been managing hundreds of IT people and learned an important lesson – don’t try to hire only the best and the brightest. There are lots of people of various level of expertise in our industry, and they can do the job”.

Since then, I’ve been doing a lot of interviewing and hiring. Our software engineers successfully work on various IT consulting projects as well as on our own software product development. The vast majority of our people work for us for years, which is very impressive given the fact that many of them work remotely from Eastern Europe, where software developers are in high demand. But last year we’ve fired about the half of newly hired contractors. We’ve fired about 15% of people working for our company.

All of them were good software developers. But they were not good enough. When a new hire joins the team working on a project he needs some time to learn the codebase and the tooling. But we expect a person to become productive within 3-4 weeks. If this doesn’t happen, this person becomes a burden for the team. Not only he doesn’t deliver, he requires other team members’ time. We simply can’t afford this. Firing costs us dearly, but we prefer giving such people two-week notices and start hiring again. We want the best and the brightest.

You may say, “You don’t know how to interview people to weed out those that are not a good fit.” It’s not that easy. We are not Google – a dream company to work for. We don’t have candidates camping out by our doors with job applications. We pay better than others, but this is not good enough in the offshoring countries, where many developers would rather work for half pay as employees of the large body shops than as remote contractors. I don’t blame them, but this is a reality we have to deal with.

Unfortunately, the fact that the candidate did well during a couple of phone interviews doesn’t mean that he is a good fit. During the interviews we don’t ask questions like “How many piano tuners live in San Francisco.” We don’t ask to demonstrate hands-on knowledge of algorithms from the book by Donald Knuth. We just need people who care about their profession and know a specific set of software tools.

You’ll be surprised, but even if a person demonstrates good understanding of a certain technology this doesn’t mean that he will be able to apply this knowledge in a real project. If a technical job interview doesn’t work, what does? We started using a new hiring technique: try and buy. This is not about hiring people as contractors and then offering full time employment to those who quality. We offer remote software developers who successfully passed phone interviews to start working on our projects part time without leaving their current employer.

If a person wants to work for us, he can find 40-60 hours to commit for working on our project just for one month. After that, we’ll either make an offer or say, “Sorry”. We pay for this time even if the person didn’t prove to be a good fit for us. It’s less expensive for our company and less stressful for the developers.

We are a software boutique and can afford to hire the best. This worked for us in the past and it will work in the future.

A Thousand Presentations Later

Many years ago I prepared my first PowerPoint slide deck and used it as visuals in front of a small audience. Over the last twenty years I made tons of presentations on IT related subjects. In this blog I’d like to share with you a dozen rules I use while preparing my slide decks or speak. Please add your comments with more tips to rookie presenters.

1. The font has to be as large as possible – not less than 18pt for the text and 12 points for code listing. If you can’t fit the entire code fragment on one slide, split it in two or create two code panels on the same slide.

2. Do not abuse effects and transitions like spinning, rolling, fading slides or texts. Using them once in while is fine, but keep the attention of your audience by the quality content and not by showing them how your slides dance on the screen.

3. Don’t use multi-color master slide themes. Here’s an example of the master slide I received from one conference organizers (they were really nice people). Add some content to it and the audience will get headache after spending an hour trying to weed our the content from the unneeded background.

4. Do not create presentations with 16×9 ratio unless you’re always using your own projector. Be prepared to present on the outdated projector provided by your host. Your presentation should look good on a 1024×768 projector with a 4×3 ratio.

5. If possible, keep the bottom 10% of the slide blank. People on the back may not see that portion if a basketball player is sitting on the first row, and the screen is hanging low.

6. Do not use constant screen zoom in/zoom out using these gestures on the trackpads – it makes people dizzy. Better increase the font size of whatever text you want to present.

7. The amount of text you put on each slide has to be minimal. Not as minimalistic as in Steve Jobs’ presentations, but having 3-4 short sentences on the slide is more than enough. Don’t just read the text from your slides – comment the slide content.

8. If you are planning to share your slides with the audience, upload the slide deck in a PDF form to your server or slideshare.net and include the URL on your first slide. 50% of the conference organizers’ promises to publish the slides never materialize.

9. How many slides you need, say for a 50-minute presentation? I need 25 – my empirical formula is 2 minutes per slide. This doesn’t include time spent on software demonstration, visiting external Web sites (Internet won’t work), or going through the program code.

10. Assume that the Internet won’t work at the venue . Pre-record video fragments of whatever you wanted to present live and use it as a Plan B (or is it Plan A?)

11. What if the projector doesn’t work? Five years ago I had this experience in a pretty large conference in New York City. I’ve been presenting for 40 minutes without any visuals other than my body language.

12. Can you still deliver the presentation if your slides got corrupted or your laptop got stolen? Sure you can if before starting your trip to the venue you’ve saved your powerpoint as a PDF file and uploaded it to a publicly available server. This way you can use any computer that has Acrobat Reader installed. Some people believe that it’s cool to make a no-slide presentation to a room full of software developers. They program live on stage. The audience seems to be happy too. How cool is that! Then the show is over. The magician is gone. What are all these people left with? Sweet memories.

Memory
All alone in the moonlight
I can smile at the old days I was beautiful then
I remember the time I knew what happiness was
Let the memory live again

Of course, experience matters. But the most impressive Powerpoint presentation I’ve seen till now was the one made by my younger son when he was a 9 year old kid. One night he just invited my wife and myself to his room, turned on the projector and started showing simple slides of him doing a good job in school and a picture of himself being bored at home spending evenings alone in his room. The final slide of this short preso was showing a newly released Game Boy console with a large font text “Please purchase it for mе. Don’t I deserve it?”

This was а perfectly made and delivered presentation that was concise, up to the point, and most importantly, it achieved the goal of the presenter.

What the Title “Senior Developer” Really Means

When I post a job opening for a Senior Java Developer, people send me resumes, and their titles match my post title. But the meaning of the word “senior” varies depending on the geography. Here in the USA a 22-24y.o. person graduates from college and starts as an intern or a junior programmer working his way up the career ladder. By his 28th birthday or so, a hard working person may qualify for the title Senior Developer.  Having said this, I realize that there are prodigies who became seniors in elementary schools, but they never send me their resumes anyway.

In the countries that supply offshore developers it works differently. The amount of outsourced job available in India or  Russia is overwhelming, and any IT agency is willing to take just about anyone who has a Skype account, can speak some English, and has a vague understanding of what his future IT profession is about.  If you are a freshman in college majoring in any engineering profession, you can easily find a job in IT company.  A typical Junior Java Developer or a QA Engineer is 18 there. Senior in college means senior in software developer in their world.

A 35 year old person is considered brain dead, and I read all the time discussions in Russian programmers forums suggesting opening businesses by the time you’re THAT OLD. A typical resume starts from the date of birth screaming, “See, I’m young!”

Interestingly enough, most of the 25 year old sincerely believe that they are seniors. No kidding. They’ve been around for a while in this overheated market. As expected, 80% of these seniors can’t pass a technical interview with me. But, of course, there are talented and hard working people there, and your main goal during the hiring process is to weed out the fake from authentic seniors. Take it very seriously,  and you’ll be able to create a team of talented people working remotely from overseas.

Hiring Teams of Offshore Software Developers

Over the last five years one of my responsibilities was interviewing and hiring software developers and many of them were physically located overseas. In this post I’d like to share with you my thoughts (and get your feedback) on one of the aspects for offshore hiring: pros and cons of hiring individuals vs. teams.

Our company, has people located in the USA (East Cost) and Eastern Europe. We have a number of clients here in the USA, and some of our consultants work on sites. Sometimes a team of our developers works for the clients remotely. In some cases we provide not only a remote developers to augment the client’s team, but also a senior software architect and/or a manager too.
Our consultants works for us for years, we trust them, and they have a steady stream of work. But once in a while we have to quickly ramp up the team. For example, a new customer needs a team of five remote developers, and they need them now. We are a small software boutique and don’t have a long bench of people sitting without of work. So where to find talent quickly? In such cases we are facing the hiring dilemma:

a) we can contact to our long time partners – large offshore companies – and subcontract their developers.
b) we can start some serious interviewing process trying to pick the right talent in the open market of freelancers.

The first option is more expensive, but more preferable cause we worked with these partners for a while, the quality of their resources is typically higher, they are collocated in the same building, and the chances of losing a developer in the middle of the project are slim.

But in both cases we are getting offers to hire a team rather than individual developers. If you are looking for five developers, an offer to hire a team of five sounds very lucrative, but we never do this. Yes, having a group of people that already worked on several projects is great, but the skill-set and experience of each team member varies. But your offshore vendor charges a flat fee for each developer.

I always reject such offers. I want to interview each and every person from an existing team to make sure that I’m not getting a team of four C-players and one A-player. I’d rather work with five B-players than with one star with an entourage. This strategy allowed us to maintain a bit higher rates for our services.

Interestingly enough, our smaller size clients or startups understand the advantages of not having weak people in the vendor’s team, but thus is not the case with large corporate customers. They want to minimize the hourly rate. Period. The hiring manager won’t fight to get a particular vendor for more money just because they’re more experienced – this is not something you can easily measure. But the hourly rates are easy to compare. I remember a corporate manager who asked me, “Can’t you hire developers willing to work for a bowl of rice?” I can’t, and I won’t.

What’s your take on this? Does your firm has a list of approved vendors and you are forced to hire teams or are allowed to build them?

Will HTML Force You to Lie?

OK, our company, Farata Systems has created this nice application using Adobe AIR, and our customers are happy. It’s not a simple CRUD though. We’ve implemented some cool stuff replacing tons of paper forms with PDF documents processing. PDF documents are being scanned, the OCR software processes them to automatically figure out what type of document is it to properly save it in a database. Customers’ checks are scanned, digital signatures are flying, reports are being created… All is integrated into one Adobe AIR application. No external Acrobat Reader, no nothing. I’m not saying that it’s not doing some traditional grid/form processing, but there is something to be proud of.

Yesterday, one perspective customer asked me if we have an HTML5 version of this application. I said, “We can create one for you”. The next moment I realized that I lied and added, “I mean, most of it can be turned into HTML/JavaScript, but some heavy duty stuff we’re doing now would be too expensive to re-create in HTML/JavaScript”.

I didn’t start questioning why they even wanted to do a pure HTML5 version. I know what the answer would be: “Everybody goes HTML5, we want it too, and we want it now”. You can’t piss against the wind. You shouldn’t attack windmills unless your name is Don Quixote.

In my 25+ years in IT I always stuck to one rule – give your customers an honest technical opinion, but if they decide to overrule it for whatever reason, do what they want. This strategy allows me sleep well at night knowing that I didn’t lie. I also know that I would have won more project bids if I wouldn’t stick to this rule.

After thinking of this yesterday’s conversation I felt like deja vu – it was happening in the past and will be happening all over again. I’ll be saying to our perspective customers something like this, “We can do it in HTML5/JavaScript, but it’s going to be a lot more expensive than if we’d in Adobe AIR”. But the next day a salesman from another consulting firm will meet with the same perspective client and, without thinking twice, will answer, “Yes sir, we can do it in HTML5 at the same or even lower cost. Promise.”. After that the salesman will give a strong handshake looking straight in the eye of a customer for about three seconds. They’ll win the bid… Said I loved you, but I lied.

Only six months later it’ll become obvious to everybody that the entire project budget is drained, because of “some unforeseeable technical difficulties”, and they’d need to substantially increase the budjet of this project. But hey, they’ll figure out something. And what do I get? I didn’t lose self respect and sleep well at night, which are not a bad things too, don’t you think?