52
loading...
This website collects cookies to deliver better user experience
Agile Methodology and frameworks used
Design Systems
Infrastructure
Backend
State Management
Frontend
Agile is the ability to create and respond to change. It is a way of dealing with, and ultimately succeeding in, an uncertain and turbulent environment.
Scrum: from my perspective, the most interesting, this framework allowed our cross functional team to interact as a whole, splitting the work up in 2-weeks sprints, and constantly adjusting the business requirements, it is a quite nice experience!, highly recommended.
Kanban: my second favorite from top to bottom, a good option when the work to be done does not follow the same path, for instance working on different repos at the same time(MonoRepos, MFEs, Legacy Systems)l; when this happens perhaps Scrum is not enough cause the time-frames.
Extreme Programming (XP): required for an MVP one of my teams had, from my experience, the most risky one since you dynamically change requirements and some heavy lifting could magically appear/disappear down the road, highly not-recommended unless it is "Extreme"-ly necessary(pun intended), and please be "Extreme"-ly cautious(pun intended X2).
Agile Manifesto
(the corner stone of the methodology) you can do it right here.Design System
, you have 2 options: reuse an existing one or create one custom from scratch, either way the benefits are amazing!, when present it covers up 3 different areas:UI/UX
does not repeat itselfWebDev
has one-and-only-one source of truthQA
can evacuate questions on its ownVue
components using Tailwind
and creating its respectives stories on Storybook
; I can say this is a great approach cause you can define your Design System
in Storybook
itself, and publish this to an accessible page for all your team members(under a VPN is even more secure), so it is available for everybody, they can see the components running in an isolated scope before even implementing it!Infrastructure
, well the approaches we had the opportunity to work with where Jenkins, TravisCI and GitHub Actions.Jenkins
is a great way to go, among all its pros, you can set it up for running on your behalf the unit testing and end-to-end testing before deploying!, in case of failure you are notified and a fix can be included.GitHub
already has some built-in options for setting up ymls
and help you with Merge Requests and Deployments.store/
├── index.js
└── modules/
├── module1.store.js
├── module2.store.js
├── module3.store.js
├── module4.store.js
└── module5.store.js
index.js
make them importable through out your project, this includes State
, Getters
, Mutations
, Actions
; a new module is just the addition of a new entry in the index.js
, a deprecated module is the removal of that entry(conditions may apply).namespace
the modules!, then you can differentiate the elements by module instead of having dozens of lines with no context(trust me, with several modules this is amazing for debugging purposes, scalability and visual sake).import { mapState, mapGetters, mapActions, mapMutations } from 'vuex';
export default {
computed: {
// Accessing root properties
...mapState('my_module', ['property']),
// Accessing getters
...mapGetters('my_module', ['property']),
// Accessing non-root properties
...mapState('my_module', {
property: state => state.object.nested.property,
}),
},
methods: {
// Accessing actions
...mapActions('my_module', ['myAction']),
// Accessing mutations
...mapMutations('my_module', ['myMutation']),
},
};
Vue
has a smaller learning curve than Angular
, and it is very similar to React
(Note: assuming you have a strong base of Javascript, otherwise the curve is high on either of them).Angular
projects, understanding the core concepts and starting to be productive was easier than expected; I really think that the other way around must be harder, cause Angular
has its own world.
import Vue from 'vue';
import Router from 'vue-router';
const routerOptions = [
{ path: '/', component: 'Home' },
{ path: '/home', component: 'Home' },
{ path: '/auth', component: 'Auth' },
{ path: '*', component: 'Auth' },
];
const routes = routerOptions.map(route => {
return {
...route,
component: () => import(/* webpackChunkName: "{{route.component}}" */ `../views/${route.component}.vue`),
};
});
Vue.use(Router);
Vue
has its own utils for testing purposes, and it is quite easy to understand and use, let me show the most simple sample I found:
<template>
<div class="modal" data-test="modal" aria-modal="true">
<div class="modal-content">
<slot></slot>
</div>
</div>
</template>
import { expect } from 'chai';
import { shallowMount } from '@vue/test-utils';
import BaseModal from '@/components/atoms/BaseModal.vue';
describe('BaseModal', () => {
context('Template', () => {
context('existence of the element', () => {
it("should exist 'modal' element", () => {
const wrapper = shallowMount(BaseModal);
expect(wrapper.find("[data-test='modal']").exists()).to.equal(true);
});
});
});
});
_globals.js
file and fill it in with:
// Globally register all base components for convenience, because they
// will be used very frequently. Components are registered using the
// PascalCased version of their file name.
import Vue from 'vue';
// https://webpack.js.org/guides/dependency-management/#require-context
const requireComponent = require.context(
// Look for files in the current directory
'./atoms',
// Do not look in subdirectories
false,
// Only include .vue files
/[\w-]+\.vue$/,
);
// For each matching file name...
requireComponent.keys().forEach(fileName => {
// Get the component config
const componentConfig = requireComponent(fileName);
// Get the PascalCase version of the component name
const componentName = fileName
// Remove the "./" from the beginning
.replace(/^\.\//, '')
// Remove the file extension from the end
.replace(/\.\w+$/, '');
Vue.component(componentName, componentConfig.default || componentConfig);
});
import '@/components/_globals';