Showing posts with label Productivity. Show all posts
Showing posts with label Productivity. Show all posts

Monday, December 18, 2023

Running effective asynchronous (async) meetings

In the remote/asynchronous world we live in, running effective asynchronous (async) meetings is becoming a popular reality. Here's what you need to know to succeed.
Photo by Christin Hume on Unsplash

Hey, good news! In the remote era, running effective asynchronous (async) meetings is possible! On this post, let's understand how to succeed, run and participate in async meetings.

What is an async meeting?

What do you understand by "async meeting"? Yes, it's essentially a meeting that happens asynchronously, where participants engage without the need for same-time communication. Its biggest benefit is asynchronous collaboration, especially in remote or distributed work environments where team members work in different locations of the globe.

Best Practices for Async Meetings

So let's review some tips on how to run effective (and productive) async meetings.

Set Clear Objectives

First, you should define the purpose and goals of the meeting. What specific outcomes or decisions does the team want to achieve?

Choose the Right Tools

Next, make sure you utilize collaboration and communication tools designed for async meetings. Popular options include Slack, Microsoft Teams, Google Meet, or dedicated async meeting platforms.

TIP: Check our previous post on async work for more information.

Schedule in Advance

Announce the async meeting well in advance to allow participants to plan their time and contribute thoughtfully.

Provide Context

Share background information, documents, and relevant context before the meeting. Make sure participants have all the necessary information to contribute effectively.

Set a Deadline

Because async meetings don't end at the same time for everyone, it's important to specify a deadline for participants to provide their input or feedback. This creates a sense of urgency and helps keep the meeting on schedule.

Agenda and Structure

Create a clear agenda that outlines the topics, questions, or tasks to be addressed during the meeting. Organize the meeting into structured sections to make it easy for participants to follow and respond to specific points.

Use Clear Communication

Write clear and concise messages or prompts. Avoid overly lengthy or ambiguous messages that could lead to misunderstandings.

Encourage Participation

Before, during and after the event, make sure that everyone understands that their input is valuable. Encourage participants to contribute their ideas, suggestions, or feedback openly.

Set Expectations

As sync meetings, async meetings have a goal. Clearly communicate the expected level of participation and the timeline for responses. Be explicit about the desired outcome for each participant, or for the team.

Follow-Up and Reminders

Another good practice is to send reminders and follow-up messages to participants as the deadline approaches. Ensure that no one forgets to contribute.

Consolidate Responses

Once all responses are collected, consolidate and summarize them into a cohesive document or message. Highlight key points, decisions, and action items.

TIP: Use GenAI to summarize the information. Why not?

Document the Meeting

Keep a record of the meeting's outcomes, decisions, and action items. Share this documentation with all participants for reference.

Decision-Making Process

If the async meeting is intended for decision-making, clearly outline the decision-making process and criteria. Use a voting system or other method to reach a consensus.

Review and Iterate

After the async meeting, evaluate its effectiveness. Gather feedback from participants and make improvements for future async meetings.

Considerations

But async meetings has its challenges too. Here are some details that organizations should consider.

Manage Overload

Be cautious about overloading participants with too many async meetings. Prioritize and schedule them judiciously to avoid burnout.

Assign Roles

Designate a facilitator or organizer responsible for managing the meeting and ensuring that participants stay on track.

Accessibility and Inclusivity

Ensure that all participants have equal access to the meeting materials and can contribute comfortably. Consider time zones and different work schedules to accommodate global teams.

Respect Time Zones

Be mindful of time zone differences when setting deadlines and sending reminders. Use tools that display multiple time zones to avoid confusion.

Conclusion

Effective async meetings can enhance collaboration, allow for thoughtful contributions, and accommodate the diverse schedules and preferences of team members in remote or distributed work settings. It's important to establish clear processes and expectations to make async meetings a valuable and efficient part of your team's workflow.

Friday, December 1, 2023

Creating Great Documentation for Remote Teams

Remote work is not only about writing code and creating PRs, but also making sure key information can be easily found

Continuing on the topic remote work and async best practices, today we will cover how to leverage documentation to effectively. 

Creating great documentation for use in remote teams is essential for ensuring that team members have access to the information and resources they need to work effectively, even when they are not physically located in the same place.

Why documentation is important

Documentation is a foundational concept for IT and software development teams. Some of the obvious benefits are: greater collaboration, knowledge sharing, problem-solving, and quality assurance while also serving as a reference for future development and maintenance efforts.

Documentation plays a crucial role in the context of information technology (IT) and software development for several reasons, as it can be used for:

  • Knowledge Transfer
  • Onboarding
  • Maintenance and Troubleshooting
  • Compliance and Auditing
  • Quality Assurance
  • Risk Mitigation
  • Collaboration
  • Scalability
  • Stakeholder Communication
  • Historical Context, and more.

Given its critical importance, let's take a look at some best practices for effective documentation commonly used by remote teams.

Documentation Best Practices for Remote Teams

Define Clear Objectives

Clearly state the purpose and objectives of the documentation. What specific information or tasks should it help remote team members accomplish?

Structure and Organization

Organize the documentation logically with a clear structure. Use headings, subheadings, and a table of contents to make it easy to navigate. Group related topics together, and use a consistent naming convention for files and sections.

Don't forget with the Basics

Begin by documenting fundamental information such as team goals, mission, vision, and core values. Provide an overview of the team's structure and members.

Include Detailed Guides

