My Q&A for InfoQ on Keeping Distributed Teams in Sync

I spoke with Ben Linders of InfoQ (thrilled to be published at that website!) about challenges and communication patterns for Distributed Teams, uncovering bits of my Atlassian Summit 2018 speech.

The biggest challenge of distributed teams is communication, which is essential for establishing ground rules on collaboration. Shifting working hours to accommodate each other and team liaisons help to communicate and synchronize work. Teams based on trust, respect, and openness will thenselves to help people throughout the organization and foster a culture that keeps teams in sync.

Marat Kiniabulatov, project manager at SkuVault, will give a talk about the anatomy of distributed teams at the Atlassian Summit Europe 2018. This event will be held September 3 – 5 in Barcelona, Spain:

InfoQ spoke with Kiniabulatov about the challenges of distributed teams, how product owners and stakeholders collaborate at SkuVault and how the workflow is managed, how distributed teams communicate effectively and synchronize their work, and how SkuVault nurtures a culture that keeps teams in sync.

Full Q&A at Keeping Distributed Teams in Sync,

Also available in Japanese and Chinese

Telegram -> Stride Migration Experience

Recently I hosted Minsk Atlassian User Group, where I shared our experience on migrating to Stride and gave the analogy between Stride, and Russian word ‘Stradai’ (-> eng.: ‘Suffer’). I’ll explain the analogy later. Hence the ‘Napalm Death’ song ‘Suffer’ joke on the first slide 🙂

Given that a lot of people use Telegram as a corporate messenger, and given all of the telegram-blocking happening in Russia currently, it’s pretty relevant to write about alternatives. We at SkuVault migrated due to the need of user control, but migration experience is relevant to many other teams.

Atlassian launched Stride as a HipChat Cloud replacement (so we can call it hipchat 2.0). Main competition is Slack, which is currently de-facto corporate messaging standard, as we know. I’ll compare Stride to Telegram and Slack in areas they are strong.

Pros

Atlassian Ecosystem

Biggest point of Stride is that it connects to your atlassian ecosystem. Typically you got single account for Atlassian User, from which you can manage entirety of Atlassian Permissions. Now, Stride is added as an application to the very same account, and access / admin rights are easily managed from the very same place. If you want to have control over the users and the ecosystem that is locked to Atlassian (as we do) -> this is an ideal scenario.

admin_unified

In Telegram we had personal accounts, which you don’t have control of (sure you can create virtual / work phone numbers and link them to telegram to make it corporate-friendly, but that is kind of a crappy way to maintain users ecosystem).

In Slack – you have to pay more than $3/user and it’s a separate account management system.

Users Control

User Control means removing a person, when she no longer works at the company, visibility for messages in order for infosec to not be compromised.

Audio and Video Group Calls

It may not be something you’d count as a pro, but given that we previously used Telegram + Skype for calls (with hangouts as a fallback in case of skype outage), it’s nice to have same app doing everything.

Jira / Confluence Integration via bots

z0ogiy1zqdssa9zywvco-ccwoii

Integration with Jira and Confluence (not out-of-the-box-though) gives you a glimpse of the ticket in the chatroom (ticket card that reflects priority, assigne and editable layout), ability to create tickets as a command to chat-bot (create new bug Fix spacing on signup page in SV project), bitbucket PR review poking, and a lot of neat other things you’d expect inside the Atlassian ecosystem).

bz_ruco5zorq8lnv3cnme3tpjvq

Basics

Mentions, citation, styles for text. NO HASHTAGS THOUGH – giant bummer!

Cons

suffer_stride.png

And here’s my analogy of ‘Stride’ to russian word ‘Suffer’: you can use Stride, but it’s still raw, and a lot of features you’d expect to be basic in messaging, are half-baked in Stride.

Video Calls

Let’s admit, that Slack sucks at group video calls as well. But Stride is much worse 🙂

stride_kianu.png

  • Issues include showing bad internet connection, when connection is good.
  • People may suddenly leave the call, although didn’t click on leaving or anything
  • Stride’s animations are smooth, so when it switches to another person, it fades in / fades out. And sometimes crashes during that animation!
  • Video lags a lot, sound doesn’t though
  • Video freezes a lot, and doesn’t resume until you restart the call
  • RAM consumption (400mb), CPU consumtion 70% on core i5 2014. This is a lot.
  • When you share the screen, and stride catches a glimpse of itself (stride window), it falls into the infinite glitch of Stride fractal windows.

Ok, done with the video calls!

