Good managers do not care what technology stack a project uses so long as it does its job. Great managers, however, care because they know that the technology stack has implications for deadlines, budget, team spirit and human resources.
In this short article, I will give you my top reasons why you, as a manager or team lead, should consider Java for your next project.
You have an Enterprise Project
Why Enterprise projects? Well, if you hear Java and you do not think of big Enterprise projects, then have you really heard anything about it?
Java is a mature language that has been used for virtually all types of commercial enterprise projects. From small-scale internal tools to end-to-end enterprise solutions, Java does it all. Its rich history across different business domains is a compelling argument for choosing it. It is fast, scalable, and above all, rich in out-of-the-box functionalities.
Every big (and even small) enterprise project has common needs like security, user management/authentication, data storage and so forth. By choosing Java, you can benefit from its maturity and get many of these features basically for free. The time-saving component alone is enough to remove the common restraints of tough deadlines and grumpy managers demanding quick results.
Modern Java development has become more related to glueing existing pieces together, rather than creating these pieces from scratch. Many people point to this as a negative, but I would argue that this makes it perfect for serious enterprise projects. Why waste time building a huge codebase when you can build it with so many prebuilt frameworks and libraries? Less code to write => fewer bugs = happier clients + managers.
Speaking of prebuilt frameworks and features leads me to my next point…
You Prioritise Domain Design Over Infrastructure
Experienced developers know that in almost every project that outlives its proof of concept stage comes a time when we need to do some “plumbing”. This means that we need to set up common tools within the project team for quick requirements delivery. Such a tool could be a helper method to execute our code in a transaction or a logging configuration that easily adds new log points. All of this is represented by additional code that doesn’t really serve any business logic. This supporting infrastructure of tools also takes time to be tested, documented and explained to the team.
Java and its surrounding ecosystem help boost development productivity. With common frameworks like Spring Boot, you can easily configure a project that comes with virtually all you will need to start building backend applications. Spring Boot pre-configures almost everything, allowing you to concentrate on Domain design and core business logic. If you don’t believe me, try it out. With Spring initialiser, it takes literally seconds to have a running backend server ready for development!
“Well, fine” – you might say, “Java comes with a lot of prebuilt and useful stuff, but what about scaling?”… Well, I am glad you thought of that because it leads me right to my next point…
You Like Fast Applications
Who doesn’t want a fast application? “I do not care if my application is not performant or fast”, said no one ever. Yet, we often don’t think about language performance because we assume that there is no significant difference. But this is not true, especially when we do big projects with a lot of code!
Programming languages can be broadly classified as interpreted and compiled. Compiled languages are directly compiled to machine instructions of the respective machines, while interpreted languages are directly executed by their respective interpreter. As a result, compiled languages are faster, but the interpreted ones are more flexible in terms of size, changes and execution environment. Java, in that regard, combines the best of both worlds. It is an interpreted language with a JIT (Just-in-time compiler). The JIT compiles parts of the code directly to machine instructions, a feature reserved for compiled languages. The net result is really fast Java.
Unfortunately, Java tends to have a bad reputation when it comes to fast performance. This has much to do with its not so glorious early versions. However, the latest JVM implementations have managed to tackle this problem. Just checkout GraalVm. In combination with Java, you can guarantee yourself that language performance will never be an issue in your application. So why choose another compiled language like C++ when you can get almost the same performance with all of the flexibility you will ever need from Java?
You like to Avoid Irreplaceable People
Another benefit of using Java and the ecosystem of frameworks around it is their maturity and popularity throughout the years. If you are my boss and I have built a very custom, complicated database connectivity layer in your application, you have a problem. I can leave at any point, taking the know-how with you. You can, of course, hire someone else, but this would potentially mean a lot of time spent just to relearn something lost. In your mind, I quickly become irreplaceable for simple economic reasons.
This issue becomes even more prevalent in long-lived projects where multiple people or teams could work on a single codebase. To avoid this, your best bet would be to use standardised popular frameworks and languages.
Imagine that instead of a custom database connectivity layer, I have opted for Hibernate, a Java framework for doing object-relational mapping in the database. You can pick almost any experienced Java developer, and they will have some knowledge of Hibernate and its workings. Then, I am no longer irreplaceable but just one of the many. In Java’s case, industry popularity is an advantage because more and more people have worked with the language and its tech stack. Of course, you can build completely custom solutions with Java as well, so it’s not enough to just opt for the language. Yet, should you choose to use common tools, you can do it.
You Like Beginner-Friendly Languages
I know this is not a technical reason, but trust me, it is just as important. From my time working in a bespoke software development company, I can tell you that the ability to onboard new people and introduce them to your project is crucial if you want to succeed. This is just part of real life: we developers also get bored, sick, annoyed and inspired. So, working in a flexible team becomes a crucial part of dealing with reality. For instance, onboarding new developers is a very often underestimated topic. Even if we are talking about experienced developers, dealing with Java as a newbie is a much more pleasant and forgiving experience than dealing with a language like C++. Just ask any developer that had to migrate from C++ to Java. I can bet you that none of them would say that Java is harder.
In reality, Java is easy to learn but hard to master. This means that you don’t need to become a Java Expert for you to use it productively. So, the initial learning curve is much less steep compared to other languages. From my perspective, this is a compelling argument because good people are hard to find, and when you find them, you would like to have as few entry barriers as possible to the project.
Java is far from being the cool kid on the block. There are many newer, more hip languages that are hyped up. But in software development, not everything new is actually good. In fact, the biggest test for any software, including languages, is time itself. In that regard, few languages can compare to Java and its 25- year long monumental history and maturity. In software terms, this is centuries! And even though it is not as flashy as the newer languages, Java is that reliable, stable choice that is always there for you when you need to get the job done.
Getting the job done is what ultimately counts, and there is nothing wrong with that!
So go ahead and try it out! If you have any questions or issues, you can always contact us, and we will gladly help out!