Develop detailed guides, tutorials, and how-to documents for common tasks and processes. These guides should be step-by-step and include screenshots or videos if necessary. Consider creating templates for common documents, reports, or forms to ensure consistency.

Use Visuals and Examples

Incorporate visuals, diagrams, and examples to enhance understanding. Visual aids can be particularly helpful for complex concepts or processes.

Keep It Updated

Regularly review and update the documentation to ensure its accuracy. Assign ownership of specific sections to team members responsible for the content.

Incorporate a Feedback Mechanism

Establish a feedback mechanism for team members to suggest improvements or report errors in the documentation. Act on this feedback promptly.

Facilitate Regular Trainings

Provide training to remote team members on how to use the documentation effectively. Make sure they understand how to access and navigate the documentation platform.

Don't forget Onboarding Material

Create a dedicated section for onboarding materials for new remote team members. Include information on team culture, policies, and procedures.

Promote Usage

Encourage remote team members to use the documentation as their primary source of information and guidance. Emphasize its importance in remote work.

Identify Your Audience

Determine who will be using the documentation. Remote teams often consist of a diverse group of individuals with different roles and responsibilities.

Essential Tools for Effective Project Documentation

Without supporting tools, great documentation would not be accessed effectively. So let's review essential tools to maximize your team's use and access to documentation.

Version Control

Implement version control for documentation so that team members can access previous versions if needed. This is crucial for tracking changes and maintaining a historical record.

Search and Indexing

Implement a robust search function or indexing system within your documentation platform to help team members quickly find the information they need.

Foster Collaborative Editing

Always allow team members to contribute to and edit documentation collaboratively. Encourage subject matter experts to share their knowledge.

Review Access Control

Manage access to documentation carefully. Ensure that team members have appropriate permissions to view and edit documents based on their roles and responsibilities.

Backup and Disaster Recovery

Implement a backup and disaster recovery plan to ensure that documentation remains accessible even in the event of technical issues or data loss.

Security and Privacy

Consider security and privacy when creating and sharing documentation, especially when dealing with sensitive information. Use encryption and access controls as needed. Conduct regular audits or reviews of the documentation to identify areas for improvement or expansion based on changing needs and processes.

Which tools should I use?

First and foremost, use what is allowed by your organization,  and what works for your team. Consider using collaborative tools like Google Docs, Microsoft SharePoint, Confluence, or dedicated documentation software like Notion or Markdown-based systems like GitHub.

Just don't forget to tune your security, and get everyone onboarded to access the information they need.

Conclusion

Great documentation is an essential resource for remote teams. It fosters clarity, consistency, and productivity, enabling team members to work effectively and independently regardless of their physical locations. Regularly maintaining and improving documentation is an ongoing process that contributes to the success of remote work environments.


Wednesday, November 15, 2023

How to work effectively in an asynchronous world

More and more people work remotely. Let's review essential best practices for you (and your teams) to succeed.
Photo by Avi Richards on Unsplash

Working effectively asynchronously, especially in remote or distributed teams, requires careful planning, communication, and time management. Asynchronous work means that team members are not necessarily working at the same time or in the same location.

Recommended Best Practices

When working remotely (and asynchronously), there are many details that you (and your team) should pay attention to, not to sacrifice the end goals of your project. So let's review some strategies for working effectively in an asynchronous environment.

Clear Communication

Make sure everyone in the team can communicate effectively. To be a successful async employee, clearly articulate your thoughts, expectations, and questions in emails, messages, or collaboration tools. Be concise and organized in your written communication to ensure your message is easily understood.

Use Collaboration Tools

Utilize project management and collaboration tools like Slack, Microsoft Teams, or Asana to centralize communication and track tasks. Use shared documents and cloud-based platforms (e.g., Google Workspace, Microsoft Office 365) to collaborate on files in a distributed setting.

Set Expectations

Establish clear expectations for your response times. Make it known when a response is needed and when it's acceptable to respond. Document guidelines for working asynchronously within your team, including preferred communication channels and response windows.

Structured Workflow

Define processes and workflows that allow team members to work independently and efficiently. This might include creating templates or checklists. Set deadlines and milestones to keep projects on track and ensure everyone knows their responsibilities.

Time Management

Plan your day and allocate time for specific tasks. Prioritize high-impact, strategic work and minimize time spent on low-value activities. Use time management techniques like the Pomodoro Technique or time blocking to stay focused and productive.

Provide Regular Updates

Provide updates on your progress to keep team members informed. This can be in the form of daily or weekly status reports. Share your accomplishments, challenges, and next steps so that others can easily catch up on your work.

Effective Documentation

Document decisions, discussions, and important information in a central location. This ensures that team members can refer back to information when needed. Consider creating a knowledge base or wiki for your team or organization.

Consider Time Zones

Be mindful of time zone differences when scheduling meetings or setting deadlines. Use scheduling tools that can display multiple time zones. Avoid scheduling urgent meetings during non-standard working hours for team members in different time zones.

Make Information Available

Use status indicators in communication tools to let others know when you're available for quick questions or discussions. Set boundaries for when you're not available to prevent burnout.

Collaborative Decision-Making

When making important decisions, involve all relevant team members asynchronously by sharing information and gathering feedback through written channels.

Provide Feedback and Recognition

Provide feedback and recognition to your colleagues through written praise or constructive feedback to acknowledge their efforts and contributions.

Foster Continuous Learning

Embrace continuous learning and improvement. Stay updated on new tools and best practices for asynchronous work.

