Web Java Architect
Last active: 3 days ago
It’s hard to come up with a title that matches me perfectly. You could call me an architect, a code designer, a code quality assurance specialist, an automated testing expert, a developer productivity booster, a consultant, or a coach. There are usually no open positions with a title that matches my skills and areas of expertise. Calling me a Java/PHP developer, a Spring/Symfony developer, a RESTful services developer, or any other language/framework/technology developer doesn’t make sense, because what I do goes beyond languages, frameworks, and technologies. They all come and go, but the fundamental principles change much slower. Hence I rarely if ever can respond to a particular job opening, even though I have preferences regarding some languages, frameworks, and technologies.
But it doesn’t really matter what the title is; what’s important is what I do. And I do a lot of things. You could call me a jack of all of trades, master of *some*. I could fill a page or two listing languages, frameworks, and technologies I have had experience with. But let’s focus on a subset of my skills that are usually hard to find in most teams and hence are the best use of me.
First of all, I’m an expert in automated testing. TDD/UTDD/ATDD, BDD, Specification by Example, functional testing, acceptance testing — whatever is the buzzword of the week. The goal of automated testing is to gain confidence in code and reduce the amount of manual testing. When implemented *properly*, automated tests greatly reduce defect rate, boost developer confidence in the codebase, and that allows fearless refactorings and other code improvements. When implemented *improperly*, it’s a waste of time and resources with no ROI. Unfortunately, I have yet to meet a team doing it properly or even going beyond just writing unit tests. Hence it’s a huge need for me to fill.
Second, I specialize in architecture and code design. That includes OO/SOLID architecture of components and interactions between components, e.g. frontend/backend. Again, this is the niche I have to fill because it’s so rare to find developers that have really grasped this side of development. Most developers think that OOP is just about classes and objects, while those are only the beginnings. There is much more to architecture and code design. When done properly, code is easier to maintain and extend with new features.
Third, I do ubiquitous automation. Automation starts with tests, but it doesn’t end there. Continuous integration and delivery are among things that can and should be automated. Unfortunately, again, this side is rarely done or done properly.
These are three aspects that, when done properly, reduce time to market and drive costs down.
Besides, Agile is so hot lately. And I really like all this Agile movement. The only problem is that Agile was never meant to be implemented without automation of tests and other parts of development and delivery. But what do most so-called Agile teams do today? Usually the only thing they take from Agile is frequent releases, while ignoring all the automation aspects. Hence Agile became a synonym of sloppy software development with frequent releases full of bugs that end-users have to catch and complain about to get them fixed. Sure, but how can you release weekly or biweekly without automated tests and delivery and maintain a high quality of your product? Right! By hiring twice as many testers as you have developers and then the same number of operations people. And still, even with that many people, the whole process remains broken because if your product is of any significant size and complexity, no number of testers can test it fully each week without getting tired of this brainless monotony and hence introducing the chance of human error.
So, these are three skillsets that I find lacking in most teams and that’s why I decided to focus on them. The irony is that these tasks are the most mentally stimulating for me. Even though I usually implement end-user features as well, they become pretty boring for me as soon as I’ve implemented architecture and automated all things that could be automated. That’s why I don’t actually compete with developers, testers, and operations people or replace them. On the contrary, we naturally complement each other. I automate things and train them, and after that your team keeps working with these new approaches even if I’m not actively involved anymore.
Also, what all this leads to is that there’s not a whole lot of work for me. As soon as I introduce all these approaches to a project and train its team to apply them properly, I end up in the maintenance/supporting mode. I still have to correct the course from time to time and help teams tackle newer problems and answer their questions that usually come up after they get used to basics and start hitting advanced concepts. But that only requires up to 10-20 hours of my time per week.