Showing posts with label software development. Show all posts
Showing posts with label software development. Show all posts

Tuesday, 18 October 2016

MISSING IN IT: Personality before skills

When one looks to advertisement of open positions or CVs of applicants in the IT-industry, what one usually finds is that they are heavily populated by list of programming languages and libraries to software products from databases to application servers. This doesn’t change much in job interviews, in worst case interviewers rely on short interview with formal test to find out applicants’ level of remember even smallest details of selected technologies while in best case they discuss on what is applicants opinion and specific experience of certain technology in question. Technical skills are important, no question about it, but there is something much more important than that, the question of how well does the job match the personality of the applicant.
Now what do I mean when I say personality of the applicant? Let me address this the other way, let me ask you, what kind of personality a person should have if his or her task would be to…
  1. Develop a new software system, or
  2. Maintain and redevelop a software system
Are there any personality straits that would be more suited for one task instead of another? In my opinion a person who develops a new system should be stronger atideation while person maintaining and redeveloping should be more analytical. Maybe also a person developing new software should also be more positive as developing something new always includes a lot of unknown questions and risks that the developer just has to trust that he or she can overcome them. Also maybe a person maintaining software should be more context aware as any change to the function of system can start multiple cause-effect cycles that need to be understood very well to prevent any unwanted side-effects appearing and possibly causing major harm.
Of course a skilled developer can both develop a new software system and maintain an old one, however when one’s personal straits match with demands of the task in hand, then we right person for the right job leading to higher work motivation, higher work moral and enhanced work satisfaction, this in return leads to better results. From my own personal experience both as developer and as team lead, I have noted the importance of matching work with personality. For example before I understood the importance of matching work with personal tasks, I thought that generally maintenance and bug hunting work is tedious and dull, and that only interesting and fun work involves new development. I was completely wrong about this! For me maintenance work was tedious, but some of my colleagues shined and enjoyed maintaining systems, vice versa I also noted that for some people innovating and generating new code was the most horrifying task that they could ever think of.
What we in the IT-industry should start to focus more is to ask what type of persons we are, what kind of personal straits we have, and what kind of work we are best suited for. If we keep just matching work and people based on solely on technical skills, then we will keep wondering why we sometimes people become dissatisfied and lose their work morale. The way for better future is with valuing personal straights and trying to understand what works suites best different persons.
P.S. I am not in business of advertising throe my writings, there are many ways to try and evaluate one’s personal straits and strengths. One of the best ways that I know is using self-evaluation test from Gallup called Strengths Finder 2.0. I and many of my friends and colleagues have used it successfully on finding the words describe who they are and by doing so have succeeded on better understanding to what they are suited and where their strengths lie. No matter how people evaluate what are their personal strengths, the most important idea to remember is to take count of personality and personal  strengths when matching people with work.

Wednesday, 12 October 2016

Hardware is cheap, people are not

Have you ever struggled with an IT-system that is operating at the limit of its capacity? I have. Have you ever noted that people instead of asking how to raise capacity, try to squeeze out everything they can from the current system? I have. I don't know exactly why we do so. Maybe people fear asking or making decision to invest into new equipment. Maybe people feel that enough is enough, that the system should work with the equipment it has. I don't know exactly what is the reason for us trying to save up, but what I know from my experience is that trying to squeeze up usually ends up costing more.
Let me give some examples. I was once working with an telecom system that was very database intensive. We tried to optimize the database, we fixed bugs that were causing reruns, we rewrote parts of the software, but at the end of the day after months of man power was used, the final fix was to replace systems hard drives with SSD drives, and like magic, our problems were over. Another time I was leading re-development of an retail system that was suffering of horrible slowness, while at the end of day the software had to be rewritten completely, we gave artificial breath to the system by just upgrading hardware, which made the system actually be usable again for users.
Of course not always problems can be solved by just investing into hardware. Many times especially with large scale systems it is very important to keep the code clean and optimized. However many enterprise systems that we rely our business are of limited use, in those cases people should not automatically go and try to save up, but they should approach the problem holistically and look on different ways to get to the point where they want to be.

Monday, 2 January 2012

We are at the end of the road for home computer

