Wednesday, January 8, 2014

Seven Mistakes by a Developer....

Developer Thinks i am always Right !!!


In a IT Industry and more specifically in a Development Center, we do have different varieties of job responsibilities, Like Development, Testing, Project Management, Programme Management etc.Job responsibility which gets highest attention is Development and set of people who do it are called as "Software Developers". This is since these are the set of people who actually create the software from scratch or enhance an existing software to make it usable to the real world. This is considered to be one of the most toughest part of software development and hence given highest weight-age.
"But taking the importance given in a wrong way is not the Right Attitude".

Lets discuss on some of the most common mistakes a Developer does.

1.Failed to understand the requirement

Most of the times developers do go through the requirement but actually do not get it right in the first place but they do pretend to have to got it right and start the development, which leads to real disasters at the end of the project when the releases are being done to QA and things actually do not work they are expected to and quite a few times leading to project delays, and release plan has to be re-worked which eventually results in a very high cost to company and many a times credibility of the organisation.
My Advice,
Get the Requirement Right to Develop the Right Product !!!

2.Didn't follow the coding guidelines

Coding Guidelines, the foundation of a True Developer !!!
If i have to just develop the product without guidelines, then i would hire a "Coder" who does not takes care of ifs and buts in the code and just makes it run somehow, without any guarantee for handling errors and exceptions. But this is is not expected from Developer, he is the one who takes care of all the scenarios and makes the product really Solid to withstand most of the Exceptions and Errors.Mishandling of this leads to customer issues and unnecessary cost for the company to resolve this issues, which are finally nothing but basic guidelines, to name a few of them, Memory Leak, Application Crash, Buffer Overflow, Stack corruption etc. My Advice.
Coding Guidelines should be in Developers Blood, to make sure your Product does what it Should !!!

3.Zero unit testing

Most of the Developers i have seen in my career, are really reluctant to do the testing, they do always consider this is Tester's Job. Job of a Tester is to do a Functional Testing and not Unit Testing. A Developer should be doing white box Testing of the code, like testing the true and false condition both by providing required parameters, checking boundary conditions, Testing the basic functionality of the functions, overall a basic feature testing. Not doing this gives an opportunity to the Testers to identify the problems and sometimes it bypasses even QA and comes a customer issue, since there are certain conditions which goes untouched. My Advice
Doing Unit Testing is as important as Coding !!!

4.Ignored the Code Reviews 

Code Reviews are the ones, which does brings in multiple thoughts, variety of thoughts and Criticism.Code Reviews have a huge advantage, to list a few of them,
  • It makes you realize you are not correct always.
  • Things could be done in a better way than what you have done.
  • You eventually do a knowledge transfer to other team members.
  • There is no more a Single Point of Failure.
Code Reviews should be taken up very seriously and the comments should always be welcomed and make sure that those are implemented and not just documented in the code review document.In my career, we were able to reduce the code to a great extent by bringing in thoughts and good programming practice.
Releasing a product without code review, is like Printing a document without a Preview !!!

5.Poor or in-scalable design

Good Design is considered as the Heart of the Software.
Design is the which actually makes sure how robust and scalable the product is, how much better it can perform in a stressed scenario. normally Developers to impress the product managers do develop something quickly which does not have good design and many a times they continue this same base further to the real product. Many Developers do think, "we will fix issues when it comes", "how much can we think", we also have limitations". I do have real experience in my life, due to poor design, the same component was re-written thrice the main reason being performance, and i was the third one, not overrating my self, but after i designed and developed it, it was actually done and satisfied all customer requirements. This Poor design has caused the organisation 2 years of development with multiple developers, Testers, Managers, Tech support working on this, can you imagine amount of money the company would have lost, and to be very frank nothing comes free in this world, finally it does impacts performance reviews of the BU and quite a few times your own salary and bonuses. 
Make Good Design, to make sure it does not gets Re-Assigned !!!


6.Poor Estimation

