Skip to content

Commit

Permalink
Merge branch 'main' into feature/moving-large-net-projects-rules
Browse files Browse the repository at this point in the history
  • Loading branch information
tiagov8 authored Apr 15, 2024
2 parents 1c08970 + d429432 commit c739d26
Show file tree
Hide file tree
Showing 99 changed files with 949 additions and 488 deletions.
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**Tip: Use [SSW Rule Writer GPT](https://chat.openai.com/g/g-cOvrRzEnU-ssw-rules-writer) for help with writing rules 🤖**
<!-- **Tip: Use [SSW Rule Writer GPT](https://chat.openai.com/g/g-cOvrRzEnU-ssw-rules-writer) for help with writing rules 🤖** -->
>
> 1. What triggered this change? (PBI link, Email Subject, conversation + reason, etc)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check-duplicate-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
This PR was created because an automated check found multiple images with the same name in SSW.Rules.Content and tried to rename them.
The goal is to prevent incorrect images from being displayed on rules, see detail at https://www.github.com/SSWConsulting/SSW.Rules/issues/846
The goal is to prevent incorrect images from being displayed on rules, see detail at https://github.com/SSWConsulting/SSW.Rules.Content/wiki/GitHub-Action---Check-For-Duplicate-Image-Names
base: main
branch: auto-rename-duplicate-images
delete-branch: true
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ experts: https://www.ssw.com.au/people/?skill=Scrum
consulting: https://www.ssw.com.au/consulting/scrum
index:
- use-safe-to-align-multiple-scrum-teams
- do-you-prioritize-value-streams-over-individual-projects
- do-you-establish-a-Lean-Agile-mindset-across-all-teams
- do-you-implement-DevOps-practices-for-continuous-delivery
- do-you-utilize-a-release-train
- do-you-involve-stakeholders-in-pi-planning
- do-you-measure-success-using-lean-agile-metrics
- do-you-regularly-inspect-and-adapt-at-scale
- do-you-foster-a-culture-of-relentless-improvement
- do-you-ensure-compliance-and-governance-without-compromising-agility
- prioritize-value-streams-over-individual-projects
- establish-a-Lean-Agile-mindset-across-all-teams
- implement-DevOps-practices-for-continuous-delivery
- utilize-a-release-train
- involve-stakeholders-in-pi-planning
- measure-success-using-lean-agile-metrics
- regularly-inspect-and-adapt-at-scale
- foster-a-culture-of-relentless-improvement
- ensure-compliance-and-governance-without-compromising-agility
---
1 change: 1 addition & 0 deletions categories/software-engineering/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,6 @@ index:
- rules-to-better-regular-expressions
- rules-to-better-windows-forms-applications
- rules-to-better-large-builds-in-visual-studionet
- rules-to-better-vb6-migration-to-net
---

1 change: 1 addition & 0 deletions categories/software-engineering/rules-to-better-github.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ index:
- use-squash-and-merge-for-open-source-projects
- keeping-pbis-status-visible
- co-authored-commits
- find-your-license
---

[GitHub](https://github.com) is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ type: category
title: SSW Rules to Better Large Builds in Visual Studio.NET
guid: 13a3a376-6df2-4674-bcc7-cb0f6f69102d
uri: rules-to-better-large-builds-in-visual-studionet
archivedreason: There are better ways to manage this using Clean Architecture and Nuget package manager
archivedreason: The better ways to manage these builds if by using Clean Architecture and Nuget package manager.
index:
- desired-features-of-structuring-large-builds-in-vsnet
- scenarios-of-building-the-system

---
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ index:
- tell-the-coding-standards-you-expect
- do-you-know-the-correct-license-to-use-for-open-source-software
- clean-git-history
- find-your-license
---


Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
type: category
title: Rules to Better VB6 Migration to .NET
guid: 8c8de343-90fc-4860-a622-1047a5b5a898
uri: rules-to-better-vb6-migration-to-net
index:
- move-vb6-applications-to-net
- use-visual-basic-6-upgrade-assessment-tool
- use-net-built-in-visual-basic-upgrade-wizard
---
20 changes: 10 additions & 10 deletions rules/allocate-expenses-per-office/rule.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@ uri: allocate-expenses-per-office
authors:
- title: Jimmy Chen
url: https://www.ssw.com.au/people/jimmy-chen
related:

related: []
redirects:
- do-you-know-how-to-allocate-expense-per-office
created: 2024-01-25T00:00:00.000Z
guid: 596829da-9013-402d-b8f7-c34a6d42f411
archivedreason: null
---

When a company has multiple offices in different locations, it is important to allocate expenses to each office accurately to ensure that the financial reports reflect the true costs of running the business in each location.
Proper expense allocation can also help identify areas of inefficiency and improve cost management.

However, allocating expenses to offices in different locations can be challenging, especially when the expenses are shared among different offices or are difficult to track.
However, allocating expenses to offices in different locations can be challenging, especially when the expenses are shared among different offices or are difficult to track.
It requires a systematic approach and a set of guidelines to ensure that expenses are allocated fairly and accurately.

![](Allocate-expense-1.png)

### Direct allocation of expenses
### Direct allocation of expenses

If an expense is attributable to a specific office, it should be allocated directly to that office.
If an expense is attributable to a specific office, it should be allocated directly to that office.
This includes expenses such as travel expenses incurred by an employee visiting a specific office or recruitment costs for a particular job opening in a specific office.

E.g. If there is a recruitment ad for an open position in Melbourne with a cost of $1,000, it should be allocated to the Melbourne office.
Expand All @@ -33,14 +33,14 @@ The office chosen should genuinely reflect the beneficiary.
* If Bob travels from Sydney to Brisbane to give a speech at a conference held by the Brisbane office, the cost should be allocated to Brisbane
* If Bob travels from Sydney to Melbourne for training, then the cost is allocated to Sydney

Automated tools, like accounting software, should be used to streamline the allocation process and reduce the risk of errors.
Automated tools, like accounting software, should be used to streamline the allocation process and reduce the risk of errors.
Accounting software, such as Xero, provides the option to include an office for transactions; however, some overhead costs need to be manually allocated based on a certain rate.

![Figure: Office can be assigned on each transaction in Xero](Allocate-expense-2.jpg)

### Allocation of shared expenses and unassigned expenses

If an expense is shared among multiple offices and cannot be directly attributed to a specific office, an administrative rate should be used to allocate the cost across all offices.
If an expense is shared among multiple offices and cannot be directly attributed to a specific office, an administrative rate should be used to allocate the cost across all offices.
The method for calculating the administrative rate should be clearly defined in the company rules. Examples of administrative rate calculation methods include the cost of sales or headcount.

E.g., if there is a recruitment ad for a position advertised for any office, the cost is not directly allocated to a specific office but is instead allocated by an end-of-month adjustment.
Expand All @@ -55,8 +55,8 @@ Expenses from the company level can be allocated to each office based on the adm
![Figure: Good example - Software expenses from the company level would be assigned to different offices based on the admin rate](keep-yourself-connected-3.png)
:::

### Review and Communication
### Review and Communication

The allocation process should undergo a review by someone with accounting expertise to ensure the accuracy and consistency of the allocation results.
The allocation process should undergo a review by someone with accounting expertise to ensure the accuracy and consistency of the allocation results.

The company rules governing the allocation process should be effectively communicated to all relevant parties.
The company rules governing the allocation process should be effectively communicated to all relevant parties.
40 changes: 23 additions & 17 deletions rules/angular-separate-component-concerns/rule.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,32 @@ authors:
related:
- when-to-use-state-management-in-angular
- isolate-your-logic-and-remove-dependencies-on-instances-of-objects
archivedreason: null
---

One common mistake in writing a front-end component is trying to fit everything in a single component. This can easily lead to unmaintainable code in the long run, especially for complex components.

<!--endintro-->

## Why should you separate the logic?
In simple components, having many logics (e.g. API calls and binding to the form) written to the component itself sometimes works okay, especially if the aim is to reduce the file footprint. However, doing this to larger-sized components can make maintaining the code challenging. The last thing developers want to do is debug a component with 1000+ lines of code with intermingling logic.

In simple components, having many logics (e.g. API calls and binding to the form) written to the component itself sometimes works OK, especially if the aim is to reduce the file footprint. However, doing this to larger-sized components can make maintaining the code challenging. The last thing developers want to do is debug a component with 1000+ lines of code with intermingling logic.

Pros and cons of combining all logic into a single component:
- 🟢 Less file footprint
- 🟢 Easier to write
- 🟢 Less problem with reactivity
- ❌ No clear separation of logics
- ❌ Harder to debug when things go wrong
- ❌ Adding more features to this component can be challenging

* 🟢 Less file footprint
* 🟢 Easier to write
* 🟢 Less problem with reactivity
* ❌ No clear separation of logics
* ❌ Harder to debug when things go wrong
* ❌ Adding more features to this component can be challenging

Consider splitting your component's logic when:
- The file has reached 100+ lines of code
- The component has two or more sources of data (e.g. route params and API)
- UI has many fields that need to be populated from a data source
- When it is not clear which data source drives the UI or when you want to abstract it out

* The file has reached 100+ lines of code
* The component has two or more sources of data (e.g. route params and API)
* UI has many fields that need to be populated from a data source
* When it is not clear which data source drives the UI or when you want to abstract it out

## How to separate the logic?

Expand Down Expand Up @@ -61,16 +64,17 @@ private calculate(...): ComponentData {
// Calculate implementation
}
```

::: bad
Figure: Massive amount of code intermingling from API calls to calculation to UI binding
:::


Here are the steps to split the logic:

1. Group front-end logic into these processes:
- Data fetching: fetching data from external sources
- Data processing: processing source data to suit the UI better
- Data display: binding the UI displayed element to a value
* Data fetching: fetching data from external sources
* Data processing: processing source data to suit the UI better
* Data display: binding the UI displayed element to a value

2. Identify which part of a smart component belongs to which process.

Expand Down Expand Up @@ -107,6 +111,7 @@ Here are the steps to split the logic:
// Calculate implementation
}
```

::: good
Figure: Use declarative code to bind UI value
:::
Expand Down Expand Up @@ -158,11 +163,11 @@ Here are the steps to split the logic:
});
}
```

::: good
Figure: UI logic is separated from Data Fetching and Data Processing logic
:::


5. (Optional) If the component is complex enough, consider splitting the data fetching with the data processing step to another component.

In the example below, we create a parent component to handle the routing while providing the child component with the only necessary data.
Expand Down Expand Up @@ -201,6 +206,7 @@ Here are the steps to split the logic:
});
}
```