Leverage a Data-Driven Approach

Analyze data on team performance, response times, and project progress to identify areas for improvement in your asynchronous workflow.

Don't forget Team Building

Organize occasional synchronous meetings or team-building activities to maintain social connections and strengthen relationships.

Conclusion

Working effectively asynchronously requires discipline, adaptability, and strong communication skills. By implementing these strategies and continuously refining your approach, you can create a productive and collaborative work environment, even when team members are not working in the same time zone or location.

Monday, July 17, 2023

How to transition from Software Development to Architecture

Transitioning from software development to software architecture could be a great career progression for experienced developers. Learn how.

Image One Way, Alt Way
Photo by Brendan Church on Unsplash

When looking for the next step in their career, senior software engineers (or tech leads) have usually three paths before them: become increasingly more technical (aka. principal/staff engineer), move to a managerial position (Head of Engineering, Engineering Manager) or become a Software/Solution Architect.

In this blog post, we will explore how developers can successfully transition from software development into architecture.

What's required from an Architect

Before deciding if you really want to become a Software/Solution Architect, I recommend investing a decent amount of time reading about the role and comprehending everything that's expected from an architect in the context of a technology project (it's a lot!).

That said, transitioning from software development into architecture may not be the natural progression for most developers. While software development focuses on coding and implementation, software architecture takes a broader view, encompassing system design, scalability, long-term planning, a lot of communication and a lot of interpersonal skills. Not everyone will fill those gaps.

That said, the transition will be hard for most, especially for introverts, as it will require a shift in mindset, a huge ramp up to learn new skills and a growing focus on developing soft skills. Not everyone will be comfortable with that.

Transitioning from Development to Architecture

But if you are one of the brave ones who aspire to move into architecture, I have prepared this guide to help. So let's review the essential steps to help you successfully transition from software development into architecture.

1. Understand the Role of a Software Architect

Before embarking on the transition, it's crucial to understand the responsibilities and expectations of a software architect. A software architect is responsible for designing the overall structure of a software system, including making high-level decisions around the technology stack, system components, and interaction patterns. Architects need to balance technical considerations with business goals, scalability, maintainability, and performance.

I've spoken in detail about what's expected from a modern Solution/Software architect in a previous article, please read it here.

2. Expand Your Technical Knowledge

To become a successful software architect, you will need a much broader understanding of technology. This includes learning new technologies, frameworks, design patterns, cloud, tools, databases, keeping up with modern trends (like AI, IoT and Crypto), and gradually understand different technologies in different domains.

You will also be required to learn about best practices, scalability techniques, regulations, security, compliance and industry standards. This broad technical expertise will be immensely valuable when assessing the trade offs or your decisions, which will have a huge impact in your architectural decisions.

3. Enhance Your System Thinking

Transitioning to software architecture requires a shift from code-centric thinking to system-centric thinking. You will have to start viewing software systems as a single unit, learn to zoom out from the code/unit level and understand how different components and dependencies of a solution interact with each other.

You will be required to go much deeper (and wider) by assessing which programming language, database, cloud platform, and architectural style (ie., microservices, event-driven architecture, and domain-driven design) will fit better in your solution.

You will have to consider scalability, fault tolerance, performance, security, and other non-functional requirements. Develop the ability to break down complex problems into manageable components and design solutions that meet the system's architectural goals.

4. Gain Experience in Designing and Documenting Architectures

Additionally, it will be necessary to practice your architectural skills, a lot! Seek opportunities to design software systems, collaborate with colleagues or contribute to open-source projects that involve architecture discussions.

Practice documenting your design decisions, architectural diagrams, and system documentation. By going through the process of design and documentation, you will gain experience in communicating your architectural vision effectively.

Architectural Katas are a great resource for you to practice your skills.

5. Develop Soft Skills

Software architects not only design systems but also collaborate with stakeholders, developers, and project managers. Effective communication, leadership, and negotiation skills are vital for successful architecture transitions.

You will be required to grow your ability to express complex ideas concisely, listen actively, and adapt your communication style to different audiences. Cultivate your leadership skills by taking initiatives, guiding discussions, and mentoring other developers.

6. Seek Mentorship and Learning Opportunities

Learning from experienced software architects can greatly accelerate your transition. Seek mentorship from architects in your organization or join professional communities, forums, or meetups where you can connect with architecture practitioners.

Engage in conversations, ask questions, and learn from their experiences. Additionally, attend conferences, workshops, or online courses that focus on software architecture to deepen your knowledge and expand your network.

7. Embrace Continuous Learning

Software architecture is an ever-evolving field, with new technologies and approaches emerging constantly. Stay up-to-date with industry trends, read books, follow architecture blogs, and engage in discussions on social media platforms. Embrace a growth mindset and continuously learn and adapt to new technologies and architectural paradigms.

Given the extensive technical and non-technical skills required from a modern architect, we prepared this detailed guide describing what our architects should know, and guide them on the learnings they’ll need while working on their professional development plan.

Final Thoughts

Transitioning from software development to software architecture is an exciting career progression that requires a shift in mindset and the acquisition of new skills. By understanding the role of a software architect, expanding your technical knowledge, enhancing system thinking, practicing design and documentation, developing soft skills, seeking mentorship, and embracing continuous learning, you can successfully make this transition.

Remember, becoming a proficient software architect takes time and experience, so be patient and persistent in your journey. Good luck!

See Also

