Friday, 23 December 2016

Polyglot programming and micro-service architecture

Recently I was trying to understand how a micro-services based system was designed by looking at the source code. The code was developed more or less recently in a company for an application that provided web access for customers.
It was a service in Kotlin calling a service in Scala, which in turn was calling a service in Groovy, which was calling a service in Java…. At that point I lost the will to go any further.
On each step one needed to figure out which other service is called (this is not easy if you have a lot of different services and very limited documentation) and then to try to switch to a different language and a different frameworks with different conventions (e.g. where a controller to be found etc.).


Unfortunately I have a very strong suspicion that this madness is there to stay. The problem is that micro-service architecture gives developers a chance to write software from scratch (something many people, who have never done it before, would love to do and who usually do it awfully due to lack of previous experience) and it gives an excuse to learn a new programming language while been paid by the employer to do it.

Saturday, 17 December 2016

Pair Programming – what’s in it for me?

There are many advocates of Pair Programming explaining why they think this way of organising software developers’ work is good for the company. But I have not seen much explanation why it might be good for a developer. We, developers, usually enjoy what we do and care enough for the success of the projects we work on, but I don’t think many of us would get up in the morning and commute to our place of work if there was something for us as well – we would like to be paid well and we like to have a career. This means that our choices are not defined by what good for the company but also what is good for us personally.

Pair Programming was around for quite some time (XP is here since 2000), but I have a feeling that recently I am hearing more about this then I heard before.
Interestingly I also have an impression that when hear about 100% pairing, it would normally be either involve an IT consultancy practising it or people who in the past used to work for one of IT consultancies.

I suspect there is a reason for IT consultancies to practise pair programming – you can charge for two people doing the same work (explaining that “it improves the quality”) and it would allow them to send to a customer an inexperienced developers paired with one that have experience while charging if they both were experienced.
I can also understand why managers might like it – it allows them to see developers as an exchangeable “resource”, eliminating a “bus factor” while at the same time ensuring that the developers police each other in terms of actually “doing the job” and having even to inform each other when they go for a pee.

What I don’t understand is why some developers support this?
Do people really want to be sitting next to someone else at the same desk day in and day out instead of having their own place in the office, which they can personalise the way they like (pictures of kittens, Star Wars poster or whatever else their personal kink would be). Don’t they want a place where they don’t have to suffer because someone else has poor hygiene habits?
Do they want to be able to use any IDE they fancy and setup their machine to whatever weird configuration they favour, or do they prefer this decided by a “committee” and they been forced to follow rules?
Do they like to be “one of the pair” instead of “that guy who did that cool thing”? Are they feeling too insecure in their professional abilities that they are afraid to work on their own?
How do they see themselves in 10 years time? Still be a faceless member of a “Team” members of which are not even trusted to work on their own at their own desks?

Talking about personal interest as far as a developer concern I can see only disadvantages:
-       It is more difficult to demonstrate you own abilities and worth to the management if they never see just your name attached to anything unless it is with other person, hence less chances of career advancement based on your abilities as a programmer.
-       The management sees you as replaceable (as far as they concern there are always other people available to do your job, everybody you are pairing with are good enough candidates).
-       You have less freedom over what you do and how you do it – you have to explain every step to your pair and you have to coordinate with others all your activities
-       You have less comfort at your workplace, as you have to share space in front of the screen with someone else.