This is one of the biggest disasters which i have always seen in my career, Whenever a developer is being asked for an estimation, he would just pop-up "It should be fine in 2 days, or Max 3 days". Quite a few times this 2 or 3 days has ended up in Weeks, and sometimes even more, with finally Manager doing a regular follow up and updating to other StakeHolders to cover up the team by explaining this is a real Technical Issue, we never anticipated this, frankly speaking he is doing his job. But how should developer given an estimation, first of all do not give an estimation for something which you do not know what it is, take your time understand the requirement, clarify your doubts, if you are put under pressure to give estimation just raise a Flag, i am cannot give an exact estimation based on this parameters. It is always better not to give estimation rather than give a Wrong estimation.Apart from think about other aspects apart from coding, like Unit Testing, Code Review, Documentation. Always keep some buffer, since issues might crop-up leading to delays.
Good Estimation is a Summation of all the activities you plan to do !!!

7.Improper communication

This is a very normal behavior of quite a few Developers that i have seen and sometimes there is no communication. Developers say, "I felt it is right to implement in this way". Developers are given powers to take the decisions to make the product better and come up with the new ideas. but any of these things should be communicated to appropriate StakeHolders, before implementing. since what developer feels is correct might not be correct from customers perspective which is best known to a Product Manager.
Apart from this communication with QA should be very clear and explain the feature properly, since they are the ones who actually give the Quality Certificate to the product, any discrepancy could lead to incorrect product in the market. Since not each and everything can be documented, there is certain amount of information which can be availed only from Developer.
Do Give a Good Thought, but just don't give it a Shot !!!

 Overall i want to say to all the Developers out there
Agreed you are Great, 
You Rock, 
But For what should be your Creed,
Don't Give us a Shock !!!

Thursday, January 2, 2014

Technology The Future Trends.....

The History 

Trends in Technology have always been changing depending on the business needs and end-user ease of usage. If we observe Closely Early 80s was the rise of Personal Computing where we had strong foundation companies like Apple and Microsoft being the first movers who had catch the peoples mind. 90s was the peak of Personal Computing and the beginning of the Web Computing. In Mid 90s there were so many companies got established in the Web Space. Early 2000s was still the peak of Personal computing with Web computing taking the lead. Mid 2000s to till date has been rise of Cloud computing and smartphone & Tablet era.The Task which we used to do via PC now its possible to do via a SmartPhone or a Tablet. So the necessity of having PC has been reduced over the period of time.
What I want to convey is, Technology keeps evolving and keeps changing over period of time, but this current decade which has began since 2011 would be fastest one, in which technology will take different forms very quickly.

What Next ???

With the growth of the business demands day by day, more smart devices are required to do the job in a smarter way. Today a normal person goes to office, opens up the desktop and opens MailBox, Office Applications, and some specific corporate applications which helps him to accomplish his task.
This is good, but this has its own disadvantage of having PC being stationed in office, need people who actually knows to use those tools and overall its interactive to a limit i.e interaction is limited to mouse clicks.
Future would be a person working from anywhere and in a more interactive way, where he should be concentrating on what he needs and not on how he it could be done. In coming days, Gestures, Natural language processing would reach a different level where people would work in more and more interactive way. Overall i want to convey that devices we would present to you exactly what information you need rather than you actually searching for them in PC or Web.
I would call this era, as Era of Smart Computing, Where more and more smart devices will interact with people doing most of the job people do today and people concentrating more and more only on what needs to be done. This would give a great boom to businesses and personal computing.
Lets take some examples of how future will be reshaped with these technologies
Smart Glass, This is going to be one of the biggest thing in near future, Smart glass would be intelligent glass which could load 3D Maps for you, project your phones data onto it, Load your profile from web and do almost everything which you do today with PC and more than that since it would be more interactive.
To give an example of its use case, lets say four of your team members are travelling in a car, Every car in future will have this smart glass integrated in it, on which you can actually project your presentation or anything else, so no need to open a PC or Tablet, you can project this data from your phone or directly load the data from the cloud. In future you would find it almost everywhere, like in Cars,Shopping mall, Home, Office, Bus, etc. Like today people do ask for Wi-Fi station when they enter any of this places tomorrow they will be asking for a Smart Glass.
Next Big thing would be, Smart Sport products, Today we do play BasketBall, Cricket etc, and then to analyze how we played the game we do take opinion of our colleagues or seniors etc, or if you have a system which captures all this, then you go to control room and check in the PC how you played it.
Future wont be like this, You will get Smart products like Smart Basketball, which would be fully integrated with technology, you just keep playing your game and the data would be transferred to your smartphone, which you can analyze later. So People would be asking in future, whether its a normal BasketBall or Smart BasketBall. And dont get surprised this is already avaialble in market, Apple has already developed this.
http://store.apple.com/us/product/HD748LL/A/infomotion-94fifty-bluetooth-basketball

