Few weeks ago I joined Spectory, a small projects outsourcing company with great culture and people.

My job is to form and lead a new team of software engineers. Our mission is to build a new strategic product for Google using modern client side technologies.

The challenge is huge - get to know new people (Spectory and Google), form a new team and build a new product.

As part of my job, I’m and my team deployed at Google and working closely with Google teams and other vendors. We need to integrate well to make a progress.

I wanted to share with you my observations of Google culture after few weeks of work. I share it because I think its interesting and some facts were surprisingly new for me:

Work with a smile. Engineers, security guys, cooks and cleaning stuff are nice. Everybody are willing to help and actually suggesting their help. I still didn’t hear someone rising their voice.

Although we are sitting in an open space, it is pretty quiet here. This is leading to productive and focused work.

As a developer you get a very powerful machine. You can order any enhancement (keyboard, cables, headphones, etc..) that will make your work environment even more comfortable. Nobody will ask you to justify your order and you will receive it quickly.

On your first month you have to learn a lot to get introduced with Google unique tools and standards. Google have a lot of great documentation resources like code labs, wiki and internal user groups.

You have a lot of technologies and different tools you have to work with as engineer in Google. Engineers are free to choose which tools or technologies work best for them. Even every team can choose to develop their own work flow which suits best their culture and product they are working on. Still, standards you should apply to exists.

Requirements for new product development are usually not well defined and documented. It’s customer, product and engineering team responsibility to brainstorm and finalize it. Engineers have a lot of power to decide on product development paths and priorities.

Although it is an enterprise sometimes with its bureaucracy and politics, each team operates like a small start up. Trying to be as lean and iterative as possible delivering value fast to customers.

Last and most important aspect of this culture is the great professional engineers working here. I think it wouldn’t be possible to build such culture without the people who get a lot of responsibility here.

I left eToro about 2 months ago and started to look for a new challenge. It was my first time actively looking for a job and trying to “sell” myself. :)

Below you will find a list of things I learned from the process of looking for a new job:

If you can afford it, leave your current job before you found a new one. It gives you more time to look for a new job and you can do it transparently without hiding. That’s what I did.

At the beginning, you have to understand what kind of job and in which type of company you are looking for. This is good for training on your pitch and to make a focus. When you know what you are looking, you can decline job opportunities which looks less appealing for you.

Looking for a new job is fun. You have the opportunity to meet a lot of new interesting and sometimes inspiring people. Quit your job now! :)

Don’t trust recruitment agencies. Their recruitment procedures are outdated and not aligned with real market needs. Use social networks and your connections.

LinkedIn is working. Add a new company and call it “Looking for new challenges/opportunities” in your LinkedIn profile. You will receive 300% increase in profile views and at least one new job opportunity a day in your private inbox.

Look for people (team) and culture, but not for product, company or technology stack. You have to work with people at the end of the day.

It takes time to open your mind after a long period employed in one place. Meet old friends who were working with you and who you respect, see what they are doing. It will give you more ideas or maybe you can join forces.

Learn something new, you have plenty of free time now. Read books you always wanted to read, but couldn’t do it because you were busy at work. Learn that new technology and hack something. Spare more time with your family, kids, yourself. You won’t have this time for long.

If you are working with Sublime Text 2/3 and you want to be able to see live changes on your HTML/CSS layout, follow the steps below:

Find and install a new package from SublimeText called “LiveReload”. Set "save_on_focus_lost" :true in user settings to enable auto save functionality.

Add LiveReload Chrome extension which you will have to enable in order to activate LiveRecord on page you are working at. Make sure to select in extensions management screen ” Allow access to file URLs” to enable this functionality on local files as well.

I just wanted to tell you about a very cool and groundbreaking test automation UI which was developed by Maxim Guienis, my friend from eToro. It was designed for specific eToro needs to provide an easy “wizard like” tool for QA to write automatic UI tests.

It is called APPLENIUM (APPium + seLENIUM) and it uses Appium and Selenium frameworks as helpers to make mobile and web testing easy.

I spend few hours recently to learn about Vagrant and Ansible to understand better how these tools work together. I’m really excited of potential hiding behind them. Unfortunately not many developers/companies know these tools and using them. So I wanted to share with you what I learned and hope it will help you to discover a concept called “Infrastrucutre as a code” if you didn’t know about it before.

Vagrant

Basically Vagrant provides you with functionality to create, provision and configure your own isolated development environment. It can be a single machine or number of machines connected in private network. Depends on your application infrastructure. All it does is creates on your laptop a defined set of virtual machines using (by default) VirtualBox. These machines actually defines your development environment.

Vagrant saves its configuration in Vagrantfile which is stored as part of your projects root. It should be also saved in source control as part of your project as it defines how your environment look like and how to create it from scratch if needed. Click here to see how a typical Vagrant file looks like.

Vagrantfile includes:

Definition of your VMs (which boxes: Linux, Windows, etc…)

Network settings (port forwarding, private network, etc…)

Provisioning (how to setup a VM after creation from clean box)

and more other but less useful stuff…

I won’t dive into more details. I hope you got the point and if you want to read more about why using Vagrant and what does it provide, you can go here.

Ansible

Ansible is a lightweight, simpler and easier to on board alternative for widely known Chef and Puppet configuration management tools. Like their big brothers its mission is to allow smart provisioning, deployment and configuration management of servers.

Ansible uses a hosts file to define how your environment look like. You can create groups of identical servers as well. Groups are good to define a set of similar machines for later mass provisioning. Example of such file can be found here.

Ansible saves its configuration in YAML files called “playbooks” which actually defines how to provision server or number of servers. Example of such file can be found here.

Same as with Vagrant, you save these YAML files along side with your project, because they define how to build your environment.

You can read more about why using Ansible and what does it provide here.

Vagrant and Ansible integration

Vagrant as part of its configuration knows to call Ansible playbooks to provision the VMs that where created. It also automatically creates a hosts file to define the environment for Ansible and to make sure you will be able to provision the Vagrant machines from your laptop.

I don’t know if you heard the term “Infrastructure as a code”, but these tools actually does exactly that. Which means that you are writing code to define your infrastructure, saving it as part of source control and that you will be able to re-create it at any given time. Whenever it is in development, testing or production environments. That gives you great power to keep your environment infrastructure consistent, testable and repeatable!