Friday, December 27, 2013

Top 10 Uses For A Message Queue


Ref: http://blog.iron.io/2012/12/top-10-uses-for-message-queue.html?spref=tw

We’ve been working with, building, and evangelising message queues for the last year, and it’s no secret that we think they’re awesome. We believe message queues are a vital component to any architecture or application, and here are ten reasons why:
  1. Decoupling It’s extremely difficult to predict, at the start of a project, what the future needs of the project will be. By introducing a layer in between processes, message queues create an implicit, data-based interface that both processes implement. This allows you to extend and modify these processes independently, by simply ensuring they adhere to the same interface requirements.
  2. Redundancy Sometimes processes fail when processing data. Unless that data is persisted, it’s lost forever. Queues mitigate this by persisting data until it has been fully processed. The put-get-delete paradigm, which many message queues use, requires a process to explicitly indicate that it has finished processing a message before the message is removed from the queue, ensuring your data is kept safe until you’re done with it.
  3. Scalability Because message queues decouple your processes, it’s easy to scale up the rate with which messages are added to the queue or processed; simply add another process. No code needs to be changed, no configurations need to be tweaked. Scaling is as simple as adding more power.
  4. Elasticity & Spikability When your application hits the front page of Hacker News, you’re going to see unusual levels of traffic. Your application needs to be able to keep functioning with this increased load, but the traffic is anomaly, not the standard; it’s wasteful to have enough resources on standby to handle these spikes. Message queues will allow beleaguered components to struggle through the increased load, instead of getting overloaded with requests and failing completely. Check out our Spikability blog post for more information about this.
  5. Resiliency When part of your architecture fails, it doesn’t need to take the entire system down with it. Message queues decouple processes, so if a process that is processing messages from the queue fails, messages can still be added to the queue to be processed when the system recovers. This ability to accept requests that will be retried or processed at a later date is often the difference between an inconvenienced customer and a frustrated customer.
  6. Delivery Guarantees
    The redundancy provided by message queues guarantees that a message will be processed eventually, so long as a process is reading the queue. On top of that, IronMQ provides an only-delivered-once guarantee. No matter how many processes are pulling data from the queue, each message will only be processed a single time. This is made possible because retrieving a message "reserves" that message, temporarily removing it from the queue. Unless the client specifically states that it's finished with that message, the message will be placed back on the queue to be processed after a configurable amount of time.
  7. Ordering Guarantees
    In a lot of situations, the order with which data is processed is important. Message queues are inherently ordered, and capable of providing guarantees that data will be processed in a specific order. IronMQ guarantees that messages will be processed using FIFO (first in, first out), so the order in which messages are placed on a queue is the order in which they'll be retrieved from it.
  8. Buffering In any non-trivial system, there are going to be components that require different processing times. For example, it takes less time to upload an image than it does to apply a filter to it. Message queues help these tasks operate at peak efficiency by offering a buffer layer--the process writing to the queue can write as fast as it’s able to, instead of being constrained by the readiness of the process reading from the queue. This buffer helps control and optimise the speed with which data flows through your system.
  9. Understanding Data Flow
    In a distributed system, getting an overall sense of how long user actions take to complete and why is a huge problem. Message queues, through the rate with which they are processed, help to easily identify under-performing processes or areas where the data flow is not optimal.
  10. Asynchronous Communication
    A lot of times, you don’t want to or need to process a message immediately. Message queues enable asynchronous processing, which allows you to put a message on the queue without processing it immediately. Queue up as many messages as you like, then process them at your leisure.
We believe these ten reasons make queues the best form of communication between processes or applications. We’ve spent a year building and learning from IronMQ, and our customers are doing amazing things with message queues. Queues are the key to the powerful, distributed applications that can leverage all the power that the cloud has to offer.

How To Successfully Build Team Confidence


Ref: http://java.dzone.com/articles/how-successfully-build-team