So this is what i want to say, we will be surrounded by more & more smart and interconnected devices.
Overall if create a list of existing and upcoming devices it will be
  1. Smart Phone
  2. Smart TV
  3. Smart Watch
  4. Smart Meters
  5. Smart Grid
  6. Smart Fridge
  7. Smart BasketBall
  8. Smart Cities
  9. Smart Car
  10. Smart Glass
and the list goes on.....

Another field which will grow parallelly is the Big Data Analytics. Since so much of data will be generated by this devices, this data needs to be analyzed and generated reports which will help in future decision making.
Please refer http://shailesh91082.blogspot.in/2013/12/big-data.html for details.


Opportunity

These change in Technology opens up new doors, overall there will be 
  1. Companies which will develop devices.
  2. Companies which will develop embedded softwares & OS.
  3. Companies doing Big Data Analytics
  4. Companies providing services & solutions based on this technologies.


Glimpse of what i want to explain



Overall I See, its a great opportunity for Embedded Developers And Developers & Analyzers of Big Data.



Sunday, December 29, 2013

Windows 2008 R2 Core


I have been working on this OS for quite some time now.This has been one of the most strange windows OS that i have seen. No UI available complete command line, looks like working on a UNIX box.
Has been challenging, but i do like challenges.I started the first thing on this was porting our existing product on this, product just went for failure all of a sudden, installation failed, looked as if gonna be quite difficult to get through this situation.started debugging the same then found that product installer failing for some of the WMI Calls not getting through.Then just started looking in to it with some more debug statements, then found that WMI calls not getting through.so created a sample to identify the issue, then gotta know that WMI calls do not get through on through an msi on windows 2008 R2 Core, due to some design changes.
Then created the whole package again, so that even if it fails for these calls it should go through.
Finally re-created the package and got it delievered, customers were pretty happy after the release.
Felt quite good.
Recently i observed some more strange things regarding this OS normally when we change the value of the PATH environment variable it reflects when we open the new command prompt.
But in this case we need kill the task manager & open it again and then open a new command prompt then the updated path gets reflected.

which way is technology heading to...


Today's modern day technology has really changed the way people feel about technology, use the technology for daily purposes and business purposes.Traditional Technology used to locked up inside a PC and people used to open the Box to do something fruitful.This has continued for almost 2 decades where companies like Microsoft,Apple,HP,DELL etc. have really ruled the market and hearts of the people with MS being the sure Winner in this race.Those were the golden days for all of these companies who are today considered as Traditional IT Solution providers.Things started changing when Google started attracting developers initially and end-users in latter stage with its modern day understanding, implementation & Reach of Technology.In today's changing market Trends Google is surely the winner. Traditional IT 
providers still do co-exist in IT Ecosystem, but they do just co-exist !!!

