Table stakes is a bit of business jargon, loosely taken from poker, that is used to describe the minimum offering it takes to be in the market. The essential features or attributes that have to be there for customers to even consider buying a product or service, the basic capability a team or department needs to demonstrate to be credible.
I’ve used this as the title of this article as I’ve been reflecting on how our current batch of interns have fared over the last year and what could we could do to make things easier for the those joining us this time round. What I’ve realised is that the expectations from stakeholders and development teams of what a software developer should be able to do have greatly increased over the last 10 years.
When I started out basic coding skills, some SQL, the ability to create a package then ftp it to a server was all that was needed to be useful to the team. With the move to continuous delivery and increased complexity of projects this is no longer enough.
As the practices, tools and frameworks we use become more powerful, the bar that’s set for a good developer rises.
In addition to a good grasp of programming here’s my ask for developers
- Be up to speed with CI/CD to the point where you can explain and update the build of the projects you work on.
- Understand docker, so you are able to create and debug a docker image of the project your working on and configure any dependencies.
- Write effective unit tests and understand what code coverage reports are showing you.
- Write appropriate end to end tests for your work.
- Be able to use the log aggregation tools to create searches and dashboards that help support your system.
As I look at that list I realise that it doesn’t quite capture it all. People round the business who have worked with good developers expect developers to get things done and while the skills I’ve highlighted above will help there’s more to it than that. I’m going to be reflecting on what the difference between those who can code and those who make things happen in the coming months but for now I’ve created a set of tips, videos to watch and books to read that I hope will help new and aspiring developers make the jump from knowing how to code to being a great dev team member.
Tips
-
Learn to type – you’re going to be using the keyboard a lot might as well do it well – you don’t need to get to crazy speeds but decent typing will reduce the errors you make.
-
Build learning new skills into your timetable. The reality of software engineering is that there is always something new to learn, so create a plan and invest in yourself. This article will give you a few places to start after that follow you interests and the tools that support the language or area you want to work in.
-
Learn the basics of Docker, what is, how to create and run an image and how to get on to a running image so you can debug and try things out.
-
Get familiar with the command line, knowing how to navigate, search through the history of issued commands and doing some basic file editing are great places to start, from there add the ability to amend file and directory permissions and the ability to create and run scripts. If you find yourself doing the same set of things over and over again create a script to do it for you.
-
Learn the basics of Git - make sure you can create a new branch, merge, rebase, cherry pick and understand what fetch does
-
When you land your internship or first job try and find out what build tools, ci/cd system, persistence stores and frameworks are in use. Taking a bit of time to understand the basics of the tooling before you arrive will make your life easier when get there and let you focus more on the big picture.
-
Learn IDE shortcuts. Just as knowing the cut and paste shortcuts make writing documents and emails easier not having to reach for the mouse to access the functions of the IDE will help you keep your focus on the code. When you start working with a new IDE find a shortcut reference chart and print it out, each time you find yourself reaching for the mouse to access a function see if there is a short cut combo to use instead and give it a try. Overtime you’ll start remembering the most useful ones.
Watchlist
Here are a few videos to get you thinking about software development more broadly.
Take an entertaining journey trough the history of software development and think about what it means to be a professional.
What is CI/CD - Continuous Integration and Continuous Delivery, this short presentation gives you the basics and lets you know why people keep on banging on about it.
Coding is like playing an instrument, you can always get better, here are a few pointers on how.
If its worth writing its worth testing - TDD makes sure all your code is tested by writing the test before you write the code. It’s hard to believe but once you good at the technique its much more efficient than writing and testing separately. If you only watch one of these videos please let it be this one. If it inspires you start hunting out TDD Kata’s in your favourite programming language.
A more philosophical look at what can go wrong and why testing is important.
Booklist
I’m sure I’ll add to this in the future but for now here are a couple of my favourites. If you only read one chose Pragmatic Thinking and Learning, thinking and learning are key skills for a software developer so doing them better will pay dividends. Click on the images to find out more on amazon.
The Art of Agile development is jammed packed with ways of improving your outcomes, loads of great advice from an XP perspective.
It’s not as common to hear people talk about patterns as it used to be. However there are lots of ways software problems have been solved in the past and studying them will help sharpen your skills.