Basics

  • No hashtags (sucks)
  • Sending messages is painful (it’s slow).
  • Sending messages with attachment is a torture (Stride waits until image is uploaded (slow), and only then allows you to click on send message (which is slow as well)
  • No forwarding between chatrooms -> leads to isolation of discussions to room-only.

Notifications

They are horrible (not Rocky-Horror-Show or Dr. Horrible way, and not even Troma-way. They are as bad as most coffee in US (ha-ha)). The sound of notification is bleak and unnoticable. You can’t change it, even if you rip apart the guts of app package and assemble it again 😦 That results in people not reacting on urgent messages.

2018-05-04 11-51-23

There is no mute for chat rooms, which results in information overload and renders the whole notifications system pointless.

There is no indication that your message was read by your counterpart. You don’t know whether to poke your colleague or he already read this.

Phone gets 2/3rds of all notifications. But when it does – mac app doesn’t show any of those! This is a typical failure, I’m writing this post on the train from Brest to Minsk where I ride to host AUG Minsk, and our team notified me with long message on my phone, but i see no new messages in my mac app. I have to restart it to get those messages.

Jira Bot

Although integration with jira bot is neat (hey, slack does that even better, actually), it crowds chat room’s vertical space like a giant worm that digs Jasinto in Gears of War 2. If you dump number of tickets to dicsuss in the chatroom, you can’t read any message because card previews will occupy the whole 2-3 screens of vertical space.

xetwzcbgzz5vqnfapjf4ab5il5a

JSON parsing

As per our admins, Stride doesn’t parse JSON on itself, so basically you have to parse and feed parsed JSON to the API yourself. Not the case with telegram.

Nutshell

Stride is not-horrible-beyond-anything, it’s ok. You can use it and adjust to it. Especially if you’re locked to Atlassian Ecosystem (and I love and use jira, even after the latest interface update). But if you’re already on slack – there’s no point, it will work better for now.

There are a lot of things to improve, and the guys at Stride work on making their product better. It took 5 years to telegram to become the best and neatest messaging platform, it took same number of years for Slack.

Parking Lot

References – Submitted Issues

Ufa AUG #1. Wrap Up

So we’ve survived Ufa Atlassian User Group, the very first meetup, with 17 people visiting our office to hear about jira, confluence, bitbucket and other atlassian products 🙂

 

We’ve discussed how Jira helped us in reflecting SkuVault development processes, and how do we keep documentation on the feature in Confluence, until it’s released, and what info do we store there.

Panel consisted of Smena.io, modulbank, MEGI, and a couple other teams 🙂 Presentation is available in Russian via this link: UfaAUG_1.

Stay tuned at https://aug.atlassian.com/ufa/ for more events in Ufa 🙂

 

Agile Communication in Distributed Teams (with no overlapping hours)

So as you know my speciality is distributed teams 🙂 This post is about what changes does the agile communication face (and scrum in particular), when it’s adjusted to the distributed teams. This is my experience, I don’t assume this is a silver bullet, but such approach works for me for the last 5 years and proved itself to be proficient.

Let’s divide communication by types:

  1. stragetic meetings (plannning, retrospective)
  2. daily huddles (e.g. daily standup in scrum)
  3. day-to-day clarifications.
2018-01-18 11.12.16
by Text I mean Instant Messaging

Let’s add another dimension: geographical distribution:

Collocated teams – everything’s perfectly fine for all three types of communication events. Teams, working in scrum, that are collocated face no issues with any of those.

Distributed teams with little difference in timezones, but still with overlapping hours. Great examples are US – Chile / Mexico. Netherlands / India.

  • Daily syncup can be handled with almost no pain, as well as planning and retrospective (if you incorporate scrum in your company).
  • Instantness of clarification on work tasks is lost (when overlapping hours end), however given that skype / hangouts / whatever you use is just a click away – no significant impediments are to be found.
  • No matter what you think about focused team, and that it processes everything faster due to unitedness, whenever team member is outside of her overlapping hours with the rest of the team – communication lag happens.

 

Distributed teams with no overlapping hours (8+ hours difference).

Approaches here are:

  • 3.1 Team liason. When someone from the team in one part of the world is having a meeting during his time off work, to sync up with other part of the team in different timezone. Usually, team liason is someone from product team, however there are different examples of who syncs up with dev team in the industry. It can be simply a representative from one part of the team that syncs up on the progress with the other part (just like in scrum of scrums)

 

  • 3.2 Timezone Compromise approach. Teams change their work schedule, to have a compromise in at least 1 overlapping hour, in order to sync properly. For example, start of working day for one part of the team in western hemisphere moved from 10am to 9am, and eastern hemisphere team changes their working day to start from 10am to 9am. Thus, you got at least 1-2 hours overlapping. Whoa, problem solved -> we can get back to bullet 2, on how teams with overlapping hours work together! But remember, everything depends on team configuration, whether the team is comfy with selected approach, and development tasks specifics.

 

  • 3.3 And finally, you can set up communication process in a way it’s comfortable for everyone in the distributed team. My personal beliefs is that redundant communication is always less efficient than on-demand-clear-bulleted-discussion, thus I’d prefer clear agenda and clarification when needed.

— 3.3.1 First of all, that means that people still are participating in retrospectives and planning sessions, cause those events happen once per 2-3 weeks (thus distraction or working off-time is tolerable). However, those meetings / scrum rituals are to be performed with clear goals, and well-prepared bullets. Try to not allow offtop conversations (when someone gets into topic not relevant to current discussion). Remember, team values personal time, and no team member should suffer from poorly planned meetings.

— 3.3.2 Second, it means that daily sync (or daily standup, if you follow scrum) can be done via text, at the end of team’s working day. In order to reach more visibility, developer can share a link to the branch, that he worked on. But main goal is to have an exceprt of what team member has done during the day, that is visible for everyone (e.g. special channel on updates in telegram). Some people also propose asynchronous video messages (Dave Snowden of cognitive edge shared this experience of his with me, referring to the times he worked at IBM) – you record video message for the team, and even share the screen, if you want some visual material on your work.

— 3.3.3 Third, clarificational communication (meaning day-to-day clarification communication type) is done on demand. Meeting for such batch of clarifications is done in a compromise time, so that noone’s felt left out). The good part of that is since you don’t have to get explanations on critical and extremely complex clarifications every day – you don’t need to torture your colleagues with evening / early morning calls each day. Usually, most of the impediments are resolved via instant messaging. Please keep in mind, that requirements standardisation is a key role in these clarifications, as properly structured requirements save a lot of time while developing a feature.

— 3.3.4 And fourth, but equally important, more standards and documenting. The more info necessary you prepare for your colleagues overseas, for the questions that may rise during your off-time, the less he will be stuck. Please use common sense in how much you need to prepare. When team gets to know each other, such planning becomes much easier. And finally, efficient process always means that person doesn’t get stuck 🙂

Finally, we’re getting to my favourite ever part!

Distributed teams with no overlapping hours + language barrier! I’ve been working with those for the last three year, and here are the additional steps to make it all work efficiently.