Tuesday, April 4, 2023

The modern Solution/Software Architect

Understand what's required from modern Solution/Software Architects and learn why being one is much more complicated than you think 


Photo by Rodeo Project Management Software on Unsplash

Being a modern day Solution/Software Architect is much more complicated than you might think. On this article let's review the nuances of the role(s) and in which understand domains one should excel to be a successful modern day architect.

Solution Architects and Software Architects are not the same role. But because the guidelines listed on this article serve perfectly for both, for the purposes of this article, allow me to refer to both as simply, the Architect.

Apparently, there's a lot of confusion and ambiguity with regards to the Architecture role. Differently of most people think, an Architect is not an upscaled tech-lead or a principal engineer. In fact, the goals of each roles are so different that together, the Architect and a their technical counterparts make a great team.

With that said, allow me to introduce you to the Architect role.

Who is the Architect?

Architects are a hybrid of technical and executive. Which means that in order to be successful at their jobs they should have strong technical, communication, executive and interpersonal skills.

Architects are not expected to know every detail of a software component or every possible argument to Your-Favourite-CLI. But they should know enough to be able to evaluate the tradeoffs of each alternative, choose and detail how a particular technology is used, and most importantly why.

For that to happen, it is recommended that Architects prioritize to go wide and not deep (sorry, you can't do both). Wide in diversity of technology, frameworks, patterns and practices is preferred to deeply knowing how one technology works (which's what the Engineer is supposed to do). So having experience with a diversified portfolio of technologies is strongly recommended.

Additionally, the Architect should not act as a sales representative of a particular technology/cloud service provider. Their choices should always favour business decisions first and foremost.

The modern day Architect

With a lot of competition, AI, a plethora of technologies and faster than ever changes in the business marketplace, how can one keep up to date with so much? This is where the modern day Architect comes in. 

Modern day architects must be strong in technical and non-technical domains.

But because the modern day Architect being required to know so much and master many different domains, the first thing they should learn is how to prioritize what they'll work on. Make your goals SMART so they are prioritized, specific, measured and acted upon.

But remember that the fallacy that an Architect is purely technical has to be deconstructed. The modern day Architect should be technically strong while also possessing sufficient interpersonal skills to be able to lead teams, handle difficult conversations and interact with a diverse audience ranging from business executives, boards, RFPs to technical teams.

So let's review both domains.

Technical Skills

Software Design and Architecture

The modern software architect needs to be intimately familiar with software design principles and patterns, and be able to create efficient architectures that scale and can be easily maintained.

There is just so much here that the best way to address this is on another post. For now, let's summarize it to design + architecture + enterprise patterns, along with excellent

Development

Being able to program in a range of programming languages is essential for the modern Architect. Architects should be familiar with the syntax and features of the languages they work with, as well as the programming frameworks associated with them.

This should be a trivial one if you come from a development background. However, I'd like to add two things. First, beyond excellent programming skills, software architecture and design is crucial for the Architect role. Next, scripting (ex. Bash, Python or PowerShell) is also important as it's also needed by the DevSecOps area of expertise (see next).

Cloud Computing

Cloud computing includes a broad set of technologies that modern software architectures rely on, and a critical domain that the modern day Architect should be be well-versed in.

With the omnipresence of the cloud, make sure you have your cloud fundamentals right. On top of that, add the different facets of cloud (private, hybrid, multi) and complement all of that with architecture skills.

Sound complicated? Indeed. In fact, being a successful Architect that understands well the cloud (in all of its flavours) is much more than one may think. Especially because no certification can measure so much.

DevSecOps

Next, DevSecOps. Yes, DevOps + Security shifted left. The modern-day Architect should have strong fundamentals in everything from basic CI/CD pipelines to Kubernetes, as they'll need to engage frequently with engineers and business to make sure their solutions are modelled and work as expected.

Understanding of DevOps and Continuous Delivery are important for modern software architectures, and the modern software architect must be able to design and implement systems that use these technologies.

Data

Modern architects should have a deep understanding on data and related technologies. That includes data design, storage, analytics, security and governance.

Infrastructure

Modern architects should know enough infrastructure to help they clients wherever they are in their journey. That includes a solid understanding of virtualization, networking, containerization, monitoring, logging and infrastructure automation.

Security

Security is a moving target and a very difficult domain to master. Modern architects should know enough security to be able to understand, adopt security and communicate security to different stakeholders.

Governance and Compliance

Lastly, the modern architect should know enough on Governance, Privacy and Compliance. That includes standards, legislations and regulations as they have a profound impact on the business and on the final solution.

Interpersonal Skills

For an Architect, interpersonal skills are as important as the technical ones. Let's see the main ones.

Communication

Being able to effectively communicate with others is essential for the Architect. This includes ability to actively listen, clear communication, constructive feedback and be able to handle difficult conversations.

Communication is a critical skill for Architects as much of what their work - communicate their ideas and designs to other stakeholders - requires clear communication and must be done effectively.

Presentation and Public Speaking

Architects should be have strong presentation and public speaking skills, as they'll have to communicate to different audiences, both technical and executive.

Leadership

An Architect must have the ability to lead a team and guide them to achieve the project's goals. Part of the expectations include setting expectations, giving directions, and motivating peers.

Problem Solving

As part of their role, Architects must be able to analyze complex situations and come up with creative solutions. In this area, skills such as assessing the pros/cons of each alternative, balancing tradeoffs have to be counterbalanced with technical and business-specific requirements.

