Technology changes quickly. As fast as hardware, biotech, genomics, nanotech, quantum computing, 3D printing, and robotics are advancing, they are snails compared to software. UI frameworks, machine learning and AI, augmented and virtual reality, networking, big data, cloud services and computing, and every other aspect of software is revving daily, thanks to continuous integration and delivery systems, open software, and the convergence of entertainment, business, and government on digital systems. It’s an exciting time to be alive, but a difficult time to be a software engineer.
There’s always been the temptation to make yourself indispensable by being the only person who knows how to do mission-critical tasks or understands mission-critical components. That status used to be called “job security.” Today it makes you expendable. No task or component stays relevant for long anymore. If you’re focused on something old and forgotten, then you’ll soon be too.
What’s a software engineer to do in a world where the cutting edge is obsolete a year later? Be proactive about your obsolescence. Constantly work your way out of your current project and onto your next one. That means less resting and more learning, less pondering and more experimenting, less originating and more extending. Don’t fear for your current job–leap to your next one.
When I started at Microsoft, being a technical expert was your ticket to advancement as an individual contributor. Specialize in databases, Win32 and MFC, COM and DCOM, compilers, networking, file systems, or kernel technologies, and you were set for years. That’s still true deep within the bowels of Windows, Visual Studio, or Azure, but outside of those deep, dark areas and research, software is changing too quickly for you to be a lasting expert in anything.
Instead of being an expert on a specific technology, you should become an expert on learning, extending, and deploying technologies quickly. Engage communities that keep pace with trends and tribal knowledge. Know where to find the tools and building blocks that form the basis of apps, services, and middleware. Learn how to extend them responsibly. Master how to iterate on designs quickly based on customer feedback data. The better you know and faster you go, the more people you leave eating your dust.
As my friend Karl recommends, if you’ve fallen behind, don’t study what’s shipping now–focus on what’s coming next. Chasing is bad. Being out front is better.
Got a short little span of attention
Microsoft has been around a long time. Big bang releases that used to get rewarded are now bad for your health. Instead of working on a ton of features for a big release several months from now, you should work on one feature for a small release tomorrow. The small release tomorrow might only be seen by a limited preview audience, but fast feature feedback focuses fit and finish and exposes errors early.
The longer you work on a feature before delivering it, the more you’re guessing at what will resonate with customers (including APIs resonating with developers). Stop guessing. Shorten cycles. Experiment, deliver, learn, and repeat. That’s how software gets done today. If you’re still on the slow train, don’t be surprised when you’re left behind.
For more on short cycles and using customer feedback, read Quality is in the eye of the customer.
Build it up
When releases took a few years, you could afford to build software from scratch, replacing whole subsystems or creating an entire new product from nothing. With today’s fast cycles, we no longer have the luxury to spend years on a release, and it’s not even healthy to do so. Fortunately, there are now working systems, components, services, and libraries, internal and open source, that provide all the building blocks you need to deliver new customer value quickly. Even new apps and services that define new categories can be created in months.
However, old Microsoft thinking still makes some people believe that it’s faster or better to start from scratch rather than build upon the great work of others. Wrong. Yes, there’s plenty of bad software inside and outside the company. However, now there’s also an enormous amount of good software building blocks and frameworks ready for you to use. Internal and external communities exist to inform and guide you. You simply need to ask and engage. Sure, anything you use will likely need tweaking, but tweaking is much faster than reinvention. We don’t get credit for doing what’s already been done. We get credit for extending what’s possible so that our customers can achieve more.
Another common mistake is feeling threatened when a generally supported solution becomes available for a problem you and your team have been tackling. You might avoid it or make up excuses for why it’s not as good as the solution you’ve been creating. That’s crazy. You should embrace it. What matters is solving the problem for your customers, and that problem is now solved. You can use all the time you save enhancing the general solution to better suit your customers or solving even more customer problems by amazing them with your responsiveness. Remember: Constantly work your way out of your current project and onto your next one.
For more on reuse, read NIHilism and other innovation poison.
The software world is advancing at an astounding rate. No one can hope to keep up with all the progress, but you can keep yourself engaged and relevant. Thrive on learning technologies quickly. Deliver each small increment of customer value within days, and then enhance it based on customer feedback data. Build upon existing internal or open source systems, components, services, and libraries, extending them rather than rewriting them.
There was a time when knowing one technology area was enough to foster a career. That time is rapidly fading as technologies come and go. Instead of being expert in specific tech, today we need to be experts at responding quickly to customer needs and preferences with software that exceeds their expectations. You do that by building upon the existing foundation and teaching it and yourself to break new ground.