The three common baseline rules to follow are:

  1. Prepare meeting agenda prior to the meeting. I’m talking about writing down basic points, explanations, and maybe even branching when presenting solutions (depending on meeting complexity). It’s obvious, that people not fluent in english can’t properly communicate during the meeting – everything starts to require much more time, which isn’t efficient (and quite heavy, when it comes to hourly payrates 😉
  2. More documenting. You may say that Agile says “working software over comprehensive documentation”, however when dealing with distributed teams + no overlapping hours + language barrier, I can’t stress enough how much documentation means. There are key principles better to be described, as the team grows: communication standards (what type of communication is done via which tool, working time, speed of response), requirements acceptance, visual standards for documentation. All three principles affect how developer understands the task he’s supposed to work on. Requirements should have only one way of interpreting, should include clear pre-and-post-conditions; bugs are to be described in reproducible steps.
  3. And finally, it’s essential to have a bi-lingual person (team liason), who helps with english (he comes up with translation of complex bits, moderates the discussion). This person is better to be a developer or someone who gets the technical part well, as she often helps with syncing two development parts of the team. She may also add meeting notes on technical details agreed once meeting is over. That person most likely will sacrifice some of her time off, since hours don’t overlap.

At the end of the day, there are plenty examples across my experience, and blogs, how people manage to work with just on demand meetings, and create complex projects together. Those are git, atlassian and, among others – SkuVault.

Let me add an additional rule to common sense manifesto – process over redundancy. Greatly established process, understandable and rational for all parts of the team, makes it easy to track progress through transparency, keep team motivation high (for being productive) and time off undistracted.

References:

  1. http://www.disciplinedagiledelivery.com
  2. http://snowdolphin.com/blog/2009/2/16/adventures-in-distributed-agile.html
  3. http://agilemodeling.com/essays/communication.htm
  4. https://www.atlassian.com/blog/confluence/4-simple-collaboration-strategies-distributed-teams
  5. https://www.atlassian.com/team-playbook
  6. https://www.atlassian.com/company/events/summit-europe/watch-sessions/2017/scale-extend/a-brave-journey-in-merge-waters-how-paysafe-consolidated-their-atlassian-tools
  7. https://msdn.microsoft.com/en-us/magazine/hh771057.aspx
  8. https://pdfs.semanticscholar.org/cde9/6fed7d2e2591bc8f697814ab1f33e3a84160.pdf
  9. https://www.scrumalliance.org/community/articles/2013/july/managing-distributed-teams
  10. medium.com/@MentorMate/what-i-learned-managing-a-remote-agile-software-team-fd2db22e22b1
  11. https://www.researchgate.net/publication/263398659MoonlightingScrumAnAgileMethodforDistributedTeamswithPart-TimeDevelopersWorkingduringNon-Overlapping_Hours
  12. https://www.agileconnection.com/article/five-agile-challenges-distributed-teams
  13. https://www.agilealliance.org/wp-content/uploads/2016/01/Distributed-Agile-in-the-Enterprise-and-Virtual-Spaces-2012-08-16.pdf
  14. http://www.research.ibm.com/pdfs/scrum/Chapter6Pearson20090706.pdf
  15. https://www.thoughtworks.com/mingle/scaled-agile/2016/06/13/visualizing-time-zones.html
  16. http://reqtest.com/general/working-efficiently-with-distributed-teams/
  17. http://www.methodsandtools.com/archive/archive.php?id=109
  18. https://books.google.ru/books?id=jBsVrWbIhYUC&pg=PA112&lpg=PA112&dq=distributed+teams+agile+communication+no+overlapping+hours&source=bl&ots=0kdQw5RQo9&sig=SMVuHCrX0oH4dWq1KDn2lQ8-1fk&hl=ru&sa=X&ved=0ahUKEwis5tDGvOHXAhXGQZoKHWzRCqE4ChDoAQhMMAU#v=onepage&q=distributed%20teams%20agile%20communication%20no%20overlapping%20hours&f=false

RU: Открываем дочку американского юридического лица в России

This post is available in English.

И делаем это без необходимости прилета в РФ американского гендира.

Последние полгода я набивал шишки, ходя по инстанциям, собственно, поделюсь опытом 🙂 Задача: открыть 100-процентную дочку в России (материнская SkuVault.com находится в Луисвилле, Кентукки). Наш случай несколько уникален: CEO не мог посетить РФ, так что заверять и пересылать идентификационные документы приходилось туда-сюда меж двух контитентов.

На практике, все делается достаточно просто. Всего-то придется столкнуться с бюрократической машиной Mother Russia (которая за последние годы стала неимоверно удобнее), проблемами с межведомственной коммуникацией, ну да беготней с документами.

Continue reading

Workflow for the Requirements in the Distributed team

This is basically the anatomy of a distributed team, working on requirements. Key point here is that this is the process working for us, in current configuration, and it’s effective.

Disclaimer: Every organization is different: from internal structure to how it communicates with the outer world. So no workflow is a silver bullet.

Disclaimer 2: SkuVault is an ever-improving team of ~50 people, distributed across 10 timezones, 2 different versions, and serving loyal clients worldwide 24/7. Learn more about Communication in distributed teams: Messenger & Rules, or Why we ditched Scrum, in favor of Kanban in JIRA

In order to let developer work as productive as possible, management should ensure the following bits related to her work are tackled:

  • Requirements Fallback – whom to ask
  • Issue Description & Decomposition
  • No interruption

We moved closer to ‘no interruption’ bullet by creating on call teams, that are reacting to whatever urgent issues arise. (hållo to Kniberg’s Scrum from the Trenches 2nd edition – our own way of ‘firefighting teams’!).

However, there was no requirements preparation workflow a while back, so as the features grew more complex, more dependencies were discovered, we faced the inevitable given our product size: scope creeps, miscommunication, conclicting scenarios and inconsistency.

In order to bring all departments that were related to requirements eliciting and approval, we’ve created Product Management flow, which had to be highway to hell to better requirements.

Product Management Flow

We aimed to tackle the following areas by creating a formalized workflow:

  • Easy to understand sequence of steps
  • Each step has an accountable person, visible to all participants
  • Workflow encourages Argumentation and Discussion -> no misinterpreted suggestions and details are hashed out collaboratively
  • Each step ensures higher quality requirements, by providing criterias to be met on the output

Workflow consists of sequential steps: New Issue -> Discovery -> Sign Off -> Analysis

IMG_20170822_125022 (1)
mind the typical bad estimation of space on the left 😛

New Issue

Ticket is created by trigger from multiple sources (marketing, services, tech, customer support forums,..). During this state, the ticket is relatively empty, providing only the request and source of the request.

Transition: In order to move the issue to the next stage, Product Owner reviews whether we’ll ever do this feature. If no – he closes it. Yes, sometime – he moves the ticket to Backlog. Yes, near-future – he moves it to Preliminary Analysis.

Preliminary Analysis (Discovery)

Step Goal: Product owner should outline Feature goal (what we need to achieve, benefits for our company and customers); describe basic business process (general 1-2 sentenses on how it works among the warehouse, since we’re a warehousing solutions company); and add that to wiki-page for that feature.

Example: 

Brief feature description

Shipments are a way to track sale items that have been shipped to the customer of the Sale. A Shipment exists in SkuVault once a Tracking Number is assigned by the carrier.We want to provide an ability to connect and save tracking numbers, so that our users can have more visibility and editing right inside the app.

What do we want to achieve
Allow people that use shipping providers that don’t integrate with marketplaces as SkuVault
How it works on the warehouse

Goal: Allow clients to label products with tracking number, and see shipments in relation to Sale they are attached to

  1. Picker gets to the QC table
  2. QC performing person takes the product, QCs it and labels the product with shipping label and tracking number
  3. The tracking number is added to the system and can be visible in relation to the sale
  4. User tracks the product via tracking number

Stakeholder Sign Off

Since there’s quite a stream of tickets, we let Stakeholders approve bunch of tickets at a time. Someone might say ‘Hey, isn’t that Product Owner’s responsibility, to approve?’. Well, first of all our product is big and includes different areas and domains: services, marketing, tech, operations – all having their own pursuits respectively, even if we’re moving towards the same goal.

Step Goal: approve the idea, general process and timeline for the feature to be developed.

The next step would be to gather related parties and start..

Analysis

Analysis is biggest, most collaborative and complex part of the workflow. It involves:

[Business Analysts (creating User Stories)] => [collaborative efforts between BAs / UX / Developers (Wireframing)] <=> [BA / Developers (requirements adjustments, brainstorms, decomposition and clarification)].

Outcome: clear and atomized User Stories with Backend Subtasks with estimates, that give you ability to grasp and plan the feature for development. By you I mean us, Project Managers 🙂

Example: User Story – formalized and easy to grasp description, representing user activity and ability to interact with it.

Precondition: user is on Sale Info page

  1. Before the user clicks a Shipment Tab in the Sale Info page, the hint at the top says “Click a Shipment for Detailed Information”
  2. When the user clicks a Shipment line they see complete Shipment details at the top.
    1. list of fields for Shipments can be seen in Shipments – Plans / Technical Requirements
  3. They can click a button for Shipped Items or Total Cost to see detail for the items.
  4. If a Tracking URL exists for a shipment the user can click it to open the URL in a new tab.
    1. After new tab opens, user is navigated to shipping carrier website with tracking url info
    2. If there is not a tracking url user simple sees “Unknown” instead of the url.
  5. If a Label (ie: PDF) is present, the user can view it in a new tab, or download it by clicking on ‘Download’ button

Post-condition: user is able to see related Shipments info

We got strict rules for creating user stories, technical tasks, support requests and bug reports. This ensures same standards across out task-tracking system (Jira, and properly used Kanban magic) for different issue types, and allows to interpret requirements with the single possible way (which is extremely helpful :).

kanban_board

Nutshell

Right, so in a nutshell, this dramatically increased our requirements quality, and gave us ability to start analysing scope creeps properly, visibility for similar projects and better prognosis. There are things to improve, such as redundancy removal from the requirements, optimizing time spent on the workflow, better communication when estimating client requests – we’re getting closed to that!

Smaller IDEAS tickets - Page 1

one more thing: “oh, author, your flow is redundant for smaller features!”. You’re right, just remove sign off phase and ease analysis to accomodate simple story description  for that feature / improvement ;). 

