From ea9553a0aab8c751a9ea6d4557c37ce1793c788c Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 11:34:20 +0100 Subject: [PATCH 01/14] Update README.md --- README.md | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 191b7e3..d593868 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ We try to increase our contribution to the iOS developer community through: We create lots of apps for our clients. Most of those apps rely heavily on web APIs. We abstracted the common operations for working with web APIs, and that's how [Serpent](https://github.com/nodes-ios/Serpent) (formerly known as Serializable) and [Cashier](https://github.com/nodes-ios/Cashier) were born. Another issue that was common in all the apps we do was handling keyboard appearance events. This led to the appearance of [KeyboardHelper](https://github.com/nodes-ios/KeyboardHelper). -We are currently in the process of abstracting parts of our codebase into open source libraries that can be reused in other projects. As well as this, we are trying to change our way of thinking for current and future projects and when we encounter a feature whose implementation can be reused in other projects we try to implement it as a separate component which we open source. We are just beginning, and it is a big change, but this is what we aim for in the long run. - # Team meetings Here are the recurring meetings the iOS team takes part in: @@ -26,29 +24,25 @@ Here are the recurring meetings the iOS team takes part in: #### iOS Team Meeting This is the main meeting in the iOS team, where we talk about the latest things happening in our team. General direction of the team, brief general team performance review, what people need help with, amount of workload, should we use or not _that_ framework, etc. This happens in the first Monday of each month. -#### Mobile Show and Tell Meeting -This is a monthly meeting, that occurs on the third Friday of every month. Members of the iOS and Android team talk about anything cool that they implemented recently. It could be using some new technology, some cool framework, a nice animation, a clever algorithm or anything similar to this. Traditionally, there's beer for presenters and attendees. - -#### Quarterly Company Catch-up - -This is a quarterly meeting, where the board tells all the employees how the company did in the last quarter and what our targets and short, mid and long-term plans are. You'll find out if the sales and production are on track, below or ahead of target, and anything else relevant to the company. It's not only a presentation, feel free to ask questions. +#### Friday Tech Talk +This is a monthly meeting, that occurs on the fourth Friday of every month. Anyone in the engineering team can talk about anything cool that they implemented recently. It could be using some new technology, some cool framework, a nice animation, a clever algorithm or anything similar to this. The meeting is held in the Copenhagen office, but if anyone from other offices wants to attend, we can enable a video call. +#### Monthly Briefing +This is a monthly meeting, where the management tells all the employees how the company did in the last month and what our targets and short, mid and long-term plans are. Topics covered are sales, projects, cases, tech, events, staff and others. # Your First Day +- Meet with the [Head of iOS](https://nodes.slack.com/messages/@chco), your [manager](https://nodes.slack.com/messages/@mofa) and your Nodes Buddy. - Join [our private git](https://github.com/nodes-projects) and ask [Chris](https://nodes.slack.com/messages/@chco) to add you to the correct groups. - Get the cert sign request and private key from [this private repo here](https://github.com/nodes-projects/keyring-ios). Add the private key to your Keychain and from now on, always use this certificate signing request when creating new certificates on the developer portal. - Install the latest Xcode. Ideally, from the [Apple developer portal](https://developer.apple.com/download/more/) and not from the App Store. If you got it from the App Store, that's ok too. -- Get another iOS developer to invite you to our developer account. +- Get another iOS developer to invite you to our developer accounts. - We want you to help us make great open source software. So get another iOS developer to invite you to [our GitHub organisation](https://github.com/nodes-ios). Make sure you enable your 2FA on GitHub. Our client projects are on [our private git](https://github.com/nodes-projects) and our public ones are on [GitHub](https://github.com/nodes-ios). - Set up your git keys properly, so you can pull and push from both git servers. -- Ask an iOS colleague to invite you to Hockey -- You should have been invited to our Slack, Trello, and Postman accounts. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. -- Make sure to read the description of our [iOS stack on our engineering blog](https://engineering.nodesagency.com/our-stacks/ios/). That article goes hand in hand with this playbook here. +- You should have been invited to our Slack, JIRA, and Postman accounts. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. - Make sure to read the [Nodes Handbook](https://docs.google.com/document/d/1E4ZyGqIKDttGlJ0c0rEkNy2lxP-n1PBwQzuaESbLnpw/edit) (private document). That is meant for all employees, and tells a bit of our history, how we got here, but also how we handle different tasks. -- We love eating cake, and we hope you do too. We'll use any excuse to do it. So we'll ask you to have [Simon](https://nodes.slack.com/messages/@siej) add your birthday to the calendar, so we can get you a big birthday cake and celebrate. -- We have Facebook groups for internal semi-official announcements. Ask a colleague to add you to the groups. +- We use [Happeo](https://app.happeo.com/home) for internal (semi)official announcements. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. # Tools We Use Our main communication tool is [**Slack**](https://nodes.slack.com). We use this for daily communication. From 929c0a5635ee04f128d3449892985bf26249c885 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 13:38:01 +0100 Subject: [PATCH 02/14] Update README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d593868..bdf6bed 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ We try to increase our contribution to the iOS developer community through: - encouraging our team members to join iOS related meetups, groups and conferences - encouraging our team members to speak at iOS events - contributing back to some of the other open source libraries we use through issues and PRs -- encouraging our team members to write tech articles about any topic they desire on our [engineering blog](https://engineering.nodesagency.com/) +- encouraging our team members to write tech articles about any topic they desire on our [engineering blog](https://engineering.nodesagency.com/); if needed, we can also suggest topics for new articles We create lots of apps for our clients. Most of those apps rely heavily on web APIs. We abstracted the common operations for working with web APIs, and that's how [Serpent](https://github.com/nodes-ios/Serpent) (formerly known as Serializable) and [Cashier](https://github.com/nodes-ios/Cashier) were born. Another issue that was common in all the apps we do was handling keyboard appearance events. This led to the appearance of [KeyboardHelper](https://github.com/nodes-ios/KeyboardHelper). @@ -47,26 +47,25 @@ This is a monthly meeting, where the management tells all the employees how the # Tools We Use Our main communication tool is [**Slack**](https://nodes.slack.com). We use this for daily communication. -Our main project management tool is [**Trello**](https://trello.com). Each project has its own Trello board. Always keep your project's Trello board up to date to reflect the current status of the project. We work in an agile manner and move fast, but the Trello board must clearly reflect the project's status. Ask [Simon](https://nodes.slack.com/messages/@siej) or your project manager if you have questions. +Our main project management tool is [**JIRA**](https://nodesagency.atlassian.net/jira/). Each project has its own JIRA board. Always keep your project's JIRA board up to date to reflect the current status of the project. We work in an agile manner and move fast, but the JIRA board must clearly reflect the project's status. Ask [Simon](https://nodes.slack.com/messages/@siej) or your project manager if you have questions. -[**Basecamp**](https://basecamp.com) is the main tool through which we interact with the clients. As a developer, normally you shouldn't have to deal that much with the clients directly or through Basecamp, but each project is unique and in some cases, developers are also added to Basecamp. +With the same JIRA account you will also have access to -[**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day (it's ok to do more, if you want). Lunch time is not harvested, and it doesn't count towards the 7.5 hours per day. And if you want more detailed instructions on how to harvest, ask [Simon](https://nodes.slack.com/messages/@siej). +[**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day. Lunch time is not harvested, and it doesn't count towards the 7.5 hours per day. And if you want more detailed instructions on how to harvest, ask [Simon](https://nodes.slack.com/messages/@siej). You can also set up auto-harvesting in you Ournodes acount and it will automatically harvest 7.5 hours per day on the project youre assigned to. -Harvest goes well hand in hand with [**Forecast**](https://forecastapp.com/). Use Forecast to see what project you're assigned to that day. Forecast is our planning tool, you can see what other people are assigned to, how long a project should take, when other people are on vacation, etc. On a higher level, Harvest and Forecast are very well integrated and Project Managers can see when a project goes over budget (more hours were harvested than allocated in Forecast). But that's not something you as a developer should care about. +Harvest goes well hand in hand with [**Forecast**](https://forecastapp.com/). Use Forecast to see what project you're assigned to that day. Forecast is our planning tool, you can see what other people are assigned to, how long a project should take, when other people are on vacation, etc. On a higher level, Harvest and Forecast are very well integrated and Project Managers can see if a project goes over budget (more hours were harvested than allocated in Forecast). But that's not something you as a developer should care about. -[**Postman**](https://www.getpostman.com/) is a great tool which helps you see and test web APIs. Our backend team uses Postman to test and document their APIs, so all the web APIs for our apps can be found in Postman. You can use it to see the different endpoints available, read their documentation or make requests to those endpoints. If you don't already have access, ask Casper or Jonas for an invite to Postman. +[**Postman**](https://www.getpostman.com/) is a great tool which helps you see and test web APIs. Our backend team uses Postman to test and document their APIs, so all the web APIs for our apps can be found in Postman. You can use it to see the different endpoints available, read their documentation or make requests to those endpoints. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. Our design team uses Sketch. But you, as a developer, don't need to have Sketch installed. To ease the collaboration between designers and developers, we use [**Zeplin**](https://zeplin.io/). In Zeplin, you can see each screen in the design, get info about the sizes, padding, fonts, colours and also export assets for the mobile devices. You can also add notes in Zeplin and communicate with your designer directly on the project. -[**Charles**](https://www.charlesproxy.com/) is an HTTP proxy. You can set your phone / simulator to proxy through Charles and you can see all the API calls it made, you can inspect its requests or responses. It comes in very handy especially if you work with an external, poorly documented API. +[**Charles**](https://www.charlesproxy.com/) is an HTTP proxy. You can set your phone / simulator to proxy through Charles and you can see all the API calls it made, you can inspect its requests or responses. It comes in very handy especially if you work with an external, poorly documented API. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you need a license. -For in-house distribution and crash reporting, we use [**Hockey**](https://www.hockeyapp.net/). You need to be invited to our company's account. Ask any other iOS developer for an invite. We're currently considering replacing Hockey with another similar service; we will update this document when/if we do it. +For in-house distribution and crash reporting, we use [**Firebase**](firebase.google.com/). Depensing on the project, sometimes we only use TestFlight. Talk to your PM or with previous developers on that project. -We use [**Carthage**](https://github.com/Carthage/Carthage) to manage our dependencies on iOS. We chose Carthage over CocoaPods because for us, this is the one that brought the most advantages. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking forward to Swift Package Manager becoming the default dependency manager for iOS projects. - -The way we do localisation in Nodes is a bit different than in other places. We use [**NStack**](https://nstack.io/), a service we built, which together with the [**NStack SDK**](https://github.com/nodes-ios/NStack) offers dynamic localisation for our apps. Go to [nstack.io](https://nstack.io/), log in with your Nodes account, select the app you need (or create a new one), go to "Translate" and add new translations or edit the current ones. A translation consists of a key (by which the string is recognised through the SDK) and one or more values (depending on the number of languages your app is translated to). The translations can be changed in NStack and the changes will reflect in the app without the need of an app update. +We had been using [**Carthage**](https://github.com/Carthage/Carthage) for a long time to manage our dependencies on iOS. We chose Carthage over CocoaPods because for us, this is the one that brought the most advantages. But since we started using Firebase more and more and Google pushes strongly for CocoaPods, we sometimes use both in the same project. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking for the right time to switch to Swift Package Manager as our default dependency manager for iOS projects. +The way we do localisation in Nodes is a bit different than in other places. We use [**NStack**](https://nstack.io/), a service we built, which together with the [**NStack SDK**](https://github.com/nstack-io/nstack-ios-sdk) offers dynamic localisation for our apps. Go to [nstack.io](https://nstack.io/), log in with your Nodes account, select the app you need (or create a new one), go to "Translate" and add new translations or edit the current ones. A translation consists of a key (by which the string is recognised through the SDK) and one or more values (depending on the number of languages your app is translated to). The translations can be changed in NStack and the changes will reflect in the app without the need of an app update. # Coding Guidelines @@ -98,7 +97,8 @@ We also listed the most common issues when Bitrise is trying to make the builds. A guide that shows how to migrate between different versions of Swift in our projects can be [found here](https://github.com/nodes-ios/Playbook/blob/master/migration-guide.md). # Working with Remote Colleagues -Having one office in London, one in Copenhagen and one in Aarhus means you get to work with colleagues who are not in the same office as you are. If that is the case, make sure to rely as much as possible on Trello. + +Having offices in 7 locations in Europe and Middle East means you get to work with colleagues who are not in the same office as you are. If that is the case, make sure to rely as much as possible on JIRA. Our main means of communication inside the company is Slack. Use it wisely. @@ -106,8 +106,8 @@ It helps a lot to try and change your mindset from synchronous communication to Always have a good overview of what's left to be done and what you need in order to get it done. -If you need something (an image asset, some input from the PM, etc), make a Trello card asking for that. +If you need something (an image asset, some input from the PM, etc), make a JIRA card asking for that. -If there's some feedback from the client but you're not sure what to do about it, because there are multiple options, comment on the Trello card presenting what options there are, estimating how much time each of it would take and maybe advising towards one of it and ask the PM to take the decision. +If there's some feedback from the client but you're not sure what to do about it, because there are multiple options, comment on the JIRA issue presenting what options there are, estimating how much time each of it would take and maybe advising towards one of it and ask the PM to take the decision. If in doubt, ask for a video call to discuss things. However, try to write down the notes / conclusions of the meeting, so you have them in writing. This helps you not forget anything and it also helps to align everyone on the team to the same conclusion. From 0eb455a15a355daf2a2f92a13c513b25b9e2ffc1 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:02:36 +0100 Subject: [PATCH 03/14] Update README.md --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bdf6bed..e22f1c4 100644 --- a/README.md +++ b/README.md @@ -92,9 +92,6 @@ If you already have a project created an you just need to deploy it to Bitrise y We also listed the most common issues when Bitrise is trying to make the builds. Please check the [common issues document](./ci/bitrise-issues-readme.md) if you are having some problems. -# Swift Migration Guide - -A guide that shows how to migrate between different versions of Swift in our projects can be [found here](https://github.com/nodes-ios/Playbook/blob/master/migration-guide.md). # Working with Remote Colleagues @@ -111,3 +108,11 @@ If you need something (an image asset, some input from the PM, etc), make a JIRA If there's some feedback from the client but you're not sure what to do about it, because there are multiple options, comment on the JIRA issue presenting what options there are, estimating how much time each of it would take and maybe advising towards one of it and ask the PM to take the decision. If in doubt, ask for a video call to discuss things. However, try to write down the notes / conclusions of the meeting, so you have them in writing. This helps you not forget anything and it also helps to align everyone on the team to the same conclusion. + +# Further reading + +* [VIPER architecture](./ViperArchitecture.md) +* [Modular architecture](./ModularArchitecture.md) +* [Code Modes](https://github.com/nodes-projects/readme/blob/master/mobile/ios/code-modes.md) (private document) +* [Securing your app](https://github.com/nodes-projects/readme/tree/master/security) (private document) +* Consider joining one or more of our [squads](https://github.com/nodes-projects/squads) (private document) From c51167fc631932975b3f627d7fe96bebd33407de Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:05:03 +0100 Subject: [PATCH 04/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e22f1c4..7a2cc41 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Our main communication tool is [**Slack**](https://nodes.slack.com). We use this Our main project management tool is [**JIRA**](https://nodesagency.atlassian.net/jira/). Each project has its own JIRA board. Always keep your project's JIRA board up to date to reflect the current status of the project. We work in an agile manner and move fast, but the JIRA board must clearly reflect the project's status. Ask [Simon](https://nodes.slack.com/messages/@siej) or your project manager if you have questions. -With the same JIRA account you will also have access to +With the same JIRA account you will also have access to Confluence, where you can find project-related documentation, and also internal docuements. [**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day. Lunch time is not harvested, and it doesn't count towards the 7.5 hours per day. And if you want more detailed instructions on how to harvest, ask [Simon](https://nodes.slack.com/messages/@siej). You can also set up auto-harvesting in you Ournodes acount and it will automatically harvest 7.5 hours per day on the project youre assigned to. From 170dce2a91e4d9158468035543f4b911ae87a810 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:11:19 +0100 Subject: [PATCH 05/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a2cc41..df9ac91 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ This is a monthly meeting, where the management tells all the employees how the # Your First Day -- Meet with the [Head of iOS](https://nodes.slack.com/messages/@chco), your [manager](https://nodes.slack.com/messages/@mofa) and your Nodes Buddy. + - Join [our private git](https://github.com/nodes-projects) and ask [Chris](https://nodes.slack.com/messages/@chco) to add you to the correct groups. - Get the cert sign request and private key from [this private repo here](https://github.com/nodes-projects/keyring-ios). Add the private key to your Keychain and from now on, always use this certificate signing request when creating new certificates on the developer portal. - Install the latest Xcode. Ideally, from the [Apple developer portal](https://developer.apple.com/download/more/) and not from the App Store. If you got it from the App Store, that's ok too. From 94aadc059a490ad52094fb0adc82bc2535675853 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:30:00 +0100 Subject: [PATCH 06/14] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index df9ac91..3690d08 100644 --- a/README.md +++ b/README.md @@ -34,15 +34,17 @@ This is a monthly meeting, where the management tells all the employees how the # Your First Day -- Join [our private git](https://github.com/nodes-projects) and ask [Chris](https://nodes.slack.com/messages/@chco) to add you to the correct groups. +The IT department is responsible for setting up accounts and giving you access to the tools you need to do your job. The easiest way to contact the IT departmentis by using the `/halp` command on Slack. + +- Join [our private git](https://github.com/nodes-projects). Ask IT if you don't have access. - Get the cert sign request and private key from [this private repo here](https://github.com/nodes-projects/keyring-ios). Add the private key to your Keychain and from now on, always use this certificate signing request when creating new certificates on the developer portal. - Install the latest Xcode. Ideally, from the [Apple developer portal](https://developer.apple.com/download/more/) and not from the App Store. If you got it from the App Store, that's ok too. - Get another iOS developer to invite you to our developer accounts. - We want you to help us make great open source software. So get another iOS developer to invite you to [our GitHub organisation](https://github.com/nodes-ios). Make sure you enable your 2FA on GitHub. Our client projects are on [our private git](https://github.com/nodes-projects) and our public ones are on [GitHub](https://github.com/nodes-ios). - Set up your git keys properly, so you can pull and push from both git servers. -- You should have been invited to our Slack, JIRA, and Postman accounts. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. +- You should have been invited to our Slack, JIRA, and Postman accounts. Ask IT if you don't have access. - Make sure to read the [Nodes Handbook](https://docs.google.com/document/d/1E4ZyGqIKDttGlJ0c0rEkNy2lxP-n1PBwQzuaESbLnpw/edit) (private document). That is meant for all employees, and tells a bit of our history, how we got here, but also how we handle different tasks. -- We use [Happeo](https://app.happeo.com/home) for internal (semi)official announcements. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. +- We use [Happeo](https://app.happeo.com/home) for internal (semi)official announcements. Ask IT if you don't have access. # Tools We Use Our main communication tool is [**Slack**](https://nodes.slack.com). We use this for daily communication. @@ -55,11 +57,11 @@ With the same JIRA account you will also have access to Confluence, where you ca Harvest goes well hand in hand with [**Forecast**](https://forecastapp.com/). Use Forecast to see what project you're assigned to that day. Forecast is our planning tool, you can see what other people are assigned to, how long a project should take, when other people are on vacation, etc. On a higher level, Harvest and Forecast are very well integrated and Project Managers can see if a project goes over budget (more hours were harvested than allocated in Forecast). But that's not something you as a developer should care about. -[**Postman**](https://www.getpostman.com/) is a great tool which helps you see and test web APIs. Our backend team uses Postman to test and document their APIs, so all the web APIs for our apps can be found in Postman. You can use it to see the different endpoints available, read their documentation or make requests to those endpoints. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you're missing access. +[**Postman**](https://www.getpostman.com/) is a great tool which helps you see and test web APIs. Our backend team uses Postman to test and document their APIs, so all the web APIs for our apps can be found in Postman. You can use it to see the different endpoints available, read their documentation or make requests to those endpoints. Ask IT if you don't have access. Our design team uses Sketch. But you, as a developer, don't need to have Sketch installed. To ease the collaboration between designers and developers, we use [**Zeplin**](https://zeplin.io/). In Zeplin, you can see each screen in the design, get info about the sizes, padding, fonts, colours and also export assets for the mobile devices. You can also add notes in Zeplin and communicate with your designer directly on the project. -[**Charles**](https://www.charlesproxy.com/) is an HTTP proxy. You can set your phone / simulator to proxy through Charles and you can see all the API calls it made, you can inspect its requests or responses. It comes in very handy especially if you work with an external, poorly documented API. Talk to [Jacob](https://nodes.slack.com/messages/@jafr) if you need a license. +[**Charles**](https://www.charlesproxy.com/) is an HTTP proxy. You can set your phone / simulator to proxy through Charles and you can see all the API calls it made, you can inspect its requests or responses. It comes in very handy especially if you work with an external, poorly documented API. Ask IT if you need a license. For in-house distribution and crash reporting, we use [**Firebase**](firebase.google.com/). Depensing on the project, sometimes we only use TestFlight. Talk to your PM or with previous developers on that project. From 76cd116ab9fc42479fa447113832878a7423ea05 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:38:24 +0100 Subject: [PATCH 07/14] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3690d08..121f563 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ This is a monthly meeting, where the management tells all the employees how the The IT department is responsible for setting up accounts and giving you access to the tools you need to do your job. The easiest way to contact the IT departmentis by using the `/halp` command on Slack. +- Meet with the Head of iOS, your Team Manager (Lead Developer) and your Nodes Buddy. They will be your first persons of reference in the company. Use them as much as you need to get settled in, but also be considerate of their own time. - Join [our private git](https://github.com/nodes-projects). Ask IT if you don't have access. - Get the cert sign request and private key from [this private repo here](https://github.com/nodes-projects/keyring-ios). Add the private key to your Keychain and from now on, always use this certificate signing request when creating new certificates on the developer portal. - Install the latest Xcode. Ideally, from the [Apple developer portal](https://developer.apple.com/download/more/) and not from the App Store. If you got it from the App Store, that's ok too. @@ -47,6 +48,9 @@ The IT department is responsible for setting up accounts and giving you access t - We use [Happeo](https://app.happeo.com/home) for internal (semi)official announcements. Ask IT if you don't have access. # Tools We Use + +For employee management we use [BambooHR](https://nodesagency.bamboohr.com/home). Ask IT if ou don't have access and the Chief People Officer if anything in there is unclear. Use this to request time off, register sick day and manage your personal info and banking info for salary pay. + Our main communication tool is [**Slack**](https://nodes.slack.com). We use this for daily communication. Our main project management tool is [**JIRA**](https://nodesagency.atlassian.net/jira/). Each project has its own JIRA board. Always keep your project's JIRA board up to date to reflect the current status of the project. We work in an agile manner and move fast, but the JIRA board must clearly reflect the project's status. Ask [Simon](https://nodes.slack.com/messages/@siej) or your project manager if you have questions. From fadc1ebea1834e5dbff89011afbc9f2161783eff Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 14:50:31 +0100 Subject: [PATCH 08/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 121f563..28b9008 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This is a monthly meeting, that occurs on the fourth Friday of every month. Anyo #### Monthly Briefing -This is a monthly meeting, where the management tells all the employees how the company did in the last month and what our targets and short, mid and long-term plans are. Topics covered are sales, projects, cases, tech, events, staff and others. +This is a monthly meeting, where the management tells all the employees how the company did in the last month and what our targets and short, mid and long-term plans are. Topics covered are sales, projects, cases, tech, events, staff and others. The meeting is held in the Copenhagen office, but other offices can join in by video call. # Your First Day From 89fb56304419bc124ea45f205bb6897467953993 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 15:10:24 +0100 Subject: [PATCH 09/14] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Dominik Hádl <1776969+dominik-hadl@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 28b9008..644698a 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Our main communication tool is [**Slack**](https://nodes.slack.com). We use this Our main project management tool is [**JIRA**](https://nodesagency.atlassian.net/jira/). Each project has its own JIRA board. Always keep your project's JIRA board up to date to reflect the current status of the project. We work in an agile manner and move fast, but the JIRA board must clearly reflect the project's status. Ask [Simon](https://nodes.slack.com/messages/@siej) or your project manager if you have questions. -With the same JIRA account you will also have access to Confluence, where you can find project-related documentation, and also internal docuements. +With the same JIRA account, you will also have access to Confluence, where you can find project-related documentation, and also internal documents. [**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day. Lunch time is not harvested, and it doesn't count towards the 7.5 hours per day. And if you want more detailed instructions on how to harvest, ask [Simon](https://nodes.slack.com/messages/@siej). You can also set up auto-harvesting in you Ournodes acount and it will automatically harvest 7.5 hours per day on the project youre assigned to. From e2fa86ed6fcdd52bdb6be2f4922ecd2e4ae82870 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 15:10:56 +0100 Subject: [PATCH 10/14] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Dominik Hádl <1776969+dominik-hadl@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 644698a..674fe69 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Our design team uses Sketch. But you, as a developer, don't need to have Sketch [**Charles**](https://www.charlesproxy.com/) is an HTTP proxy. You can set your phone / simulator to proxy through Charles and you can see all the API calls it made, you can inspect its requests or responses. It comes in very handy especially if you work with an external, poorly documented API. Ask IT if you need a license. -For in-house distribution and crash reporting, we use [**Firebase**](firebase.google.com/). Depensing on the project, sometimes we only use TestFlight. Talk to your PM or with previous developers on that project. +For in-house distribution and crash reporting, we use [**Firebase**](firebase.google.com/). Depending on the project, sometimes we only use TestFlight. Talk to your PM or with previous developers on that project. We had been using [**Carthage**](https://github.com/Carthage/Carthage) for a long time to manage our dependencies on iOS. We chose Carthage over CocoaPods because for us, this is the one that brought the most advantages. But since we started using Firebase more and more and Google pushes strongly for CocoaPods, we sometimes use both in the same project. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking for the right time to switch to Swift Package Manager as our default dependency manager for iOS projects. From c5a05162530bac13647aa0a5defdf27ac0d0fa87 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 15:11:26 +0100 Subject: [PATCH 11/14] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Dominik Hádl <1776969+dominik-hadl@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 674fe69..1072e4b 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Our design team uses Sketch. But you, as a developer, don't need to have Sketch For in-house distribution and crash reporting, we use [**Firebase**](firebase.google.com/). Depending on the project, sometimes we only use TestFlight. Talk to your PM or with previous developers on that project. -We had been using [**Carthage**](https://github.com/Carthage/Carthage) for a long time to manage our dependencies on iOS. We chose Carthage over CocoaPods because for us, this is the one that brought the most advantages. But since we started using Firebase more and more and Google pushes strongly for CocoaPods, we sometimes use both in the same project. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking for the right time to switch to Swift Package Manager as our default dependency manager for iOS projects. +We had been using [**Carthage**](https://github.com/Carthage/Carthage) for a long time to manage our dependencies on iOS. We chose Carthage over CocoaPods because, for us, this is the one that brought the most advantages. But since we started using Firebase more and more and Google pushes strongly for CocoaPods, we sometimes use both in the same project. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking for the right time to switch to Swift Package Manager as our default dependency manager for iOS projects. The way we do localisation in Nodes is a bit different than in other places. We use [**NStack**](https://nstack.io/), a service we built, which together with the [**NStack SDK**](https://github.com/nstack-io/nstack-ios-sdk) offers dynamic localisation for our apps. Go to [nstack.io](https://nstack.io/), log in with your Nodes account, select the app you need (or create a new one), go to "Translate" and add new translations or edit the current ones. A translation consists of a key (by which the string is recognised through the SDK) and one or more values (depending on the number of languages your app is translated to). The translations can be changed in NStack and the changes will reflect in the app without the need of an app update. From 56368d7e1741efc4f3b09a822b240b5169f87c76 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 15:11:41 +0100 Subject: [PATCH 12/14] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Dominik Hádl <1776969+dominik-hadl@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1072e4b..2a109bf 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ For in-house distribution and crash reporting, we use [**Firebase**](firebase.go We had been using [**Carthage**](https://github.com/Carthage/Carthage) for a long time to manage our dependencies on iOS. We chose Carthage over CocoaPods because, for us, this is the one that brought the most advantages. But since we started using Firebase more and more and Google pushes strongly for CocoaPods, we sometimes use both in the same project. We appreciate all the effort put into Carthage, as well as into CocoaPods, and we're looking for the right time to switch to Swift Package Manager as our default dependency manager for iOS projects. -The way we do localisation in Nodes is a bit different than in other places. We use [**NStack**](https://nstack.io/), a service we built, which together with the [**NStack SDK**](https://github.com/nstack-io/nstack-ios-sdk) offers dynamic localisation for our apps. Go to [nstack.io](https://nstack.io/), log in with your Nodes account, select the app you need (or create a new one), go to "Translate" and add new translations or edit the current ones. A translation consists of a key (by which the string is recognised through the SDK) and one or more values (depending on the number of languages your app is translated to). The translations can be changed in NStack and the changes will reflect in the app without the need of an app update. +The way we do localization in Nodes is a bit different than in other places. We use [**NStack**](https://nstack.io/), a service we built, which together with the [**NStack SDK**](https://github.com/nstack-io/nstack-ios-sdk) offers dynamic localization for our apps. Go to [nstack.io](https://nstack.io/), log in with your Nodes account, select the app you need (or create a new one), go to "Localize" and add new translations or edit the current ones. A translation consists of a key (by which the string is recognized through the SDK) and one or more values (depending on the number of languages your app is translated to). The translations can be changed in NStack and the changes will reflect in the app without the need for an app update. # Coding Guidelines From 2394287b42585df5df6784df4f19d49fc148f397 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 15:30:49 +0100 Subject: [PATCH 13/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a109bf..243d9f4 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Our main project management tool is [**JIRA**](https://nodesagency.atlassian.net With the same JIRA account, you will also have access to Confluence, where you can find project-related documentation, and also internal documents. -[**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day. Lunch time is not harvested, and it doesn't count towards the 7.5 hours per day. And if you want more detailed instructions on how to harvest, ask [Simon](https://nodes.slack.com/messages/@siej). You can also set up auto-harvesting in you Ournodes acount and it will automatically harvest 7.5 hours per day on the project youre assigned to. +[**Harvest**](https://nodes.harvestapp.com/) is the time tracking tool that we use. It helps us see how much time one person has worked on a project. Make sure to always harvest on the appropriate project. Ask the PM on which Harvest project you should track the time. We expect you to harvest 7.5 hours per day (8 in Germany). Lunch time is not harvested, and it doesn't count towards the daily workhours. If you want more detailed instructions on how to harvest, check out the [company handbook (private document)](https://docs.google.com/document/d/1E4ZyGqIKDttGlJ0c0rEkNy2lxP-n1PBwQzuaESbLnpw/edit#heading=h.s0buhmnr48yl). You can also set up auto-harvesting in you Ournodes acount and it will automatically harvest your day on the project you're assigned to. Harvest goes well hand in hand with [**Forecast**](https://forecastapp.com/). Use Forecast to see what project you're assigned to that day. Forecast is our planning tool, you can see what other people are assigned to, how long a project should take, when other people are on vacation, etc. On a higher level, Harvest and Forecast are very well integrated and Project Managers can see if a project goes over budget (more hours were harvested than allocated in Forecast). But that's not something you as a developer should care about. From 06ec37ebf3bfc8534ba47dfb9a996f72bcf83436 Mon Sep 17 00:00:00 2001 From: Marius Constantinescu Date: Thu, 13 Feb 2020 19:50:49 +0100 Subject: [PATCH 14/14] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Peter Bødskov --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 243d9f4..ca9dbd6 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ The IT department is responsible for setting up accounts and giving you access t # Tools We Use -For employee management we use [BambooHR](https://nodesagency.bamboohr.com/home). Ask IT if ou don't have access and the Chief People Officer if anything in there is unclear. Use this to request time off, register sick day and manage your personal info and banking info for salary pay. +For employee management we use [BambooHR](https://nodesagency.bamboohr.com/home). Ask IT if you don't have access and the Chief People Officer if anything in there is unclear. Use this to request time off, register sick day and manage your personal info and banking info for salary pay. Our main communication tool is [**Slack**](https://nodes.slack.com). We use this for daily communication.