Sunday, February 12, 2023

14 Essential Software Engineering Concepts for Engineers and Managers

There are many terms and concepts that are important for an engineer to be familiar with, in order to effectively build software. This post includes some of those terms. I will continually add to or update this list.

  1. Agile. A flexible and iterative approach to software development that emphasizes collaboration, customer feedback, and adaptive planning. My experience and success with agile development was the inspiration behind starting this blog.

  2. DevOps. A set of practices and tools that improve efficiency, speed, and reliability of the product through automation and optimization of the software development and delivery process where operational efficiency is part of the development process.

  3. Continuous Integration and Continuous Delivery/Deployment (CI/CD). A set of practices and tools that result in faster and more frequent releases, through automation of building, testing, and deployment of software. A key part of CI/CD is to deliver software to production frequently and using techniques such as Test Driven Development, can significantly improve the results that teams get through CI/CD.

  4. Test Driven Development (TDD). With TDD, developers write tests before writing code. This helps ensure that code meets the desired requirements and improves overall code quality. This practice encourages developers to match the requirements to the behavior of their code before writing it, which can lead to fewer bugs and a generally more robust software.

  5. Scalability. The ability of a system to handle increasing load and demand, either by adding more resources or by improving its architecture. Cloud computing technologies, such as AWS provide various options to scale a system's load-bearing capabilities.

  6. Performance Optimization. The practice of making software run faster, consume fewer resources, and handle more concurrent users, in order to improve the user experience. Here again, cloud computing technologies like AWS provide several tools that can help you in monitoring and optimizing your system's performance.

  7. Resilience. The ability of a system to recover from failures and continue to function properly, even in the face of adverse conditions or circumstances.

  8. Security. The practice of protecting software and its users from unauthorized access, exploitation, and data breaches. Security was initially a big concern for organizations to adopt cloud computing, though now all cloud computing providers offer robust set of tools to manage permissions and credentials to address those concerns.

  9. Cloud Computing refers to the delivery of computing resources, such as servers, storage, databases, and software, over the internet. With cloud computing, organizations can scale their computing resources up or down as needed, and only pay for what they use, rather than having to make large upfront investments in hardware and software.

  10. Infrastructure as Code (IaC). The practice of using code to automate the provisioning and management of infrastructure, allowing for faster and more reliable deployment, scaling, and maintenance. AWS's CDK is a great example of IaC.

  11. Model-View-Controller (MVC) is a design pattern that separates an application into the Model, the View, and the Controller components that are inter-connected. The Model stores & manages the data, the View displays the data, and the Controller handles the interactions between the Model and the View.

  12. Microservices is an architectural pattern where a large application is broken down into small, independent, and loosely coupled services. This approach enables developers to build, test, and deploy each service independently, leading to faster time to market and reduced risk of failure. Medium to large applications often use a combination of MVC and back-end microservices.

  13. Software as a Service (SaaS) is a model where software is made available to customers over the internet, often for a subscription fee. SaaS providers host and manage the software, taking care of maintenance, upgrades, and security, and usually charge a fee for their solution. SaaS products help business customers to focus on their business processes rather than building software for needs that they share with other businesses. There are also several SaaS products for individuals and families.

  14. Artificial Intelligence (AI) and Machine Learning (ML). Technologies that allow computers to learn from data and make predictions or decisions without being explicitly programmed to do so.

It's important to have a general understanding of these concepts and they impact the delivery successful products.

Sunday, September 30, 2018

Being OPEN about Sprint demos

Consider This


Someone is presenting the work that they have just completed. Compare and contrast the two scenarios below:
ONE.

"This is freaking awesome!", you think. At one moment, everyone in the room was listening intently - not a word was spoken by the audience. At another, multiple hands went up for questions. Then, there was debate, many questions answered, some actions noted. Finally, the whole room erupted with applause and appreciation for the presenter and for each other.
TWO.

