Category Archives: Blog

Why A Good Commit Message Matters?

Time is money. Time is expensive. Time to market is twice as expensive. Time of a high-skilled developer is as much expensive as you could imagine. That’s why a good commit message matters.

 

“Context! Context! My kingdom for context!”

If you have been involved in a lot of different projects and worked with tons of source code bases during your career, you probably might read commit messages that are a total mess.

Here is a log fragment from the real code base:

 

What the changes were about? Why they were formatted so badly without keeping one style regardless the same code base? Who knows? It was a long time ago in a galaxy far, far away…

Then let’s compare them with the recent commits to the Spring framework on Github:

 

Which would you rather read? Which ones are concise and consistent?

A well-crafted commit message is the best way to communicate context about a change to other teammates. A source diff will tell what changed, but only the commit message can tell you why.

Peter Hutterer pointed it out:

  • Any software project is a collaborative project. It has at least two developers, the original developer and the original developer a few weeks or months later when the train of thought has long left the station. This later self needs to reestablish the context of a particular piece of code each time a new bug occurs or a new feature needs to be implemented.
  • Re-establishing the context of a piece of code is wasteful. We can’t avoid it completely, so our efforts should go to reducing it to as small as possible. Commit messages can do exactly that and as a result, a commit message shows whether a developer is a good collaborator.

 

How a well-crafted commit message looks like

There’s no strict definition of the ideal commit, but in the company we try to follow the known best practices. Some of them I have written below.

Three questions

In accordance with Peter Hutterer, a good commit message should answer the three questions:

  • Why is it necessary? It may fix a bug, it may add a feature, it may improve performance, reliability, stability, or just be a change for the sake of correctness.
  • How does it address the issue? For short obvious patches this part can be omitted, but it should be a high level description of what the approach was.
  • What effects does the patch have? (In addition to the obvious ones, this may include benchmarks, side effects, etc.)

These three questions establish the context for the actual code changes, put reviewers and others into the frame of mind to look at the diff and check if the approach chosen was correct.

One logical change

In general, a good commit should contain exactly one logical change. A logical change includes adding a new feature, fixing a specific bug, a code refactoring, etc. Don’t mix different changes from different areas within one commit, omit massive code changes in one commit as much as you can. It’s better to split them into several observable commits in accordance with the provided functionality. It will help reviewers a lot to understand the changes.

The seven rules

Chris Beams summarized the best practices of the great commit messages into the seven rules:

Keep in mind: This has all been said before.

  1. Separate subject from body with a blank line.
  2. Limit the subject line to 50 characters.
  3. Capitalize the subject line.
  4. Do not end the subject line with a period.
  5. Use the imperative mood in the subject line.
  6. Wrap the body at 72 characters.
  7. Use the body to explain what and why vs. how.

 

For example:

 

The rules look quite simple but bring a lot. They put everybody on the same page, allow to keep the product’s consistency, properly track the changes, restore the rationale easily, without asking the author. Ironically, that author could be yourself several months earlier. But it doesn’t matter how long ago the changes have been done, and does the changes’ owner still work in the company in the same project.

Summarizing all the above, use the best practices, take care of your changes. Never forget, you are not alone, so a good commit message really matters.

Happy coding!

Online Marketplace

How to build an online marketplace?

Online Marketplace is one of the major trends in Russian eCommerce market.  In US and Europe Marketplaces became popular even in 2000-2004 after Amazon has grown to huge online retailer and has established relations with a lot of suppliers.

As you may already know, an online marketplace (or online e-commerce marketplace) is a type of e-commerce site where product and inventory information is provided by multiple third parties, whereas transactions are processed by the marketplace operator. Online marketplaces are the primary type of multichannel ecommerce. eBay and Amazon are the most famous marketplaces of them all.

Is building an online marketplace really that hard? Nowadays building an online marketplaces are become easy with the readymade software and it is one of the best way to grow business in an easiest way. Here I’d like to share a history of the company providing an online marketplace platform that enables retailers and publishers to launch their own online marketplaces.

In 2004, a special engine has been created with API for sending products from different suppliers to Amazon. Strange as it may seem that the project has been realized by Ixtens Inc., a company founded in Russia. Eight years they successfully grow in the sphere of support and maintenance a supplier onboarding process for several online marketplaces.

