How to choose a digital agency

So let's say you have an idea of an online product or service and you’re looking for a best digital agency to implement it. We'd like to share a few advices on how to find a digital agency that fits your expectations.

Of course, since RubyGarage is a digital agency as well, we will also turn to our experience, but let us emphasize that we are interested to help you no matter what your final decision will be.

First, let's start with a general advice:

  • Check the reputation. A serious web and mobile development company owns a portfolio of implemented projects. You should be able to check out these projects and see how they work. Solid digital agencies are discussed in media and participate in conferences and other IT-events.
  • Check the way they work. A digital agency may have an onsite developer team or outsource resources for some projects. Check out whether the agency you want to work with has an office and competency of the staff.
  • Check the way they’re going to handle your project. An agency may look for specific scope definitions to make the particular job done or be experienced enough to help you bring your project to life from concept to the successful product. Ask them how they measure and guarantee the result, and whether they have a similar project in their portfolio. It’s also a positive indicator if the agency is ready to tell you about the people who are going to work on your projects.

How to choose a digital agency

Now these all are pretty obvious recommendations, and it will be no surprise if you find posts telling the same truth on the Internet. However, most people usually solve this problem much more simply: they just ask their friends and colleagues for advice. And if they have worked with digital agencies, they will share their very own and unique experience, which matters more than a general advice.

If you do not have such friends, we’re going to unveil you a few under-the-hood peculiarities you may want to pay attention to when choosing digital agencies.

Focus on technologies

In our fast-paced world it is often very critical to keep an eye after the latest technologies in order to bring the safest and most effective products possible. However, not every web and mobile development firms follows that idea and often prefers to take of use technologies they've been working for a long period of time.

Also, some technologies are offered as open source, meaning using them does not cost a penny to a digital agency (and thus to a client). Turning to such agencies is a good idea if you have a tight budget.

select agency

Here at RubyGarage we use exclusively open source technologies and keep an eye on every update, since the more updated is the software, the safer and more reliable it is. We are aware of many different frameworks, programming languages, applications servers and so on. Check out our portfolio to see the technologies we used for each project.

Originally published at here

React vs Angular - A Popular JavaScript Library and a Powerful JavaScript Framework

Most interactive single-page applications are built with the help of JavaScript (JS) frameworks and libraries. And the number of JS tools for fast single-page application (SPA) development is constantly growing, making the choice of which technology to rely on more challenging for us as web developers.

Both React and Angular are currently used by many business, news, and travel companies in the USA, the UK, Canada, France, Germany, Australia, and other countries. AngularJS has been included in virtually every list of top 10 JavaScript frameworks since its release in 2009. This Model–View–Controller framework has become extremely popular among web developers. ReactJS is even more widely used by JavaScript programmers, although it’s actually a library, not a framework: the React library only has a View, but lacks Model and Controller components. So how did React became so popular? And how can we reasonably make javascript framework comparison ?

React and Angular comparison chart

The main differences between AngularJS (the framework) and ReactJS (the library) are in the following aspects: componentization, data binding, performance, dependency resolution, directives, and templating. Let’s look at each of these aspects separately.

Componentization

AngularJS

AngularJS has a very complex and fixed structure because it's based on the three layers — Model, View, and Controller — typical of single-page applications. An object $scope in AngularJS is responsible for the Model part, which is initialized by the Controller and then transformed into HTML to create the View for the user. Angular provides many standard services, factories, controllers, directives, and other components that will take some time for a JavaScript developer to master initially.

With AngularJS we break the application code into several files. For example, when we create a reusable component with our own directive, controller, and template, we must describe each chunk of code in a separate file. Once we describe our directive, we then add a link to our template in the directive to couple these parts. AngularJS directives represent the template logic for your application. The template is HTML extended with Angular directives, generally written as tags or attributes. We also add controllers to provide our models with necessary $scope or context. Controllers are written in separate files as well. When we modularize our application in such a way, we can reuse our template or component in a different part of the website.

ReactJS

Facebook, the creator of ReactJS, chose an architecture different from that of AngularJS and similar MVC frameworks. In short, there is no “correct" structure for applications built with ReactJS.

