Apache Solr -Unboxing

Apache Solr -Unboxing

Overview of Apache Solr:

  • Apache Solr is a standalone full-text search server with Apache Lucene at the back end.
  • Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java.
  • In brief Apache Solr exposes Lucene’s JAVA API as REST like API’s which can be called over HTTP from any programming language/platform.
  • Solr is a Schema based indexing.

Why I need Solr ? 

  • Fast Indexing/Searching, Indexes can be merged/optimized (Index compaction).
  • Great admin interface can be used over HTTP.
  • Support for integration with various other products like drupal CMS, etc
  • Caching, Replication, Distributed search.
  • Full support for REST and readily available client API SolrJ
  • Awesome community support too.
  • Full Text Search
  • Faceted navigation
  • More items like this(Recommendation)/ Related searches
  • Spell Suggest/Auto-Complete
  • Custom document ranking/ordering
  • Snippet generation/highlighting
  • And many more…….

Architecture of Solr

SolrArchitecture

How to Install ?

  • Download Solr
    • Minimum Requirements
      • Directory for storing index files
      • Directory for storing configuration files
      • Solr_Homehaving other dependencies
      • A Servlet container(tomcat, jetty) with appropriate configuration

Configuring Solr

  • Solrconfig.xml
    • Contains most of the parameters for configuring Solr itself.
    • Initial Parameters
    • Request Handlers
    • Components
  • Schema.xml
    • Contains all of the details about document structure, index-time, query-time processing.
    • Field Types
    • Filters
    • Copy Fields

How to Start the Solr Server

Once you download the Solr, You can unzip the folder and go navigate to the Solr-Version\bin using command prompt.

Run Command – Solr start -p 8983 ( -p signifies the port, you can give any valid port number after the parameter)  You can see below message if it got started.

Waiting up to 30 to see Solr running on port 8983
Started Solr server on port 8983. Happy searching!

If you want to stop run – Solr stop -p 8983 ( Use the same port on which you have started)

After Start, if you want to see the  admin console of Solr, Please try going to http://localhost:8983/solr/ 

You would be able to see the screen as below.

SolrAdminInterface

Create Core

Once your Server is up and running, you may like to create a Core ( DB/Schema in RDBMS terms).

In your admin Interface, Click on “Core Admin”, then “Add Core“. Type in your schema name and Folder path etc. as shown below.

SolrCoreCreation

Note: schema.xml, solrconfig.xml names are recommended to keep as is.

Now, the Schema is ready, You can start creating you own fields in schema.xml which will be there in the path “solr-5.4.1\server\solr\new_core\conf“.

Fields / Types 

  • Create Field
    • <field name=”author” type=”string” indexed=”true” stored=”true” />
  • Custom Field
    • <fieldTypename=”text_general_ngram” class=”solr.TextField”positionIncrementGap=”100″>
      <analyzer type=”index”>
      </analyzer>
      <analyzer type=”query”>
      </analyzer>
      </fieldType>

Querying Solr 

  • Plain Text Search
    • q = text: “searchString”
  • Expanding Search to More Fields
    • title:name& type:review& price:[* To 500]
  • Add Facets
    • facet.field=product & facet.field=rating

Summary

If you want to add search to your web site, it is easy with Apache Solr, You can use the features of Solr and make your life easy for searching anything. There are many plugins available for Solr if you would like to integrate your search with RDBMS fields as well. Hope it would be useful for you.

Happy Reading 🙂

Advertisements
Why Micro Services ?

Why Micro Services ?

Micro Services are the next big thing in the modern software architecture and development. The distributed applications in the recent past changed the world of software outlook. Now the applications are developed, used, work and built differently. This caused the logical evolution of Micro Services. Some best examples of game changers in the software world are Git ( Distributed source control), Cloud computing (AWS, Azure, …), BitCoin (Distributed virtual currency).

Let’s begin our journey with understanding, What are Micro Services?

The Philosophy

The whole idea of Micro Service architecture is that they are small, focused and should be scaled.  

The Definition

The MicroService architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum centralized management of these services, which may be written in different programming languages and use different data storage technologies.” – Fowler & Lewis, 2014.

This idea looks very similar to SOA. When I first heard about Micro Services, I thought they are just web Services and got many questions related to them. Some of them are as below
Why these services are called Micro Services?
What is the difference between these micro services and web Services ?
How different this world is different from SOA world?

