I’ve been through my fair share of technical interviews. Typically, they’ll ask you to complete a live exercise, provide code samples, or answer mundane questions about a particular language or framework. Generally, those approaches are useless. Even the most talented software engineers do not always remember how to implement hashCode(), the differences between various search/sort algorithms, or the most appropriate data structure to use for a specific context.
In my stint as a software engineering manager, I set out with all the typical “I can do this better” mantras. I won’t ask the stupid technical bits — I’d rather have someone who knows the right questions to ask and how to use Google. I won’t ask for a live coding exercise, since that’s so far from reality and folks are often nervous. I’ll focus more on how they’ve used specific technologies to tackle problems, what they’re proud of, their hobbies, communication skills, blah blah blah.
All that is well and good, but I found it missed critical areas: how well can this candidate critically think about design patterns, component design, the composition of components, governance, and working effectively in a team? I’d argue those skills are the most important to have, but also the hardest to gauge and discover. We tried all sorts of tactics, but never really found the sweet spot.
Continue reading The Right Way to Run a Technical Interview
Imagine you manage a team of corporate event planners, responsible for overseeing each event and ensuring every single detail is arranged and executed. Your team consists of 8 individuals. The scale of each event is sufficiently large, requiring you to task each individual. If any of them fail, the event will be unsatisfactory (at best) or completely unsafe (at worst).
Continue reading Why Systems Integration is Hard: Ashley, Bob, Cindy, Dave, Emily, Frank, Gina, and Hank
Want an easy way to backup your server to Amazon S3? Simply use this shell script as a cron job (I currently have it set to run every 3 days). This specific script assumes a YUM-based software repository, MySQL, and Apache. However, it can easily be changed for different environments. Continue reading Script: Automatically Backup a Server to Amazon S3
Gone are the days of requiring large amounts of resources to adequately run a fast, enterprise-grade web server. I currently run a single DigitalOcean instance (the 1GB memory plan) and host many web platforms with no performance issues, whatsoever. I thought I’d share the settings that have been working really well in this low-memory environment. Note that the server is running CentOS 7, but these settings should be applicable for any OS.
For what it’s worth, if you’re interested in a DigitalOcean account, click here to use my referral — you’ll gain $10 in credits when you sign up… Continue reading Apache and MariaDB/MySQL Settings for Low-Memory Servers
When adding a new website to an existing web server, the process of setting up Apache and creating FTP users is a bit tedious. However, it’s really easy to automate with a simple script. The following is an example Shell script that automatically: Continue reading Automated Apache and FTP Setup for New Website
Today was not a good day. In short, a nonprofit’s online donation form was hit 1,285 times in an attempt to validate stolen credit cards. Unfortunately, 120 of those succeeded, meaning our Stripe account had over $600 in fraudulent donations. I needed a quick way to fully refund those charges, but in bulk. Through the Java API client, I was able to do the following. I figured I’d throw it out here, in case someone else can use it. Note that although it uses the Java client, the concept is identical for others. Continue reading How to Issue Bulk Refunds through the Stripe API
As a part of my ongoing consulting with nonprofits, I oversee over a dozen web applications running on OpenShift. I needed an easy way to backup all of the MySQL databases in one shot. So, I cooked up the following shell script. It’s pretty dirty, but it works. The script assumes Linux and is run as a cron job, but the concept could be easily adapted to other operating systems. I thought I’d throw it out there in case it’s useful to anyone else. Continue reading How to Backup an OpenShift MySQL Database with a Shell Script
This evening, I sat down to integrate email notifications in a client’s JAX-RS web application. Literally 5 minutes later, it was implemented, tested, and pushed. Thanks to Heroku and its SendGrid add-on, it’s ridiculously easy. Continue reading Send email from a Java app with Heroku and SendGrid
Heroku has some great project templates usable as a starting point for a new application (here). However, it’s not 100% clear how to deploy an existing Java web application, without starting from their templates. Attempting to use your project as-is will sometimes prevent the Dynos from running or cause other startup issues. Continue reading Deploy an existing Java app to Heroku without the project template
Last year, I published (with a group of 3 others) and presented a paper called “TwitterReporter.” It described a method for identifying breaking news, in near real time, by processing the Twitter Streaming API.
One of the most interesting sub-problems was that of the unique nature of social media content “noise”. Especially with respect to Twitter, traditional natural language algorithms are flat-out difficult in the social media space. Limited content length, service-specific syntax, shorthand use, and…teenagers. Continue reading Reducing Social Media “Noise” for Mashups and Data Mining