In software development, building a great team is a delicate yet achievable goal. Although there isn't an exact formula, most managers would come to a common consensus on the basics. The formula might look something like this: Varying Skill Sets + Seasoned Members + Balanced Personalities + Proper Mindset = Success! Many attempt to build teams with this or similar formulas but find that some teams still struggle to shine. This is generally due to a lack of team confidence. Although each member might be an all-star on their own, when placed on a team, the team itself has its own personality. A team with confidence issues is dangerous and typically results in disorganization, frustration, mistrust, unhealthy debate, buggy releases, and missed deadlines. The good news is there's a simple way to build team confidence.
Team confidence can be achieved through delegation. This is not in reference to the programming "delegation" design pattern. This concept has been around much longer than modern technology. Good old fashion delegation is "the partnership of authority ... to carry out specific activities." After reading this section, there might be some skeptics out there. That's okay; skepticism is good (check out Skepticism: A Developer's Sixth Sense). Let's break down the results of this simple, yet very effective, tool:
Acquiring New Skills
Sometimes building or attaining new skills will be necessary to delegate tasks. When this happens it's a win-win scenario. This helps team members try new things, advance within their job, and grow within their career. Adding skills can also increase the self esteem of team members.
Expanding Team Value
As team members achieve new skills and delegate work throughout the group, the overall team's value increases. Furthermore, this encourages the growth of tribal knowledge within a team. This helps limit the impact of team members who are promoted, moved to other teams, or leave a company.
Empowering Members
Delegation is an opportunity to empower others. Empowering team members provides an opportunity for team members to assume more responsibility. Additionally, empowerment is a sign of trust and confidence in a member's ability to manage a task on their own.
Building Trust
Trust is always an important attribute of any successful team. Trust cannot be taken; it must be given. Delegating different types of jobs to team members will require them to work with each other. This will naturally lend itself to opportunities where trust can be built between team members.
Allowing Skills To Shine
Some developers are natural public speakers (there are a few); others might be excellent organizers. Delegation provides an opportunity to display additional skills that might not be part of daily programming life. Providing this avenue can be invaluable for retaining seasoned team members.
Increasing Efficiency
Delegating work load will increase a team's efficiency. Sometimes this impact will be immediate, while other times (in the case of learning new skills) the team will receive benefits in the long-term. Additionally, as confidence grows, teams will seek out ways to become more efficient.

Although team confidence might be the goal of delegation, its results are far reaching. Delegating work is a guaranteed way to increase team satisfaction, properly motivate members, and help prevent team burnout. Sometimes the fast-paced nature of technology can blind people to only look forward for new ideas and approaches. Sometimes good ideas or approaches such as delegation already exist and simply need to be properly executed.

Friday, December 13, 2013

5 Factors that Contribute to Employee Disengagement

Ref: http://java.dzone.com/articles/5-factors-contribute-employee-0


It is a fact that some employees feel less excited or emotionally responsive toward their job. Employee disengagement occurs due to a number of reasons and it is important for managers to be aware of these factors to improve their employees’ attitude and ensure productivity. Here are some of the common reasons why people experience negative feelings about their work.
1. Misled about the nature of the job
One of the causes of employee disengagement is when people are being misled about the kind of job and position that are offered to them. For instance, they are given a different idea about their workload, job responsibilities and schedule, which was not what they were expecting during the interview process. Thus, transparency is important, so employees will not feel forced to work on a job that will not give them satisfaction. 
2. Incompetency for the job position 
There are instances that a person is hired for a job because there is a great need to fill a specific position. However, as time goes by, employees may feel misplaced and incompetent since they are placed in a position that is not suitable for them. When this happens, they will end up disliking their job and become more of a burden than an asset to the company. 
3. Poor training and harsh feedback
Companies that fail to provide proper training to new employees, can lead to employee disengagement. Moreover, lack of training will have a direct impact on the quality of work that employees provide, particularly when this is coupled by the absence of motivation and support from managers. Eventually, their disappointments and frustrations will cause them to quit and leave their job.
4. No opportunities for advancement
Every employee dreams of being promoted or advanced to their chosen career. Hence, when they look for a job, they prefer to be employed in a company that can provide them with a promising future. If the company does not offer such opportunities for advancement, employees are less likely to stay for a longer period, and they will not be quite productive or efficient at work.
5. Lack of recognition
Employees long for a sense of recognition or appreciation for every good thing that they do. If employees do not receive any incentives in spite of their efforts to help an organization achieve its goals, they will eventually decide to transfer to another job. With this in mind, a reward system should be set in place to encourage employees to do even better and stay longer in a company.
By being aware of their common reasons for employee disengagement, companies will be able to retain their competent employees and ensure the success of the entire organization on a long-term basis.