During the last year, I have wanted to write about multitude of changes that are happening and are going to happen in the PC industry. Topics that I would have liked to discuss were the upcoming Windows 8, emergence of endless stream of Android tablets, wireless technologies, mobile optimized chips from Intel and AMD, etc.. However I had a writers block, I couldn't write about these topics because I had not made my mind on what the bigger picture was. Now I know. The bigger picture is that we are at the end of the road for home computer, and that is a major cause of change in the computer industry.

Why is it happening? There is basically two reasons for it, one being driven by technological development, and the second on being changing usage patterns of people. In the past home computers were used as productive tools, then as a way to access information and the Internet, and now they are used mainly for consuming media and engaging entertainment. Home computers, be it desktops or laptops, can fulfill these needs, but not optimally, and certainly not with ease of usage. Instead of a home computer, a better way to fulfill these needs is to use range of different devices like gaming consoles, Internet enabled TVs and tablets linked to each other and other peripherals via wireless connection.

One might ask why is the change coming now and not before, the reason is that technology is becoming ready, it is powerful enough and more importantly easy enough to use. For example you can stream music from your phone or tablet to your stereo system; you can print to wireless printer; etc... In short, your devices are talking to each other, thus you don't need one uber device to do everything.

When will it happen? This is a tricky question to answer, but essentially it is all about consumer perceptions on what is needed to fulfill their needs. The day when your average Joe says to himself that instead of getting a new computer to use Facebook and YouTube, he will instead buy a new tablet with a wireless keyboard and printer if needed. This change can happen very rapidly, maybe even a time frame of just few years. However to speak frankly, we are not there yet. The technology isn't powerful enough, when we have for example AMD Fusion or upcoming Intel Ivy Bridge processors with 4 gigabytes of memory packed inside a tablet or other media device, then the technology will be ready. This would more or less put the time frame from end of 2012 to 2014.

What does it mean? End of Windows monopoly in the home market if Microsoft doesn't successfully retake markets from Apple and Google Android with Windows 8. End of open access and free usability of various devices for the majority of users, in short everything will be locked, users download their software and content from their designated shops or use Internet delivered applications and services to fulfill their needs.

From a point of view of a professional working in the software industry, this upcoming change will create both opportunities to be taken and dangers that need to be counteracted. One pit fall that I see is that companies will be spending too much time and money on tailoring applications for different platforms, a dangerous trend that we are already seeing with smart phones. Instead companies should use this opportunity to get rid of all native applications and technologies, moving to pure web based technologies that can be offered to all platforms. It may not be optimal, but cost effective flexibility is something that will be needed in the coming years.

Sunday, 31 July 2011

To be run only in a single server instance

One day when I was talking with my colleague about the past software development projects, it occurred me to ask, why isn't it ever specified that the software to be developed only needs to be run in a single server instance? The reason for my thought is that it would remove unneeded complexity from the application, allowing more straight forward solutions and optimisations that couldn't otherwise be done. In essence it would save both development and maintenance time, thus saving money.

Of course it isn't possible or sensible in all situations to make this specification, but there are cases where it could and should be done. For example SMEs many times have simple applications that just take input from users and other systems, do simple processing and then save it, serving the end result to other users and systems. These kind of CRUD -applications really don't need to be clustered. The reasons why they are specified to be run in a cluster have usually more to do with beliefs or with ignorance about what kind of systems we have to day. For example reason given on why the applications has to be have multiple could be...

"We have too many users, we need to have multiple servers"
No. The servers we have today have amble of power, memory and storage. You can easily rent a server with 2 x 2,5GHz Quad Core, 8GB of memory and hundreds of gigabytes of storage with less than few hundred Euro per month. This setup should be more than enough for your average run-of-the-mill business application and it should be able to handle hundreds of simultaneous users easily.

"It needs to be fail safe, we need to have multiple servers"
No. The server where the application is deployed is probably either an virtual server or an card server attached to a NAS that has RAID enabled and timely backups done. In case of a hardware failure, the virtual server instance is deployed to a new server, and the card server is replaced with a new blade. Depending on the service and automation level, a server failure will cost us a downtime ranging from minutes to hours.

Now to be on the safe side, there are applications and usage situations where what I suggest can't simply be done, and even when we have a suitable case it doesn't mean that we have to throw good engineering practices away. No. If and when we have a case where we know that we aren't going to need multiple servers, let us give the developers the added guidance of not needing to have the application to be clusterable, and let them produce a better application with less unneeded complexity.