Ian Douglas has been an industry software engineer for over 20 years in roles ranging from hands-on contributor to engineering management to hiring team lead to instructor. His background is mainly in startup to mid-size companies in API development at scale. He offers free career development help through a published email series and is currently a Senior Instructor for the Turing School of Software & Design in Denver, USA, where he teaches backend engineering and career development. He’s conducted over 1,200 technical interviews, coaches others on how to be interviewers, and has helped hundreds of students enter the workplace as developers. In this exclusive interview with Manning Global, Ian shares his thoughts on moving from hands-on engineer to instructor, and offers tips on technical interviewing…
You’ve been a Senior Instructor at Turing School of Software & Design for nearly a year now – please could you give our readers a quick update of your key duties for this role and how you implement these in the workplace…
Before joining Turing as a full-time instructor, I was a volunteer mentor at the school for about three years – mostly in the capacity of career development. I spent upwards of 10-20 hours per week volunteering my time to teach an evening class on technical interviewing, or conduct mock interviews with students, do resume and cover letter reviews, help with salary negotiations, and so on. I certainly did lots of pair programming with students regarding Rails development, API design, industry best practices, web security, database administration, but by the end of the three years it was 100% career development.
Now that I’m on staff full-time, my role is mostly that of an instructor, teaching object-oriented Ruby and Rails development in a compressed seven month education program. I still assist with career development, but Turing has an entire team of amazing people who work tirelessly with students to help them prepare for the workplace. We have a saying that our graduates are not just ‘interview ready’, but ‘job ready’ when they graduate.
As an instructor you are responsible for teaching Turing’s backend engineering program. Please can you give an example of a successful strategy or initiative you have introduced, as part of this program, that has benefited students…
We’ve had an amazing group of instructors over the years at Turing who have all contributed heavily to curriculum and projects, and we constantly iterate on our lessons to give students relevant and modern material. Those who know me around Turing know I’m heavily invested in test-driven development (TDD) and push a solid ‘Always, Always, Always Write Tests First’ saying in my classroom. Several of my past students have gone on to write many technical blog articles in which they share their appreciation for TDD.
Having also had a background in DevOps, Security, VCS administration, and Database Administration, I also help unpack mysteries for the students around complex join queries, query optimizations, data analysis and when to make the decision of using an ORM’s API or to hand-roll a SQL query, for example. We’ve seen a large increase in students having an interest in database work, or deeper exploration of data analysis.
I also have a hand in regular technical code challenges throughout our school sessions, and we encourage students to tackle several of these code challenges on a regular basis. We’ve seen a great increase in their ability to work through code challenges as part of their technical interviews as a result of this constant practice. I also teach interesting git practices, and teach about OWASP for security, time/space complexities with Big-O Notation, and so on.
You’ve been involved in software engineering and web development since 1996. What made you choose this as a career? Also, please could you tell us how you started your journey on the career ladder and how the role of the developer has changed during this period…
I started studying Electrical Engineering but switched to Computer Engineering with a firmware/software focus, and graduated in 1996. I was then working for a real-time operating system company (QNX) doing technical support and pre-sales engineering, and later left to pursue firmware development at a consultancy firm. I taught myself basic web application development (Perl, PHP, MySQL, typical ‘LAMP stack’ work) because I enjoyed the creativity that came with writing an application that others could see around the world.
This led to working at several startups in California as well as some mid-sized companies. Eventually I settled on roles pursuing scalability and high-availability systems working in advertising technology. Later, I would work for several Techstars incubator companies including SendGrid, Simple Energy and Stream.io Inc.
Throughout my career, even back to my college days, I was always teaching what I’d learned to others. Transitioning to a full-time teaching role was by far the easiest choice I ever had to make. This all started in the summer of ‘84 when my dad bought a Commodore 64. Growing up in a very small, remote town in northern Canada there was little else to do in winter but play hockey and stay indoors, so I spent my time teaching myself BASIC programming (mostly to hack my games), and knew immediately this was going to be my job as an adult.
Over the 20-odd years that I’ve done web development, the core fundamentals of making things available to the world, online, certainly hasn’t changed. But there are certainly easier ways of doing things now than in the past. More languages, more frameworks, more libraries, all with the goal of iterating faster and getting your ideas out to the world quicker than before.
Please could you tell us more about the technical and mock interviews you conduct
As I mentioned earlier, I conduct mock interviews at Turing for our students. I also conduct several mock interviews per week at Interviewing.io, run by Aline Lerner. Having been a hiring manager or lead interviewer or hiring decision-maker at several jobs, my greatest dissatisfaction was not being allowed to give candidates in-depth feedback of their interview performance. By conducting mock interviews instead, I get to help people grow their skills, give them tips and tricks on feeling less nervous or how to work through a problem by breaking it into smaller pieces first, how to focus on soft skills, and so on.
A piece of advice I commonly give in these mock interviews is to write out your design, don’t keep it in your head. While you might be able to verbally explain your design approach, any interruption can cause you to forget details. I’ve had this happen to a candidate in a real interview.
Also, by writing down your design, the interviewer can correct your design before you ever write code in the event that you’ve misunderstood something. I’ve also conducted interviews where candidates misunderstood the problem. Those who didn’t communicate their design ended up having a much harder time passing.
Software engineer, career coach, technical writer, blogger, instructor… that’s a lot of roles and skills, which are your favourites?
You left out ‘public speaker’ – I’ve done plenty of meet-ups and conferences as well, plus I teach several classes every week which feels like giving a 60-90 minute tutorial talk many times over.
Well, the ‘side gig’ to be a career coach never really took off but it’s still on my website. As a senior engineer, my role was certainly to write great software, but also to train up non-senior engineers. As a writer / blogger and doing public speaking, that’s just another avenue of sharing my knowledge, as is my full-time instructor role. So ‘teaching’ has been a big part of my career and by far my favourite role / skill, which encompasses a big portion of my personality.
The only part of my career coaching on my website which has been popular is my Technical Interview Preparation Email Series, a daily email series that runs for six weeks. I wrote this series as a way to share what’s going on in your interviewer’s mind while you’re answering their questions. There are so many resources available to teach you how to answer an interview question perfectly at a technical level, but almost no resources at all to discuss why I’m even asking you that question in the first place.
There are also questions that have ‘hidden’ meanings or motives. For example, I like to ask candidates their favourite software libraries they enjoy using in projects which aren’t part of the usual libraries bundled into their framework of choice. This sounds innocent enough, right? I had one mock interview candidate tell me their top three libraries included two debuggers and a linter with little hesitation. I reasoned from that that the candidate was an unconfident, horrible coder. They were, of course, shocked at my revelation: needing two debuggers to track problems in your code means you’re probably making tons of mistakes and that you aren’t really sure how it all works. And needing to use a linter means you write messy code and need an external tool to help you write ‘conventional’ code. Unpacking ideas like this in my email series has been a lot of fun to write, and I’ve had some very nice follow-up messages from people thanking me. It’s free to subscribe, there are no ads, and I completely delete your subscription information once you get the last message in the series – no marketing effort or follow-up messages from me!
How essential has social media been to getting your message across? When I first wrote the email series, I promoted it through LinkedIn and Twitter pretty heavily, and it’s growing entirely by word of mouth at this point. I’ve spent maybe $50 in targeted ads on Facebook and Twitter early on, and even tried Google AdWords for a while, but I get zero money from the email series (in fact I pay for the hosting, bandwidth, and email processing) so it didn’t make sense to keep spending additional money.
Which project – business or pleasure – are you most proud of completing and why?
Pleasure, that’s easy: my family is awesome! They indulge my geeky endeavours like 3D printing or Minecraft, we’re all musical and love to hang out together. I’ve gotten my kids involved in STEM classes through CoderDojo and it’s fun to see the project ideas they come up with.
Professionally, my work in ad technology was by far my favourite feat of engineering. Even after departing the company, the systems continued to run, and scale, from processing about a billion ad impressions per day, to successfully processing over 17 trillion ad impressions at an ‘ad spend’ value close to $3 Billion.
Do you keep a keen eye on the latest tech developments? If so, what do you think will be the top trending topic of 2019?
I said it years ago and continue to say it: security. We don’t train nearly enough software developers to understand the inherent risks in poorly-designed software systems to withstand, or even to detect, common web application security attacks.
What is your advice to candidates who are having trouble securing an interview, let alone a new job?
Seek mentorship. You can’t do this alone as easily as when you have help. There are people out there willing to help you, sometimes for free, you just have to ask. Get on sites like interviewing.io and pramp.com where you can get interview feedback, then iterate on that feedback and improve yourself. Read career-topic blogs like Pramp or The Muse. A colleague of mine has also written up a technical interview prep course on Udemy that you can work through at your own pace.
Finally, is there anything else you’d like to mention? If you’re interested in checking out a compressed program for software development, please consider The Turing School of Software & Design. We’re a non-profit education entity and we run regular ‘Try Coding’ events where you can check out whether software development is right for you.