Future of Software Development 


There are so many angles to this topic – and this is my third attempt in three days to organize my thoughts around it . The trouble is not that I don’t have enough ideas – it is that most ideas seem to contradict each other when I read them again .  Let’s see if the third time truly is the charm 🙂


1. Everyone will NOT  be a (meaningful) programmer in future 

I know that is not a popular position to take today – but that is where my mind is at now . We will need to water down the definition of coding significantly to make “everyone is a coder” be a true statement . If I can change the tires and oil of a car  , and program the infotainment system – should I be called an automotive engineer ? That is “roughly” how “everyone will be a coder” sounds to me now . 

Don’t get me wrong – I do think that understanding how code works is important for everyone in future . That doesn’t translate to everyone coding , at least in traditional sense . Very complex applications exist today in MS Excel – created by business analysts who are not traditional programmers . If we change the definition of coding to include that kind of development – I can buy into “everyone will be a coder”. The closer statement – though less sexy – would be “everyone will be a designer or modeler” !

2.   More code will be destructed than created 

World around us is changing extremely fast and that means we need lots of newer kind of applications . But the pace of change is such that no application can satisfy a customer for any length of time . Building better components and better orchestration mechanisms are the only way to deal with it . Neither concept is new – but the execution will kick into a higher gear . API designs will need a lot more flexibility than we are used to 

3. Performance will trump simplicity 

By simplicity – I mean what “humans” think of as “simple”, not machines . Code for tomorrow will be used more for machine to machine communication than for machine to human – by orders of magnitude . Creation of code itself might not need a lot of human help for that matter . And while maintainability and human readability are important today , it might get trumped by the need for extreme performance tomorrow  . For example – if both ends of an interface are machines , why would they need to communicate in text and pay for the overhead of things like XML/JSON tags that need to be converted to binary and back again to text ? 

4. You won’t need as much code in future 

A lot of code is written today because a human does all thinking and tells computers what to do in very prescriptive ways with conditions and loops and all that. When computers get to “general AI” – they will learn to think and adapt like humans – and won’t need step by step instructions to do what they do today . Less code will do a lot more than a lot of code does for us today . We may be decades away at most – we are not centuries away from that stage . Software will eat the world now , AI will eat software tomorrow 🙂

5. Software offshoring/outsourcing  will not be for development or maintenance – it will be for training 

It’s already possible for machines to learn from vast amounts of .  Some time in far future , machines will self train too . Till then – and that’s at least a decade or more – humans will need to train machines on data . And that will need to make use of local knowledge , labor arbitrage etc and hence will be an ideal candidate for offshoring and outsourcing ! 

6. Community of developers will be the only thing that matters  

Well – that is already true, isn’t it . I have forgotten the last time I have checked official documentation or real books to learn anything . I google or search on stack overflow to get most of what I need . I am not a full time developer – but looking at the communities that help me , I am sure full time developers do what I do , a lot more than I do 🙂 . A better way of mining this treasure trove of information is the need of the hour to get significantly more engineering productivity. 

7. More and more use of biological sensors 

Human bodies and brains are the ultimate computers and we are some ways away from mimicking human thought . In near future I expect simple sensors for all kinds of chemical and biological stuff ( how cool would smell be as an input , like touch is today ) that provide input to and also dictate how code should work . Text is fast becoming the most boring part of data any way 🙂

8. We haven’t even scratched the surface of parallelism 

What we call as massively parallel today in all probability will be amusing and funny to tomorrow’s programmers . The over heads of making parallelization work today is pretty high – and that will go away soon. A part of the problem is also that majority of developers don’t think of parallelism when they design code . I guess the near term solution will be for more primitives in popular programming languages (like for data access) to have built in parallelism . Note to self : get better at functional programming in 2017

9. Ethics and Privacy become core to all development 

A few things are happening together now

a) data is exploding and we are leaving our digital finger prints everywhere 

b) applications won’t stay around long enough to have ethics and privacy as a “future release” issue to be fixed

c) more and more software affects humans , but is controlled by machines with little human input 

d) access to information is (and will be ) universal – which means bad guys and good guys can both use it for what they want 