If you go back to the olden days, its clear that Traditional providers have really evolved IT and brought it to people's plate, but what they have kept hidden from the people is what actually runs behind the scenes.They were able to win a lot of hearts and businesses by demonstrating it as a complex thing and you need education to actually use it.Then people started minting money on IT Educations, certifications. I Still remember during my school days MS Certification used to be mandate for Govt. officers. PC was demonstrated as a complex thing which needs education,smartness and overall like, if you want to use it, learn it.As people didn't had a choice during that era, they used to put people to actually operate the PC and get things done.Even if it could have been done with just few mouse clicks. Traditional IT 

Folks have really scared the people and ruled the minds of the people almost like a pope explaining "the sins that you can get into if you do not follow this."

Google i would say has really come up with an open thought and an open mindset about technology. Technology is easy and simple to use, use it for your daily purpose and get your job done.Companies like MS, HP, DELL etc. really knew the market trend and thought that they are the Market leaders and market moves on their fingers and this over-confidence has led to a sad decline of this folks.


MS has been too late to enter into the Cloud Space, they were late almost by a decade. They had everything with them, if you trackback MS was one of first movers in embedded platforms and they remain sole provider for a very long time. you take GPS systems, ATMs,Handheld devices or even touch based O2 phones. MS has also innovated tablet in early 2000s which was XP based,they should have capitalized on that and moved it ahead but what really stopped could be the amount of revenues which is being generated from PC Business is very high and dependencies on OEM is also high.if MS wants to push Tablet in the market then it needs OEMs and OEMs might not be ready to promote it since they already have huge investments in PC world and even MS never wanted to get into Hardware world and remain always as software giant.MS dropped this idea. Even the idea for cloud and virtualization came little too late from MS as they gave it a very low priority since it needs continuous internet connection,security,reliability etc lot of factors and overall development cost.So they were happy to stick with old OS,Office business which they are very good at.


During the same period a giant was evolving with his beautiful search engine and modern thought about technology, which started stealing the show and growing silently in web space with its products like GMAIL, Google search engine, Google Ads and lot more web based products which really started helping end-users and Businesses in a easier manner and the most importantly it is independent of any OS since everything is Browser based.The show was completely moved towards Google after the release of 

Android as a common Mobile platform irrespective of hardware and open source too. And with just 5 years in the market from its release date it is surely the market leader with providing all the features and end-user would expect. Google has followed the Microsoft way in a sense by providing only the OS and rest left to the OEMs with a deviation of making it open source. 

In Past 2-3 years every end user has now become intelligent enough to use the Smartphone without any training required. I would say end-user has become so smart with this smart phones that they know what they are actually doing and why they are doing, today's end-user has now started questioning is the video quality good, can i share this on facebook, can i do a voice chat for free etc. This is a big change in the way end-user looks at the technology today. Today everyone without fear does a Google search and gets the answer no need to open a Big PC box or ask someone to do it for you,since you do not know how to use computer.I even do see an end-user talking cloud computing like "ya this is processing on cloud, net is little slow taking time". This was just unknown to end-user for a long time.with Google world has gone Web and end-user really smart to use it.


During the Same period another Giant which picked and ruled the world and it still rules is Apple. 

Apple with its Flagship product iPod, iPhone and then iPad really got end-user experience drastically changed.Though iPad which was criticized initially by Tech Giants later everybody followed it like Sheep.
With this overall war has started between two i.e Apply vs Google.

This is a really Pity that during that stage MS was a just a passive participant in this war and busy releasing OS like Windows 7,8,... MS Which still has the biggest PC Market in the world and above that largest enterprise market really failed to smell the heat which was there in the market and a lost a big share of it which could have been a cakewalk for him.


Now the question arises for the Developers and end-users who have been so loyal to MS for decades. MS has always lived up to its promises, but in its own way. This a big shift in the market from Traditional PC Computing to Cloud Computing where MS is trying its best to put its feet on. It has acquired Nokia to enter into Mobile space and trying really hard to find a place in this changing Market Trends. with now newer Platform Azure it is entering in to cloud based server computing which can handle any clients i.e iOS,Android and obviously windows.But is it too late to enter this market now for MS or it could really do this time again. MS has always dominated the market with its cool business tactics but is it finding difficult to compete with offerings from Google and Apple. For a MS Developers and Enterprise it is wait and watch situation before making any strategic decision to move to other providers.