::: good
Figure: All logics (data fetching, data processing, and data display) are now separated
:::
:::
25 changes: 15 additions & 10 deletions rules/avoid-using-gendered-pronouns/rule.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
---
type: rule
archivedreason:
title: Do you avoid using gendered pronouns?
guid: eebb3e51-9869-4fee-8f99-988bd4467b15
uri: avoid-using-gendered-pronouns
created: 2020-12-21T15:32:54.0000000Z
authors:
- title: Adam Cogan
url: https://ssw.com.au/people/adam-cogan
- title: Matt Goldman
url: https://ssw.com.au/people/matt-goldman
- title: Adam Cogan
url: https://ssw.com.au/people/adam-cogan
- title: Matt Goldman
url: https://ssw.com.au/people/matt-goldman
- title: Matt Wicks
url: https://ssw.com.au/people/matt-wicks
related: []
redirects:
- do-you-avoid-using-gendered-pronouns

- do-you-avoid-using-gendered-pronouns
created: 2020-12-21T15:32:54.000Z
archivedreason: null
guid: eebb3e51-9869-4fee-8f99-988bd4467b15
---

Historically, it’s been the convention to refer to users as ‘he’ in technical documentation. This is obviously outdated and sexist – users may not be a "he". It’s more common now to see "he/she" used, but this is clunky and could also still be considered as misgendering non-binary people.
Expand All @@ -30,7 +31,6 @@ This feature is particularly important if the user runs a semi-long task (e.g.30

::: bad
Bad example: User referred to as "he"

:::


Expand All @@ -41,5 +41,10 @@ This feature is particularly important if the user runs a semi-long task (e.g.30

::: good
Good example: User referred to as "they"
:::

::: info
You can use tools like [Alex](https://alexjs.com) to get better at considerate writing finding potential occurrences with a tool that suggests helpful alternatives.

This can be run as a pull request check as well - [Alex Recommends GitHub Action](https://github.com/marketplace/actions/alex-recommends)
:::
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
type: rule
archivedreason:
title: Bicep - Do you use User-defined Data Types?
guid: 2a3ba816-ba40-4cfe-8193-7e151e038ac5
uri: bicep-user-defined-data-types
created: 2024-03-19T19:19:19.1919191Z
authors:
- title: Rick Su
url: https://ssw.com.au/people/rick-su
- title: Rick Su
url: https://ssw.com.au/people/rick-su
related: []
redirects: []
archivedreason: null

---

Expand Down
11 changes: 6 additions & 5 deletions rules/brainstorming-idea-champion/rule.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ related:
- do-you-know-how-to-use-tags-for-github-issues
created: 2024-04-02T13:42:55.753Z
guid: 0034f3e2-a3b5-4527-8d3d-45b27f2e4a1f
archivedreason: null
---
![Figure: a Brainstorming Champion ready to impart his wisdom upon us](wizard.jpg)

During a [Brainstorming Day](/use-the-brains-of-your-company), many great ideas are generated, discussed, and refined. But what happens to these ideas once the day is over? Without a dedicated individual to drive an idea forward, it risks being forgotten or losing momentum. This is where the "Idea Champion" comes in.

<!--endintro-->

![Figure: A Brainstorming "Idea Champion" ready to impart their wisdom upon us](wizard.jpg)

## The Idea Champion's responsibilities

* **Take accountability** for the idea until a Scrum Team has been assigned and development has started or the idea is parked
Expand All @@ -37,10 +39,9 @@ During a [Brainstorming Day](/use-the-brains-of-your-company), many great ideas

The Idea Champion's role is over when either:

* ✅There is a Scrum Team working on the project

or
* ❌ Approval isn't reached and the idea is parked (this is a perfectly acceptable outcome - it can always be revisited in a future Brainstorming Day
✅ There is a Scrum Team working on the project
or
❌ Approval isn't reached and the idea is parked (this is a perfectly acceptable outcome - it can always be revisited in a future Brainstorming Day)

### Using labels

Expand Down
8 changes: 3 additions & 5 deletions rules/business-cards-branding/rule.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Digital business cards offer a range of advantages over their paper counterparts

Here are the instructions for adding a digital business card to your phone wallet using the HiHello app:

1. **Download and install the HiHello app:** Visit your app store (iOS or Android) and search for "HiHello." Download and install the app on your smartphone. https://www.hihello.me/
1. **Download and install the HiHello app:** Visit your app store (iOS or Android) and search for "HiHello." Download and install the app on your smartphone. <https://www.hihello.me/>
2. **Create your digital business card:** Open the HiHello app and sign up or log in to your account. Follow the prompts to create your digital business card by entering your contact details, choosing a template, and customizing the design to your preference.
3. **Save your digital business card to your phone wallet:** Once your digital business card is created, follow these steps to add it to your phone wallet:

Expand All @@ -74,10 +74,8 @@ Here are the instructions for adding a digital business card to your phone walle
* Follow the prompts to select the saved image of your digital business card from your gallery or files.
4. **Access and share your digital business card:** Once your digital business card is saved in your phone wallet, you can easily access it anytime by opening your wallet app. You can then share it with others by tapping on the card and selecting the sharing option provided by your wallet app.

![Figure: Ok example: If you are going to have Paper Business cards, make sure they POP!](ssw-businesscards.png)
![Figure: OK example: If you are going to have Paper Business cards, make sure they POP!](ssw-businesscards.png)

::: good

![Figure: Good Example - Digital Business Cards such as HiHello are awesome!](dsdsvcsd.png)

:::
:::
Loading

0 comments on commit c739d26

Please sign in to comment.