Negotiation

Negotiation is a critical skill for Architects as they have to negotiate all the time with vendors, customers, and other stakeholders to successfully achieve the project's goals.

Adaptability

Projects change all the time. Architects must be able to adjust to changing conditions and respond quickly to new challenges.

Emotional Intelligence

Executives must have the ability to read and understand the emotions of others and respond appropriately.

Networking

Architects must be able to connect to different stakeholders to build relationships with different types of professionals that help them make their projects successful.

Final Thoughts

Despite not being exactly the same, this article covered the general characteristics Solution/Software Architects should have to be successful in their hole.

As you may have realized, being a modern Solution/Software Architect is much more complex that one might think and involves being a hybrid tech-executive that takes a lot of time to master.

Hopefully this summary serves as a roadmap so you can guide your career to the level expected by the market when it comes to software/solution architecture.

Good luck!

See Also

Tuesday, March 7, 2023

The importance of onboarding for tech employees

Not much about onboarding is discussed in the tech industry. As a critical component to any organization, here is what you should know as an employee and as an employer


Photo by charlesdeluvio on Unsplash

By far one of the most ignored things in tech is onboarding. Everyone talks about interviews, training, coaching, salaries and (recently) layoffs, but very little on the topic is mentioned.

Could it be because the topic is boring and won't get many clicks? Maybe.
Could it be because onboarding is for the HR only? For sure.
Could it be because tech people only is about tech stuff? Definitely.

Well, unfortunately that's all wrong. A lot.

As a critical piece for the human engine of any organization, onboarding should be carefully considered as it is critical for the long-term relationship between employers and employees, and directly impacts the profitability and growth of an organization.

High turnover

Recent studies show that the experience new hires have during the first weeks is crucial for the retention of the person. In fact, recent data outlines that "almost 20 per cent of turnover occurs within the first 45 days of a new employee’s start date".

If you add on top of that loss of projects due to shortage of skills, a very tight labour market, and the average cost to replace an employee taking up to $20,000.00/person, it's easy to see how much money is being lost by organizations doing a poor onboarding, especially on a tight job market / full-employment mode, as we're seeing in early 2023.

So how to make the overall experience better?

Improving the onboarding experience

First, start with proper training. Studies show that it can take between 3 and 9 months for the new hire to be fully productive in a company.

So forget that 1-week onboarding. Seriously.

In my experience, I've seen both extremes: people joining and kept on trainings for months, while others dumped in red-hot projects after mere weeks (or days). Obviously both examples are extreme and should sound like alerts for both employees and organizations as they signify either lack of projects or an understaffed organization.

However if we consider 3 month to be the ideal, then we can infer that organizations get a 40% discount should they onboard (and retain) a new employee within 3 months. Those are productivity gains that no organization should ignore.

Best-practices

So let's review how to address this critical issue. Here are some of my favourite onboarding practices for tech employees that leaders should consider:

  • Onboarding is not a one and done activity: it has to continue throughout the first year and potentially further on as is key to employee satisfaction.
  • Keep the employee engaged during the onboarding phase: offer different activities, have them meet different people and different teams. 
  • Make it fun: forget those long recording 
  • Foster interactions: introduce the new hires to other employees and teams they'll be interacting with.
  • Mix content: make sure your onboarding experience includes a mix of online led and self-directed sessions  
  • Avoid full-day back-to-back sessions: onboarding is exhausting. Don't make it painful.
  • Diversify: approach different topics and even allow them to explore different content.

How to make onboarding even more exciting

Additionally, if you want (and can) make onboarding even more exciting, here are 4 additional tips:

  • Provide a hands-on experience: Allow new tech employees to get hands-on experience with the technology they’ll be working with. If possible, provide a lab environment where they can play with the technology and get to know it better.
  • Assign a mentor: Assign each new tech employee an onboarding buddy. The onboarding buddy can serve as a mentor and help the new employee feel more comfortable in their new role.
  • Mix technology, medium and format: Use technology like video conferencing and interactive presentations to make the onboarding process more engaging. This will make the onboarding process more interactive and give the new employee a better understanding of the technology they’ll be working with.
  • Offer training: Provide online courses and hands-on training sessions to help new tech employees learn more about the technology they’ll be working with. This will provide them with the knowledge and skills they need to be successful in their new role.
  • Gamify: Use gamification techniques like rewards and leaderboards to make the onboarding process more interesting. This will help motivate new tech employees to learn more and keep them engaged throughout the onboarding process.

Next Steps

So what can you do to promptly address your own onboarding?

