What are the signs of a healthy software company?
The following signs are defined assuming a web development software company.
- Projects are completed on time and under budget.
- Development is supported by continuous integration practices.
- Tests are written for the code developed.
- The different stages of development are not rushed so that coding happens as soon as possible.
- Projects are put in production and monitored.
- Events requiring intervention in production are handled without the presence of a large amount of stress.
- Employees have time to share their knowledge of the codebase with one another.
- Code is reviewed before being merged into the master branch.
- Version control is used.
- Processes are documented, followed, and updated when necessary.
- Traceability is possible from clients' requests to their deployment in a live environment.
- Most of the system has been designed beforehand and only minor sections of the design need to be updated during the sprint iterations.
- Priorities have been established and are well documented.
Keeping a site up to date while highlighting changes
History / Edit / PDF / EPUB / BIB / 2 min read (~288 words)How can you keep a website up to date and yet have previous visitors recognize new content as fast as possible?
As I am a developer, what is the most straightforward answer to this problem is to use a tool such as diff. When I write articles on my blog, I use Visual Studio Code which I have configured to save on window getting out of focus (or the current tab of the editor being changed). With this save event, I also create a git commit automatically with a very boring message "Automated save from VS Code.". The point is not to have a fancy commit message, but to have a trace of when the changes where made. This allows me to offer to my visitors the ability to view the history of changes that were done to an article.
The downside to this approach is that it is not very easy to diff the article between two versions using the github web UI. It requires manually playing around the url, to provide the base and latest article SHA1 hash and to find the article in the list of files changed, which makes the experience rather painful and likely to lead nobody to do it.
Given that the git repository is available on my server where the blog is hosted, it would be possible for me to run a git diff
command provided the last version seen by the visitor. This would allow me to present the changes that were done since the visitor last came. For instance, removal of sentences would be simply not displayed as removed since it is likely to be irrelevant to the visitor, however new sentences would be highlighted in green.
Good execution of a project through consensus instead of leadership
History / Edit / PDF / EPUB / BIB / 2 min read (~371 words)How can a project be well executed through consensus instead of leadership?
To properly execute a project without a leader that makes important decisions, time is one of the most critical components. Without enough time, decisions are not consensus but decisions made by the individuals available at the time the decision is required. It is also important not to rush things as it will simply lead to bigger and bigger mistakes happening more and more quickly. At one point a few or many team members will realize they've moved too far too fast and many of the necessary pieces are missing, which makes the work they've done so far either irrelevant or of low value.
The team members also need to know each other well enough to know their strengths and weaknesses. Without this knowledge, weaknesses are often ignored because they are the weaknesses of everyone.
Decisions need to be reviewed regularly to ensure consistency. Since there is no single leader that keeps the project in their head and wants to see it to completion, it is necessary to ensure that the work that is planned and executed is consistent towards a common vision. Not doing so can lead the team to work on features that go in opposite directions, features that are not aligned with the users the project targets. Acceptable moments to review those decisions are during the planning sessions and the review/demo sessions.
Team members should often work in pairs with a different individual in the team to ensure that their understanding of the project gets discussed with different individuals with different positions. This avoids working with the same person that shares your opinion of the work to be done, while some other individuals may completely disagree with this opinion. Surfacing such differences of opinion early in the development process is critical since it can lead to work that is not aligned with the project.
Overall, we want to reduce as much as possible the time between the moment an individual or group of individuals have an incorrect understanding of the project's goals and the correction of their understanding.
How will you measure your success over the next year?
Over the past few years success for me has been defined less by goals and more by being able to work continuously on a process. For example, I might want to get better at writing. My goal is not something like "write one technical book by the end of 2020" but rather "write technical content daily". This decreases the pressure and the need to perform while allowing me to do what I want.
I feel happier and more successful when I can keep doing the same thing over and over, even though I may have no motivation. It shows me that it's possible to accomplish pretty much anything, as long as you're willing to put in the effort.
Because I evaluate success this way, it is easy for me to track if I'm successful. I use the Loop Habit Tracker (an android app) to track whether I've worked on something I told myself I wanted to improve. My list started small and contained very mundane things such as "Bed is done", "Empty table", "No dirty dishes" and started including more and more habits, such as "Read 1 wikipedia article", "Answer 1 problem" and "Answer 1 question".
Being able to keep a good habit is what defines success to me. With the help of the app I'm able to add more and more habits without forgetting the previous ones since I'm reminded to do them at the desired weekly frequency.
What does a productive meeting look like?
There are a few people invited, less than 6 ideally. Everyone invited knows why they are in the meeting and will contribute to the discussion.
An agenda for the meeting has been set, with a pre-determined amount of time for each item on the agenda. One person is responsible to make sure that the agenda is followed and that the time is respected.
Notes are taken by the different individuals that are part of the meeting.
Items that appear to require more discussion than anticipated are noted and the involved individuals may spend additional time outside of the meeting to make their point, either through another meeting or by writing a document explaining their position.
A list of actionable items is defined at the end of the meeting and responsibles are assigned to those items. Deadlines are also assigned to those items so that people can expect those items to be completed by the defined date.