Characteristics of Micro Service:

Do One thing well : Services should hide, how they work and do a single thing and do it well. The encapsulation is based on the business function of the service that it encapsulates the functional requirements.

Business Domain Centric : Each Service should align to the context with in the domain model for this to make sense in the domain and in the service architecture.

Decentralization : Every service should be decentralized and autonomous, so that each service can operate on its own schedule and priorities. Each service can be updated and deployed as fit.

Smart Endpoints and dumb pipes: This characteristic has come based on SOA, in SOA we have many products / ESB where we can define lot of logic in routing and transforming etc. Where as in Micro services the focus on login inside the service and the communication should happen very dumb like a REST / HTTP resource call to get to the service.   

Fail-Safe : Enterprise systems need to be smart, in that they fail in a way that doesn’t break things in unpredictable ways. Anticipate failure in everything, among with  validation of input and validation of data we send downstream.

Automation : Services should use automation which keeps management and operational support efficient. Employing large number of small services can become a mess if you do not embrace automation.

Principles of Micro Services – Encapsulation, Automation, Business Domain Centric, Isolation, Fail-safe and Observable.

Micro Service Vs Web Service:

The regular Web services are definitely different from Micro services. The regular web services support is based on protocols like HTTP / SOAP. These services are invented to solve the integration problems between application when we have polyglot technologies with different vendors/ applications. So, the aim of web services is to integrate or build a channel to communicate between these applications. Where as Micro services aim is NOT to integrate applications, perhaps to reduce the complexity of a monolithic application to micro services. This would give us re-use, maintainability, test-ability, scalability etc in the application.

Micro Services Vs SOA:

SOA started with very similar characteristics mentioned above, but the idea got converted when many vendors started introducing new features to SOA. Then we have a vendor lock-in problem now. We have lot of logic built in around the services NOT inside the services. So, Micro services are the out come of learning of SOA. Still, micro services are evolving. We might end up with very similar problems of SOA, if we are not cautious. Hope we would be able to use micro services the way they are explained.

Technology Support:

Here are the technology

Building Micro services with Spring Boot

Building Micro services with Drop Wizard

References:

Fowler & Lewis on MicroServices

Videos on MicroService Architecture

Lambda Expression Basic Example – Java 8

Lambda Expression Basic Example – Java 8

Why Java 8 supports functional programming is a big debate we can avoid for now. Lets try to understand what the features Java 8 has given for supporting functional programming. First thing we hear is Java 8 has provided Lambda Expressions, According to Oracle’s Chief Architect Mark Reinhold, The Single Largest Upgrade Ever. Lets start learning the Lambda expression now.

Lambda’s are anonymous functions which doesn’t need a name, input arguments or return type. If I say like that you might think why and how they are useful ?

Shall we really use them? If you could see a very small and basic example given for Prime Numbers, you would be able to understand the simplicity and ease of use of Lambda’s. Explanation of the code is given below the example.

Note: Please look at the methods [ isPrimeNum(Old School of Coding) and isPrime( New School of Functional Coding)].

package com.ravi.lambda;

import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.IntStream;

public class PrimeNumber {

     public static void main(String[] args) {

          // Old Style
          System.out.println(&amp;amp;quot; 1 is Prime ? -&amp;amp;quot; + isPrimeNum(1));
          System.out.println(&amp;amp;quot; 2 is Prime ? -&amp;amp;quot; + isPrimeNum(2));
          System.out.println(&amp;amp;quot; 3 is Prime ? -&amp;amp;quot; + isPrimeNum(3));
          System.out.println(&amp;amp;quot; 4 is Prime ? -&amp;amp;quot; + isPrimeNum(4));

          // New Style
          System.out.println(&amp;amp;quot; 1 is Prime ? -&amp;amp;quot; + isPrime(1));
          System.out.println(&amp;amp;quot; 2 is Prime ? -&amp;amp;quot; + isPrime(2));
          System.out.println(&amp;amp;quot; 3 is Prime ? -&amp;amp;quot; + isPrime(3));
          System.out.println(&amp;amp;quot; 4 is Prime ? -&amp;amp;quot; + isPrime(4));

     }
     /**
     *
     * @param number
     * @return
     */
     static boolean isPrimeNum(Integer number){
          if(number == 1 ){
              return false;
          }
          for(int i=2; i&amp;amp;lt; number; i++){
               if(number % i == 0 ) {
                    return false;
               }
          }
     return true;
     }