"Is that all you got?", you can't help but wonder. The room is low energy - the audience is either trying hard to listen, is distracted - only pretending to listen, or just busy chatting with someone else. There are no questions asked, and of course, none answered.

 

Which of the above scenarios would you like be a part of - in either role, as presenter or as audience?

If you have worked in software development for few years, with different teams or organizations where they demo their work every couple of weeks, then chances are that (like me), you have come across both of these scenarios.

OPEN Rules


Below are the OPEN rules for presenting compelling Sprint Demos that rock:

  1. Ownership - Present it like you own it and acknowledge others who contributed. That will engage everyone who you acknowledge immediately, increase your credibility and tune in anyone who is interested in learning about what you and those you mentioned did.

  2. Purpose - Delve into questions like: What are you demonstrating, what problem does it solve, how far along you are in solving the problem, and what is unique about your solution?

  3. Engagement - As a presenter, it is up to you to make or break your demo. You can decide how you want it to be like - interesting, nerdy, funny, or anything else. Most importantly, show enthusiasm for the topic, as without it you will sap the energy out of the whole experience.  Some things to think about: What is your presentation style? When you speak, can they hear you, understand you? Are you okay being interrupted with questions during the demo or do you want everyone to wait till you have completed your demo? If you do mind being interrupted during the demo, then letting the audience know when you start is a good idea.

  4. Next steps - A demo is a way to present your progress. So, you might have next steps related to what you presented in the following sprint or later. Letting everyone know what those are and what to expect reduces the chances of surprise in the next demo. Plus, you should expect feedback during the demo - most good demos receive new ideas worth exploring or specific things to work on. Make sure you capture it all (better yet, have someone on the team do so) and mention what you will do about the feedback. As you close out, thank everyone for their participation.


Hope you have wonderful demos!

Related Reading


(1)

https://georginahughes.com/2017/10/16/power-start-your-meetings/

(2) I'm Not Coming to Your Bad Meeting

Thursday, July 13, 2017

Create change... then get rid of it!

Someone said to me, just a few months ago - "There are two ways to deal with something you don't like. One is to try to change it and another is to accept it". The advice came from someone I had come to respect, yet the notion of accepting something that I don't like made me uncomfortable.

After thinking about it, and naturally falling back to the ethos of agile software development, I argue that the advice is sane and is closely related to managing change.

Here is what I think:
1. Responding to change sometimes requires creating the change
2. Any change requires prioritization
3. Some changes need to be shortlived
4. Some changes are not worth it
5. Some changes leave a mark behind
Creating the change

It is unnatural to me to accept something that I don't like straight away. So I try my best to make a change and make things better. If I don't even try, would I be doing my duty towards making the situation better? To me, this is about thinking about the change that should be made and how will I know that I have succeeded. This is the first step.
Prioritization

What if we treat all changes with an identical sense of importance and urgency? When everything becomes urgent and important, we become perfectionists and lose sight of what is valuable. The perfectionist approach usually results in too much work in progress that reduces focus and we get nothing done.
Shortlived changes

I used to think that changes are meant to persist. Now, that is hardly true! Too many changes are just transient. Their purpose, for example, maybe to trigger further changes or to be quick fixes so we can tackle an immediate problem at the moment.
Changes Not worth it (or Worth being patient about)

There are many changes that are just not worth trying. Maybe there are alternatives, or maybe it is just better to wait for the situation to just evolve. Jumping the gun doesn't solve a thing, in these cases. This is about accepting how things are at this moment, and not about giving up.
Changes that leave a mark behind

There are changes that we should really care about. Involve people who will be our partners, chart a course that will lead us to our desired state. Doesn't matter whether the change is small or big, although I am biased towards small changes as of now (it is 2017 and I am still about short Do/Build, Test and Learn cycles). Eventually, the change should not feel like a change... it should blend so much with the environment that it should feel like you've gotten rid of it!

