Monday, April 21, 2014

The 8 Fallacies of Distributed Computing

The 8 Fallacies of Distributed Computing: In 1994, Peter Deutsch and others at Sun Microsystem drafted assumptions architects and designers of distributed systems are likely to make, which prove wrong in the long run. These are:

1. The network is reliable.
2. Latency is zero.
3. Bandwidth is infinite.
4. The network is secure.
5. Topology doesn't change.
6. There is one administrator.
7. Transport cost is zero.
8. The network is homogeneous.

These fallacies help keep in mind that distributed systems are different, and they do hold even after the 20 years that passed

1. Arnon Rotem-Gal-Oz has nicely elaborated these 8 fallacies with examples: Fallacies of Distributed Computing Explained (PDF) and Fallacies of massively distributed computing
2. Bobby Woolf added some more comments to Fallacies of Distributed Computing
4. Arnon Rotem-Gal-Oz has added 3 more fallacies for Massively Distributed Computing: Fallacies of massively distributed computing

1. Instances are free
2. Instances have identities
3. Map/Reduce is a panacea

HTH

On Service-Oriented Architecture (SOA) and Microservices

While researching on this SOA subject I found the following definitions more appropriate.

Service: The means by which the needs of a consumer are brought together which the capabilities of a provider.

Capability: A real-world effect that a service provider is able to provide to a service consumer

Service-Oriented Architecture: Service-Oriented architecture is a paradigm for organising and utilising distributed capabilities that may be under the control of different ownership domains. It provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations.

1. There is good, small, concise e-book found on InfoQ written by Steve Enterprise SOA Adoption Strategies (PDF)

2. There is a complete reference model for SOA: OASIS Reference Model for SOA (PDF)

3. A related subject Microservices Architecture by Martin Fowler: Microservices

4. Steve claims Microservices are as same as SOA and is just another term:
Microservices is SOA for those who know what SOA is and Microservices ad SOA and: Microservices Money for Old Rope...

5. Arnon Rotem-Gal-Oz on Microservices: Services, Microservices, Nanoservices - oh my!

6. Udi Dahan's response on Martin Fowler's Microservices: On the Microservices thing

HTH

Wednesday, April 16, 2014

Interview Question - "What do you want to do?"

I do lot of interviews in these days. Interviewing also gets outsourced today. I'm on one of those assignments and I do interviews for very very big companies. While I do follow some pattern based on the job role and the technologies required for the specific job and experience level, I do have some common questions which I ask and watch keenly what the candidate tells about it.

One of the these common questions is "What do you want to do?" is one of the very important question. I do very keen and observe closely what the candidate thinks about this question and what answer he give.

I do ask this question just after general introduction questions. Based on the answer to this question I will know about the candidate much more than he thinks about the job and he s enthusiasm and future plans and his interests and passion about doing something in life.

HTH

Friday, April 4, 2014

Basic programming theory: The 3 main constructs of a computer program

At a low level, structured programs are composed of simple program flow constructs. These are Sequence, Selection and Iteration (SSI). I often refer them in short with SSI in my regular communication with my peers.

Sequence: One Step at a Time. Executing the program code (or algorithm) line by line, one at a time. e.g. Line 1, line 2 and line 3 and so on... An ordered execution of program statements one by one successively without skipping any step.

Selection: It is like Branching - given a criteria, change the path through the program. The execution sequence is controlled using ‘if’ or ‘if else’ or 'switch'. The 'if'' or 'switch' statement is a testing a condition evaluating a variable etc. to control and change the execution of the program depending the environment. A sequence of program/algorithm lines can be formed as a 'selection block' and can be executed or skipped depending on the condition composed with if/switch.

Iteration (and Recursion) a.k.a Repetition or Looping: Do something multiple times until/while a criteria (program reached to a certain state) is met or a fixed number of times using for statement. Iteration is typically used to refer to collections and arrays of variables and data. Iteration means to visit every item in the collection/array, usually in order but it may be in an irregular order, however each item is visited only once. Counting from 1 to 10, you are iterating over the first 10 numbers.

A sequence of program/algorithm lines can be formed as a block known as 'iteration block' and can be executed for a given number of times, based on certain conditions. Some times it is necessary to perform same step for a number of times. If same statement is written repetitively, it will increase program size. To avoid this problem, iteration is used. The statement written in iteration block is executed for a given number of times, based on certain condition.

Note: Recursion is the process a procedure goes through when one of the steps of the procedure involves invoking the procedure itself.

Thursday, February 27, 2014

Manual regression testing is horrible waste of human talent

It is horrible waste of human talent and Intellectual Capital (IC), if software development organisations let Testers (QA) doing regression testing manually. Regression testing should be automated using automation tools, and scripts. QA and testing people should be doing intelligent works than just dumb, repeated zombie works!

There are many task in QA process. QA is not just testing (QA != Only Testing). Rather than spending time in doing the same repeated testing, they can spend time in writing scripts and automate them. This way we can avoid the risks of missing the important regression errors/bugs and becoming bored of the same.

By automating you can build the system knowledge into it rather carrying in your's/people's brains (Test automation would be your system's knowledge source). Organisations can also avoid the chances/risks of people walking-out-with-this-knowledge when they leave the organisation. We can also save time and money on regression testing with automation. Test that are automated can be executed at high speed by the computers than humans testing and running it manually. This way you can get much faster feedback on the changes made by the developers. The biggest benefit of testing (other than finding bugs) is rapid feedback on the things changed or added by the development. Automation can give rapid feedback.

Testers alone are not responsible for Quality. Everyone is responsible for Quality.

Don't Fight Stupid. Make More Awesome!
                                             -- Jesse Robbins CEO from Opscode

Wednesday, February 26, 2014

On Interview and Two Most Important Questions

In any interview two questions are always asked. Interestingly, out if these two questions, one is asked in the beginning of the interview and other one is asked at the end of the interview. Both questions gets well attention and listed by the interviewer and have time allocated to. The middle content is mostly about the subject matter oriented, may be regarding tools, technologies and practices which both are comfortable at.

The 1st question is: 'Tell me about yourself' or 'Introduce Yourself'
and the last question is 'Do you have any questions for me?'

Both of these questions are very important because both  make an impact on the interviewer and mostly remembered by both the parties.

The 1st question is about & reveals who you are, why should hire you and how confident you're and about your communication skills etc.

The last question tells about and reveals your interest in company, job and the amount of homework you've done on the company by visiting their web site.


Automobile (bus) designers got arrested of a bus accident

Today, I saw a TV news of a bus accident and several people died due to this. It got fully burned when it hit the divider. The fuel tank broken when it hit and by the time the driver noticed the whole but burned and everybody in the bus died. This happened in the mid night when everybody was sleeping.

The bus owner and the driver got arrested. At the same time police took 9 other people into custody. The police said, due to the design faults in the bus the fuel tank burst and bus got burnt and people died.

This means in any other decipline other than software development people gets punishments. Today, software is being used in many life threatening equipment. Software is everywhere. Its used in cars, lifts, life sciences, healthcare equipment, virtually everywhere. The usage of software will increase even more and more.

Today, there are not any regulations exist on software quality. But when politicians become aware of this and if any evidences found on due to a bad quality software & bugs in them accidents happen and people died then politicians will establish regulatory commissions, pass auditing orders and starts inspecting the software and we'll be obliged to follow the documentation of every step then our lives will become horrible. Today, we are fortunate enough that there are no such regulations exist.

So be careful, and start using the quality standards and better practices to deliver high quality software.