Why we ditched Scrum in favor of Kanban in JIRA

Warning: don’t misinterpret scrum for agile as a whole 🙂

Around a year ago I wrote a yearly retrospect on how the workflow at SkuVault is organized, and how we set up our jira boards to work in sprints.

sprints and their goals

There was no Kanban backlog at the moment, and we used Scrum board as an improvized scrumban tool: we had the sprints, which were treated as folders to fit tickets in some time period. Classical sprints were not suitable for our workflow, I mentioned the reasons in Year Retrospective @ SkuVault. So that sprint-folder system was great, visible and allowed us to predict.

2017-07-16 21.39.59

Yet, in a year period the signal that our approach (sprints as folders) doesn’t quite work appeared – there was a number of tickets migrating from sprint to sprint being rescheduled over and over.

Allow me to add a small note here on SkuVault specifics: There are different categories of work, and planning a common roadmap doesn’t quite work either: we get different priorities from different departments (QA, Product Management, Services and Angry Clients, Services and Happy and Willing to Pay clients) – so the urgent ticket scope inflates. Urgent tickets may require distraction of a developer working on some client request, which shifts the timeline for delivery. So, in a nutshell: there is no unified roadmap between different categories or depts – there is a near-term plan only, with each category having it’s own stack of priorities. Now add to this a remote team that works in collaboration across atlantic and with the timezone difference of 9-10 hours 🙂

worldmap
SkuVault is a distributed team of awesome people, spreading across 9 timezones, or sometimes more. Notice how pathetic I am when it comes to image editing. Those are not cute animals – those are coat of arms symbols, lol 🙂

So a question is: how to remodel the workflow to reflect the specifics?

Buckets and Kanban

We came up with the idea of buckets: basically those are categories of work, originating from different departments with separate product owner responsible for stack of priorities.

Last year Atlassian finally realised the scenarios teams use their product for. So, Backlog for Kanban was born out of desperate cry of thousands of PMs, Teamleads and other people who cannot develop themselves and just drag and drop tickets on the boards (/sarcasm).