ReactJS is a large JavaScript library that helps us update the View for the user. But ReactJS still doesn't let us create applications on its own. The library lacks the model and controller layers. To fill in the gap, Facebook introduced Flux, which has numerous variants nowadays, to control the application workflow.

ReactJS provides a very simple and efficient way to build component trees. It boasts a functional programming style where component definitions are declarative. Composing your app from ReactJS components is like composing a JavaScript program from functions. Just look at the example below, taken from GitHub:

  var TodoApp = React.createClass({
  getInitialState: function () {
  return {
  nowShowing: app.ALL_TODOS,
  editing: null,
  newTodo: ''
  };
  },
  handleChange: function (event) {
  this.setState({
  newTodo: event.target.value
  });
  }
  });
  // other code is omitted for brevity
 

Code written in ReactJS is logically structured and readable thanks to the availability of components. The ReactJS library doesn’t demand that you write code in a certain way. They suggest that you use JSX (a special XML-like syntax) to create classes and templates, but it’s also possible to write plain JavaScript and HTML. This helps JavaScript developers adapt to React applications more easily, as there is no unusual syntax to learn. React offers a freedom that AngularJS doesn’t. But this freedom comes at the cost of additional time spent designing the structure of an application. Before we start a new project, we have to think about what instruments we are going to use. When you have to pick a tool from among 100 options to resolve a single task, this choice becomes cumbersome.

Data Binding

AngularJS

AngularJS connects Document Object Model (DOM) values to Model data through the Controller using two-way data binding. In short, if the user interacts with an <input> field and provides a new value to the app, then not only the View is updated, but the Model as well. Two-way data binding is beneficial for AngularJS as it helps us write less boilerplate code to create interactions between components (the View and the Model) in our application. We don't have to invent a method to track changes in the app and change our JavaScript code accordingly.

The drawback of Angular's two-way data binding approach is its negative impact on performance. Angular automatically creates a watcher for each binding. During development, we may come to a point when an app is packed with too many watchers for bound elements.

ReactJS

React uses one-way data binding, meaning we are able to direct the flow of data only in one direction. Because of this, it’s always clear where the data was changed. It’s worth noting that two-way data binding was available in ReactJS before v15 thanks to ReactLink.


In order to implement a unidirectional data flow in React, Facebook created its own application architecture called Flux. Flux controls the flow of data to ReactJS components through one control point – the dispatcher. Flux's dispatcher receives an object (they call it an action) and transfers it to an appropriate store, which then updates itself. Once the update is finished, the View changes accordingly and sends a new action to the dispatcher. It's only possible to transfer an action to the store when it’s fully updated. With this concept, Flux improves the effectiveness of the code base. Based on our own experience we can say that Flux is great when you work with dynamically updated data.

The one-way data flow in ReactJS keeps complexity under control. It's much easier to debug self-contained components of large ReactJS applications than it is with similarly large AngularJS applications.

Performance

AngularJS

There are two things to take into consideration when we talk about Angular's performance. As we mentioned previously, Angular 1.x and higher relies on two-way data binding. This concept is based on “dirty checking," a mechanism that can make our AngularJS application laggy.

