We plant ideas and grow software

About Us

We're a Great
Team

We are a company founded by a team of five experienced IT professionals who have been working together smoothly and efficiently for more than 10 years. Before we created our own venture we have contributed as a Team Lead, Sr Software Developers, SQA and Build Engineers to many cryptography and security related products owned by PC Guardian, GuardianEdge Technologies, Symantec, Credant Technologies and Dell.

We Have Extensive
Experience

Our experience covers all stages of the software development process including design, architecture, implementation, testing and support. We are an agile self-organizing team where each member solves the problems which best fit his/her expertise. All of us are experts in cryptography and security and each of us has experience in different technologies - from low-level system programing to enterprise client-server development where hundreds of thousands of endpoints can be deployed, managed, upgraded and supported remotely from a single management console.

We Like New
Challenges

The IT sector is the most dynamic industry in the world and we are continuously investing а significant part of our time to keep track of and get familiar with the new technologies and trends, because even if it seems that they are not directly related to our current projects they can quickly become necessary and they are а source of many good ideas and practices that we incorporate in our daily work.

Our Mission

We love to solve challenging problems and create valuable and innovative software solutions. If you encounter an exciting challenge, or you have a vision for a new outstanding IT product or service we are ready to help, providing high quality software consulting and development services.

Professional Background

Past Projects

New Areas of Interest

There are trends and fields that we find really interesting, but we don't have the experience of using them in commercial products yet. This doesn’t stop us from reading, learning and experimenting in our free time. We will be very happy if we have the chance to apply these new skills to real products. If you choose to give us this opportunity, we will show you how fast we can integrate state of the art technologies to our work practices.

Recently we have focused our attention on the cloud technologies, distributed systems and big data. We are experimenting with different cluster and cloud designs using ZeroMQ for message communication and Docker for distributed deployment. We are also interested in distributed file systems, distributed mutexes and methods of distributed processing of big data. We got familiar with the Map-Reduce approach and we are currently learning in details the Hadoop framework.

Development Process

After years of collaboration with different colleagues and teams we know how important well-established work practices are, resulting in efficient development and high quality results. We are convinced that to show the best of his/her technical skills, the IT specialist must have good inter-team communication, well defined development process and good software development and collaboration tools.

Whether we are working with other teams or do the entire project development ourselves, we like to follow the practices described below or adopt similar practices that best fit the existing client technical process.

Project Introduction

Corresponding to the agile methodology all processes including project requirements, design, and architecture are continuous and iterative. But whether we begin a new project or we are getting introduced to an existing one, it is really important to have a good understanding of the client’s needs. This will allow us to prepare and optimally fit to the existing project, or create a good foundation for the one that will just be started.

Together with everyone involved in the project we first perform a high level analysis to form the product requirements. Then we evaluate the technologies that can be used discussing their strengths and limitations until we agree on the most suitable approach.

Setting up Development and Collaboration Tools

Selecting the appropriate integrated set of version control, issue tracking, build and test tools is very important for properly applying the continuous integration and continuous delivery practices.

We have experience with many different collaboration infrastructures and can easily adjust to your existing one or we can set up a new one optimized for the exact development needs of our tasks.

Our practice is to select the most appropriate IDE and tools and to make ready for deployment images and virtual machines with the fully configured development environment and tools. This allows us to backup, migrate to new machines or prepare new development endpoints for minutes.

We are familiar with a variety of build systems for different platforms. We are able to automate the build process, create cross-platform build environments and validate the artifacts by automated execution of a set of unit, integrity and acceptance tests.

Iterative Development

The development process we prefer is iterative and incremental. Our clients define their needs, together with them we write stories and then we start to resolve them, converting each story to product functionality.

The stories can be created and modified at any time. It is our job to collaborate with the client to make each story or modification clearly defined and then to create tasks related to each story. We create tasks, set initial estimation and dependencies between them and put them to the product backlog. The client moves the tasks from the product backlog to the next sprint backlog, thus setting the priorities. During the sprint the team members assign themselves to the task that best fits their expertise and once they are done with it, repeat the process with a new task from sprint backlog. If for some reason the developer is blocked, he/she should switch to another task. The blocked task can be suspended if it is waiting for input, or reassigned if it requires the expertise of another team member.

There are five types of tasks:

Design Tasks

If a story can be implemented in several different ways, or if it requires changes to the existing architecture, a design task should be created. Depending on the exact problem, the result can be delivered as a detailed document or a short description.

Implementation Tasks

Each implementation task involves writing code to provide and validate the functionality described in it. The task is considered done when a build is made and all unit, integration and acceptance tests are passed.

R&D Tasks

If a story or a design task leads to implementation tasks which are not routine or standard, these tasks should be researched and done with priority as a POC (Proof of Concept) before approving the design. If the concept cannot be proven, a new design task should be created. Usually R&D tasks are done in parallel to the main development, using a different source code branch and if the goal is achieved integration is required.

Test Tasks

Test tasks are created when manual tests need to be performed. Such tasks are also assigned when some specific automated tests should be run.

The implementation of unit tests for any new functionality and adding this functionality to the existing integration tests is part of the implementation tasks. These tests are run automatically after every build and they don’t require a dedicated test task.

Bug Fixing Tasks

A bug fixing task is created if the user or the QA engineer finds a problem that the existing unit, integration and acceptance tests missed. After the bug is fixed, a good practice is to update the test code to catch any future regressions related to the issue.

Continuous Integration

Continuous Integration requires the build of the main development branch and the build time tests to always succeed. This means that the developers should start working on each new task in a separate branch cloned from the top of the main branch. While the work on the task is in progress, the developers periodically synchronize their local branches with the recent changes in main development branch. When they are ready with the task, they perform a synchronization with the development branch and after a successful build, test validation and code review the changes are rebased to the main development branch. This way at the end of the sprint only completed and validated functionality remains in the main branch.

Continuous Delivery

To start the process of continuous delivery the development process should have reached the minimum viable product (MVP) milestone. Before we deliver a new version of the product, a set of automation tests is run and a set of manual tests for regressions and for validating new functionality is executed. If the automation tests fail or the QA engineer rejects the deliverable, then the procedure will be repeated after a new marked for delivery commit is made to the development branch. After all tests have passed successfully, the new release is ready for deployment.

Support

If you have an issue with our product that requires engineering intervention we are ready to help. We can provide tools for gathering issue-related data, perform remote and on-site debugging and provide a fast fix or a workaround until the real solution is implemented if this requires more time.

Our Services

Depending on your needs, project size and intensity we can provide flexible collaboration schemes. After initial introduction to your requirements we will prepare and present you a roadmap which aims to minimize your risks, build confidence between us and provide the optimal solution.

We look forward to establishing long term partnership with our clients and with other software development and consulting experts and companies. Even if we are currently not available or qualified to handle your request we can connect you to skilled specialists. We are maintaining and growing a network of experts in almost every IT field.

Our Team

We are а small agile self-organizing team that fulfills all general roles in the software development process. If our team is not big enough to handle client’s needs, we have a practice upon our client’s approval to involve on demand our fellow experts. Meet us below:

Get in Touch

GRASS IT Solutions Ltd.

Address: Bulgaria, Sofia 1582
Drujba 2, bl. 282, ent. V, fl. 6, ap. 4
E-mail: office@grassitsolutions.com
Phone: +359 898 514 574

Social

Contact Form