e) legal systems won’t ever catch-up with the pace of tech innovation 

And that means – ethics , privacy etc need to be core principles of tomorrow’s software . It cannot be “in pockets” as it happens today. And the education on this topic needs to be pushed down to even the earliest levels of schools. 

9 is really not a conventional number of bullets for a list – but given there won’t be anything conventional about the future of software development , I think now would be a good time for me to stop this list . Feel free to add , edit and challenge in the comments – I look forward to it .

Happy 2017 everyone!

Advertisements

Future of Project Management 


Next to programming , Project management is the role that gave me the most satisfaction in my career. So after Rethinking IOT and AI for future , and Future Of Technology Consulting – I spent some time organizing my thoughts on where project management is today and where it is headed .

This picture is an old one – where I was leading a consulting team as the PM at my client, and we were codeveloping a product with SAP. There was no way to distinguish who worked for which company in this team. It was a highly stressful time – but also the most fun and productive time of my life 

team

In general I think project management as a profession has lost its stature and for all the wrong reasons . I also think that it will regain its lost glory, and then some, starting almost immediately !

Utterly stupid is how I would describe the move to commoditize project management over the last few years . The PC version would be penny smart, pound foolish !

Several factors played a part – and I think the wrong use of PMP certification is one big reason.  I am personally not a big fan of certifications in general. I (and others) have successfully managed hundreds of millions of dollars worth of projects successfully without a PMP a . When I was a full time PM (also when i was a developer) , none of my clients ever asked me if I was certified . In my view PMP and tech certifications are a definite plus for the job – but should not be a mandatory requirement .

PMP gives a false sense of security and accelerates the path to “if everyone has a PMP , they must be roughly equal in skills – so let’s choose the cheapest one for the job” . When I convinced my old boss many years ago that I don’t need a PMP – my defense was that we commonly knew at least ten people in their early twenties – who have never even been a team lead – pass PMP exam with flying colors, and neither one of us were confident enough to let them run a team !

To be perfectly clear : PMP itself is not to blame . I have studied the “body of knowledge”  closely and it’s pretty good . I encourage all PMs and aspiring PMs to study it . I am just strongly opposed to treating it as a way to falsely equate everyone who has it to be of same project management ability .

Becoming a PM is best done in an apprenticeship model . Project plan , documentation , chasing down tasks etc are good things, and you can learn it from books – but successful projects are mostly about making people successful  , not tasks successfully completed ! There is a big difference and a full appreciation of that only comes from watching and learning from folks who do it consistently well . However smart you are – you can’t learn it by studying a book or taking a multiple choice exam .

Sadly – and probably due to the mandate to commoditize all parts of IT projects  , task management – which was a means to an end in the past – seems to have become all of project management today !

Consistency and repeatability and scalability are all good for efficiency . So dumbing down of some project management aspects have that aspect going for it . But what is missed out today is effectiveness – efficiency without effectiveness leads to failed projects . And effectiveness is all about people !

People have only so much intellectual and emotional capacity and not all of it is spent on work . Example – the best programmer in my team in Bangalore spent 4 hours every day on commute . Even then he was twice as good as the next programmer . I let him work Mondays and Fridays from home and he became three times as good at what he did . I knew that issue because I went to Bangalore and lived there for a month to see the team and work with them and become one of them . I couldn’t get the same result by asking him to document more or sit in more status calls . I also remember a situation where we had an unreasonable client who made constant demands of our time to meet time lines that were not realistic . After two weekends back to back at work – my team had no energy left . My solution was to stop working weekends and instead we all went out bowling for a whole day on Monday and followed by a potluck on Tuesday . Even the client could not believe we hit the deadline with room to spare !

Motivating and getting the best out of your team is one aspect – equally important is making your client successful . By that I don’t mean the client company – I mean the human beings from the client team who work with you and sponsor the project . This means you need to get to know them , what makes them tick and what success means to them. No certification teaches you empathy !