When we bind values in HTML with our model, Angular creates a watcher for each binding to track changes in the DOM. Once the View updates (becomes “dirty"), Angular compares the new value with the initial (bound) value and runs the $digest loop. The $digest loop then checks not only values that have actually changed, but also all others values that are tracked through watchers. This is why performance will decrease a lot if your application has too many watchers. This drawback is even more painful when several values (Views) are dependent on each other. Once Angular sees that the change of a value was triggered by another change of a different value, then it stops the current $digest cycle and runs it all over again.

The loop doesn't stop working until it checks all watchers and applies all necessary changes to both the View and the Model. In practice, we can bind an <input> field to different Views and Models. When the user enters new data into the field, the change may not be immediately visible. It’s better to avoid that.

Another shortcoming of the AngularJS framework is the way it works with the DOM. Unlike React, AngularJS applies changes in the real DOM in the browser. When the real DOM gets updated, the browser has to change many internal values to represent a new DOM. This also has a negative impact on application performance.

Poor performance is the main reason why Angular 2 supporters introduced the virtual Document Object Model rendered on the server and one-way data binding similarly to React. Still, Angular 2 offers two-way data binding as an option.

ReactJS

The creators of ReactJS introduced the concept of the virtual Document Object Model, which is regarded as one of the greatest advantages of ReactJS in comparison with mature frameworks, including AngularJS. How does the virtual DOM work? When our HTML document is loaded, ReactJS creates a lightweight DOM tree from JavaScript objects and saves it on the server. When the user, for instance, enters new data in the <input> field in the browser, React creates a new virtual DOM and then compares it with the previously saved DOM. The library finds dissimilarities between two object models in such a way and rebuilds the virtual DOM once again, but with new changed HTML. All this work is done on the server, which reduces load on the browser.

Now, instead of sending completely new HTML to the browser, React sends the HTML only for the changed element. This approach is much more efficient than what AngularJS offers.

As for one-way data binding, React doesn't use watchers to track changes in the real DOM. Overall, ReactJS makes it simpler to control application performance. But this doesn't mean we cannot create a fast application in AngularJS.

Resolving Dependencies

AngularJS

AngularJS uses a basic Object Oriented Programming (OOP) pattern called dependency injection, meaning we write dependencies in a separate file. It’s inconvenient to create a dependency directly in an object. In AngularJS, dependency injection is inherent to any standard functions that we declare for an Angular factory or service. We only pass dependencies as parameters in any order in our functions. This is where vanilla JavaScript is different from Angular, as the order of arguments in standard JS is strict.

Originally published here https://rubygarage.org/blog/react-vs-angularjs

How to build peer-to-peer marketplace

One of the great opportunities the Internet has brought us is the ability to not only buy goods, but also sell them. And while companies create e-commerce sites to sell their offer products, most usual people take advantage of online marketplaces, which are basically platforms for commercial interaction between buyers and sellers.

Create your own online marketplace  is a great way to look for required items and compare offers from different sellers. Forcing the sellers to compete for each online consumer naturally increases the quality of products and the way they are sold. Another side of the coin is that nowadays marketplaces also become more advanced. Each platform provides info on reputation to estimate how adequate is the seller, remembers your purchase history to help you recall important details and saves your credentials for easier purchase process in the future.

How to build peer-to-peer marketplace

The latests trend nowadays, however, is switching from global all-in-one marketplaces like eBay or Amazon to consumer specific peer-to-peer platforms that tend to be more manually organized and care more about the people needs and user experience. You also might be thinking about your own local or product-specific marketplace since you’re reading this article.

Earlier creating a marketplace was a messy thing to do. It required at least a dedicated designer and developer to create it and a tech pro to support it on the continuous basis. Nowadays it can be done much easier and with no programming skills. How? Using peer-to-peer marketplace platforms like ShareTribe, NearMe.

For instance, in case of ShareTribe it requires minutes to create your own marketplace and start customizing it. Add 30-day free trial, the open source nature of the solution and its payment system supporting 190+ countries and 25+ currencies and you’ll have the perfect solution for your business.

So creating a peer-to-peer marketplace is no longer a technical problem. The more important question is how to bring it to success, make it well-known and widely popular among your target audience? So here a few best practices for building a successful marketplace.

Apply lean approach to your business

That is make hypothesis and then check them by running special tests. It can be applied in so many things, starting from the way you name the «Buy» button and ending with the domain name and even the selected revenue model.

Stand out

Add value to your marketplace by adding exclusive advantages. What makes your service different from others? It may be a 24/7 online chat, a discount for delivery service, a loyalty program, etc. Think about reasons why people should switch to your platform and prefer it to others and make them noticeable.

Seek new users

How to promote peer to peer marketplace

In case of consumers, think about marketing and promoting your marketplace through word of mouth, social media, your blog, various promo actions and events. The more creative you are, the more chances your business will be noticed. In case of sellers look for opportunities to make your marketplace more attractive than others.

Build a core audience

Think of how your marketplace can create an involved community around specific area. For instance, if your platform is about selling skate boards, help people with advice on how to make a right choice when buying a skate. Such info can be presented in a blog or in a Wiki section of your site.

Lower the risks for users

You are basically a mediator between a seller and a buyer, and you can control the way the business is done between them. You can contact sellers and check their identities before letting them offer their goods. Or you can guarantee to fairly handle disputes in case of any.

Pay attention to user experience

The easier it will be for a user to sign up and make transactions, the more chances he will like your marketplace and use it more actively. Most marketplace platforms allow to easily customize these things.

 

Now you know in general how to build a peer-to-peer marketplace. After all, as with any other business, it all depends on your dedication to the idea and your willingness to make mistakes, learn them and work hard to avoid them and achieve success. Good luck in your venture!

Who is Who in Web Development Team

Often our clients come to us with great ideas, but being the professionals in what they do, they do not necessarily know how we work at RubyGarage, particularly, how we assign different specialists to different projects and why. This blog post is aimed to help you get accustomed with all kinds people somehow involved in the product creation product.

Before we proceed to the web development team, it is important to clear out two categories of people that are vital for any product we do:

Final users - those are the people who will use the product after it’s released to the public. The successful product is the one that addresses the needs of its users in the most effective and comfortable way. So what we do at RubyGarage is basically trying to understand and implement the best way to satisfy the wants of final users.

Clients - are the ones who have a desire to create a new product. Here we should notice that often the client is the company that has a few people responsible for the product. There might be a business owner, a product owner, specialists involved in different aspects of the product and so on, and we easily communicate with all of them when required. For this post we’re going to call them simply clients.

Finally, an average RubyGarage development team contains approximately 3-9 members who are fully dedicated to a particular project and responsible for building the product. In web projects a typical team includes:

Web and mobile applications development firm

1. Product & Project Manager

In general, the product manager (or simply PM) is responsible for making a successful product. For that he is often required to communicate with clients and help them make necessary decisions, not mentioning the necessity to know completely everything about the product itself.

To make a better understanding of PM’s work, we’d like to highlight his key strategic responsibilities:

Understanding the final user needs

As stated above, a product cannot be successful without fulfilling the needs and desires of those who will eventually use it (and pay for it). So the PM does everything to collect the necessary info and process it. Such data provides necessary insights on the product roadmap and priorities in deploying features.

Gathering requirements

On the other side, it is the client that comes to RubyGarage and has the idea of the product to be implemented. So the PM who gathers requirements and negotiates them with the client.

Communicating with the client

Although it’s obvious that the PM mediates between the client and the web development team, communication with the client implies a few important things to mention. Since the product manager has the necessary experience, he helps the client to create a perfect business model for the current product, explains the product roadmap and helps decide what to do next, thus tracking the project progress.

If there’s anything the team requires to clear out, it’s the project manager who works closely with them and goes to the client for additional info. He also collects the client’s feedback and manages his expectations once a product or its part has been presented.

Creating documentation

The previously gathered requirements are then represented as documentation for the whole team, where its every member can also see how the product should actually be done, and the tools and resources required for that.

Managing the time schedule

The successful project is also much about the speed. So it is the product manager who defines how many people should be involved in the product creation process and when and how much time they should dedicate to it. The progress is tracked and synced with the client.

Defining and controlling the workflow

Here the product manager defines the interaction and communication between the team members and the milestones. Once the milestones are defined and the development process has started, the project manager keeps an eye on how it goes: whether the planned functionality is released in time, if all team is perfectly in touch; whether people stick to the workflow in general.

Note: we mention here the product manager and the project manager as a one person, however, in some companies these responsibilities might be split. In this case the product manager takes the responsibility to bring the product that corresponds to the client’s requirements, while the project manager keeps an eye on the process of product creation and does everything to stick to the deadlines and establish the best workflow possible.

As you see, the product manager is the key person in the project who does a lot of work during its course. Sometimes our clients prefer to assign their own specialist for this role; in this case we always highlight all the above-mentioned responsibilities to be sure that the client is fully aware of our workflow and of the consequences of such decision.

Hire UX Developers

2. UX Designers

Just like the product manager, the UX designer is responsible for gathering the requirements. However, while the PM just manages the process, the UX designer knows exactly how to do that, which includes:

  • Creating personas, which are characters representing different kinds of target users who are most probably will use a product in a similar way.
  • Building user stories (also knows as scenarios or storyboards), describing the user behavior during his interaction with the product.
  • Designing the information architecture, i.e. the way the information in the product will be organized and represented to its user.
  • Designing wireframes , which is basically a product blueprint that has all its elements arranged to help accomplish a user’s goals. (But sometimes it can done by the UI designer).
  • Creating a prototype of the product and then performing user tests on it. The prototype helps to check that users will act just like the previously created personas, behave according to the existing user stories and be satisfied with the way the information is architected.

It is important to note that the UX designer is constantly involved in the project. Even when the product is done, the UX designer keeps evaluating user experience to improve the product effectiveness. Such research can provide hypotheses on how the product can be further optimized, how the site conversion can be increased, how the user satisfaction can be improved, etc. Each hypotheses then gets checked via user testing.

UI Designers for Hire

3. UI Designers

The User Interface designer is responsible for the visual design in general. That includes selecting the color scheme, the fonts, the general visual style, guideline adoption to the interface design requirements and the overall visual representation of the product. So while the UX designer creates the prototype functionality and user interaction patterns, the UI designer brings visual design to it. And when the visual design is ready, only then the prototype can be used for product demonstration.

A specific aspect of the web product is animation, which is usually done via programming code for optimization and compatibility reasons. But on the prototype stage the UI designer can quickly draw simple animations to demonstrate the future look and feel of the product.

Sometimes, when the company is very young and doesn’t have it’s own brand book, the UI designer can also think of the branding essentials, such as logo, brand colors and fonts, which are often used in the product’s visual style.

Both the UX and UI designers work tightly with the developers throughout the whole product lifecycle. Not only they interact for a better understanding of the product, but also because of the limitations each team member has when implementing the desired functionality and design.

Often the UX and UI design are done by one person in a team, and RubyGarage here is no exclusion. Our experience shows that such approach is effective in small teams. In such case the UX/UI designer is responsible for both the visual and information design, has the necessary competences and skills to be responsible for it and better understands and visualizes the final product.

4. Developers

When design of the product is ready, it’s time for developers to bring it to life.

Developers is the most valuable resource of RubyGarage and, obviously, of any company involved in building IT products. Usually ours developers are full-stack, which means that they can do any development-related work within one product, but in case the product is pretty large, it’s always best to split the responsibilities and improve the workflow. In the latter case our developers are split into a few groups.

HTML/CSS developers are responsible for taking the previously designed visual representation of the product and turning it into the code. Notice that we’re not talking about functionality here, rather about how to convert the artworks made by UI designers into an optimized code that is quick to load and easy to improve.

Front-end developers work on the functionality of the product interface, i.e. a particular part of the product with which the final users will interact. In other words, front-end developers are responsible for all the components manipulated by users. In their work they use primarily next tools:

  • JavaScript. It’s a programming language widely used on the Internet for content production. In fact, it is often said that it’s the best language of the web, as it’s easy: easy to debug, easy to extend, easy to edit, finally, easy to learn.
  • AngularJS framework. This is a widely popular JavaScript framework made by Google and a community of developers and used for creating single-page applications.
  • jQuery. Being a lightweight JavaScript library, jQuery turns complicated tasks that would take a lot of time if written in JavaScript and turns them into methods that can be used using a single line of code. So it’s basically about doing the same work in less time and with less efforts.
  • Jasmine. It is basically an open source JavaScript testing framework that helps to ensure the quality of the written JavaScript code.

Eventually the front-end developers should check if the visual design of the product perfectly corresponds the work provided by UI designers, if it works as intended in all popular web browsers, if it is responsible (and looks well on any screen) and if the code is valid.

If the product should be represented on the mobile platforms, this is where iOS/Android developers come into play.

Back-end developers go deeply into the product and are responsible for its functionality, business logic, and for the infrastructure and any back-end tools required to make it work. Thus, they use a completely different set of tools:

Ruby on Rails, postgresql, web development technology stack

  • Ruby. That’s an object-oriented programming language having a lot of advantages for making web products. (For more details, check out our “Cool stuff about Ruby language” post).
  • Ruby on Rails. Being one of the most popular and used web application frameworks written in Ruby, Ruby on Rails also encourages following many web standards and thus is perfect for building web products.
  • Sinatra. It’s a small open source web application library providing a free alternative for Ruby on Rails. Unlike RoR, it is focused on creating simple web applications quickly and easily.
  • RSpec. A complex Ruby framework used mainly for tests and ensuring the quality of the product.
  • PostgreSQL. It’s claimed to be the most advanced database storing and management system for all sizes of applications, and that’s why use it in our workflow.

Of course, that’s not all the tools that back-end developers exploit, but the most used ones.

Another responsibility of back-end developers is maintaining server infrastructure changes and software delivery processes, a compound of practices also known as DevOps. DevOps and back-end development is often done by different people if the project is big enough.

In general, it is the developers who are responsible for making the functional product that is scalable, testable, fault-free and corresponds to the business requirements. Sticking to the adopted design patterns and code style guides, the developers should write the code of the highest quality so that it could allow to quickly change the product structure and logic in case of any need (for instance, when it was decided to pivot the product or the final users were unsatisfied of the product and it requires major remake). If you want to learn more about it, such approach takes its roots from the Extreme Programming methodology, which is aimed to ensure the quality of code written.

5. QA engineers

Quality assurance engineers are always involved in the web product creation process since they check if the product or its functionality corresponds to the business and design requirements. Such checking is also known as acceptance testing, which is performed each time the developers bring out the new functionality.

In case acceptance tests are failed, the QA engineers write bug reports and follow the process until everything is fixed. In general, QA engineers should avoid bringing the low-quality product on the production server.

Other than that QA engineers can sometimes perform code review, be responsible for quality assurance in processes like software integration, change management, release management and others parts of the product cycle. Such responsibilities often depend on the project and on the way the team builds its workflow.

 

This is basically all the members that should be present in every web development team to bring the highest quality product possible. So now, if you’re going to hire a web team, we hope you won’t be confused with all those different kinds of people working hard on your product to make it shine.

Web Development Team. Who is Who

We are RubyGarage - Ruby on Rails Development Team from Ukraine

RubyGarage is a software development and service provider company with headquarters in Dnipro (Dnipropetrovsk), Ukraine and several offices across the globe including the product design office in San Francisco.

From three programmers in 2011, our company numbers more than fifty employees in 2015 and plans further growth and development. The company began its path by creating websites on Ruby on Rails and now offers a comprehensive range of services from business analysis to design, development and promotion of the product after its implementation.

History of RubyGarage

In the very beginning, the company,s founders, Vladimir Vorobyev and Alona Mekhovova, worked as hired employees in typical outsourcing software development companies. They quickly realized that the majority of the companies did not aim to deliver quality products, but tried to sell as many man hours to their clients as possible, which meant bloated budgets, inefficient resource management and sluggish development process.

RubyGarage Founders

It was really difficult to stay business-oriented and solve problems for the end customer in such atmosphere. So, they decided to leave their jobs and establish a digital agency offering better quality, timely manner and reasonable cost comparing to other outsourcers on the market. RubyGarage was the name of the company - Ruby, a beautiful gem (and a programming language) and Garage - the place where you feel startup atmosphere every day. This literally means turning gems into beautiful solutions.

About RubyGarage

We position ourselves as a service provider company with a full development cycle and further customer support. The majority of our clients represent small and medium business, marketing companies, digital agencies and startups. While working with the client, RubyGarage’s professionals help to define project’s strengths and weaknesses, create a road map and implement the project with maximum cost and time efficiency.

Our services include business analysis, product design, UI/UX design, front-end and back-end programming, infrastructure design, testing, content services and post-production customer support. The RubyGarage team has successfully implemented several dozens of ecommerce, online stores, marketplaces, real-time analytics systems, collaboration and management systems, CRM systems, travel industry, food industry, music industry, movie industry, healthcare, education industry projects including unique services as Exposure, Wanderlist, Pindify, Siasto and other.

Technology

Ruby developers from Ukraine

Our company utilizes several programming languages and technologies in the development process:

  • Ruby, an elegant and the same time versatile programming language suitable for various tasks.
  • Ruby on Rails, the speed and quality oriented MVC WEB Framework.
  • JavaScript and its libraries (Angular.js, Backbone.js, jQuery).
  • PostgreSQL, a powerful relational database system.
  • MongoDB, a powerful modern document-oriented database system.
  • Elasticsearch, a search server based on Lucene. It provides a distributed, multitenant-capable full-text search engine.
  • Amazon web services, Heroku, etc.
  • Automation quality assurance tools like Cucumber, RSpec, PhantomJS, Selenium etc.
  • Other technologies in accordance with client's needs.

We implement Extreme Programming, Scrum methodology and electronic Kanban which ensures product quality, highest development standards and timely delivery.

Communication

Proper communication with clients is the keystone in our company. We use simple and efficient tools for collaboration and communication with the clients. Our Delivery Managers work closely with the clients using the efficient remote cooperation modeland help to set up the agile processes necessary for a geographically distributed team.

Our Clients know their performers by name and by sight, participate in team member selection and keep full control over the team at all times.

Transparency

We adhere to a principle of complete transparency with the clients. Our clients have access to all planning tools, see current tasks of the developers and get comprehensive reports for each hour spent.

Quality

We ensure product quality on all stages of the project. At the planning stage our managers and analysts revise the requirements and offer the most suitable implementation tools and features. At the design stage we elaborate product design in accordance with best practices in usability and appearance. When it comes to the programming stage, we implement scrum or kanban, we use practices such pair programming, code review, we write automation tests for a code.

software development workflow

All these powerful methodologies and practices allow us to deliver elegant and error-free code to our clients. Finally we perform global usability tests, security tests, load tests and some other performance trials.

Education

We constantly invest in education and have developed our own approach to programming training. We hold the Ruby courses where we teach students the basics of programming, introduction to Ruby and Ruby on Rails, techniques of Extreme Programming, project development using the Scrum methodology.

ruby on rails courses

Each year we train 50 - 100 junior programmers who already have practical knowledge in Ruby development.

We also take part and organize IT conferences in Ukraine. We share experience in development, agile practices, programing practices and other important and useful information. Our goal is to share our knowledge and promote Ruby development.

If you have an idea for a startup or wish to move your business to the internet, please don't miss your chance and contact us directly.

rubygarage.org

Advantages of outsourcing a software product

When you want to create a new product from scratch, you can either gather your own team suitable for your needs or outsource the whole software development process to the professional outsourcing company. Both solutions have their strengths and weaknesses and are used depending on a situation. In this article we would like to describe a few most important advantages of switching to external outsourcing teams for successful implementation of a software development project.

Advantages of outsource software development

Risk sharing

You might think that outsourcing a project to an unfamiliar external team involves greater risks to your business. However, a common outsourcing team consists of high-level professionals who care about their reputation in the IT-world and are aimed on continuous cooperation with the client. This means that they not only take certain responsibilities for the final result, but also plan your risks better.

 

Reduced costs

This is pretty obvious: when outsourcing a project, you do not need to invest into infrastructure and pay operational costs and HR services. In some countries wages are simply lower than in others. This also provides great opportunities to cut expenses.

Better efficiency

Outsourcing partners hire skilled professionals to their teams. They know how to handle different business situations and generally have a wider understanding of how your goal can be achieved. Taking advantage of your outsourcing partner's experience is plain sailing to the successful product you want.

Hassle-free partnership

When it comes to working on the project, there are many details that you are usually loaded with - like how to keep an eye on the progress, how to avoid misunderstanding and generally how to supply the team with everything it may need. An outsourcing partner takes care of this.

Your higher effectiveness

While the outsourcing vendor is busy with bringing your product to success, you can focus on your company's core business processes, pay attention to its brand awareness or invest into marketing or research.

Overwhelming results

When it comes to online products, any outsourcing vendor is interested in making a product that will become well-known for its success and quality. That is why such partnership is even more appealing and perspective and may involve not only building the product itself, but also designing it from scratch, pivoting it if required, relaunching it and do the same thing until the product will blow up the market.

https://rubygarage.org/blog/advantages-of-outsourcing-a-software-product

 

How to Integrate PayPal Express into Spree Commerce

In this article we’re going to show you how to integrate the PayPal Express Checkout payment gateway into an ecommerce project, using the example of Medshop Express. Medshop is an online store built on the Spree content management system (CMS).

The Spree CMS has many pre-installed plugins for payment gateways. However, Spree’s standard PayPal gateway is restricted to credit card payments only. That is, the option for direct payments from a user's PayPal account is unavailable in the default PayPal gateway. We had to add the PayPal Express Checkout extension to our project to facilitate all types of payments via PayPal on Medshop.

Before you integrate PayPal Express into Spree, you first need a PayPal Sandbox account. To create your own PayPal Sandbox account, follow this tutorial – Creating Sandbox Test Accounts. You'll need to use this account for testing purposes. Don’t forget to create several test profiles, including a buyer account. For our project, we used version 4.2.7 of the Ruby on Rails framework. We also run our project on one of the latest versions of Spree: 3-0-stable.

PayPal Express Checkout uses the Merchant Ruby Software Development Kit, which we expected be deprecated soon. But the message about its deprecation was removed recently from GitHub. This is great news, as you can now feel free to install PayPal Express in Rails!

Now let's move on to the PayPal Express Checkout integration with Spree!

Step 1. Install the Spree PayPal Express Gem

Since Spree’s developers recommend that we use the better_spree_paypal_express library for our PayPal gateway, we should go ahead and install it. Open the Gemfile for your project and enter the following line of code:

  gem 'spree_paypal_express', github: 'spree-contrib/better_spree_paypal_express', branch: '3-0-stable'
view rawGemfile hosted with ❤ by GitHub

Note that the branch is 3-0-stable in our project. But if you have Spree 2.4.10 or 3.1.0, then type the appropriate version number for your setup.

There are also two commands that you have to run in order to install the better_spree_paypal_express gem.

  $ bundle install
view rawconsole hosted with ❤ by GitHub

This command will download and install all better_spree_paypal_express files necessary for our Spree project.

The next command will run necessary migrations:

  $ bundle exec rails g spree_paypal_express:install
view rawconsole hosted with ❤ by GitHub

Once this step is also completed, just restart the server.

The first step in integrating PayPal Express Checkout into Spree is completed!

Step 2. Set up PayPal Express in the Spree Admin Panel

Now you need to log in to the Spree admin panel. If your Spree admin panel shows the navigation panel in full, find the CONFIGURATIONS button. Click on it to open the menu and select Payment Methods. If this panel is collapsed, hover over the wrench icon and select Payment Methods from the pop-up window.

Spree admin panel

You are now on the Payment Methods tab, so click on the button + New Payment Method, which is located in the top-right corner of the admin panel.

First, choose an appropriate provider from the list. Note that Spree has a standard Spree::Gateway::PayPalGateway provider, but this isn't the one we need to add. Choose the Spree::Gateway::PayPalExpress provider instead.

Add PayPal Express Checkout payment method in Spree

Now, you need to edit the payment method for PayPal. First, log in to your Developer PayPal account and go to Account Details. There, open the API Credentials tab and just copy-paste your Username, Password, and Signature details from PayPal into the first three fields under the PROVIDER field in the Spree admin panel. Note that the PayPal API credentials for Username should be entered in the LOGIN field in the Spree admin panel.

Add a payment method name, which will be shown to your customers. As you can see, we simply entered PayPal. You can enter any name you want. It's recommended, however, to keep it short. The payment method description is optional.

Edit PayPal Express  in Spree

Since we use our sandbox account for testing purposes, the SERVER field should be set to Sandbox. But when you're ready to test PayPal Express Checkout for production, change this field to LIVE.

If you have a logo for PayPal Express, enter the absolute URL into the field LOGOURL. You can also change the name for the payment method and add or delete the description.

There are other options to edit in this page.

Edit PayPal payment method in Spree

Check the Test Mode box if you are only testing the application. When you are working with the production version of Spree, then disable this mode. The DISPLAY property lets you decide whether the PayPal Express Checkout payment method is available for the user.

There is also an AUTO CAPTURE feature. By setting the AUTO CAPTURE feature to Yes or No, you can turn on or off automatic capturing for the current payment methods. In our project, we set AUTO CAPTURE to Yes for PayPal Express, which allows automatic withdrawal of funds from the client's credit card. The other two options are No and Default; if you choose No, then you will have to capture each payment manually in the Spree admin panel. When you need to override this function for PayPal Express, open the file with the subclasses for the payment methods and set the auto_capture?function to false:

  class PaypalExpressCheckout < Spree::PaymentMethod
  def auto_capture?
  false
  end
  end

At last, you can activate and deactivate the PayPal Express payment method in the "Editing Payment Method / PayPal" tab.

This is how we integrated the PayPal Express Checkout gateway into Spree. As you can see, the procedure is very simple, but you get valuable functionality in the end. Your website customers will definitely be pleased with the option to pay directly from their PayPal accounts.

Originally published at 

rubygarage.org