Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Choose Your Battles and Make Your Peace

DZone's Guide to

Choose Your Battles and Make Your Peace

We all want to be that developer whose an expert in all languages and frameworks. Unfortunately, this isn't possible for most of us.

· Agile Zone
Free Resource

See how three solutions work together to help your teams have the tools they need to deliver quality software quickly. Brought to you in partnership with CA Technologies

Not too long ago, I was really excited to learn Angular 2, play with node, learn everything there is to know about Java, do courses on anything from HTML to CSS to akka. What I learned from all of this (apart from lots and lots of tech) is that there are so many frameworks, ways of doing, opinions, and utilities that it can become completely overwhelming. This is especially true in the JavaScript world.

So, what have I learned in about thirteen years of software development? You either need to specialize, or you need to choose your battles very carefully. In either case, make peace with the fact that you won't know everything or become an expert in everything.

Writing Diverse Projects

Our small (I mean two-man) team is tasked with writing diverse projects. One day you need to write a Java service with WebSockets on WAS Liberty, the next day you need to provide a JavaScript UI or assist the content (website) team to get a static homepage updated.

Our team also supports other teams with IBM Websphere (Portal, WCM, Liberty), we have upwards of 60 projects on our plate, and with most of our new projects comes the opportunity to experience and learn new technology. This means you don't have the time to get experienced with all of the more modern frameworks and advanced tools.

Coping With Cognitive Load

So, how do you cope with this cognitive load and still get stuff out the door? You simplify.

Think of software frameworks, utilities, and languages as tools in a toolbox. Chances are you'll know how to operate a screwdriver or spanner, and maybe be OK with a power drill, but not so much with the CNC milling machine. So, first see if the screwdriver won't do the job, then look further if it doesn't. Don't try and weld everything if screwing it together is quite sufficient.

To relate this back to software development, make sure you or your team understand the basics properly. That is, spend your time with vanilla JavaScript (e.g. ES2015 and earlier), CSS and HTML if you mostly work on web projects, or Java, C#, JavaScript (etc.) for server side. Then, at least know or do the tutorials of a variety of sizes of tools.

For example, learn what jQuery can provide, then learn what Angular or React adds to this. For server-side development, learn what JEE 7 adds to the box vs standard Java, or maybe have a look at Apache projects. Make sure you understand caching tools, storage options (e.g. caching, DB), communication and API options (REST, SOAP, Websocket, async messaging).

Then, when you need to work on a project that requires a certain set of features (yes, technology supports features, you don't hammer features to fit a technology) you pick the simplest set of tools that will provide the desired outcome. Remember: simplicity, maintainability, easy testing, fit-for-purpose.

Shoot for Specialist or Jack of all Trades, not Polymath 

In summary, if you don't have the opportunity to specialize in a certain language and its supporting frameworks, or if your projects are very diverse, it is important to know a set of software tools of varying sizes (depth of features or abstraction), know the basic tools really well and be able to focus on resolving problems/building features/delivering value instead of punting the latest framework.

Discover how TDM Is Essential To Achieving Quality At Speed For Agile, DevOps, And Continuous Delivery. Brought to you in partnership with CA Technologies

Topics:
software development ,agile ,devlife ,specialization

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}