To make clients successful – you need to know their business and their industry cold , or know others whom you can tap into for that knowledge . You also need the ability to make short term vs long term trade offs .  I once had a finance director of a company as my client – and she was stressed out that there wasn’t enough time left to build 150 reports that were scoped for the project . I worked with her and told her similar projects in past only needed 50 or so reports for similar functionality and the two of us spent a day looking through the specs and quickly brought it down to 40 reports . My employer had a short term revenue loss because of reduction in scope – but this lady was publicly recognized by the CFO of the company for getting the project done on time and under budget . And she got a larger portfolio and I got a lot more business from her , which in turn helped my own career progression .

Project managers need the respect of their team to succeed. PMs who manage a project where they don’t know any aspect of what is being done generally find it harder to get the team’s respect. It can be done – but it is an uphill task and you need superior skills and patience. This is another reason why commoditizing PM skills is a terrible idea – people who grew into PM after being developers, consultants, team leads etc can empathize and add quality to their team’s work much better than someone who can only manage tasks.

Why do I think this will change quickly, and for the better ? Its because the complexity of projects and client expectations have both risen to a level where commodity skills and elementary automation cannot keep up. Fear of failure is very high today thanks to a lot of failed projects in past – and at the speed at which technology is progressing, there are very few “apples to apples” references to say “this will work”. Good solid project management is the need of the day to help realize the value of technology innovation happening around us. I think employers and clients are both ready – or very close to being ready – in treating PM again as a critical role in making projects successful .

Those of you who manage development teams as PMs might enjoy this post this post I wrote in 2010 🙂

PS : Might as well add a shameless plug – If you have experience as a PM in big data, analytics, IOT etc – I am hiring in North America. Ping me !

 

Long term future of IT in India


When I went to college in India, all I wanted to do was take the first job that will send me to US. And a dozen years later, I am starting to think of where I will retire, where I will work the latter parts of my career and so on. This makes me ponder on the long term future of IT in India. I might as well think aloud here, with the hope that I get some insights from the readers. As always, these are just my personal opinions – not that of my employer.

India’s IT scene is dominated by about 20 to 50 companies or so, and the rest is fragmented by smaller shops. Amongst the big ones – and I mean big in terms of head count – the biggest ones are in services. A large number of people make their living doing production support and BPO type work. There is also some design and development type projects in the mix. Outside the services work, there is some product development too. Most big product companies in the world have some presence in India, and they pay better than the services companies to attract top talent. So in short, there is plenty of companies where an IT job can be found.

One thing I do like about the workforce in India is that it is fairly inclusive. Although I don’t have stats officially – I have seen several more women in offices of IT companies in India, including in leadership roles compared to other countries I have visited. 12 years ago, only certain states had fair representation in IT jobs, but by now – people from all parts of India are getting better opportunities.

I think IT pays better on an average than most other jobs in India, and as a result a lot of people have better quality of life. Most youngsters are now able to buy houses and cars early in their life, which is also pretty good. There is a lot of good restaurants and bars and gyms and movie theaters and all that, so life outside work is enjoyable too.

That is the bright side, but I have my worries on the flip side.

How about the supply side of the picture? No issues here either at first sight with plenty of college grads coming out of the education system every year. From the time I joined the workforce – and possibly a few years earlier, IT jobs attracted away a lot of talent from the top colleges, especially engineering colleges. IT companies at that time ignored non-engineering students. They were not exactly looking for comp science grads – any engineering degree was fine. I am a mechanical engineering major, and it never mattered to my first IT employer . I never could put a finger on why engineers were considered at the expense of every one else. I would just as well gladly hire a math major or a physics major or a liberal arts major with the right attitude – since I have to train the engineering grad also to work in IT. Being an engineering grad myself – I am not convinced that education gave me something extra as a programmer, that I would not have gained if I took say Chemistry as my major. I hope this has changed, or is changing.

After a dozen years since I left India, I still have not seen the engineering colleges tune their education to the needs of the IT market. Text books are still the same as what I learned and what my dad learned before me, with very little updates. And people still join mechanical engineering degrees with the sole purpose of getting a job in IT – with no interest in becoming a mechanical engineer.