The feature came out quite handy and we were able to merge our workflow with our development process IRL.

kanban_backlog_glory
Finally, there’s an option to see upcoming backlog you can both groom and plan inside, and drag that to ToDo as the near-term goals! Don’t forget to estimate that properly 😉

Backlog Kanban allowed us to re-evaluate a lot of backburners that were hanging out there, never getting into the sprints. It also gives us a cleaner board – cause you can store current workload apart from near-term plans, yet in the same board. It’s something you already get with scrum boards, just without sprint management.

Current State

We attacked backburners and development scope from two fronts:

  1. created a separate IDEAS project, where tickets were getting fully fleshed out prior to development;
  2. moved all of the backlog tickets that were on the shelf in development projects back to the IDEAS, to re-evaluate;

This + we’ve added Buckets System, with the support of limited number of devs in the pool for each bucket. I’ll try to write a separate post on how Buckets work in our company later (spoiler alert: they work only as indicators of ticket origins, otherwise – they are kind of not really helping, as of the current state, after some teams shuffling 🙂

Boards, Workflows, and two Backlogs

We’ve got two workflows – one for preparing the ticket for ready-to-be-developed state, the second is for development itself.

Each workflow has it’s own board – as you know, boards are the best ever unicorn rainbow tool to show state of the project from a particular angle.

So two boards reflect those workflows.

IDEAS Board

(Also called pre-development), managed by Product Management. Includes it’s own backlog for backburners, that we put in the shelf for some time (or close to forever); Sign Off, Detalization and Formalization, Architecture Review and finally Ready to Schedule states. Each step has a description and a format of how it should look.

pre-dev-workflow

The point of this board is to reflect status of every single idea that we decided to evolve into a feature, and to see the bottlenecks in Product Management workflow.

pre-development board
Ticket on the right is not violet – it’s just blocker by another Core task
PDM Workflow

Establishing that IDEAS board was also a result of creating full Workflow for Product Management, without letting the ticket out of the IDEAS project and into main SkuVault development project, until all the details and edge cases are fleshed out (well, you caught me – there is no chance you get all 100% of edge cases, but you should try as hard as you can).

By creating standards for each step of formalizing the ticket, we’ve ensured the consistent quality of ready-for-development tickets, which ensured that they won’t be put on hold until clarification from API partner / Client / Product Management. You don’t get big stream of tasks pouring into development, but the quality of such tickets lets developers be distracted less and be more motivated, because who wants to switch context and work on something unfinished.

Development Board

As I pointed out in previous posts – development board is pretty much untouched -> if it works, don’t break it 🙂

SkuVault v1.7 - JIRA 2016-06-08 15-12-47

But the utilization of Kanban Backlog in JIRA came quite handy for both of the boards: you are able to have a set of tickets in the backburner, still in same project, but not wasting ginormous amounts of space on the board -> you just access all backlog via a special planning view.

backlog_predev
Pre-Development Board Backlog

While IDEAS board has a backlog with things, that should sit on the shelf for some time, Development board utilizes kanban backlog in a slightly different manner: I store optimization tickets that we need to check every couple of weeks / months there; as well as User Stories for Epics, that are still in IDEAS, that we didn’t get into development yet; or it’s a very handy way to form a pool of tasks for upcoming developers.

kanban_backlog_glory
Development Board  – Backlog. Two Magento versions support is on hold -> we’ll reevaluate them in the coming months – they’re waiting for their turn.

 

JIRA also support swimlanes for boards, which is utilizied by us in a manner of separating projects one from other:

development board
Three projects in Progress for Shawn -> Lots, QC Improvements, Shipments. The higher the project’s swimlane – the higher it’s priority.

..in a nutshell

  • We’ve ditched sprints, in favor of Kanban. It’s much easier to not pointlessly drag and drop tickets from one sprint to another, if they’re not ready. As I wrote, Urgent tasks needing on call devs contradicts with uninterrupted scrum approach for developing concrete chunks of functionality in a given timebox (mind the fact that scrum and agile as a whole deals with deadlines badly, while we have deadlines most of the time);
  • Kanban gave us differentiation by projects on one board, without making the board too crowded. Scrum boards give that too, but count the hassle of moving unfinished tickets from one sprint to another, which doubles the maintenance work;
  • Kanban Backlog is a great feature, allowing us to manage all tickets in the project. We could have done this in two boards (one for new tickets to be moved to agenda or closed, and another for development / formalization itself) – but now we can manage all tickets in one. Neat.
  • We had an Urgent Board (Kanban Workflow), and Development in Sprints (Scrum) -> now that we moved Development itself to Kanban, we were able to unify the boards, and everything, from minor to blocker tasks, is visible on the same Board! This is great!
  • Never use scrum rituals just for the sake of rituals. We didn’t use sprints for the sake of sprints, we approached sprints as folders and timeboxes. However it’s a common mistake, while management or teams create a cargo-cult for scrum. Most likely you’ll use different practices and methodologies over the time, and finally will come to a hybrid approach that makes you efficient.
  • There are different companies, and certainly there’s no silver workflow bullet for all. So given the maturity / infrastructure / tech. stack / staff – you should model the workflow related and reflecting the flows inside that particular company. SkuVault is changing, growing, scaling – and so is the workflow. Different depts can have different workflows – and we reflect that.

So you want to open US-company subsidiary in Russia

This post is available in Russian.

And do it without the CEO flying all the way down to your city 🙂 

Let me share a bit of an experience from past 6 months 🙂 We wanted to open a branch in Russia (parent company is in US). Our case is a bit unique: our CEO wasn’t able to visit Russia, so we had to verify and send the list of docs back’n’forth between two continents.

Actually, that’s not as complex as it seems. You just have to deal with bureaucracy (which dramatically improved over the past years) and intradepartmental miscommunication, and, well, running with pack of docs to veryfy them in both countries.

Let’s get to the basics – list of docs needed to open up a company in Russia:

  • Owner’s passport
  • Application form (to open up an LLC)
  • Decision form (to create a company and assign a general manager)

The list alters just a bit if the owner is to be another company:

  • Documents on establishing parent organization, who owns it and as the russian tax dept states: note from Department of Trade or some analogy
  • The rest is the same as above.

Parent Company Docs in US

Main company docs in US are:

  • Certificate of Existence (when the company was opened and by who);
  • Annual Report (yearly report on company state);
  • Letter of Good Standing (report on company tax health);

You got to file only document originals, signed by Secretary of State!

  1. You take the document originals
  2. You translate them at translational bureau
  3. That bureau should also notarize the translation

There are cases, when company has several owners. I’ll get to it in the section below.

Docs to Confirm Parent Company Owner Identity

Russian Tax dept dreams of all people in the world having same documents, as Russian Citizens (passport, INN (analogue for SSN, that doesn’t allow to steal identity :), SNILS (pension fund info card). So you may be stunned for a sec when a receptionist asks that info from US citizen. And it usually stuns the whole dept, when they are explained that there are no inner passports in US (only for foreign travels). Jesus Christ, those barbarians use non-canonical (USSR-influenced) pack of personal documents -> send in the inquisition..

Well, in reality passport of a US citizen (for a foreign travel) works great. The biggest issue here is that such passport doesn’t contain info on where the person lives (and this is essential in Russian world perception – how can you not be attached to the particular address in your main document?!). This issue is resolved by copying Driver’s Licence that includes living address.

So, in a nutshell, documents company owner needs to send to Russia are:

  • Copy of Passport of a US Citizen
  • Copy of Driver’s Licence

Those documents are processed in Russia, before filing:

  1. Passport and Driver’s Licence are translated
  2. Translation notarized

Now, getting back to the question, where you got multiple company owners. You don’t want the pain to be worse, so you better process docs of CEO, and not co-owners. That will make it easier and won’t require additional signatures on other documents.

Application form

Different branches of Tax Dept want the Application to be filled in different sadistic ways, which I’m not the fan of. If you work with some lawyer firm, that makes it all for you – DON’T BELIEVE A WORD! Well, they will fill up many docs for you and even run and sign them for you. However, some things they cannot do – e.g. verifying signatures of company owner, if he’s not in Russia. In fact, good lawyers on creating international branches can be found in their natural habitat: Moscow and Saint Petersburgh. And since those lawyers don’t work with other regions (they can’t create international branches in other region jurisdictions) – “move along, nothing to see here”.

Many law firms and tax dept themselves will tell you the only option available for Application Form to be filled. It includes:

  • Filling only in Cyryllic and only by parent company owner (bogus – you can have the full document ready, and only to be signed )
  • Signing by owner, with signature verified ONLY in Russia (bogus)
  • Signing by owner, with signature verified ONLY in Russian Consulate (half-bogus).

Getting to the last point: in fact sometimes tax dept may reject signatires not verified by Consulate or some legal Russian Federation entity. That sucks. You know what else sucks (and works!): you can verify owner’s signature on application form at any notary in US (it’s better be Russian-speaking notary, and there are loads of them in almost every country corner – in Louisville, at least, we found one). Why did I mention the ‘sucks’ part? Because Tax dept (and Lawyers) in Russia state that only Consulate should verify signature on application form, but Russian Consulate and Embassy state that US-based notaries (even not speaking Russian ones) have the same power to verify the signature!

Russian Consulate Way

You are lucky! If your CEO got zillions of time to visit Russian Consulates (which are located in the corners of east and west coasts), to schedule appointments there and deal with GRBM (great russian bureacratic machine), which has it’s gears oiled by thick wax, and thus running slow.

While D.C. consulate is fast to reply and it’s quite easy to reach it out by the phone – SF consulate, on the contrary, replied to me after 2 weeks passed. Small hack: you can also verify docs in the consulate you are not attached to (e.g. KY citizen verifying docs in SF) – but clarify that moment first (just in case).

You first have to pick free slot (usually a month or two away from current date), pay consular fee and verify the signature.

  1. You got to pick your company docs (cert. of existence, letter of good standing, annual report) and bring them to the consulate
  2. You got to bring your personal docs (originals and copies of US Citizen Passport and Driver’s Licence)
  3. You got to send already filled forms you want to verify notarize or sign, via email. Not really handy, but tolerable.

After you get into the consulate, you got to verify company owner signature. It should look the following way: signature verified, with stamp of a notary in a consulate. The next page is an info of a notary, that has verified the signature. Notary should also state the number of pages in the document (so that there are no replacements afterwards). Both Application form and Notary page should be stitched together and stamped on the stitched place.

one more thing to mention: if you’re working with lawyer firm, and it handles the filing of docs to the tax depts and social funds, you should write Limited Power of Attorney from the owner to the law firm’s courier (or yourself, if you’re in charge of the branch creation)

Local Notary Way

It’s much faster and easier. CEO signs the application form at any notary, and a notary verifies the signature. It would be ideal, if the notary would enter her notary licence number (in the INN / ИНН) field.

application_last_page

Limited Power of Attorney

In order to file documents for company creation, we got to write Limited Power of Attorney, for one year, for a person who would file it. You will need an original POA and a notarized copy.

limited_PoA

Decision Form

Easiest part is the decision form. CEO should just sign 2 copies of Decision Form, it and stamp them with organization stamp. Don’t worry about non-ink stamps that are common in US – they are accepted in Russia.

Filing: verifying the list

Congrats – you’re finally gathered all of the docs needed! Let’s verify the list:

  1. Parent company: Certificate of Existence (apostilled -> translated into Russian -> translation should be notarized)
  2. Parent company: Annual Report (apostilled -> translated into Russian -> translation should be notarized)
  3. Parent company: Letter of Good Standing (apostilled -> translated into Russian -> translation should be notarized)
  4. Parent company owner / CEO: Driver’s Licence (scanned + printed in Russia -> translated into Russian -> translation should be notarized)
  5. Parent company owner / CEO: US Citizen Passport (scanned + printed in Russia -> translated into Russian -> translation should be notarized)
  6. 2 copies of Decision Form filled in Russian, signed by parent company owner, with parent company stamp on it.
  7. Application Form filled in Russian, signed by parent company owner, with notarized (in US) owner’s signature, and notary’s info attached to the application form. Russian bureaucrats would ideally prefer Application Form and Notary’s Note on number of pages stitched together, and stamped in the stitched place, so that no pages could be replaced afterwards. But that’s not mandatory.

That’s all folks! Don’t forget to take confirmation papers on documents receiving by the tax dept, as well as OGRN / INN papers, and certificate of existence in Russia. Keep 2nd copy of Decision form to yourself as well, you may needed it in the bank or some other institution sometimes.

Russia is great, don’t let bureacracy ruin the experience! 😉

References:

  1. Decision form: https://www.regberry.ru/registraciya-ooo/obrazcy-dokumentov/reshenie-edinstvennogo-uchreditelya-obrazec
  2. Application Form: https://www.regberry.ru/registraciya-ooo/obrazcy-dokumentov/forma-r11001-zapolnenie

Communication in distributed teams: Messenger & Rules

In order for the distrubited teams to work, you got to have a clear flow, a set of general rules, that will fence the process and allow people to collaborate effectively around the globe. If everything is set up correctly, you are able to create amazing products with global professionals, and cover customer support 20+ hours a day.

Communication

What do you miss most when working outside of the office? Procrastination!

Communication that is effortless in office envoronment may be not as natural in distributed teams.

Messenger (SkuVault uses Telegram, chosen for it’s simplicity, availability across all platforms, stability gorgeous GIF bot) and videochat software are there to try to equally substitute verbal communication.

Due to project specifics, we have the following channels in telegram:

  • Urgent chat, where On Call & Quality Assurance teams collaborate in order to resolve outstanding issues as fast as possible (you can read more about On Duty teams in my previous post on year retrospective);
  • Dev chat, that is general for all devs, covering the questions of “Who the hell broke QA again?”, …, to “So have you seen Azure copied Amazon pricing plan”.
  • Russian Dev chat, due to significant part of the team being russian-speaking, is for fast communication and clarification across russian devs;
  • Quality Assurance chat, for questions and discussions across QA members;
  • Freshdesk feed, for fetching freshly issues support tickets, so that if immediate attention needed -> relevant people are informed;
  • separate project chats with various messaging activity, depending on how big and urgent the project is.

Telegram

Telegram is extremely handy when it comes to making life easier. We use:

  • hashtags, to mark needed messages in order to find them later. That could be #shipstation hashtag to mark everything related to ShipStation integration across all chats;
  • mentions, which allow to ping a person even if the chat is muted. So if dev doesn’t want to get tons of messages on a related subject, he still is notified when he’s mentioned;
  • great gif support (not only kittehs, but also when you need gif with reproduced bug);
  • bots! we fetch freshdesk support tickets, notified about engine and web errors thanks to telegram bot api 🙂
  • size, platform availability, stickers, e.t.c.

now this sounds like a telegram evangelism

Video Conference

When it comes to video conferencing, we use hangouts, since skype app is awful.

General Flow and Jira Ticket Descriptions

It’s bad when you lack information on stuff you need to implement. In order to minize that, we have rules on filling out the ticket, so that as less questions as possible are raised.

Ticket description has testing plan, implementation plan, sequence of steps on how the feature should work, client and needed sandbox credentials, and tons of other information. Now that doesn’t prevent requirements change, scope creeps, blind spots (we all know that software development is an endless pain and all related people should suffer), but it surely reduces questions to clarify / misunderstanding / delays to the bare minimum and greatly helps in communication.

General Flow for the ticket before it hits implementation requires it’s acceptance by PM and dev, so those are members who control whether ticket is clear enough or not.

Workplace Attendance

Although you are not obliged to come to the office, it’s still essential to be at your workplace during working hours. If you’re working flexible hours, you need to agree upon them with a manager or people you collaborate with, so that you have a consensus solution on comfortable time to work for all.

Calendar lists days off, while chatrooms are good to inform colleagues about hours off, if necessary.

Working remote takes self-dicipline and responsibility, but pays off really great.

Notifications for pinging stuck projects

Be sure you use various notifications, such as jira web hooks + telegram, email notifications on stuck code review or testing, color coding on project management boards for due dates and approaching deadlines. Alltogether, those measures prevent unexpected situations and make the risk of missing deadlines, reduces the risk of tickets stuck halfway, keeps you alarmed in almost all cases where the flow takes wrong direction.

Year Retrospective @ SkuVault

Last year guys from SkuVault offered me an amazing opportunity to help the company manage a growing development team, create organized schedule, establish workflow that reflects the company goals .

For those who don’t know – SkuVault is a Warehouse Management System (WMS). Like a swiss army knife, SkuVault manages and syncs your inventory across e-Commerce platforms, POS, Logistics and Warehouses, providing accurate quantities in order to prevent out of stocks. Headquartered in Louisville, KY – SkuVault helps to manage the inventory for hundreds of clients all across the globe.

2540ridgemar

It’s time to list some of the achievements we accomplished during this year.

Observational Research and Optimization Scenarios

For the first 2 weeks, I was examining the flow within the project, and getting to know the team. Each couple of days I published blog posts on my findings with ideas on how to improve and optimize the workflow. Some things in my new team were completely different from my previous experience:

  • No teamleads. That meant that developers split up into Code Review teams, and reviewed each other.
  • Technology stack (.NET at SkuVault vs Scala / Riak / react.js at Storia). With all the pros and cons, .NET development teams don’t have that clear BE / FE differentiation: backend developers can work on frontend tasks via ASP.NET MVC, so our devs are more like (..universal soldiers).
  • No UX / UI design step in the workflow. This particular part makes every decision much faster. The product itself (SkuVault Warehouse Management App) uses Bootstrap, and is very utilitarian from design perspective. Key factor here is ease of use (as much as it can relate to industrial application).
  • Distributed team on both sides of the Atlantic, covering almost 24 hour period.
  • SkuVault is used by hundreds of customers around the world, bugfixing happens daily, and there are different bug priorities. This particular moment doesn’t work well with typical “sprint->release” cycles (because the priorities may change quite fast, or something needs to be urgently released).

With all those differences in mind, I started to streamline the workflow in JIRA.

Statuses, Transitions, Workflow

I managed to decrease the number of statuses.

  • Used to be: 23 (with any transitions allowed between any statuses)

shawshank_redemption

  • Became: 9 (with clear status sequence that reflects state of a bug / new feature).

SkuVault v1.7 - JIRA 2016-06-08 15-12-47

Most statuses were redundant, I’ve changed some of them with combination of “labels + status”, some were eliminated and substituted by generalized statuses (for example statuses “Design Holds”, “Client Clarification” changed to status: Hold + label “IncompleteDescription”).

The Workflow is constantly being refactored and improved per developers’ suggestions and whole team feedback. Last week I’ve released the 7th version of the workflow in a year.

Flow in general, and for every team member (BA / PM / Dev / QA) is described in our wiki, as well as terminology, list of labels to apply (there is a special glossary for labels). I explain the workflow as a sequence of steps, so that there is an instruction in case of emergency, or a new person onboarding.

On Duty Teams

During the first week we started to ask developers to fill a small questionnaire to find out how often they are distracted from new feature development by urgent client requests or bugfixes requiring immediate attention. It turned out that significant time (up to 80%) had been taken by Urgent Tasks, which distracted devs and made their work less efficient.

So the management team (well, actually it’s more like PMs, CEO, CTO and Support Lead) decided to establish teams of on call devs. These teams (2 devs: Frontend and Backend) would work only on urgent tickets, which allowed the rest of the team to work on regular tasks, ideally, without distraction.

On duty team concept has been rethought a couple of times, and currently we’re aiming at having 3 devs on call each shift, as client base grew significantly, and so have the requests, tasks and points of attention. Some of developers still get pulled to urgent tasks, because SkuVault heavily relies on integrations with other SaaS / eCommerce / Shipping systems, that change their APIs, improve their products, and may occasionally alter the way they interact with our system. And on duty devs may have questions for the developer who built the integration originally.

However, the concept itself proved to be extremely helpful, and overall the issue is resolved.

Mentorship

It’s a common thing to establish, when you have senior and junior devs 🙂 In order to clarify overall system architecture questions, seniors mentor other developers and code review.

Ticket Description Standards

Creating a clear guidance on filling out the fields and required info on a bug / new feature / or any other issue type is essential to streamline development.

Rules: Filling out ticket fields in JIRA - Project Management (SV) - Agile Harbor IKB 2016-06-17 12-01-08

Changing Kanban approach to Hybrid Scrumban

In a nutshell, a year ago development boards (one for planning, one for development) included lots of statuses, was extremely heavy (as you gotta display ~1k tickets), and hard to manage. Kudos to Tim Jannace and the team , who managed to bravely (and successfully) operate and maintain this board!

However, an agile board should focus on one goal: to show a piece of flow relevant for particular scenario / area. So those two boards were split up, so that each board reflects a single scenario:

  • Development Board, where the tickets transition from ToDo to Ready to Release: Scrum Board;
  • Urgent Board, which is used by on duty teams, and includes only Critical and Blocker tickets: Kanban Board;
  • Quality Control Board, where developers and test managers can to see the scope of tickets they need to review: Kanban Board;
  • Release Board, for the release manager to overview and manage the tickets that should be merged to master: Kanban Board.

There are boards for DevOps tasks, of course, as well as for other projects, but developers mostly have to check 2 boards maximum. And both of the boards are easy to use and lightweight.

On the other hand, pure sprint -> release cycles do not reflect how SkuVault operates, because of the Urgent bits that need to be released almost daily. So sprints are more like folders here, which allow us to forecast approximate or particular start / release dates for the tickets, and limit feature scope in a given time period. That’s why it’s called ScrumBan 🙂

Notifications, Due Dates, etc

I’ve also established automated email notifications on Pull Requests or Tasks are not Reviewed / Tested for more than 2 days.

We started to use labels trigger notifications for tickets that will soon miss due date, or for ones that shouldn’t be rescheduled.

There are a lot of other specifics, changes, undergoing improvements – over the year team grew significantly, as well as number of clients – and we adjust the company flows accordingly. Developers look motivated, and I couldn’t be happier to work in such an environment.

Key findings this year:

  • Don’t make a release the goal itself. Quality product is the goal. So you can skip a release or two, but deliver something good. Even if there are lots of clients,they would understand the importance of stability, not the feature they want firsthand;
  • Write up retrospectives on problematic moments, so that you solidify foundation of your experience for yourself and others. Try to gather additional data and opinions inside the team, in order to provide a broader angle to the problem;
  • Make everything possible to have a good human relationship with developers and other team members. You are colleagues, and a good person will always try to do her best, if she’s motivated (see motivation reference article);
  • Horizontal hierarchy and a little bit of dev anarchy is always good. Every team member should have his voice at least heard;
  • Always update team feedback on how things are, this is essential to keep the flow up to date and address concerns that devs may have. Cause you know, in IT, team is what defines success, and good manager’s work is to facilitate work and motivate the people;
  • Maintain comfortable release pace for the team and the clients;
  • Read professional literature, but don’t forget to check how this works in reality 🙂
  • There is always room for optimization. You just don’t have enough time! You can spend days micromanaging things, to extrapolate optimization on global flow later. Neverending exciting job.
  • Maintain work/ life balance. Don’t let team overwork.

Aside of your professionalism, key things to stay motivated are team spirit and ability to apply and improve your skills. For the past year we became mature, overcame challenges, and continue to create awesome WMS for our clients. Looking forward for the next adventurous year at SkuVault 🙂

Thanks to Ksenia, Slav and Kim for the review, and SkuVault team for the support.