     /**
     *
     * @param number
     * @return
     */
     static boolean isPrime(int number){
     // Functional or Declarative Way of doing
     return number &amp;amp;gt; 1 &amp;amp;amp;&amp;amp;amp; IntStream.range(2, number).noneMatch( index -&amp;amp;gt; number % index == 0 );
     }
}

Lets look at the isPrimeNum method. Did you notice anything strange ? I guess no, because we know that Java works that way.

Loop over all numbers which are greater than 2 till n-1, as 1 is not a prime number and any number can be divisible by 1, we would like to start with 2. So, we had to handle the case of 1 separately.

Instead of Looping the code we could do it with Functional way –  isPrime demonstrates that code.

The easiest way to identify a Lambda Expression is “->“. A Lambda can take Optional Parameters, and executes the expressions or statements with in the braces.  Let me explain the above example.

First condition we are checking is number greater than 1 and Stream is the new API given by Java 8 [Which can be used in place of Collections… Read More ] which provides sequence of events. I have used “IntStream” which is defined for Integers, which has this Static Method called Range (Runs the loop from 2 till the given number )and noneMatch (returns a Boolean value, whether no elements of this stream match the provided predicate )instance method which take Predicate as input, this is where we have used a Lambda expression to see the number is divisible by the index.

Lambda’s has too many things, I hope this is a very good starting point for you. I would try to give you how to make it generic and re use a Lambda expression in next blog.

References:

Oracle Blog about Lambda Expressions

Lambda Expression FAQ

Cloud Application Characteristics

Cloud Application Characteristics

The current buzz word in software industry is Cloud, most developers and QA’s does’t have correct understanding of “cloud application“. However, they say yeah we are also working on cloud applications these days. Even I was in this kind of mode for sometime, until our company started a challenge called “Seed the cloud”. I read a little more about the cloud architecture and how cloud applications should work.

Initially my biggest concern was, how to differentiate the normal web applications to Cloud applications.I hope, the below notes would help the people who are in the similar state.

Before understanding it’s characteristics, lets try to understand the definition of Cloud computing.

The Wikipedia definitions

"Cloud computing in general can be portrayed as a synonym 
for distributed computing over a network, with the ability
 to run a program or application on many connected 
computers at the same time. It specifically refers 
to a computing hardware machine or group of computing 
hardware machines commonly referred as a server 
connected through a communication network such 
as the Internet."
                                - UnKnown

Cloud computing is a model for enabling ubiquitous, 
convenient, on-demand network access to a shared 
pool of configurable computing resources (e.g., networks, 
servers, storage, applications, and services) that 
can be rapidly provisioned and released with minimal 
management effort or service provider interaction. 
    
   - NIST(National Institute of Standards & Technology, US)

Explanation: In the above explanation, If you observe the “__” words, they talks about distributed computing, network, Many connected computers, Internet. So, These are the important attributes in cloud computing. Then you might not see much difference between any regular web application and a cloud based application, Right ?

That’s the confusing part here…… If any application, satisfies any of these characteristics then that could be a Cloud application.

Note: All the characteristics are not required to satisfy,
 most of them should be satisfied.

The key characteristics of Cloud are below

  • On Demand, Self-service
  • Resource pooling
  • Rapid Elasticity
  • Measured Service
  • Broad Network Access

It’s time to understand what are the meanings of the above strings.

 

Self Service
Self Servic

On Demand, Self-service :

This title itself is very self explanatory. The resources should be on demand and User should be able to do the self service instead of depending on IT or other group.

Lets take some example to explain this,

Scenario: You need to add more hard disk capacity to your server because, your new feature is upload images of the customers might need more hard disk space.

Application Hosted on Regular Environment: You would normally raise a request to IT team to add new HDD of 100/200 GB to your server. Then your IT person would buy/get from warehouse and put this HDD in your server slot.

Application Hosted on Cloud Environment:  You would directly go to your cloud provider site/portal and ask for more GB space and they might charge you for each GB you use, that means instead of buying 200 GB today, you can simply buy 50 GB every month incrementally and pay for only the amount you have bought. The amount of GB you asked will be reflected in your account immediately. This is a example of On-Demand self service. Your cloud provider keep hardware ready for you when you need it.

Pros:

  • Immediate Resource availability
  • Buy only what you need ( 50/100 GB instead of 500 GB HDD)
  • No dependency on IT/ other teams