There are also plenty of IT educational institutions that train people in programming. I try to check out their course work and teaching methods when I can, and honestly have not been very impressed. They teach many different languages in one course – like C, C++,Java, ORACLE PL/SQL, MS SQL, HTML, javascript etc, but with hardly any focus on good basic software engineering. I am even more dismayed when I see a lot of the teachers have never worked in real projects. It gives me the same awkward reaction I had to the guy who taught me power plant engineering who himself had never set foot in a power plant. As a result, employers give a very thorough training after people are hired , and before they can be put in a project. In my specialization – SAP – in which India has a lot of talent, I doubt how many colleges teach SAP. I know plenty of people who have been cheated by expensive “mom and pop” SAP coaching centers.
Someone recently told me that there are classes at these places for HANA too.

The good thing despite the above is that thanks to internet, working in global teams, and the ability to go abroad for projects – Indian IT workforce has access to almost everything that others have, and hence could keep up well with the global pack.

There are some societal side effects – since the best and brightest grads do not seem to want to go to the government services, military,banking and so on which were the coveted jobs for the previous generations. I often wonder if this will have an impact on society over the next several years.

Infrastructure has been a long term problem. A visit to Bangalore will prove the point. It is near impossible to drive in Bangalore at peak hours unless you have lived there for a while. Pollution is also pretty high. Yet, I know several companies who send work to India insist that it be done out of Bangalore. There are physical limitations to expanding the towns where IT is concentrated now – not just Bangalore. Thanks to political structure of the country, the private sector is fairly limited in what it can do to make the situation better. Thankfully trade unions have not yet taken over IT in India and destroyed it, like they have for manufacturing sector etc.

A big advantage India has held over other emerging IT power nations has been the proficiency in English. Companies in the west readily pay a premium for it. But this is not a long term advantage – I have many friends in Vietnam, China and South America who speak very good English, and it is just a matter of one more generation when this becomes less of a differentiation.

Cheap skilled labor was a big reason why western countries outsourced work to India. Well, it is not exactly cheap any more. Salaries have increased manifold. My first job paid me INR 150,000 a year or so. And that is after I did my engineering and MBA. Today I know my nieces and nephews make more than 3X or 4Xthat in similar jobs when they enter the work force. The rates charged by Indian companies to their clients abroad have not increased 3X or 4X – if anything, competition has forced them to keep it down. They still thrive because of volume and exchange rates and so on. This does not mean other countries will readily over take India in near future – that is like saying 25 years from now, Daddy and I will be the same age. India has tremendous experience and skills now and will carry that edge for foreseeable future.

I am also worried seriously about the credit card debt that many of the younger folks carry that I know India. Just based on personal observation – peer pressure has driven many a young IT employee to spend beyond their means and incur bigger loans than they reasonably should take. I have seen this movie before in US from the front seat, and I would hate to see a replay in India. On second thoughts, I am not very sure if this is an IT only issue or whether others are affected too. I guess every one needs to make their own mistakes and learn, and that learning from someone else s mistake is harder.

Bangalore – and other IT hubs – have one thing missing that stops them from being the next silicon valley. And that is a good VC system. It might be a chicken and egg problem since a large part of the IT business is still on services side, and not on product side. I am yet to have made a trip to India where I have not had a conversation with a bright eyed young guy (or gal) who would tell me that he/she has this amazing idea, but can’t move forward without capital. The De-facto capital raising mechanism is to run to a local bank and convince them to give a line of credit. It is an ineffective process to put it charitably. Off late, I know some VC friends in Silicon Valley who lend a hand to budding entrepreneurs in India, but it is a drop in the ocean compared to how things move in the US. It is certainly not a lack of liquidity in India that investors are not supporting these companies – I think it is one of a cultural difference. Since a lot of people from India who worked in US have now moved back to India, I do see some change in this behavior. I am looking forward to see VCs and Angel investors doing more in India.

One last thought before I go back and plant the last few plants in my front yard ( this is what was accomplished before I started typing this post https://www.facebook.com/media/set/?set=a.3381192563120.151791.1068608267&type=1&l=48b8a0feb8 ). If cloud is truly the future – and if most companies move heavily to SaaS etc, what will happen to the majority of IT people in India, who make a living doing services projects?

Let me know your thoughts