Would love to hear your thoughts, what do you think?

Sunday, May 14, 2017

Six steps to unlock your team's true potential



What's true potential?

My definition of true potential is a state of being where performance is maximized even when the situation is hard, or even too hard. When someone or something reaches its true potential it reaches the state of hyper-performance without fear, not hyper-performance with stress.

Why is it hard to achieve?

I have often seen fear cast a shadow over our existing potential, making it hard to see. Fear can manifest itself anywhere at anytime. At other times, it may be quite evident. At times, it may be invisible but it is there. When we can't see our existing potential due to fear, it is even harder to see what true potential might look like.

This is true not only for individuals but also for teams. It is easy to see that a team is made up of individuals, who have their own fears. In the worst case, the team's fear could be compounded by multiplying the fears of rest of the teams. Yes, we definitely don't want that!

Addressing the Ecosystem


The ecosystem in which teams operate have a huge impact on their performance and can deter or improve their chance of unlocking their true potential. Here are some ways of addressing the ecosystem.

Noise cancellation


Team members' fears can act as noise cancellation mechanisms for other team members' fears. How?

Let us take an example. Say that a QA on the team is afraid of receiving bad delivery from developers. Now assume that a developer on the team is afraid of poorly groomed stories. These fears when looked upon by themselves can cause a lot of pain and strife. Now put their fears together. Poorly groomed stories often mean that it is not clear what the expectation downstream is, so it makes harder for the developer to code which results in poor delivery to the QA. OTOH, if the whole team was aware of these fears, they could all get together to discuss how the story needs to be tested (the T in INVEST) before starting to work on it.

In other words, certain fears can help guide positive collaboration between the team members and give them the courage to deal with problems. I find retrospectives are an essential noise cancellation tool in any team's arsenal. So if you find your team skipping retrospectives or having them only for namesake, then hopefully you know what to do.

The Role of Leadership

Some researchers at Google through their project Aristotle found that high performing teams have a psychological safety. Modern Agile also lays it down as one of the four cornerstones. I believe psychological safety is everyone's responsibility but the lion's share of the responsibility falls on the leaders of the organization. Why?

Leaders of the organization heavily influence how it operates. They influence the structure; their decisions and behaviors either create or destroy walls between people based on their departments or functional groups. Even at the team level, leaders influence relationships between people. Negative influence can create mistrust, and positive influence can help the team soar even in most difficult situations.

Unfortunately, there are always some things that cannot be discussed openly even in the most open of all organizations and teams. Sometimes that creates fear. It is the leaders' job to sense what those things are and how they impact the safety of their people. Leadership's role cannot be downplayed.

Understanding True limits

When you have canceled the noise and you have leadership support, look into what you can do to learn about your current limitations. A useful conversation to have is around - To what extent can you go today without getting into trouble?

Take an example, a team perceives that it is delivering slowly. However, it does not know how fast it goes today. Now, the team may try different approaches to go faster, like slicing user stories or reducing work in progress. It may even work but if it is afraid of measuring its progress objectively and often, it may easily fall back to old ways. This would create more fear for change and would be counter productive.

The SIX STEPS: What to do?

Here are six steps to unlock your team's true potential and become the best team ever:

  1. Find out what your limits are. Only if you know your limits, you can challenge them.

  2. Identify what to do to get as close as possible to the limits.

  3. Get permission to fail, and give yourself the permission to fail.

  4. Do what you need to in order to get close to the limits.

  5. Fail or not - Retrospect, learn from the experience, what can you do to push the limits? Push the limits.

  6. Repeat from step 1

Unlocking your team's potential can be easier than you think. The one hard thing about it is that it requires an open culture based on trust and respect. Even then, these six steps should help take things from where they are, towards where they should be.

Image courtesy:https://pixabay.com/en/youth-active-jump-happy-sunrise-570881/

Monday, November 28, 2016

