Our first 5 months: Tools, languages, culture and products

Fernando Paris
iobuilders
Published in
5 min readNov 18, 2018

Time goes fast, and 5 months have passed since our official Team start. We don’t have everybody on board but we already have some products live and started with some other developments.

On the following lines, we would like to share our ecosystem, tools, etc.

Tools and languages

  • Intellij IDEA, Visual Studio and Atom as IDE.
  • We are using Groovy (for core components), NodeJs (for prototyping and POCs) and React. We are willing to introduce some Golang components soon.
  • Gitlab as SCM and CI. It allows us to create pipelines from day one, natively integrated in our source code. With its powerful docker based platform we are able to compile, pass specific linters, test and audit the security of our builds. Checkout our github repo. Our vision is to have full coverage and automatically audited code, at solidity level to be 100% sure that our smart contracts are safe from well known bugs and follow good practices.
  • We are using custom docker images for every language related gitlab runners, and using spot instances + docker machine on AWS, to have performant and non time limited CI. Free and 1st paid gitlab plans include only some limited minutes.
  • We are deploying all our platform via terraform.
  • All Our components are dockerized and deployed on amazon ECS. We are willing to move / test, some components with EKS.
  • We have a continuous deployment strategy buid with Gitlab CI, docker and ecs deploy commands.
  • React Native for mobile development. Checkout our first blog post about Ethereum + react native development.
  • QUORUM is the DLT we are using, an Ethereum based blockchain platform. Soon we will use PANTHEON too.
  • Solidity 0.4.24.
  • Solidity Coverage as test coverage tool.
  • Truffle framework: Lifecycle management for solidity contracts and dapps.
  • Ganache: Light node of Ethereum for testing purpose.
  • Solium: Linter & security static analysis.
  • Mythril: Security analysis tool.
  • Eventeum. A bridge between your Ethereum smart contract events and backend microservices. We added a rabbitmq port to the project.

Culture. How we organize ourselfs?

Our lema is to be as much self organized as possible, everyone can approach almost any task and we are trying to take most of decision in and by the team. That’s truly an utopic approach, but we believe we are on the way. How are we doing that?

We are really spending time on having a shared vision, bootcamps, hackatons, trainings, team vs sprint retrospectives and transparent feedback. We decided not to have a Scrum Master role, and help each other to focus on any task, meeting or challenge we will face on this exciting team travel. We are working on it on daily basis. Sometimes it seems a waste of time, being part of all the discussions, or trying to align all the point of views of the team ( when possible ) , but we really believe that building the team, with the most self managed approach will bring us a lot of extra points. Added to this we are shaping a mentoring approach, were everyone who starts has a given mentor, to be and stay on the path of team’s DNA.
Me as formerly the CTO, I am trying to lead by example, and opening almost all the decisions, aligning, listening to all point of views, asking for opinion. Its tough and quite difficult to do it well always, but I am trying to and really believing on the approach.
One of the things is helping us, is continuous communication, whiteboards all over the place to discuss and the ADR’s, This decision process based on a given format, content, is allowing us to, participate on a decision, with a clear context ( ADR + kickoff meeting), have a track of why we decided What, and is forcing us to really, understand the problem, think about possible solutions, write it down in a way that everybody understands it and share, discuss it.

As mentioned, we are willing to build a multidisciplinar team with full stack and devops mindset. Of course everyone will not have full expertise of everything, but its important to have a minimum knowledge and skills to build, on/of all the components of the platform. Having said that, we use given roles that are leads on the different topics, which guide others on the implementations. Finally in our team circle, people are helping each other, almost everyone has a leader role in some topic.

Methodologies

DDD. We are strong DDD supporters. We believe it’s key for success, being domain business centered. Having an ubiquous language, shared between all the organization, reflecting the business in real understandable code, that includes all the use cases written by command, events, invariants is a product booster and helps us.

Scrum. We deliver value every 2 weeks. Sprint planning, refinements, daylies, retros is our day by day scenario. Of course as always, we tune up the framework, to our needs.

Testing

Rest assured. Our first big component is Bank As A Service, and is really API focused. We use this library to make our end to end tests.

Spock. We want to be functional, domain oriented, and having readable tests, given when then test specifications, with the right balance of effort vs benefit. Spock is a lite BDD approach we really love.

No TDD. It sounds weird but decided to no to go along the TDD approach for now. We had several experiences with, DDD, and non DDD, where TDD, made the live harder, spending. more time on tests than real business value. Having said that, we have unit tests of all out command and query handlers, full API and Ports tests in our hexagonal architecture, and end to end tests to focus on the functional cases, cross domain testing. Mainly, we are shifting our unit, integration, regression, and end2end testing percentages depending on the component.

Architecture

We use hexagonal, onion based architecture, trying to decouple all the components of our infrastructure. We combine it with an Event Driven Architecture that fits quite well with DDD, decoupling ports intercommunication with rabbitmq’s queues, exchanges, etc

For the time being, to not add accidental complexity, we have one only deployed component. Yes, a monolith, but ready to be easily sliced. On the database layer we have already splitted domains via several postgres databases in one single instance.

Product development

Besides this, we have used Design Sprint by Google Ventures, to discover and analyze the customer journey, functional approach of our first venture and develop/test it with a prototype with real users. Hypothesis validation is on going!

Our second venture is live, Khipus. A certification platform based on Ethereum. Try it and let us feedback!

New ventures are coming.

Thanks for Reading! Keep Posted!!!

“With confidence, you have won before you have started.” — Marcus Garvey

--

--

Fernando Paris
iobuilders

Working hard to improve on daily basis. Without risk there is no win! @Iobuilders ex-entradas.com ex-yaap ex-lastminute