Cons:

  • Stick to the same Cloud provider (If you switch you might loose the data)
  • Might not get customization for Payment ( If provider charges on GB basis, you can’t ask him to charge on other basis, like per request.)
pooling
pooling

 Resource Pooling (Multi-tenency)

This is a also very straight forward concept, you  should be able to use the pool of resources.  Example could be processors, memory, RAM etc.  With the virtualization  platforms, we can use many  different machines out of one hardware machines.  Actually many different customers (users) might  share many hardware shared resources. This is  why the cost efficiency will come for small enterprises.

Scenario: Your application is very small and you are experimenting the product and you don’t have money to spend on hardware like Server, Racks, Cooling etc. The cloud provider would give all these things for very less money than you have to buy these things as he is sharing the resources among many different users. Only one server might be serving 4-5 customers as all their applications are very small.

Pros:

  • Cost would be very less compared to own Infrastructure.

Cons:

  • Risk of information leakage as the data might be stored on same server.
  • No information of Location of Storage of the data. ( If you have follow any country specific norms/regulations based on your application )

 

elasticity
elasticity

Rapid Elasticity ( Flexibility & Scalability )

Elasticity talks about the capability of providing or releasing the resources rapidly for scaling the applications. Which could be explained with example for easy understanding.

Scenario: You have a online shopping application and you sell cloths and accessories in this ekart. Your regular load on the server is 5000 requests per day and you announced a huge discount and did a huge ad campaign for the same on the occasion of X-mas. Now for these 10 days before 25th Dec you are expecting 25000 requests per day. How can you scale in regular Environment? You can simply add more processors / add new nodes with load balancing for only those 10 days dynamically based on your load and remove those servers after the offer period is over.

Pros:

  • Very flexible to add / remove hardware
  • Cost effective (coz you didn’t buy anything)

Cons:

  • None

 

Measure
Measure

Measured Services (Pay Per Use)

This means, user should be able to measure the resources (Storage, processing, bandwidth, number of Users) and their utilization in some metric. Resource utilization can be monitored and measured for use of both provider and consumer.

For example, You buy only 100 GB space and application hosting then you would only pay for 100 GB and the service charges, nothing more than that. This concept is called Pay Per use, but this is not a mandatory characteristic of cloud. In some cases this might not be applicable.

Pros:

  • Cost Effective ( Pay only for the things you have used)
  • Easy scalability ( Increase when you need)
  • Provides Analytic data of your application ( Number of requests, number of accounts, data store capacity etc)

Cons:

  •  Every cloud application might not be able to utilize this

 

Internet
Internet

Broad Network Access:

This means the applications can be accessed Anytime, Anywhere, Any Device. User has to have Internet, apart from that there is no restriction to access the application. This brings the user to all the devices like mobile phones, Tablets and Desktops.

Pros:

  • Access Anywhere, Any Device
  • All you need is Internet.

Cons:

  • No Internet, No Application.

Hope this gives an idea about – what is cloud ? and where it fits in your business scenarios.

Happy Reading 🙂

What is Qos (Quality of Service) ?

What is Qos (Quality of Service) ?

The Quality of service or Quality attributes are most important for any Architecture, The Architect’s responsibility also consist of maintaining these services, well defined in any project and communicate the same to the development team. The QoS mostly consists of below services.

Other services like Performance, Interoperability, Usability, Maintainability etc are also very important. I am not discussing them here as I am trying to take the things very common and most important for any software application. As I am a JEE Architect, my examples and explanations might be of Java and related technologies.

Availability:

This is a very important service in the list and it means, the application you are working on should be available whenever the users are expected to use. This intern means it should be available 24 * 7, because of the distributed applications we have these days and users on almost all the countries and continents. To make this happen we might put the application in a clustered servers with a load balancing mechanism. This way we can make sure even if one server is down, the application requests can be served by other server in the cluster. Read more >>>

Manageability:

This is a very confusing concept as it is difficult to find difference between manageability and programmability. Although the lines are blurry between these two they are different and Manageability deals with the management of software. For Eg; How you manage your versions of the code? How you manage your build with any CI tools? How you configure your application itself? These kind of questions would come under Manageability. Read more >>>

Security:

Security is a key service any application should provide, the data of any application can’t be compromised, in some cases the code also. This is the thumb rule of any application. To keep the security there are some guidelines given by all programming languages which can be followed. I can give some examples for Java and .Net. The key features of the application like authorization, authentication, Encryption/Cryptography etc are the things should be taken care here. Read more >>>

Scalability:

Scaling any application is a challenge. We are in the cloud era and the hardware can be automatically scaled with the cloud providers. But still the software or the code we have written should be able to scale for the requirement of the future. This challenge is all about planning, usually we consider the application scope is very small and choose the technologies very much relevant for that scope, but after couple of years we start getting the response delays etc. Read more >>>

Reusability:

Reusability as a concept it is very easy to understand, all we have to do is “Re use” already existing things/ components / code / template etc. However the implementation of reusability in a real time project is not that easy. Very often we tend to copy paste the code instead of moving the code to another cohesive method, there could be many reasons to do that. At higher level abstraction like Component re use is much more difficult than a method or class. I feel identifying the use case itself is harder than implementing the reusability. Read more >>>

Portability:

Portability is often a thing which was not thought trough in the beginning of the development and be done ad hoc when it is needed. When we say portability, the application you develop should be portable to different environment all together, For eg; It could be moved from one OS to another OS or from regular environment to cloud. This is the part of portability.  Read more >>>

Other useful reference ->

Talk on Scalability, Performance and Reliability by Cameron Purdy

Portability and Reusability Chapter from Mcgraw-Hill.com

The Architecture based Design Method

My Notes of GIDS 2014 Web n Mobile Day

My Notes of GIDS 2014 Web n Mobile Day

I attended the Great Indian Developer Summit 2014 for couple of days ( Java, Web/Mobile Days). The below is my notes of Web/Mobile day(23rd April). I could get lot of information from this summit.

Web/ Mobile Day:

The day started with a wonderful Keynote of Scott Davis, who told us how a young developer should be, The key message he gave is “If you can’t type it…, … You can’t script it away“. If my understanding is correct, all he wanted to tell the developers is try to have in-depth knowledge on each everything you program. He told this in many funny ways, Keyboard is always faster than mouse, How he is going to teach the Minecraft programming to kids of age 10. My favorite one among these is – “Success breads success…. and Confidence” and “Be a Kinesthetic Learner” 🙂

Thanks a lot Scott for the super message.

There were few more keynotes (Sponsor) and only one impressive note was from Ravi Pal – Sapient, He talked about – “Future of Experience – a view for a technologist” was interesting to know about some facts and innovations around retail industry.

Then comes to Guru of technologies Venkat Subramaniam, and told how to modularize your Java script code. We always know what not to do but we tend to these mistakes when we have to code. He pointed the things rightly about these common Bad Practices of JS. How to Create Classes and Export these classes to other files and many more. I really appreciate him for iterating these facts.

Then the exciting session happened was on “Getting started with Building your first IoT solution” by Raghavendra Ural. This Intel session was impressive for me because this is the first time I saw the code of IoT and the movement I came to know that this is a pretty simple code to do, I was very happy. This Intel Galileo board is $60 USD and very small in size than Raspberry pi. This has a Pentium processor, and we can run a Node Js server in this.

Feeling Awesome right !!!! 🙂

Finally I attended the thirsty head Scott’s “YeoMan – Modern Workflows for Modern WebApps“. This is really useful stuff if you really interested to know where the world is going. I didn’t hear the name YeoMan before today but learnt that this is a very useful tool if you are from Node JS world. The scaffolding is pretty easy with YeoMan. He introduced us with some other two new tools called Grunt (A build tool for JS) and Bower (Client side dependency management).

Of-course I enjoyed participating many different contests and produced lot of Dopamine 😉

Conclusion: My aim of attending GIDS Web & mobile 2014 was, to know something new which I am not aware of. And to get a feel of new technologies via “Demo” applications the speakers give, it was really amazing to know many different Tools, Frameworks, APIs, principles and concepts via GIDS. I must say I enjoyed this Summit thoroughly.

Best Qualities of a Software developer

Best Qualities of a Software developer

developer working

General description of any developer role would expect required skill set, mostly the companies expect java/.net/c/c++.

Most companies even expect the developers to know good language skills and analytically strong. But do we think that should be sufficient for any developer?

Most of us might agree, because we expect developers to code nothing more than that. What are the other skills you might expect from a developer, I might suggest you would be a very good developer if you posses these qualities.

  • Never Give up Attitude
  • Patience
  • Innovation
  • Team player