5 Agile Quotes: Kung-Fu-Panda-3

I love the Kung Fu Panda movies, hope you enjoy them too. Apart from the funny awesomeness of Po the panda, I love the subtle and not so subtle messages and quotes these movies contain. Here are few gems from Kung Fu Panda 3. I only saw it this week, so am sharing these now.




[caption id="attachment_283" align="aligncenter" width="595"]


 Rock like Po the panda![/caption]

Image courtesy: https://www.flickr.com/photos/27474697@N08/2556889334/


1. When will you realize the more you take, the less you have? - Master Oogway to Kai (the beast)


When Kai tells Master Oogway that he has taken the chi of every master there is, Master Oogway pleads to Kai to realize this. There is a virtue in giving; always give when you can! So how is this connected to agile? There are examples. It could be giving help to a struggling team member, or giving credit to someone else who deserves it, or giving someone encouragement for their effort, or giving someone any other type of support they need - mentally, physically and emotionally.

Look beyond yourself. There is great power in humility and kindness, it helps build strong relationships that help teams thrive.
2. If you only do what you can do, you'll never be better than what you are. - Master Shifu to Po

This one is straightforward. A core tenet of agile is to keep challenging oneself to do better than today. Never cease to challenge the status quo, it is a key to customer and team happiness.
3. I have so much to learn! - Po after the party at the secret Panda village

Learning is essential for an agile mindset. Learning manifests itself everywhere. There is always more to it than meets the eye, but one should be willing to see beyond what is visible.
4. You gotta let the hill tell you where to roll. - Li, Po's panda dad during Po's training

This one is interesting. Agile mindset encourages to be courageous and to experiment. Let the results tell you what to do next. Surely there can be failures along the way. Accept successes and failures as normal events, but don't let the causes become your excuses.
5. Feeling relaxed? Just let yourself fall into it - Li, Po's panda dad during Po's training

This is a natural deduction for the previous quote. Immerse yourself into the environment and let it guide your actions thoughtfully. Not only will you increase your chances of success, you will also tremendously increase the enjoyment you get from your experience.

That's all for now! If you have more quotes to share from Kung Fu Panda or anywhere else, I would love to hear :)

Friday, November 18, 2016

Make onboarding fun with Onboarding Canvas!

The Onboarding Canvas is a tool that can be used for onboarding a new team member. We derived this tool from Spotify's adaptation of the Toyota Kata. I like this tool because no one can tell you precisely how your onboarding should be like in order for you to be effective at your new job. This is a tool for continuous reflection and adaptation. It puts the newcomer in the driver’s seat, makes the onboarding process agile through continuous collaboration with your team.

Four quadrants


The onboarding canvas has four quadrants:

  1. Now: It defines where the team is now, what is going on and how is the new team member adapting to the change?

  2. Definition of awesome: With the addition of the new team member, how would the team like itself to be? What would be awesome for the new team member?

  3. Next target: In order to move towards "Definition of awesome" what outcomes should be achieved in the next x weeks?

  4. Next steps: What are the immediate next steps for the team and when are they due?




Onboarding Canvas



Using the Onboarding Canvas


Collaborate with the new team member to fill the onboarding canvas and iterate regularly.

In your first session, brainstorm on the Now and the Definition of Awesome. Use post-its or whiteboard to gather ideas. Group ideas together into themes if themes emerge. Have a lively discussion and get excited about new possibilities that have opened up as a result of someone new joining the team!



Onboarding Canvas: Now and Definition of Awesome


Meet the whole team again in few days, and together identify the outcomes that should be achieved within the next few weeks - this is your Next Target. The Next Target has a due date, that is usually few weeks or a month later.

Using Next Target as the basis, derive the Next Steps. Each next step may have an owner and a due date that is prior to the next target date.


Onboarding Canvas: Next Target and Next Steps


