One of the most important things I’ve learned while working for an enterprise company is that technology used is usually implemented to meet a business requirement. While there are exceptions to the rule, when it comes to larger companies, business (or profits) are king, and so technology is just here to help drive profits higher. Using the newest and greatest technology is great, when the business needs something new, but sometimes we can get caught up in that technology tunnel vision and want to use something new, because its shiny.
As an engineer have you ever wanted to work with something so bad, you created a business need out of it? I know i have. For example my latest “fun project” is EZ Data, and while I think its pretty neat and uses WordPress in an advanced way, it was not built out of business need, it was built because I wanted to play with Angular 4 and Ben Moore‘s WAR API.
I think about my day job at a very large company and I don’t think we’ve ever developed something for the sake of using the technology. In fact we have a separation of teams, one team owns the business needs of a website and the other, the technology that runs it. It is the same for those of you who contract, your client owns the business and has their needs, you need to create a solution using technology that helps them meet their needs.
Ideally these two teams work together, so while the business may have a roadmap of what they want to accomplish in the next 3 months, the technology side has a roadmap which enhances that technology while meeting the needs of the business. The two teams are not mutually exclusive. For example as a consultant you may want to spend some of the time working on improving your clients’ website’s performance or security. This may not be inline with their marketing or content strategy, but doesn’t really impede it either.
If you are looking for a new job, or even to consult. As much as I hated to admit it while consulting, the truth is people want to know that you are helping them grow their business. While I can offer the latest technology or best technology to solve a problem, I cannot get anywhere without helping my company or my clients grow.
Lately I’ve been looking over my code at work and noticing a trend between it and what I may build for a client or for myself. My code for work only applies to how it is going to be used. Yes, I code it so it can be extended easily, however there are clear areas where something can be added to make it even more modular, and I don’t. Is this bad coding practice?
In any other circumstance I would say yes, think of all the use cases. However I have to look at the bigger picture of who will be using the software, and how it will be used. Once I see that clearly, I stop over-engineering things. Over engineering is something we’ve talked about before and no matter if you run your own business or not, can cost a lot of resource time that could be better spent. Over-engineering the solution to a business need doesn’t actually help the business, it only costs them more money to build something they will not use. So why spend your time coding it?
When you are stuck in technology tunnel vision mode it is hard to always see outside of what you know. I recommend either spending some time with the business side of what you are working on, or maybe taking a class or two. I spent roughly 5 years doing nothing but SEO and Internet Marketing out of college. I got really good at it, even though I hated it, but it started the ball down that road of seeing what technology is being used for in a larger business.
Spending so many years away from that has trapped me back in the tunnel, and not until recently have I had the realization again. While working on EZ Data for example I over-engineer like crazy. After having a conversation with Josh Pollock I realized that while I what I wanted to build for it next was cool, it was not in the best interest of the business.