In 2011 they have launched the first Marketplace for media in the world. At this moment Ixtens has research and development office in Novosibirsk and sales offices in New York and London.  The company staff numbers more than 70 employees.

Platform Specifics

особенности платформы ixtens

The platform has been developed on Java. It’s enabled every ecommerce storefront solution becomes an online marketplace powered by marketplace backend.  The marketplace backend provides a portal for suppliers, delivery services and marketplace owner to aggregate product and inventory information into a single, unified catalog and route the orders to the appropriate supplier(s) for fulfilment. The portal works as a web-service and supports popular protocols and data formats like

  • Flat files
  • EDI (Electronic data interchange)
  • Data formats of popular ERP systems

The marketplace platform helps to automate the Marketplace as much as possible. Some of its functions are enumerated below:

  • automated product import/export from suppliers’ ERP systems/websites to Marketplace
  • automated verification of imported products to meet Marketplace criteria
  • automated aggregation of inventory of the same products came from different suppliers
  • automated analysis of product descriptions to provide customers with comprehensive information about products
  • large document exchange system with order routing and invoice management business logic
  • easy interface for supplier profile management and configuration of the portal

платформа ixtens

Company Success

Among the company customers there were Amazon.com, MTV, Tesco, Benefit, Lifetime brands.

In 2013 New York company Ixtens Inc. was rebranded to Merchantry Inc. and  raised $7m in Series B financing. The round was led by Kite Ventures, with participation from Greycroft Partners and e.ventures. The company intends to use the funds to continue to expand its sales team (read here) and its client base throughout the U.S. and Europe.

History

To develop software company

I have a coffee tree in my office. I was gifted a small coffee tree when we start the software company more than 15 years ago. Now my coffee tree has delightful green leafs, strong trunk, and full of vital energy. This coffee tree had been moving with me from office to office as company grow. It adjusted to many places stayed always green. This tree is a constant reminder to me that for success we need keeping adjusted and keeping grow all the time.

The people are the leafs, trunk, and vital energy for company. It is not a secret in software world that the people affect how successful your company becomes. Nowadays the technologies are changing very quick. To bring company next level you need to hire for potential instead of experience.

This idea together with an atmosphere of openness, honesty and respect for one another let us to develop the company capabilities over the years.

  • 1999: Alexander Sutormin, Julia Malinina and Alexander Saraikin start work together on software development projects
  • 2000: We meet Eugene Nikiforov and open our first office.
  • 2001: Develop of business components for Intershop Enfinity (cartridges)
  • 2002: Starts first Amazon Integration for CBS Sportsline
  • 2003: The first company has been founded as Ixtens Russia
  • 2004: Launch Zabars on new Demandware eCommerce onDemand service
  • 2005: Bebe as a pilot Item Content Management (ICM) solution with Amazon.com
  • 2005: Move to new office  and grow up to 60 people
  • 2006: Builds the merchant integration engine for Amazon.com’s enterprise offering and launch M&S as first customer of this engine
  • 2007: Builds and support SAAS Inventory and Order Management Service for Ixtens US
  • 2008: The second company has been founded as Kyberpark
  • 2010: Builds Marketplace product for Merchantry
  • 2012: Move to new office and grow up to 95 people
  • 2013: Builds Supplier Hub product for Merchantry
  • 2014: Build Product Information Management System for Merchantry
  • 2015: Start new company and new product

Long term we were dedicated team for SAAS marketplace software development powers the development of Merchantry’s cloud-based software which supports multiple suppliers/sellers of products, aggregating product and inventory information into a single, unified catalog. The retailer then merchandises marketplace products on their online storefront. Once a shopper places an order, the items in the order are routed to the appropriate supplier(s) for fulfillment.

J2EE, Java 1.4 – Java 7, Tomcat, JBoss, Terracota BigMemory, Terracota Quartz Scheduler, SOAP, REST, JSON, Struts, GWT, jQuery, Hibernate (JPA), Datanucleus (JDO), Jersey, Axis, XSLT, JAXB, xmlbeans, Oracle

so we are here now to move forward!