Meet regularly to revise the canvas. The whole team should be present for reviewing the progress. A good rule of thumb is to review progress every two weeks, to begin with, and tweak the frequency as needed.

Revisit the Now and Definition of Awesome when things have changed significantly and you have seen progress. Practice iterating with the team! Without practice, this is of no use. Iterating on the onboarding canvas is like planning and retrospective combined together. While iterating, think about what has been going well, and what needs to change. Continue until you and the team feel the canvas is providing you value. Although the number of iterations depends on your situation and needs, I suggest using the canvas for six months and reducing the frequency of iterations during the period.

Note that no two canvases are alike. Everyone arrives with their own experiences, needs, skills and interests. Furthermore, the environment is always changing and the demands of the environment change with it. The onboarding canvas easily adapts to the dynamic nature of our organizations. It is agile: The canvas continuously evolves, improves and delivers what is important to its users quickly and incrementally. It is collaborative, and it is easy to understand. It makes onboarding fun and creates trust between the team members.

Completion


The team can stop iterating on the canvas when the new team member and the team both agree that the onboarding is complete. The team should find itself closer to realizing its Definition of Awesome than when they started. The Definition of Awesome should have also undergone changes during this period.

What else is there to it?


If the simplicity of this tool interests you in digging deeper, you will see that this tool can be used not just for onboarding but in general for making simple improvements! For onboarding, I recommend using this tool as part of Alongboarding, a method that makes the onboarding experience wholesome and agile. If you are interested in exploring even further, refer to the Toyota Kata. That will definitely spur more ideas.

Summary


This is just one way to use the onboarding canvas, improvise it any way you like! The bottom line is that in order to get the most from it, your approach should be collaborative, iterative and incremental. Make sure to include the whole team, including the new team member, in the dialog.

Credits and References

Forget Onboarding, do Alongboarding!

Alongboarding, an agile onboarding approach



Alongboarding: We’re in it together!


Organizations hire new people every day. A great first impression can make a tremendous difference in retaining employees. No one gets a second chance to make a great first impression, not even the best companies. An onboarding experience is an essential part of making that first impression on a new employee. Agile has been around for many years and has gained vast acceptance throughout the community. Yet, I find it disappointing that its tenets are not used well in most companies and most onboarding approaches follow a waterfall approach. 

Alongboarding is an agile onboarding approach that applies agile tenets to onboarding new employees and makes the experience richer and more fulfilling.

When I joined AppFolio as an agile coach, I experienced this approach during my onboarding. It felt like the team owned my success as much as I owned the team's success. It was a welcome change from some of my earlier experiences where employee onboarding was a formality, or a wasted expense, or just a checklist, or nothing.

What’s in it for me?


If you are joining a new company


Are you joining a new company or stepping out of school for your first job? Are you overwhelmed with too many questions on what the future might hold? Questions such as: How will you be treated? What will be your responsibilities? How will you prove yourself? Will the people you work with be cordial and supportive? How will your manager treat you? How flexible will your new role be? etc. etc. Depending on your situation, you may have different needs. It is not uncommon to feel vulnerable, somewhat scared or even have questions about your ability to adapt to this big change. Wouldn’t it be helpful if your new company or team had an approach to onboarding to take care of your needs?

If someone new is joining your team


Do you have someone new joining your team? It is a big change for you too, especially since most agile teams are small. You will soon be spending a lot of time with this person solving problems, hopefully, while having fun. If you have a healthy environment, the success and happiness of the new team member are tied to your success and happiness, closely. This is regardless of whether the new team member is your peer, your manager, or someone who reports to you.

Ready? Get set!


Get real


Are you ready to welcome a new team member into the fold? The first step really is the realization that the new job will be a huge change for the new person and your team. Without this realization, no amount of work you put in will ever help you be as effective as you possibly can.

Prepare for the first day and week