If I am the hiring manager along with the skills developer posses I would try to probe on these areas. Let me elaborate on why I am thinking these are the key things for developers.

Never Give up Attitude:

Development or writing programs are not as easy as you see from outside.  Even a very simple problem like saving data from brownever give upser to Database  might create some expected errors when you are try. Some errors  /exceptions you get might look silly when you see from outside, but when  you sleeve up and make your hands dirty then only you will realize the  actual problem. As I developed code for more than 10 years I am aware of  the issues developer might get into. So you need to try try and try until  you succeed. I particularly see this attitude in the candidates I interview.

How you will find out “Never” give up attitude?

You should ask a question / program to developer which is almost  impossible to solve in the given time. A very simple way could be give a  small project instead of asking a simple prime number program and ask  him the class diagram and code with in 15 mins. Which he will not be able  to achieve. Then after 15 mins you ask him to show whatever he/she has  done. Developer will immediately say I am not done yet, and he already realized that it is going to take more than 1 hr to finish. If you ask him/ her would you like to attempt it if I give you 5-10 mins? Now you will understand the attitude of the developer. If he/she gives up and say no, even after 10 mins I won’t be able to finish they are not ready for attempt itself. I might not take this developer for my team.

Patience:

patience This is a very important attribute of a developer, I myself didn’t understand why some code is not working at many instances. So, you need to be very patient when you do programming. This is not the only reason why you need patience. The first and important reason you need patience is to listen and understand the requirements of business. Any software’s aim/ objective is to solve the business problem, If you don’t understand that completely and create a solution for it, it might not solve the problem but it might increase the problem for user.

Every time you write code you have to wait sometime to see your code working. If it is a server side coding then you should have to wait for some time to build the application and wait until it gets deployed to server, then test it and find that your code is not working then you have to redo these steps again 😦 Nowadays there are lot of tools like Maven / Eclipse who made our development process very easy but still you have to repeat these steps as a developers many times as part of your Job.

If you don’t have the patience to repeat these steps, you might not be a fit for this role 😦

How to test patience of the developer?

This is a very interesting question, but it is a very difficult question as well. This is something you can’t figure out in a very short time like interview of 30 mins to 60 mins time. But sometimes you should be able to guess based on the expressions of the developer when you try to ask the same question in many different ways to him / her. Or If you have a better approach please comment on it.

Innovation

InnovationThis is an attribute every developer should have intrinsic innovation. I could see nowadays the organizations are very much forcing the developers to come up with innovations, I am not sure how it will work in reality.

Motivating developers to innovate is a good thing. Where as I have seen many ideas not even considered when they reach upper level. I am not saying this is wrong, they might not see the value of this innovation as they have a bigger picture in mind. Sometimes they have to comeback to developers and explain why their ideas are considered to make them understand that bigger picture they have. Other wise this might lead to demotivate developers.

How to identify Innovation ?

Again in a small span it is very difficult to understand and assess this ability of developers. I usually ask developers what is the “NEW” thing you have done in last 3 months apart from doing regular coding. It could be learning new framework, tool or API from development. Some times I get completely different answers like started learning Guitar, French etc. So here there is no right or wrong answer. But this would give you some idea what he /she is doing New in their life, this is a very important thing because developers should be learning new things every day then only they can do some innovative thing.

Team Play

team playerLone development is a past, considering the distributed teams globally I think nobody in today’s world would develop a software alone. Yes I agree with you on, sometimes you might have to go to a quite room and do your coding alone. Team play is usually encouraged for developers as they can learn from each other when they work as a team. And understand each other as individuals also very important to work as team. If you see the business perspective of teams is – if any one person’s unavailability should not stop the show.

How to identify a good team player?

This is a tricky one to address in interview, I tried asking questions like If you get stuck in a problem what will you do? Some developers say I will go to senior developer and ask. This might sound like a team player but he/ she should do a though-rough investigation of the problem and find the root cause of it and still if they could not get the solution from searching all possible online sources then you should approach senior developer. Then you might ask about what you don’t expect from your team members. For this also I got some very different answers from developers for eg, unfriendly, non supportive etc. you might have to probe them to get to what exactly you want to hear as these are very vague answers.

Conclusion:

When you hire a developer you might even think of many more things than these four but I feel these are the most important along with the technical abilities of any developer.