Well, the first thing is to take this conversation back to your manager and start the conversation. Additionally, interview recent hires and see what went good/bad/ugly in their first 6 months in the organization (don't mention onboarding).

Finally, engage the whole team and work together to make this experience great. Onboarding isn't only the responsibility of your leader.

Final Thoughts

Since the average cost to replace an employee getting up to $20,000.00, a very tight job marketplace and a high correlation between onboarding experience and employee retentions, companies of all sizes should re-consider the onboarding experience.

For the tech sector, in addition to that, consider making your onboarding experience more exciting by mixing sync and async sessions, training and gamification.

Further Reading

Monday, February 20, 2023

My Journey to 1 Million Articles Read

Writing a tech blog is a fun and rewarding experience. On this article, I will share what I learned after publishing more than 100 articles during the last 5 years


Photo: Christopher Gower on Unsplash

I have been working with technology for more than two decades now. As an avid reader and a tech enthusiast, having my own professional blog is one of the best ways to share what I learn and to give back to the community.

In this article, I will review my experience as a blogger after 5 years of work and more than 100 articles published.

The beginning

As most blogs, this one started off small. During the first year it had no more than a few page views per day. Personally that didn't mattered as my my goal was never to make it a successful product. For me, it was a tool to share what I learned with a greater audience and hopefully inspire others to be better at their jobs.

Little did I know how incredible this journey would eventually become...

As I persisted on the work and wrote more (and better) articles, SEO started to pick up. It didn't take long for this blog to gain traction, be quoted, linked to, and even referenced by search engines on specific queries.

Today

Today the blog has surpassed half-million visits and just keeps growing. On peak days, it has more than 10k visits. What an achievement for such an unpretentious work!

However, for different reasons I can't write as frequently as I would like to. But still, having this channel to communicate to a wider audience inspires me to keep working on it. And I'm not stopping any time soon!

What I learned

So what did I learn during this time?

First off, writing a technical article is no simple task. I usually spend a decent amount of time researching the topic in question before writing the very first sentence. During this phase, I collect as much information as I can, to then organize my thoughts in order to convey the message in a meaningful way. During writing, I carefully enrich my articles with the most relevant material to make the reading experience as fulfilling as possible.

Second, blogging requires a great deal of personal commitment. Be prepared to dedicate a significant amount of your personal time on it. I write most of my articles during my leisure time which may be a concern for some. But rest assured, the benefits definitely outweigh the drawbacks!

Third, persistency is key. For any work to thrive, it's important to have a solid goal and stick to it. Improvement is exhausting. It’s okay to enjoy when you don’t excel. Stick to your plan and don't give up!

Finally, the benefits for you, the writer, are much bigger than you think. Here are some of the benefits I realized during this time:

  • You have the chance to help others
  • You connect with the community and build great relationships
  • You get more prolific technically. Meaning that you'll increase your productivity, confidence, improve your problem solving skills and consequently achieve better output in your work
  • You can translate your ideas into paper more quickly and with greater clarity
  • You end up writing and communicating better - which are great assets for your professional progression!
  • You learn and retain more on the topic discussed
  • Depending on how deeply you explore a particular topic, you can eventually become an SME on it.
  • And of course, with all of that, greater professional opportunities will come.

What next?

As I prepare for the next 5 years and continue on my journey to reach 1 million articles read, this blog remains an exceptional avenue for inspiration and experimentation.

Starting today, my focus shifts to the challenges, practices, trends, technologies and complexities of the enterprise. And the reason is simple: there is now a rich ecosystem of tooling and documentation ready to address technical requirements with little customization while the most important part − focus on business and customer needs − remains obscure and in second plan for most.

Final Thoughts

Hopefully at this point you understand how a professional blog could help your career. Despite requiring some personal commitment, for me, keeping this blog alive has been an amazing journey and I’m excited to keep working on it for as long as I can.

I hope this article inspires you too on any meaningful work to help those around you.

Further Reading

To celebrate this important milestone, I've listed below some of the articles that I loved writing during the last 5 years. Some of them may not be as recent but still, there's always something that you can learn from it.

Architecture

Development Methodology

General Technology

Open-Source

📫 Reaching out...

Lastly, if you have any questions, don't hesitate to reach out to me on Twitter and/or LinkedIn 😊

Thursday, March 17, 2022

Why use Vim

Depending on your preconceptions, Vim may look exotic or sexy. Let's review those assumptions and provide rational reasons to use this fantastic text editor.
Photo by Alex Knight on Unsplash

It may be possible that you heard about Vim. It may be possible that you didn't. Depending on your background, it may even be possible that have preconceptions about it. On this post, let's try to review all assumptions and provide concrete reasons to use this fantastic text editor.

This article is an adaptation of another publication made by me on Vim4us. I'm re-publishing here to a wider audience with a few tweaks.

Vim is ubiquitous

Vim has been around for almost thirty years. Due to its simplicity, ubiquity  and low resource requirements, it's the preferred editor by sysadmins worldwide.

Easy to install

Vim is also easy to install on Windows and Macs and is packaged in most Linux distros meaning that, even if it isn't installed in your system, Vim is one line from the terminal and two clicks from your software manager.

Vim is lightweight

Differently from most editors, Vim is very lightweight. The installation package is only 10 Mb and depending on your setup, memory consumption reaches  20 Mb. Compare that with most text editors, especially the Electron-based editors like Visual Studio. Install size is not less than 200Mb, memory consumption quickly 1Gb (50 times more!) while requiring 1.5Gb of storage, making it slow, even on modern hardware.

If you're running a Mac, a low end computer, a phone, or even a Raspberry Pi, Vim is definitely a good option for you.

Vim is stable

As previously said, Vim has been around for almost 30 years. And will probably be for at two more decades. Learning Vim is an excellent investment as you will be able to use your knowledge for the next two decades at least.

Compare that to the editor you use today (EclipseVisual StudioSublime TextVisual Studio Code) - can you really guarantee you'll be using them ten years from now?

Vim is language-independent

Vim works well with anything you want, as long as it's text. Vim works by default with most file formats, has locales, can be localized, supports eastern typography such as Arabic and Hebrew and comes with built-in support (including highlighting) for most languages.

Vim respects your freedom

Vim does not contain any built-in telemetry. It's (unfortunately) common theses days the companies are abusing your statistics in favor of improvements in their system. Sysadmins trust that Vim will not be reaching the network to run ad-hoc requests.

Vim is efficient

Vim is brilliant in how it optimizes your use of the keyboard. We'll talk about that later but for now, understand that its combination of multiple modes, motions, macros and other brilliant features makes it literally light-years ahead of other text editors.

Thriving Ecosystem

Stop for a second and think about which feature you couldn't live without today on your current text editor? The answer you probably be that Python or Go extension, meaning that what you'll miss is not actually about the editor but about its ecosystem.

Vim has a brilliant ecosystem. You'll find thousands of extensions covering anything you need. You can also host your extensions anywhere (on GitHub, for example) without being locked by any vendor. You could also host them in private/corporate repos just for your team or share on public directories like Vim Awesome.

Vim is ultra-customizable

Even if by default Vim has most of what you need, it's important to understand that Vim lets you change pretty much everything. For example, you can make temporary/local customizations (by using the Ex mode), permanent customizations (by changing your .vimrc) or even customizations based on file type.

Vim is always getting better

Vim is actively developed meaning that it keeps getting better. Vim users get security patches and new features all the time. Vim is also updated to accommodate the latest upgrades on modern operating systems while also supporting older systems too!

Huge Community

Vim's community is huge and you can get help easily. These days, the most active discussions happen on Vim's mailing listsStack ExchangeIRCYouTube and of course, Reddit.

Extensive documentation

Learning how to learn Vim is the key to a continuous understanding of the tool and not getting frustrated. There are many ways to get help on Vim: using its built-in help system, using the man pages and obviously, accessing the communities listed above.

Vim is free

These days it may be odd to say that Vim's free. Vim's freedom goes beyond its price, but also your freedom to modify it to your needs and deploy it wherever you want. Vim developers also have a strong commitment to helping needed people around the world.

GUI-less

Vim also runs GUI-less, meaning it runs on your terminal. So you get a full featured text-editor on any system you're working on, regardless if it's a local desktop or remote supercomputer. This feature is essential for sysadmins and developers who often need to modify text files on remote machines trough an SSH connection.

Rich out-of-the-box toolset

Vim comes with fantastic tooling by default: powerful search, regular expression support, syntax highlighting, text sort, integrated terminal, integrated file manager, cryptography, color schemes, plugin management and much more. All without a single plugin installed!

Vim integrates into your workflow

Differently from other text editors which force you into their thing, Vim adjusts seamlessly to your workflow via powerful customization, extension support, integrated shell support and ability to pipe data in/out from it. 

Vim can be programmed

Want to go the extra mile? Vim also has its own language, called VimL. With it you can create your own plugins and optimize even further the system to your needs.

Vim will boost your productivity

There are multiple ways Vim will boost your productivity. First, Vim's extensive use of the home row of the keyboard saves you from having to reach the arrow keys (or even worse, the mouse) to do your work. Second, with Vim you can quickly create macros to reproduce repetitive operations, third, the combination of motions, plugins, custom shortcuts and shell integration will definitely boost your productivity way more than you could imagine.

Vim will make you type better and faster

Being keyboard based, Vim's workflow based on the home row will definitely help force you to type better. With Vim you'll realize that you probably move your hands way more than you should and will significantly increase your typing speed.

Vim will make you learn more

Most editors these days do too much. Yes, part of that is imposed on us by languages that require a lot of metadata (Java and C# for example). One problem with that is that you end up relying on the text editor much more than you need. Without access to Eclipse or Visual Studio it may be possible that you'll feel the impostor syndrome

With Vim, despite being able to, you'll feel closer to your work, resulting in a better understanding of what you're doing. You'll also realize that you will learn more and memorize better the contents of what you're working on.

Conclusion

On this post we provided many tips why one should learn Vim. Vim is stable, ubiquitous and is supported by an engaged, growing community. Given all its features, Vim is definitely a good tool to learn now and harvest the benefits for decades to come.

References

See Also

Monday, January 3, 2022

Why use the terminal

The command-line (aka terminal) is a scary thing for most users. But understanding it can be a huge step in your learning journey and add a significant boost to your career in tech.

Photo by Tianyi Ma on Unsplash

Depending on your technical skills, the command-line interface (also known as CLI or terminal) may look scary. But it shouldn't! The CLI is a powerful and resourceful tool that every person aspiring greater tech skills should learn and be comfortable with. On this article, let's review many reasons why you should learn and use the command line, commonly (and often incorrectly) referred to as terminal, shell, bash and CLI. 

This article is an adaptation of another one originally published by me on Linux4us. I'm re-publishing here to a wider audience with a few tweaks.

Ubiquitous

The command-line interface (CLI) is available in every operating system, not only in Linux. Very frequently, this is where developers and system administrators spend a lot of time. But, if you want to work with Linux, development, the cloud or with technology in general, better start learning it.

Terminals are available in every operating system including Linux, Windows and Macs

Powerful

CLI-based apps are much more powerful than their GUI-based equivalents. That happens because usually GUIs are usually wrappers around libraries that power both the GUIs and the terminal apps. Very frequently, these libraries contain way more functionality than what's available in the graphical interface because, as you might expect, since software development takes time and costs money to produce, developers only add to GUI apps the most popular features. 

For example, take a look at the plethora of options that the GNU find tool provides us:

Does your GUI-based find tool has all those options?

Quicker

Common and repetitive tasks are also faster in the terminal with the advantage that you will be able to repeat and even schedule these tasks so they run automatically, releasing you to do actual work, leaving the repetitive tasks to computer.

For example, consider this standard development workflow:

  1. download code from GitHub
  2. make changes
  3. commit code locally
  4. push changes back to GitHub

If you were doing the above using a GUI-based git client (for example, Tortoise Git), the workflow would be similar to the below, taking you approximately 20 minutes to complete:

  1. Open Tortoise Git's web page
  2. Click Download
  3. Next -> Next -> Next -> Finish
  4. Right-click a folder in Windows Explorer (or Nautilus, or Finder) -> Select clone -> Paster the Url -> Click OK
  5. Wait for the download to Complete -> Click OK
  6. Back to Windows Explorer -> Find File -> Open it
  7. Make your changes (by probably using GEdit, KEdit or Visual Studio Code) -> Save
  8. Back to Windows Explorer
  9. Right Click -> Commit
  10. Right Click -> Push
  11. Take a deep breath

In the terminal (for example, in Ubuntu), the workflow would be equivalent to the below and could be completed in less than 2 minutes:

sudo apt update && sudo apt install git -y   # install git
git clone <url>     # clone the GitHub repo locally
vim/nano file -> save  # edit the file using a text-based editor
git commit -m <msg> # commits the file locally
git push  # push the changes back to our GitHub repo

Automation

Terminal/CLI-based tasks can be scripted (automated) and easily repeated, meaning that you will be able to optimize a big part of your workflow. Another benefit is that these scripts can be easily shared, exactly as business and professional developers do!

So let's continue the above example. Our developer realized she is wasting too much time in the GUI and would like to speed up her workflow even more. She learned some bash scripting and wrote the function below:

gcp ()
{
    msg="More updates";
    if [ -n "$1" ]; then
        msg=$1;
    fi;
    git add ./ && git commit -m "$msg" && git push

She's happy because now she can run from the terminal, the below command as soon as she finishes her changes:

gcp <commit-msg>

What previously took 5 minutes is now is done in 2 seconds (1.8 seconds to write the commit message and 0.2 to push the code upstream). A significant improvement in her workflow. Imagine how much more productive she would be during the course of her career!

It's important to always think how can you optimize your workflow. These small optimizations add up to your productivity significantly over time.

Lightweight

Not only the CLI is faster and more lightweight than equivalent GUI-based applications but it's quicker to run the same commands. For example, consider a Git client like Tortoise Git. It was supposed to be lightweight (what most GUI apps aren't) but it takes 3s to completely load and uses 10Mb of memory:

Our GUI-based git client TortoiseGit

Now take a look at its CLI equivalent. git status runs in 0.3s and consumes less than 1Mb. In other words, 20 times more efficient memory-wise and 10 times faster. 

A simple CLI command is 20x more efficient and 10x faster then its GUI equivalent

Disk Space Efficient

Another advantage of terminal apps over their GUI-equivalents is reduced disk space. For example, contrast these two popular apps. Can you spot the differences?

Application    Installation Size       Total Size       Memory Usage   
Visual Studio Code        80Mb 300Mb 500Mb (on sunny days)
Nano 0.2 Mb 0.8 Mb 3 Mb
400x more efficient 375x more efficient 160x more efficient

Extensible

Another important aspect is that the CLI is extensible. From it, skilled users could easily either extend its basic functionality using its built-in features like pipes and redirections combining inputs and outputs from different tools.

For example, sysadmins could list the first two users in the system who use Bash as a shell, ordered alphabetically with:

cat /etc/passwd | grep bash | cut -d : -f 1 | sort | head -2

What's interesting from the above command is how we combined 5 different tools to get the results we need. Once you master the Linux terminal, you'll too will be able to utilize these tools effectively to get work done significantly faster!

This is a more advanced topic. We'll see in future posts more details about it.

Customizable

As you might expect, the terminal is extremely customizable. Everything from the prompt to functions (as seen above) and even custom keybindings can be customized. For example, In Linux, binding the shortcut Ctrl+V to open the Vim text editor on the terminal is simple. Add this to your .bashrc file:

bind '"\C-V":"vim\n"'

Extensive range of Apps

Contrary to what most newcomers thing, the terminal has apps too! You will find apps for pretty much any use case. For example:

The above list is far from comprehensive. It's just to give you an idea of what you'd be able to find in there

For example, here's the Castero Podcast app running on a terminal:

Source; GitHub

Professional Development

Want to work with Linux, as a developer or with the cloud? Another important aspect of using the terminal is that it will make you more ready for the job market. Since servers usually run Linux and don't have GUIs, you will end up having to use some of the above tools on your day-to-day work. Developers frequently use it to run repetitive tasks, becoming way more productive. So why not start now?

Learn more about your System

Hopefully at this point you realize that you will learn way more about your system and computers in general when you use the terminal. And I'm not talking solely to Linux users. Windows and Mac users will learn a lot too! This is the secret sauce that the most productive developers want you to know!

It's also a huge win for testing new tools, maintaining your system, installing software, fixing issues and tweaking as you wish.

Getting Started

Ready to get started on your terminal/CLI journey? Here's a video that may serve as a good intro: 

Conclusion

Every modern computer has a terminal. Learning it will save you time, allow you to automate common actions, make you learn more about your system, grow professionally and be more productive. Well worth the effort, isn't it?

See Also

About the Author

Bruno Hildenbrand