Finally i would like to conclude 

"Google is Coming up, Microsoft is Coping up which way should i Look up ??".

Why Guidelines are important in Programming


Completing every task is important but how you complete it, is equally important !!!
Guidelines are one of the building blocks for any foundation. We do follow Guidelines almost everywhere in our life like Walking on the Street, Driving a Car, or having a Food. There is a certain amount of common guidelines are followed almost everywhere.

People can say they had lunch but was this the right way to have lunch ??
How would it be if people in cafeteria don't take the food in the plate and just barge in, which creates a big chaos and finally they end up spoiling the entire place.Then somebody from housekeeping is being called to clean the floor.Does this looks civilized way of eating had they been taking food in plate they would have avoided the chaos and also cleaning required from housekeeping.

Following Coding Guidelines should be the Developers first religion !!!
While doing programming there are certain Coding Guidelines which needs to be followed.This guidelines make sure that code is written in right way with all the possible error handling which makes it foolproof.Code can be written without this guidelines but will that work in all the scenarios that is positive and negative ??Many a times developer do this mistakes of not following the guidelines and just writing the code they feel is correct, this works fine in positive test cases but starts failing badly in negative scenarios.
Writing a code without guidelines does accomplishes the task in the first place but it spoils the entire product and then company has to invest time and money in cleaning it up.

My personal Experience.........
I have seen lot of scenarios in which serious issues did came for a silly thing that buffer was too small to handle the data. The reason being simple developer never thought of making this dynamic and allocated it to a static size which he thought it would never reach.This would be have been 10 mins job for developer when he written it, but now it has come as customer case due to which Tech.support,Project management,Programme Management, Architect,Developer,QA everybody is involved.Can you imagine the cost that company is bearing for a small mistake by a developer.This does not stops here now developer needs to reproduce the scenario which again takes time, then there is regular follow up with team at customer site and all the stake holders.Finally after identifying the issue developer fixes it and makes the release.But now QA has to re-validate not only that Defect but certify the product again that there are no impacts due to this change.
What has happened finally we have just introduced cost to company due to one silly mistake.
Is this acceptable ?? Shouldn't developer be following a basic guideline before he writes the code ??


How can we make it better ??
There are some basic Guidelines that any developer in any programming language should follow
  1. Think of all the scenarios before you write the code, consider both positive and negative
  2. While writing the code,read the API documentation carefully, check what all error codes API is returning   and see how to handle them
  3. Add proper exception and Error handling to the code
  4. Initialize the variable before you use them
  5. Release the memory after you use it, if you use manage code than be sure Garbage collector will free your objects
  6. They should not be any buffer overflows or stack overflows in your code.
  7. Code should be unicode compliant
  8. Neccessary arrangement for localization should already be done
  9. Check the data which is being processed is of static or dynamic size and take decision accordingly.
  10. Divide the code in smaller functions, which makes it more readable, reusable & maintainable.

Thinking Positive is Good but only positive is not Good !!! 




Big Data