A great first day and week of work not only sets a positive tone for the new employee's new journey but also forms a foundation for great relationships with colleagues. My experience suggests that we can remember our first day at our new workplace for a very very long time. Below are some preparatory actions that may be useful to help prepare for that awesome experience. It is recommended that the list is collaboratively prepared by the entire team.

  1. First-day list: Before welcoming a new employee, make a list of things they will be doing on their first day. The list may include and may not be limited to:

    1. When and where they will arrive, who will greet them. Will they be treated to a nice breakfast, a smoothie or maybe something else - a small, nice, welcoming gesture?

    2. What documents should they bring if any, and who needs them and why?

    3. When will they be introduced to the team?

    4. When will they meet their manager?

    5. Who will they go have lunch with? Can the manager or team take them out for lunch on their first day?

    6. Who else will they meet on their first day and at what time?

    7. How and when will they get their equipment, their access to company systems, and their seat?

    8. Will they pair with someone during their first few weeks to learn the ropes?

    9. Will there be any training involved?



  2. One week in advance, inform the new team member about the plan for their first day. When he/she is aware that you've been planning their first day, it alleviates stress and gives a feeling of belonging to something larger and intentional.

  3. Prepare an initial checklist. It is not an exhaustive list of everything they will need to do. It is just something to get them going and give them a head start - into a path of discovery. In Alongboarding, they will own the checklist and drive it from the get go.

  4. In the checklist include meeting everyone who the new team member will collaborate with. Add other stakeholders, and support team members - who they need to know in order to be effective at their work.

  5. Inform everyone on the list and get them excited about the new team member. Tell them about the new team member, just enough to spark curiosity.


Go!


When the new team member joins, execute your first-day plan. Have a fun introduction session with the team and management. Make the new team member comfortable.

Over the next few days, introduce them to the department or the company (depending on the size of the company). Introduce them to the initial checklist you prepared. Let them know it is for them to just get started and use as an initial tool, and the team is ready to help.

The onboarding canvas tool


After few days and within the first couple of weeks, introduce the new team member to a collaborative tool such as the onboarding canvas. The onboarding canvas is derived from Spotify's adaptation of the Toyota Kata



Onboarding Canvas



Using the Onboarding Canvas


Collaborate with the new team member to fill the onboarding canvas and iterate regularly with the new team member. I suggest that iterating every two weeks, to begin with. Based on the experience and the needs of the new employee, tweak the frequency of iteration. Iterate more frequently if there are lots of things to discover, or slower if there are fewer. Being agile, try to break things down into smaller chunks in order to obtain frequent feedback. This really helps when getting started!

It is interesting to see how the roles of the new team member and the old team members evolve during this process.  For example, while the old team members continue to play a vital role, they transition from being drivers to being supporters and consultants. The new team member quickly hops onto the driver’s seat, knowing well that there will be support and guidance when needed.


Read Make onboarding fun with Onboarding Canvas! for more details on using the onboarding canvas.

Done!


Alongboarding is complete when the new team member and the team both agree that it has been done to a sufficient degree. When that happens, the team should find itself closer and stronger compared to when they started. Although the duration and the number of iterations that you choose depend on your situation and needs, one way of using the canvas is to use it for six months, gradually reducing the frequency of iterations over the period.

Summary


Alongboarding is about making the partnership between the new employee and the team “real”.

It makes it easier for both the team and the new employee to adapt to the changes and understand each other better. The Onboarding Canvas is a nice tool that can be used to promote conversation and discovery. Alongboarding in combination with the Onboarding Canvas makes the whole onboarding experience agile. The experience continuously evolves, improves and delivers what is important to its users quickly and incrementally. It is collaborative and is easy to understand. It makes onboarding fun and builds trust amongst the team members.

I am interested in hearing your thoughts and learning about how it goes for you when you try it!

 

Credits and References

14 Essential Software Engineering Concepts for Engineers and Managers

There are many terms and concepts that are important for an engineer to be familiar with, in order to effectively build software. This post ...