When we hear the term Big Data first thing that comes to mind that a Data which is Big. But what is the definition of Big, do we consider a data which is in TeraBytes as Big Data or do we consider more than this as Big.Getting to this detail is really important.
Lets say i want to transfer a data of 100GB over email is it possible, the answer is no,The reason being Email Client cannot send data of size 100GB, it means it cannot process data of size 100GB. It means this data is Big enoughfor Email Client to handle.Lets say I want to transfer this same data using Wi-Fi or through file sharing then it would certainly be possible.It means this data is not Big for Wi-Fi File Transfer, since it can handle this. How is that the same data is Big for one but not for other
this is due to computational capabilities of each of this applications or services.So we would summarize
Big Data is a Data which is beyond Computational capabilities of certain utility or application or service.
Overall if we see, there are two types of data one which is being saved in conventional system like Databases which is in a structured format.Other is the one which is variety of data with different combinations like Text,Image,Video,Blog,Article,Surveys,Posts etc. which is scattered and which is not in a structured format. So Overall Data is either Structured or UnStrctured.As on Today out of 100% of data which is available Structured data is only 10% and Unstructured Data is 90%.Today's Business Analytics, predictions etc is being done on this Structured data. But to have accurate Analytics and predictions more effort needs to be put to read and process unstructured data.Processing Unstructured Data is the Biggest challenge, because of some important factors i.e its Variety & Volume.
So here we define 3 Attributes of Big Data
1. Variety
2. Velocity
3. Volume
A solid Example of Big Data is Facebook.Everyday Facebook generates 25TB of Data with a huge variety of Text,Audio,Video,Images etc. and at an undefined input velocity.So all 3 attributes of Big Data are covered under Facebook.Who is the source of this Big Data ?? Why and when this gets generated ??
Big Data is being generated by almost all the smart devices around us with rate of almost every second.
To List a few of the sources of the Big Data are as below PC's,SmartPhones,Tablets,Social Networking Sites,Smart Grids,Smart Meters,Mobile Apps,Industrial Automation Devices,Finance Applications,Retail Applications,Many more....

Is all this data which is being generated is really useful, what business needs can it justify ??
Lets discuss about some of the important sources.

SmartPhones
SmartPhones is biggest lifeline of all the people across the globe.Today Sales of SmartPhones has outperformed sales of PC. People do store all the personal information in Phone and also keep sharing this data with lot of friends and colleagues.Like some applications like "WatsApp" are the ubiquitous Apps which people do use for sharing the data.SmartPhones are being used for booking movie tickets, do a faceebook update, post tweets on twitter and a lot more thing.This is a lot of data, This is a lot of personal data, which shows the pattern of the person regarding his likes,dislikes etc.

SmartMeters
Gone are the olden days when people used to know their electricty usage at the end of the month and used to get shocks due to this bill.Now with smartmeters, people do get to know their usage almost every hour and tune their usage accordingly.Now if we collect all these data and analyze it, it would help us understand the usage required in the country and when they need to borrow the electricity or they could actually lend power to other nations. like canada selling power to US or US selling power to canada.

Social Networking Sites
Social Networking sites like facebook,twitter etc. do allow people to share their personal data,pictures,videos etc. This is a lot of data about a single person regarding what activity the person is doing, what are his likes, dislikes.This also gives information regarding his opinions regarding certain issues,
whether he supports such a case or not.Everyday facebook generates 25TB of data, twitter generates 12TB of data.This is a lot of data.How could we makes this data useful ??. if we gather this data about a person we could actually monetize on that by generating a pattern and predicting what he would be looking for next and presenting that data, so that he can quickly purchase it. Lets say if we understand that he likes to watch hollywood movies then we offer him next upcoming hollywood movie by Tom Hanks and this could generate business for us.

Technology Going forwad....
This are just a few examples where Big Data is being generated. Now with the Technology moving fast pace, we will be having more smart devices around us which will be generating more data, then we actually can think of. We Will be having an instrumented and interconnected world with these new set of devices. Slowly will be moving towards next generation of cities i.e Smart Cities which will have huge set of smart devices interconnected and continuosuly trasnsmitting and processing data which will help businesses,end-users to achieve their goals faster and in a better way.

In a Nutshell....
if we could process all of this data for different causes we could actually achieve a lot
1. Lets say we could predict what could be next natural calamity
2. Which part of my airbus is not functioning well
3. Which devices in my network are consuming too much of power ??
4. will the stock market crash ??
5. Will sales of smartphones go up next month ??

We can Do Real Big Things with Big Data, Just that we need to Think Big !!!